📄 q_opendialog.cpp
字号:
#include "qcurses/Q_OpenDialog.hpp"//---------------------------------------------------------------------------------------------Q_OpenDialog::Q_OpenDialog(char *vCaption):Q_Dialog("文件打开对话"){ memset(FileName,'\0',30); memset(DirName,'\0',BUF); memset(FullFileName,'\0',BUF); memset(NowDir,'\0',BUF); memset(OldDir,'\0',BUF); strcpy(Caption,vCaption); BreakKey = 0; NowSelect = 0; Keys = 0;}//---------------------------------------------------------------------------------------------bool Q_OpenDialog::Execute(){ //显示界面 bool RC=false; Form = newwin(15,70,5,5); Win = new Q_Window(Form,15,70,0,0,true,COLOR_WHITE,COLOR_BLUE); Win->SetCaption(Caption,COLOR_WHITE,COLOR_RED); //建立按钮 Button[0] = new Q_Button(Win->GetHandle(),7,12,42,COLOR_WHITE,COLOR_RED); Button[0]->Set(" 确 定 "); Button[1] = new Q_Button(Win->GetHandle(),7,12,52,COLOR_WHITE,COLOR_RED); Button[1]->Set(" 取 消 "); //建立列表 List = new Q_List(Win->GetHandle(),13,26,1,3,true,COLOR_WHITE,COLOR_BLUE); //建立表单 Edit[0] = new Q_Edit(Win->GetHandle(),26,2,39,COLOR_WHITE,COLOR_BLUE,MSTRING); //目录名 Edit[1] = new Q_Edit(Win->GetHandle(),26,3,39,COLOR_WHITE,COLOR_BLUE,MSTRING); //文件名 //建立标签 Label[0] = new Q_Label(Win->GetHandle(),8,2,29,COLOR_WHITE,COLOR_BLUE); Label[0]->Set(0,"目录名:"); Label[1] = new Q_Label(Win->GetHandle(),8,3,29,COLOR_WHITE,COLOR_BLUE); Label[1]->Set(0,"文件名:"); //取值 getcwd(OldDir,sizeof(OldDir)); strcpy(NowDir,OldDir); BreakKey = 0; NowSelect=0; Keys=0; while (BreakKey==0) { Win->Refresh(); KeyGo(NowSelect,Keys,2); //其中 2 为控件的总数量 switch (NowSelect) { case 0: //遍历目录,得到当前目录下的所有目录,并且写入 List 中 struct dirent *namelist; DIR *dirVal; getcwd(NowDir,sizeof(NowDir)); while ((dirVal = opendir(NowDir))!=NULL) { Edit[0]->Set(NowDir); List->Clear(); while ((namelist = readdir(dirVal)) != NULL) List->Add(namelist->d_name); Keys=List->Get(); if(chdir(List->GetValue())==-1) break; getcwd(NowDir,sizeof(NowDir)); } Edit[1]->Set(List->GetValue()); break; case 1: Keys=Button[0]->Get(); if (Button[0]->Value) { strcpy(FileName,List->GetValue()); getcwd(FullFileName,sizeof(FullFileName)); strcpy(DirName,FullFileName); strcat(FullFileName,"/"); strcat(FullFileName,FileName); chdir(OldDir); BreakKey = 1; RC = true; } break; case 2: Keys=Button[1]->Get(); if (Button[1]->Value) BreakKey = 1; break; } } //释放资源 delete Button[0]; delete Button[1]; delete List; delete Edit[0]; delete Edit[1]; delete Label[0]; delete Label[1]; delete Win; delwin(Form); return RC;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -