📄 selectdialog.c
字号:
//begin of file#include "selectdialog.h"SelectDialog::SelectDialog(){ fld[0]=NULL; fld[1]=NULL; fld[2]=NULL; fld[3]=NULL; fld[4]=NULL; fld[5]=NULL; frm=NULL; active=SELECTFORM;}SelectDialog::~SelectDialog(){ if(frm!=NULL) { unpost_form(frm); free_form(frm); } if(fld[0]!=NULL) free_field(fld[0]); if(fld[1]!=NULL) free_field(fld[1]); if(fld[2]!=NULL) free_field(fld[2]); if(fld[3]!=NULL) free_field(fld[3]); if(fld[4]!=NULL) free_field(fld[4]); if(fld[5]!=NULL) free_field(fld[5]); curs_set(0);}BOOL SelectDialog::InitSelectDialog(int Height,int Width,int Color,int Shadow,int Fontstyle,int WinType){ BOOL ret=FALSE; ret=InitDialog(Height,Width,Color,Shadow,Fontstyle,WinType,OKCANCELDLG,"[Select]"); if(ret==FALSE) goto failure; ret=DrawSelectDialog(); if(ret==FALSE) goto failure; curs_set(1); wrefresh(basewin); ret=TRUE;failure: return ret;}BOOL SelectDialog::DrawSelectDialog(){ BOOL ret=FALSE; int rows,cols; rows=5; cols=width-8; wattron(basewin,COLOR_PAIR(color)); mvwprintw(basewin,1,1,"From"); mvwprintw(basewin,2,1,"Line"); mvwprintw(basewin,3,1,"Column"); mvwprintw(basewin,4,1,"To"); mvwprintw(basewin,5,1,"Line"); mvwprintw(basewin,6,1,"Column"); wattroff(basewin,COLOR_PAIR(color)); fld[0]=new_field(1,cols,0,0,0,0); fld[1]=new_field(1,cols,1,0,0,0); fld[2]=new_field(1,cols,2,0,0,0);//hide fld[3]=new_field(1,cols,3,0,0,0); fld[4]=new_field(1,cols,4,0,0,0); fld[5]=NULL; set_field_back(fld[0],COLOR_PAIR(COLOR_WHITE_BLUE)|A_UNDERLINE); set_field_back(fld[1],COLOR_PAIR(COLOR_WHITE_BLUE)|A_UNDERLINE); set_field_back(fld[2],COLOR_PAIR(color)); set_field_back(fld[3],COLOR_PAIR(COLOR_WHITE_BLUE)|A_UNDERLINE); set_field_back(fld[4],COLOR_PAIR(COLOR_WHITE_BLUE)|A_UNDERLINE); field_opts_on(fld[0],O_ACTIVE); field_opts_on(fld[1],O_ACTIVE); field_opts_off(fld[2],O_ACTIVE);//hide field_opts_on(fld[3],O_ACTIVE); field_opts_on(fld[4],O_ACTIVE); field_opts_off(fld[0],O_STATIC); field_opts_off(fld[1],O_STATIC); field_opts_on(fld[2],O_STATIC);//hide field_opts_off(fld[3],O_STATIC); field_opts_off(fld[4],O_STATIC); set_max_field(fld[0],MAXFIELDLEN); set_max_field(fld[1],MAXFIELDLEN); set_max_field(fld[2],0); //hide set_max_field(fld[3],MAXFIELDLEN); set_max_field(fld[4],MAXFIELDLEN); frm=new_form(fld); set_current_field(frm,fld[0]); set_form_win(frm,basewin); set_form_sub(frm,derwin(basewin,rows,cols,2,7)); post_form(frm); ret=TRUE; return ret;}int SelectDialog::SelectDialogDriver(){ int ret=0; int ch; BOOL exist=TRUE; while(exist && (ch=wgetch(basewin))) { switch(ch) { case KEY_DOWN: if(active==SELECTFORM) { form_driver(frm,REQ_NEXT_FIELD); form_driver(frm,REQ_END_LINE); } break; case KEY_UP: if(active==SELECTFORM) { form_driver(frm,REQ_PREV_FIELD); form_driver(frm,REQ_END_LINE); } break; case KEY_LEFT: if(active==SELECTFORM) { form_driver(frm,REQ_PREV_CHAR); } break; case KEY_RIGHT: if(active==SELECTFORM) { form_driver(frm,REQ_NEXT_CHAR); } break; case KEY_HOME: if(active==SELECTFORM) { form_driver(frm,REQ_BEG_LINE); } break; case KEY_END: if(active==SELECTFORM) { form_driver(frm,REQ_END_LINE); } break; case KEY_DC: if(active==SELECTFORM) { form_driver(frm,REQ_DEL_CHAR); } break; case KEY_BACKSPACE: if(active==SELECTFORM) { form_driver(frm,REQ_DEL_PREV); } break; case KEY_TAB: if(active==SELECTFORM) { active=OKCANCLE; form_driver(frm,REQ_VALIDATION); curs_set(0); ret=DialogDriver(); if(ret==BUTOK || ret==BUTCANCEL) { if(ret==BUTOK) { char n[MAXFIELDLEN]; strcpy(n,trimleft(field_buffer(fld[0],0))); trimright(n,n); msg.seleobj.begline=atol(n); strcpy(n,trimleft(field_buffer(fld[1],0))); trimright(n,n); msg.seleobj.begcol=atol(n); strcpy(n,trimleft(field_buffer(fld[3],0))); trimright(n,n); msg.seleobj.endline=atol(n); strcpy(n,trimleft(field_buffer(fld[4],0))); trimright(n,n); msg.seleobj.endcol=atol(n); } exist=FALSE; } else { form_driver(frm,REQ_FIRST_FIELD); form_driver(frm,REQ_END_LINE); curs_set(1); active=SELECTFORM; } } break; case 0xA: exist=FALSE; break; default: if(isdigit(ch)) form_driver(frm,ch); break; } } return ret;}//end of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -