📄 dialog.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 + -