int FolderTree::ProcessKey(int Key) { if (Key>=KEY_ALT_BASE+0x01 && Key<=KEY_ALT_BASE+65535) Key=Lower(Key-KEY_ALT_BASE); else if (Key>=KEY_RALT_BASE+0x01 && Key<=KEY_RALT_BASE+65535) Key=Lower(Key-KEY_RALT_BASE); switch (Key) { case KEY_F1: { Help Hlp(L"FindFolder"); } break; case KEY_ESC: case KEY_F10: FrameManager->DeleteFrame(); SetExitCode(XC_MODIFIED); break; case KEY_NUMENTER: case KEY_ENTER: Tree->GetCurDir(strNewFolder); if (apiGetFileAttributes(strNewFolder)!=INVALID_FILE_ATTRIBUTES) { FrameManager->DeleteFrame(); SetExitCode(XC_MODIFIED); } else { Tree->ProcessKey(KEY_ENTER); DrawEdit(); } break; case KEY_F5: IsFullScreen=!IsFullScreen; ResizeConsole(); return TRUE; case KEY_CTRLR: case KEY_RCTRLR: case KEY_F2: Tree->ProcessKey(KEY_CTRLR); DrawEdit(); break; case KEY_CTRLNUMENTER: case KEY_RCTRLNUMENTER: case KEY_CTRLSHIFTNUMENTER: case KEY_RCTRLSHIFTNUMENTER: case KEY_CTRLENTER: case KEY_RCTRLENTER: case KEY_CTRLSHIFTENTER: case KEY_RCTRLSHIFTENTER: { string strName; FindEdit->GetString(strName); Tree->FindPartName(strName,TRUE,Key==KEY_CTRLSHIFTENTER||Key==KEY_RCTRLSHIFTENTER||Key == KEY_CTRLSHIFTNUMENTER||Key == KEY_RCTRLSHIFTNUMENTER?-1:1,1); DrawEdit(); } break; case KEY_UP: case KEY_NUMPAD8: case KEY_DOWN: case KEY_NUMPAD2: case KEY_PGUP: case KEY_NUMPAD9: case KEY_PGDN: case KEY_NUMPAD3: case KEY_HOME: case KEY_NUMPAD7: case KEY_END: case KEY_NUMPAD1: case KEY_MSWHEEL_UP: case(KEY_MSWHEEL_UP | KEY_ALT): case(KEY_MSWHEEL_UP | KEY_RALT): case KEY_MSWHEEL_DOWN: case(KEY_MSWHEEL_DOWN | KEY_ALT): case(KEY_MSWHEEL_DOWN | KEY_RALT): FindEdit->SetString(L""); Tree->ProcessKey(Key); DrawEdit(); break; default: if (Key == KEY_ADD || Key == KEY_SUBTRACT) // OFM: Gray+/Gray- navigation { Tree->ProcessKey(Key); DrawEdit(); break; } /* else { if((Key&(~KEY_CTRLMASK)) == KEY_ADD) Key='+'; else if((Key&(~KEY_CTRLMASK)) == KEY_SUBTRACT) Key='-'; } */ if (FindEdit->ProcessKey(Key)) { string strName; FindEdit->GetString(strName); if (Tree->FindPartName(strName,FALSE,1,1)) strLastName = strName; else { FindEdit->SetString(strLastName); strName = strLastName; } DrawEdit(); } break; } return TRUE; }
void ShowProcessList() { static bool Active = false; if (Active) return; Active = true; VMenu2 ProcList(MSG(MProcessListTitle),nullptr,0,ScrY-4); ProcList.SetFlags(VMENU_WRAPMODE); ProcList.SetPosition(-1,-1,0,0); static bool bShowImage = false; struct ProcInfo pi={&ProcList,bShowImage}; if (EnumWindows(EnumWindowsProc,(LPARAM)&pi)) { ProcList.AssignHighlights(FALSE); ProcList.SetBottomTitle(MSG(MProcessListBottom)); ProcList.SortItems(TaskSort); ProcList.Run([&](int Key)->int { int KeyProcessed = 1; switch (Key) { case KEY_F1: { Help Hlp(L"TaskList"); break; } case KEY_NUMDEL: case KEY_DEL: { HWND ProcWnd=*static_cast<HWND*>(ProcList.GetUserData(nullptr,0)); if (ProcWnd) { wchar_t_ptr Title; int LenTitle=GetWindowTextLength(ProcWnd); if (LenTitle) { Title.reset(LenTitle + 1); if (Title && (LenTitle=GetWindowText(ProcWnd, Title.get(), LenTitle+1))) Title[LenTitle]=0; } DWORD ProcID; GetWindowThreadProcessId(ProcWnd,&ProcID); if (!Message(MSG_WARNING,2,MSG(MKillProcessTitle),MSG(MAskKillProcess), NullToEmpty(Title.get()),MSG(MKillProcessWarning),MSG(MKillProcessKill),MSG(MCancel))) { if (KillProcess(ProcID)) Sleep(500); else { Global->CatchError(); Message(MSG_WARNING|MSG_ERRORTYPE,1,MSG(MKillProcessTitle),MSG(MCannotKillProcess),MSG(MOk)); } } } } case KEY_CTRLR: case KEY_RCTRLR: { ProcList.DeleteItems(); if (!EnumWindows(EnumWindowsProc,(LPARAM)&pi)) ProcList.Close(-1); else ProcList.SortItems(TaskSort); break; } case KEY_F2: { pi.bShowImage=(bShowImage=!bShowImage); int SelectPos=ProcList.GetSelectPos(); ProcList.DeleteItems(); if (!EnumWindows(EnumWindowsProc,(LPARAM)&pi)) ProcList.Close(-1); else { ProcList.SortItems(TaskSort); ProcList.SetSelectPos(SelectPos); } break; } default: KeyProcessed = 0; } return KeyProcessed; }); if (ProcList.GetExitCode()>=0) { HWND ProcWnd=*static_cast<HWND*>(ProcList.GetUserData(nullptr,0)); if (ProcWnd) { //SetForegroundWindow(ProcWnd); // Allow SetForegroundWindow on Win98+. DWORD dwMs; // Remember the current value. BOOL bSPI = SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &dwMs, 0); if (bSPI) // Reset foreground lock timeout bSPI = SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0); SetForegroundWindow(ProcWnd); if (bSPI) // Restore old value SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, ToPtr(dwMs), 0); WINDOWPLACEMENT wp; wp.length=sizeof(wp); if (!GetWindowPlacement(ProcWnd,&wp) || wp.showCmd!=SW_SHOWMAXIMIZED) ShowWindowAsync(ProcWnd,SW_RESTORE); } } } Active = false; }
void Modal::ShowHelp() { if (!strHelpTopic.IsEmpty()) Help Hlp(strHelpTopic); }
int FilePanels::ProcessKey(int Key) { if (!Key) return TRUE; if ((Key==KEY_CTRLLEFT || Key==KEY_CTRLRIGHT || Key==KEY_CTRLNUMPAD4 || Key==KEY_CTRLNUMPAD6 || Key==KEY_RCTRLLEFT || Key==KEY_RCTRLRIGHT || Key==KEY_RCTRLNUMPAD4 || Key==KEY_RCTRLNUMPAD6 /* || Key==KEY_CTRLUP || Key==KEY_CTRLDOWN || Key==KEY_CTRLNUMPAD8 || Key==KEY_CTRLNUMPAD2 */) && (CtrlObject->CmdLine->GetLength()>0 || (!LeftPanel->IsVisible() && !RightPanel->IsVisible()))) { CtrlObject->CmdLine->ProcessKey(Key); return TRUE; } switch (Key) { case KEY_F1: { if (!ActivePanel->ProcessKey(KEY_F1)) { Help Hlp(L"Contents"); } return TRUE; } case KEY_TAB: { SetAnhoterPanelFocus(); break; } case KEY_CTRLF1: case KEY_RCTRLF1: { if (LeftPanel->IsVisible()) { LeftPanel->Hide(); if (RightPanel->IsVisible()) RightPanel->SetFocus(); } else { if (!RightPanel->IsVisible()) LeftPanel->SetFocus(); LeftPanel->Show(); } Redraw(); break; } case KEY_CTRLF2: case KEY_RCTRLF2: { if (RightPanel->IsVisible()) { RightPanel->Hide(); if (LeftPanel->IsVisible()) LeftPanel->SetFocus(); } else { if (!LeftPanel->IsVisible()) RightPanel->SetFocus(); RightPanel->Show(); } Redraw(); break; } case KEY_CTRLB: case KEY_RCTRLB: { Opt.ShowKeyBar=!Opt.ShowKeyBar; KeyBarVisible = Opt.ShowKeyBar; if (!KeyBarVisible) MainKeyBar.Hide(); SetScreenPosition(); FrameManager->RefreshFrame(); break; } case KEY_CTRLL: case KEY_RCTRLL: case KEY_CTRLQ: case KEY_RCTRLQ: case KEY_CTRLT: case KEY_RCTRLT: { if (ActivePanel->IsVisible()) { Panel *AnotherPanel=GetAnotherPanel(ActivePanel); int NewType; if (Key==KEY_CTRLL || Key==KEY_RCTRLL) NewType=INFO_PANEL; else if (Key==KEY_CTRLQ || Key==KEY_RCTRLQ) NewType=QVIEW_PANEL; else NewType=TREE_PANEL; if (ActivePanel->GetType()==NewType) AnotherPanel=ActivePanel; if (!AnotherPanel->ProcessPluginEvent(FE_CLOSE,nullptr)) { if (AnotherPanel->GetType()==NewType) /* $ 19.09.2000 IS Повторное нажатие на ctrl-l|q|t всегда включает файловую панель */ AnotherPanel=ChangePanel(AnotherPanel,FILE_PANEL,FALSE,FALSE); else AnotherPanel=ChangePanel(AnotherPanel,NewType,FALSE,FALSE); /* $ 07.09.2001 VVM ! При возврате из CTRL+Q, CTRL+L восстановим каталог, если активная панель - дерево. */ if (ActivePanel->GetType() == TREE_PANEL) { string strCurDir; ActivePanel->GetCurDir(strCurDir); AnotherPanel->SetCurDir(strCurDir, TRUE); AnotherPanel->Update(0); } else AnotherPanel->Update(UPDATE_KEEP_SELECTION); AnotherPanel->Show(); } ActivePanel->SetFocus(); } break; } case KEY_CTRLO: case KEY_RCTRLO: { { int LeftVisible=LeftPanel->IsVisible(); int RightVisible=RightPanel->IsVisible(); int HideState=!LeftVisible && !RightVisible; if (!HideState) { LeftStateBeforeHide=LeftVisible; RightStateBeforeHide=RightVisible; LeftPanel->Hide(); RightPanel->Hide(); FrameManager->RefreshFrame(); } else { if (!LeftStateBeforeHide && !RightStateBeforeHide) LeftStateBeforeHide=RightStateBeforeHide=TRUE; if (LeftStateBeforeHide) LeftPanel->Show(); if (RightStateBeforeHide) RightPanel->Show(); if (!ActivePanel->IsVisible()) { if (ActivePanel == RightPanel) LeftPanel->SetFocus(); else RightPanel->SetFocus(); } } } break; } case KEY_CTRLP: case KEY_RCTRLP: { if (ActivePanel->IsVisible()) { Panel *AnotherPanel=GetAnotherPanel(ActivePanel); if (AnotherPanel->IsVisible()) AnotherPanel->Hide(); else AnotherPanel->Show(); CtrlObject->CmdLine->Redraw(); } FrameManager->RefreshFrame(); break; } case KEY_CTRLI: case KEY_RCTRLI: { ActivePanel->EditFilter(); return TRUE; } case KEY_CTRLU: case KEY_RCTRLU: { if (!LeftPanel->IsVisible() && !RightPanel->IsVisible()) CtrlObject->CmdLine->ProcessKey(Key); else SwapPanels(); break; } /* $ 08.04.2002 IS При смене диска установим принудительно текущий каталог на активной панели, т.к. система не знает ничего о том, что у Фара две панели, и текущим для системы после смены диска может быть каталог и на пассивной панели */ case KEY_ALTF1: case KEY_RALTF1: { LeftPanel->ChangeDisk(); if (ActivePanel!=LeftPanel) ActivePanel->SetCurPath(); break; } case KEY_ALTF2: case KEY_RALTF2: { RightPanel->ChangeDisk(); if (ActivePanel!=RightPanel) ActivePanel->SetCurPath(); break; } case KEY_ALTF7: case KEY_RALTF7: { { FindFiles FindFiles; } break; } case KEY_CTRLUP: case KEY_CTRLNUMPAD8: case KEY_RCTRLUP: case KEY_RCTRLNUMPAD8: { bool Set=false; if (Opt.LeftHeightDecrement<ScrY-7) { Opt.LeftHeightDecrement++; Set=true; } if (Opt.RightHeightDecrement<ScrY-7) { Opt.RightHeightDecrement++; Set=true; } if(Set) { SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLDOWN: case KEY_CTRLNUMPAD2: case KEY_RCTRLDOWN: case KEY_RCTRLNUMPAD2: { bool Set=false; if (Opt.LeftHeightDecrement>0) { Opt.LeftHeightDecrement--; Set=true; } if (Opt.RightHeightDecrement>0) { Opt.RightHeightDecrement--; Set=true; } if(Set) { SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLSHIFTUP: case KEY_CTRLSHIFTNUMPAD8: case KEY_RCTRLSHIFTUP: case KEY_RCTRLSHIFTNUMPAD8: { IntOption& HeightDecrement=(ActivePanel==LeftPanel)?Opt.LeftHeightDecrement:Opt.RightHeightDecrement; if (HeightDecrement<ScrY-7) { HeightDecrement++; SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLSHIFTDOWN: case KEY_CTRLSHIFTNUMPAD2: case KEY_RCTRLSHIFTDOWN: case KEY_RCTRLSHIFTNUMPAD2: { IntOption& HeightDecrement=(ActivePanel==LeftPanel)?Opt.LeftHeightDecrement:Opt.RightHeightDecrement; if (HeightDecrement>0) { HeightDecrement--; SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLLEFT: case KEY_CTRLNUMPAD4: case KEY_RCTRLLEFT: case KEY_RCTRLNUMPAD4: { if (Opt.WidthDecrement<ScrX/2-10) { Opt.WidthDecrement++; SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLRIGHT: case KEY_CTRLNUMPAD6: case KEY_RCTRLRIGHT: case KEY_RCTRLNUMPAD6: { if (Opt.WidthDecrement>-(ScrX/2-10)) { Opt.WidthDecrement--; SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLCLEAR: case KEY_RCTRLCLEAR: { if (Opt.WidthDecrement) { Opt.WidthDecrement=0; SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_CTRLALTCLEAR: case KEY_RCTRLRALTCLEAR: case KEY_CTRLRALTCLEAR: case KEY_RCTRLALTCLEAR: { bool Set=false; if (Opt.LeftHeightDecrement) { Opt.LeftHeightDecrement=0; Set=true; } if (Opt.RightHeightDecrement) { Opt.RightHeightDecrement=0; Set=true; } if(Set) { SetScreenPosition(); FrameManager->RefreshFrame(); } break; } case KEY_F9: { ShellOptions(0,nullptr); return TRUE; } case KEY_SHIFTF10: { ShellOptions(1,nullptr); return TRUE; } default: { if (Key >= KEY_CTRL0 && Key <= KEY_CTRL9) ChangePanelViewMode(ActivePanel,Key-KEY_CTRL0,TRUE); if (!ActivePanel->ProcessKey(Key)) CtrlObject->CmdLine->ProcessKey(Key); break; } } return TRUE; }