📄 finddialog.c
字号:
#include "finddialog.h"FindDialog::FindDialog(){ fld[0]=NULL; fld[1]=NULL; fld[2]=NULL; fld[3]=NULL; fld[4]=NULL; fld[5]=NULL; frm=NULL; strcpy(locate[0],"Find"); strcpy(locate[1],"[ ]Case-Sensitive"); strcpy(locate[2],"[ ]Tag-Bookmark"); strcpy(locate[3],"[ ]Up"); strcpy(locate[4],"[ ]Down"); choice[0]=FALSE; choice[1]=FALSE; choice[2]=FALSE; choice[3]=FALSE; choice[4]=FALSE; active=FINDFORM;}FindDialog::~FindDialog(){ 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 FindDialog::DrawFindDialog(){ BOOL ret=FALSE; int rows,cols; rows=4; cols=width-strlen(locate[0])-2; wattron(basewin,COLOR_PAIR(color)); mvwprintw(basewin,1,1,locate[0]); wattroff(basewin,COLOR_PAIR(color)); fld[0] = new_field(1, cols, 0,0, 0, 0);//find fld[1] = new_field(1, strlen(locate[1]), 1, 0, 0, 0);//case sensitive fld[2] = new_field(1, strlen(locate[2]), 2, 0, 0, 0);//bookmark fld[3] = new_field(1, strlen(locate[3]), 3, 0, 0, 0);//up fld[4] = new_field(1, strlen(locate[4]), 3, (int)(cols/2),0,0);//down fld[5] = NULL; set_field_back(fld[0], COLOR_PAIR(COLOR_WHITE_BLUE)|A_UNDERLINE); set_field_back(fld[1], COLOR_PAIR(COLOR_WHITE_BLACK)); set_field_back(fld[2], COLOR_PAIR(COLOR_WHITE_BLACK)); set_field_back(fld[3], COLOR_PAIR(COLOR_WHITE_BLACK)); set_field_back(fld[4], COLOR_PAIR(COLOR_WHITE_BLACK)); field_opts_on(fld[0], O_ACTIVE); field_opts_on(fld[1], O_ACTIVE); field_opts_off(fld[0],O_AUTOSKIP); field_opts_off(fld[1],O_AUTOSKIP); field_opts_off(fld[0],O_STATIC); field_opts_off(fld[1],O_STATIC); set_max_field(fld[0],MAXFIELDLEN); set_max_field(fld[1],MAXFIELDLEN); set_field_buffer(fld[1],0,locate[1]); set_field_buffer(fld[2],0,locate[2]); set_field_buffer(fld[3],0,locate[3]); set_field_buffer(fld[4],0,locate[4]); frm = new_form(fld); set_current_field(frm, fld[0]); set_form_win(frm, basewin); set_form_sub(frm, derwin(basewin,rows,cols,1,strlen(locate[0])+1)); post_form(frm); goto over;over: ret=TRUE;//failure: return ret;}BOOL FindDialog::InitFindDialog(int Height,int Width,int Color,int Shadow,int FontStyle,int WinType,char *Title){ BOOL ret=FALSE; if(WinType==DIALOG_EDITFIND) ret=InitDialog(Height,Width,Color,Shadow,FontStyle,WinType,OKCANCELDLG,"[Find]"); else ret=InitDialog(Height,Width,Color,Shadow,FontStyle,WinType,OKCANCELDLG,"[Unknown]"); if (ret==FALSE) goto failure; ret=DrawFindDialog(); if (ret==FALSE) goto failure; curs_set(1); wrefresh(basewin); goto over;over: ret=TRUE;failure: return ret; }int FindDialog::FindDialogDriver(){ int ret=0; int ch; BOOL exist=TRUE; while(exist && (ch = wgetch(basewin))) { switch(ch) { case KEY_DOWN: if(active==FINDFORM) { int idx; form_driver(frm,REQ_NEXT_FIELD); idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_END_LINE); else form_driver(frm,REQ_NEXT_CHAR); } break; case KEY_UP: if(active==FINDFORM) { int idx; form_driver(frm,REQ_PREV_FIELD); idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_END_LINE); else form_driver(frm,REQ_NEXT_CHAR); } break; case KEY_LEFT: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_PREV_CHAR); else { form_driver(frm,REQ_PREV_FIELD); form_driver(frm,REQ_NEXT_CHAR); } } break; case KEY_RIGHT: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_NEXT_CHAR); else { form_driver(frm,REQ_NEXT_FIELD); form_driver(frm,REQ_NEXT_CHAR); } } break; case KEY_NPAGE: break; case KEY_PPAGE: break; case KEY_HOME: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_BEG_LINE); } break; case KEY_END: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_END_LINE); } break; case KEY_DC: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_DEL_CHAR); } break; case KEY_BACKSPACE: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,REQ_DEL_PREV); } break; case KEY_TAB: if(active==FINDFORM) { active=OKCANCEL; curs_set(0); ret=DialogDriver(); if(ret==BUTOK||ret==BUTCANCEL) { exist=FALSE; } else { form_driver(frm,REQ_FIRST_FIELD); form_driver(frm,REQ_END_LINE); curs_set(1); active=FINDFORM; } } break; case KEY_SPACE: if(active==FINDFORM) { int idx=field_index(current_field(frm)); if(idx==0) form_driver(frm,ch); else { if (choice[idx]==FALSE) { locate[idx][1]='*'; choice[idx]=TRUE; } else { locate[idx][1]=' '; choice[idx]=FALSE; } set_field_buffer(fld[idx],0,locate[idx]); form_driver(frm,REQ_NEXT_CHAR); } } break; case 0xA: exist=FALSE; break; default: if(active==FINDFORM && field_index(current_field(frm))==0) form_driver(frm,ch); break; } } return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -