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

📄 finddialog.c

📁 linux 下类似于TC功能的编译器,但还没有完成,希望大家共同研究
💻 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 + -