void FileViewer::InitKeyBar() { ViewKeyBar.SetAllGroup(KBL_MAIN, Opt.OnlyEditorViewerUsed?MSingleViewF1:MViewF1, 12); ViewKeyBar.SetAllGroup(KBL_SHIFT, Opt.OnlyEditorViewerUsed?MSingleViewShiftF1:MViewShiftF1, 12); ViewKeyBar.SetAllGroup(KBL_ALT, Opt.OnlyEditorViewerUsed?MSingleViewAltF1:MViewAltF1, 12); ViewKeyBar.SetAllGroup(KBL_CTRL, Opt.OnlyEditorViewerUsed?MSingleViewCtrlF1:MViewCtrlF1, 12); ViewKeyBar.SetAllGroup(KBL_CTRLSHIFT, Opt.OnlyEditorViewerUsed?MSingleViewCtrlShiftF1:MViewCtrlShiftF1, 12); ViewKeyBar.SetAllGroup(KBL_CTRLALT, Opt.OnlyEditorViewerUsed?MSingleViewCtrlAltF1:MViewCtrlAltF1, 12); ViewKeyBar.SetAllGroup(KBL_ALTSHIFT, Opt.OnlyEditorViewerUsed?MSingleViewAltShiftF1:MViewAltShiftF1, 12); ViewKeyBar.SetAllGroup(KBL_CTRLALTSHIFT, Opt.OnlyEditorViewerUsed?MSingleViewCtrlAltShiftF1:MViewCtrlAltShiftF1, 12); if (DisableEdit) ViewKeyBar.Change(KBL_MAIN,L"",6-1); if (!GetCanLoseFocus()) ViewKeyBar.Change(KBL_MAIN,L"",12-1); if (!GetCanLoseFocus()) ViewKeyBar.Change(KBL_ALT,L"",11-1); if (!Opt.UsePrintManager || CtrlObject->Plugins.FindPlugin(SYSID_PRINTMANAGER)) ViewKeyBar.Change(KBL_ALT,L"",5-1); ViewKeyBar.ReadRegGroup(L"Viewer",Opt.strLanguage); ViewKeyBar.SetAllRegGroup(); SetKeyBar(&ViewKeyBar); View.SetPosition(X1,Y1+(Opt.ViOpt.ShowTitleBar?1:0),X2,Y2-(Opt.ViOpt.ShowKeyBar?1:0)); View.SetViewKeyBar(&ViewKeyBar); }
/* $ 29.12.2000 IS Аналог CloseAll, но разрешает продолжение полноценной работы в фаре, если пользователь продолжил редактировать файл. Возвращает TRUE, если все закрыли и можно выходить из фара. */ BOOL Manager::ExitAll() { _MANAGER(CleverSysLog clv(L"Manager::ExitAll()")); // BUGBUG don't use iterators here, may be invalidated by DeleteCommit() for(size_t i = m_modalWindows.size(); i; --i) { if (i - 1 >= m_modalWindows.size()) continue; auto CurrentWindow = m_modalWindows[i - 1]; if (!CurrentWindow->GetCanLoseFocus(TRUE)) { auto PrevWindowCount = m_modalWindows.size(); CurrentWindow->ProcessKey(Manager::Key(KEY_ESC)); Commit(); if (PrevWindowCount == m_modalWindows.size()) { return FALSE; } } } // BUGBUG don't use iterators here, may be invalidated by DeleteCommit() for(size_t i = m_windows.size(); i; --i) { if (i - 1 >= m_windows.size()) continue; auto CurrentWindow = m_windows[i - 1]; if (!CurrentWindow->GetCanLoseFocus(TRUE)) { ActivateWindow(CurrentWindow); Commit(); auto PrevWindoowCount = m_windows.size(); CurrentWindow->ProcessKey(Manager::Key(KEY_ESC)); Commit(); if (PrevWindoowCount == m_windows.size()) { return FALSE; } } } return TRUE; }
int FileViewer::ProcessKey(int Key) { if (RedrawTitle && (((unsigned int)Key & 0x00ffffff) < KEY_END_FKEY || IS_INTERNAL_KEY_REAL((unsigned int)Key & 0x00ffffff))) ShowConsoleTitle(); if (Key!=KEY_F3 && Key!=KEY_IDLE) F3KeyOnly=false; switch (Key) { #if 0 /* $ 30.05.2003 SVS Фича :-) Shift-F4 в редакторе/вьювере позволяет открывать другой редактор/вьювер Пока закомментим */ case KEY_SHIFTF4: { if (!Opt.OnlyEditorViewerUsed) CtrlObject->Cp()->ActivePanel->ProcessKey(Key); return TRUE; } #endif /* $ 22.07.2000 tran + выход по ctrl-f10 с установкой курсора на файл */ case KEY_CTRLF10: { if (View.isTemporary()) { return TRUE; } SaveScreen Sc; string strFileName; View.GetFileName(strFileName); CtrlObject->Cp()->GoToFile(strFileName); RedrawTitle = TRUE; return (TRUE); } // $ 15.07.2000 tran + CtrlB switch KeyBar case KEY_CTRLB: Opt.ViOpt.ShowKeyBar=!Opt.ViOpt.ShowKeyBar; if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); else ViewKeyBar.Hide0(); // 0 mean - Don't purge saved screen Show(); KeyBarVisible = Opt.ViOpt.ShowKeyBar; return (TRUE); case KEY_CTRLSHIFTB: { Opt.ViOpt.ShowTitleBar=!Opt.ViOpt.ShowTitleBar; TitleBarVisible = Opt.ViOpt.ShowTitleBar; Show(); return (TRUE); } case KEY_CTRLO: if (!Opt.OnlyEditorViewerUsed) { if (FrameManager->ShowBackground()) { SetCursorType(FALSE,0); WaitKey(); FrameManager->RefreshFrame(); } } return TRUE; case KEY_F3: case KEY_NUMPAD5: case KEY_SHIFTNUMPAD5: if (F3KeyOnly) return TRUE; case KEY_ESC: case KEY_F10: FrameManager->DeleteFrame(); return TRUE; case KEY_F6: if (!DisableEdit) { UINT cp=View.VM.CodePage; string strViewFileName; View.GetFileName(strViewFileName); File Edit; if(!Edit.Open(strViewFileName, GENERIC_READ, FILE_SHARE_READ|(Opt.EdOpt.EditOpenedForWrite?FILE_SHARE_WRITE:0), nullptr, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN)) { Message(MSG_WARNING|MSG_ERRORTYPE,1,MSG(MEditTitle),MSG(MEditCannotOpen),strViewFileName,MSG(MOk)); return TRUE; } Edit.Close(); // Если переключаемся в редактор, то удалять файл уже не нужно SetTempViewName(L""); SetExitCode(0); __int64 FilePos=View.GetFilePos(); /* $ 07.07.2006 IS Тут косяк, замеченный при чтении warnings - FilePos теряет информацию при преобразовании __int64 -> int Надо бы поправить FileEditor на этот счет. */ FileEditor *ShellEditor = new FileEditor(strViewFileName, cp, (GetCanLoseFocus()?FFILEEDIT_ENABLEF6:0)|(SaveToSaveAs?FFILEEDIT_SAVETOSAVEAS:0)|(DisableHistory?FFILEEDIT_DISABLEHISTORY:0),-2, static_cast<int>(FilePos), nullptr); ShellEditor->SetEnableF6(TRUE); /* $ 07.05.2001 DJ сохраняем NamesList */ ShellEditor->SetNamesList(View.GetNamesList()); FrameManager->DeleteFrame(this); // Insert уже есть внутри конструктора ShowTime(2); } return TRUE; // Печать файла с использованием плагина PrintMan case KEY_ALTF5: { if (Opt.UsePrintManager && CtrlObject->Plugins.FindPlugin(SYSID_PRINTMANAGER)) CtrlObject->Plugins.CallPlugin(SYSID_PRINTMANAGER,OPEN_VIEWER,0); // printman return TRUE; } case KEY_ALTSHIFTF9: // Работа с локальной копией ViewerOptions ViewerOptions ViOpt; ViOpt.TabSize=View.GetTabSize(); ViOpt.AutoDetectCodePage=View.GetAutoDetectCodePage(); ViOpt.ShowScrollbar=View.GetShowScrollbar(); ViOpt.ShowArrows=View.GetShowArrows(); ViOpt.PersistentBlocks=View.GetPersistentBlocks(); ViewerConfig(ViOpt,true); View.SetTabSize(ViOpt.TabSize); View.SetAutoDetectCodePage(ViOpt.AutoDetectCodePage); View.SetShowScrollbar(ViOpt.ShowScrollbar); View.SetShowArrows(ViOpt.ShowArrows); View.SetPersistentBlocks(ViOpt.PersistentBlocks); if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); View.Show(); return TRUE; case KEY_ALTF11: if (GetCanLoseFocus()) CtrlObject->CmdLine->ShowViewEditHistory(); return TRUE; default: // Этот кусок - на будущее (по аналогии с редактором :-) // if (CtrlObject->Macro.IsExecuting() || !View.ProcessViewerInput(&ReadRec)) { /* $ 22.03.2001 SVS Это помогло от залипания :-) */ if (!CtrlObject->Macro.IsExecuting()) if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); if (!ViewKeyBar.ProcessKey(Key)) return(View.ProcessKey(Key)); } return TRUE; } }
int FileViewer::ProcessKey(int Key) { if (RedrawTitle && (((unsigned int)Key & 0x00ffffff) < KEY_END_FKEY || IsInternalKeyReal((unsigned int)Key & 0x00ffffff))) ShowConsoleTitle(); if (Key!=KEY_F3 && Key!=KEY_IDLE) F3KeyOnly=false; switch (Key) { #if 0 /* $ 30.05.2003 SVS Фича :-) Shift-F4 в редакторе/вьювере позволяет открывать другой редактор/вьювер Пока закомментим */ case KEY_SHIFTF4: { if (!Opt.OnlyEditorViewerUsed) CtrlObject->Cp()->ActivePanel->ProcessKey(Key); return TRUE; } #endif /* $ 22.07.2000 tran + выход по ctrl-f10 с установкой курсора на файл */ case KEY_CTRLF10: case KEY_RCTRLF10: { if (View.isTemporary()) { return TRUE; } SaveScreen Sc; string strFileName; View.GetFileName(strFileName); CtrlObject->Cp()->GoToFile(strFileName); RedrawTitle = TRUE; return (TRUE); } // $ 15.07.2000 tran + CtrlB switch KeyBar case KEY_CTRLB: case KEY_RCTRLB: Opt.ViOpt.ShowKeyBar=!Opt.ViOpt.ShowKeyBar; if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); else ViewKeyBar.Hide0(); // 0 mean - Don't purge saved screen Show(); KeyBarVisible = Opt.ViOpt.ShowKeyBar; return (TRUE); case KEY_CTRLSHIFTB: case KEY_RCTRLSHIFTB: { Opt.ViOpt.ShowTitleBar=!Opt.ViOpt.ShowTitleBar; TitleBarVisible = Opt.ViOpt.ShowTitleBar; Show(); return (TRUE); } case KEY_CTRLO: case KEY_RCTRLO: if (!Opt.OnlyEditorViewerUsed) { if (FrameManager->ShowBackground()) { SetCursorType(FALSE,0); WaitKey(); FrameManager->RefreshFrame(); } } return TRUE; case KEY_F3: case KEY_NUMPAD5: case KEY_SHIFTNUMPAD5: if (F3KeyOnly) return TRUE; case KEY_ESC: case KEY_F10: FrameManager->DeleteFrame(); return TRUE; case KEY_F6: if (!DisableEdit) { UINT cp=View.VM.CodePage; string strViewFileName; View.GetFileName(strViewFileName); File Edit; while(!Edit.Open(strViewFileName, FILE_READ_DATA, FILE_SHARE_READ|(Opt.EdOpt.EditOpenedForWrite?FILE_SHARE_WRITE:0), nullptr, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN)) { if(!OperationFailed(strViewFileName, MEditTitle, MSG(MEditCannotOpen), false)) continue; else return TRUE; } Edit.Close(); __int64 FilePos=View.GetFilePos(); DWORD flags = (GetCanLoseFocus()?FFILEEDIT_ENABLEF6:0)|(SaveToSaveAs?FFILEEDIT_SAVETOSAVEAS:0)|(DisableHistory?FFILEEDIT_DISABLEHISTORY:0); FileEditor *ShellEditor = new FileEditor( strViewFileName, cp, flags, -2, static_cast<int>(FilePos), // TODO: Editor StartChar should be __int64 str_title.IsEmpty() ? nullptr: &str_title, -1,-1, -1, -1, delete_on_close ); ShellEditor->SetEnableF6(TRUE); /* $ 07.05.2001 DJ сохраняем NamesList */ ShellEditor->SetNamesList(View.GetNamesList()); // Если переключаемся в редактор, то удалять файл уже не нужно SetTempViewName(L""); SetExitCode(0); FrameManager->DeleteFrame(this); // Insert уже есть внутри конструктора ShowTime(2); } return TRUE; case KEY_ALTSHIFTF9: case KEY_RALTSHIFTF9: // Работа с локальной копией ViewerOptions ViewerConfig(View.ViOpt, true); if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); View.Show(); return TRUE; case KEY_ALTF11: case KEY_RALTF11: if (GetCanLoseFocus()) CtrlObject->CmdLine->ShowViewEditHistory(); return TRUE; default: // Этот кусок - на будущее (по аналогии с редактором :-) // if (CtrlObject->Macro.IsExecuting() || !View.ProcessViewerInput(&ReadRec)) { /* $ 22.03.2001 SVS Это помогло от залипания :-) */ if (!CtrlObject->Macro.IsExecuting()) if (Opt.ViOpt.ShowKeyBar) ViewKeyBar.Show(); if (!ViewKeyBar.ProcessKey(Key)) return(View.ProcessKey(Key)); } return TRUE; } }