⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 linux 下类似于TC功能的编译器,但还没有完成,希望大家共同研究
💻 C
字号:
#include "dialog.h"Dialog::Dialog(){	buttonfld[0] = NULL;	buttonfld[1] = NULL;	buttonfld[2] = NULL;	buttonfld[3] = NULL;	buttonfld[4] = NULL;	buttonfld[5] = NULL;	buttonfrm=NULL;	module=FALSE;	basetype=OKONLYDLG;}Dialog::~Dialog(){	if(buttonfrm!=NULL)	{		unpost_form(buttonfrm);		free_form(buttonfrm);	}	if(buttonfld[0]!=NULL)		free_field(buttonfld[0]);	if(buttonfld[1]!=NULL)		free_field(buttonfld[1]);	if(buttonfld[2]!=NULL)		free_field(buttonfld[2]);	if(buttonfld[3]!=NULL)		free_field(buttonfld[3]);	if(buttonfld[4]!=NULL)		free_field(buttonfld[4]);	DestroyBaseWindow();}void Dialog::SetModule(int ret){	module=ret;}int Dialog::InitDialog(int align,int Height,int Width,int Color,int Shadow,int FontStyle,int WinType,int basedlg,char *Title){	int X,Y;	if(align=1)//align to bottom	{		X=(int)((COLS-Width)/2);		Y=LINES-2-Height;	}	if(InitBaseWindow(Y,X,Height,Width,Color,Shadow,FontStyle,WinType,Title)==FALSE)		return FALSE;	keypad(basewin,TRUE);	basetype=basedlg;	DrawDialog(basetype);	return TRUE;}int Dialog::InitDialog(int Height,int Width,int Color,int Shadow,int FontStyle,int WinType,int basedlg,char *Title){	int Y=(int)((LINES-Height)/2);	int X=(int)((COLS-Width)/2);	if(InitBaseWindow(Y,X,Height,Width,Color,Shadow,FontStyle,WinType,Title)==FALSE)		return FALSE;	keypad(basewin,TRUE);	basetype=basedlg;	DrawDialog(basetype);	return TRUE;}void Dialog::DrawDialog0(){}	void Dialog::DrawDialog1(){	int rows,cols;		buttonfld[0] = new_field(1, 8, 0, 0, 0, 0);               //ok	buttonfld[1] = NULL;	set_field_back(buttonfld[0], COLOR_PAIR(color)); 	field_opts_on(buttonfld[0], O_ACTIVE);	set_field_just(buttonfld[0], JUSTIFY_CENTER);	set_field_buffer(buttonfld[0], 0, "<  Ok  >");	buttonfrm = new_form(buttonfld);	scale_form(buttonfrm,&rows,&cols);	set_current_field(buttonfrm, buttonfld[0]);	set_form_win(buttonfrm, basewin);	set_form_sub(buttonfrm, derwin(basewin,1,cols,height-1,(int)((width-8)/2)));		post_form(buttonfrm);}void Dialog::DrawDialog2(){	int rows,cols;		buttonfld[0] = new_field(1, 8, 0, 0, 0, 0);	buttonfld[1] = new_field(1, 8, 0, (int)(width/2), 0, 0);	buttonfld[2] = new_field(1, (int)(width/2)-8, 0, 8, 0, 0);	buttonfld[3] = NULL;	set_field_back(buttonfld[0], COLOR_PAIR(color)); 	field_opts_on(buttonfld[0], O_ACTIVE);	set_field_just(buttonfld[0], JUSTIFY_CENTER);	set_field_buffer(buttonfld[0], 0, "<  OK  >");	set_field_back(buttonfld[1], COLOR_PAIR(color)); 	field_opts_on(buttonfld[1], O_ACTIVE);	set_field_just(buttonfld[1], JUSTIFY_CENTER);	set_field_buffer(buttonfld[1], 0, "<Cancel>");	set_field_back(buttonfld[2], COLOR_PAIR(color)); 	set_field_pad(buttonfld[2],ACS_HLINE|COLOR_PAIR(color));	field_opts_off(buttonfld[2], O_ACTIVE);	buttonfrm = new_form(buttonfld);	scale_form(buttonfrm,&rows,&cols);	set_current_field(buttonfrm, buttonfld[0]);	set_form_win(buttonfrm, basewin);	set_form_sub(buttonfrm, derwin(basewin,1,cols,height-1,(int)((width/2-8)/2)));		post_form(buttonfrm);}void Dialog::DrawDialog3(){	int rows,cols;		buttonfld[0] = new_field(1, 8, 0, 0, 0, 0);               //yes	buttonfld[1] = new_field(1, 8, 0, (int)(width/3), 0, 0);  //no	buttonfld[2] = new_field(1, 8, 0, (int)((width/3)*2), 0, 0);  //cancel	buttonfld[3] = new_field(1, (int)(width/3)-8, 0, 8, 0, 0);//seporator	buttonfld[4] = new_field(1, (int)(width/3)-8, 0, (int)(width/3)+8, 0, 0);//seporator	buttonfld[5] = NULL;	set_field_back(buttonfld[0], COLOR_PAIR(color)); 	field_opts_on(buttonfld[0], O_ACTIVE);	set_field_just(buttonfld[0], JUSTIFY_CENTER);	set_field_buffer(buttonfld[0], 0, "<  Yes >");	set_field_back(buttonfld[1], COLOR_PAIR(color)); 	field_opts_on(buttonfld[1], O_ACTIVE);	set_field_just(buttonfld[1], JUSTIFY_CENTER);	set_field_buffer(buttonfld[1], 0, "<  No  >");	set_field_back(buttonfld[2], COLOR_PAIR(color)); 	field_opts_on(buttonfld[2], O_ACTIVE);	set_field_just(buttonfld[2], JUSTIFY_CENTER);	set_field_buffer(buttonfld[2], 0, "<Cancel>");		set_field_back(buttonfld[3], COLOR_PAIR(color)); 	set_field_pad(buttonfld[3],ACS_HLINE|COLOR_PAIR(color));	field_opts_off(buttonfld[3], O_ACTIVE);	set_field_back(buttonfld[4], COLOR_PAIR(color)); 	set_field_pad(buttonfld[4],ACS_HLINE|COLOR_PAIR(color));	field_opts_off(buttonfld[4], O_ACTIVE);	buttonfrm = new_form(buttonfld);	scale_form(buttonfrm,&rows,&cols);	set_current_field(buttonfrm, buttonfld[0]);	set_form_win(buttonfrm, basewin);	set_form_sub(buttonfrm, derwin(basewin,1,cols,height-1,(int)((width/3-8)/2)));		post_form(buttonfrm);}void Dialog::DrawDialog(int type){	draw_box(0,0,height,width, COLOR_PAIR(color)|' ',COLOR_PAIR(color));		wattron(basewin,COLOR_PAIR(color));	box(basewin,0,0);	mvwprintw(basewin,0,1,GetTitle());	wattroff(basewin,COLOR_PAIR(color));		switch(type)	{		case NOTHINGDLG:			DrawDialog0();			break;		case OKONLYDLG:			DrawDialog1();			break;		case OKCANCELDLG:			DrawDialog2();			break;		case YESNOCANCELDLG:			DrawDialog3();			break;	}}void Dialog::ReDrawDialog(){	draw_box(0,0,height,width, COLOR_PAIR(color)|' ',COLOR_PAIR(color));		wattron(basewin,COLOR_PAIR(color));	box(basewin,0,0);	mvwprintw(basewin,0,1,GetTitle());	wattroff(basewin,COLOR_PAIR(color));	wrefresh(basewin);	if(buttonfrm!=NULL)	{		unpost_form(buttonfrm);		post_form(buttonfrm);	}}int Dialog::DialogDriver(){	int ret=0;	int ch;	int exist=FALSE;	form_driver(buttonfrm,REQ_FIRST_FIELD);	set_field_back(current_field(buttonfrm), COLOR_PAIR(COLOR_WHITE_RED)); 	while(!exist && (ch = wgetch(basewin)))	{		switch(ch)		{	case KEY_LEFT:				set_field_back(current_field(buttonfrm), COLOR_PAIR(color)); 				form_driver(buttonfrm,REQ_PREV_FIELD);				set_field_back(current_field(buttonfrm), COLOR_PAIR(COLOR_WHITE_RED)); 				wrefresh(basewin);				break;			case KEY_RIGHT:				set_field_back(current_field(buttonfrm), COLOR_PAIR(color)); 				form_driver(buttonfrm,REQ_NEXT_FIELD);				set_field_back(current_field(buttonfrm), COLOR_PAIR(COLOR_WHITE_RED)); 				wrefresh(basewin);				break;			case KEY_TAB:				set_field_back(current_field(buttonfrm), COLOR_PAIR(color)); 				if(module==FALSE)				{					set_current_field(buttonfrm,buttonfld[1]);					set_current_field(buttonfrm,buttonfld[0]);					ret=UNKNOW;					exist=TRUE;				}				else				{					set_field_back(current_field(buttonfrm), COLOR_PAIR(color)); 					form_driver(buttonfrm,REQ_NEXT_FIELD);					set_field_back(current_field(buttonfrm), COLOR_PAIR(COLOR_WHITE_RED)); 				}				wrefresh(basewin);				break;			case 0xA:				exist=TRUE;				if(field_index(current_field(buttonfrm))==0)				{					set_field_back(current_field(buttonfrm), COLOR_PAIR(color)); 					set_current_field(buttonfrm,buttonfld[1]);					set_current_field(buttonfrm,buttonfld[0]);					wrefresh(basewin);					if(basetype==OKCANCELDLG || basetype==OKONLYDLG)					{						ret=BUTOK;					}					else					{						ret=BUTYES;					}				}				else if(field_index(current_field(buttonfrm))==1)				{					if(basetype==OKCANCELDLG)					{						ret=BUTCANCEL;					}					else					{						ret=BUTNO;					}				}				else if(field_index(current_field(buttonfrm))==2)				{					ret=BUTCANCEL;				}				break;			default:				break;		}	}		return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -