void Manager::UnmodalizeFrame(Frame *Unmodalized) { _MANAGER(CleverSysLog clv(L"Manager::UnmodalizeFrame (Frame *Unmodalized)")); _MANAGER(SysLog(L"Unmodalized=%p",Unmodalized)); UnmodalizedFrame=Unmodalized; UnmodalizeCommit(); }
void Manager::DeactivateFrame(Frame *Deactivated,int Direction) { _MANAGER(CleverSysLog clv(L"Manager::DeactivateFrame (Frame *Deactivated,int Direction)")); _MANAGER(SysLog(L"Deactivated=%p, Direction=%d",Deactivated,Direction)); if (Direction) { FramePos+=Direction; if (Direction>0) { if (FramePos>=FrameCount) { FramePos=0; } } else { if (FramePos<0) { FramePos=FrameCount-1; } } ActivateFrame(FramePos); } else { // Direction==0 // Direct access from menu or (in future) from plugin } DeactivatedFrame=Deactivated; }
void Manager::ModalizeFrame(Frame *Modalized, int Mode) { _MANAGER(CleverSysLog clv(L"Manager::ModalizeFrame (Frame *Modalized, int Mode)")); _MANAGER(SysLog(L"Modalized=%p",Modalized)); ModalizedFrame=Modalized; ModalizeCommit(); }
void Manager::RefreshFrame(Frame *Refreshed) { _MANAGER(CleverSysLog clv(L"Manager::RefreshFrame(Frame *Refreshed)")); _MANAGER(SysLog(L"Refreshed=%p",Refreshed)); if (ActivatedFrame) return; if (Refreshed) { RefreshedFrame=Refreshed; } else { RefreshedFrame=CurrentFrame; } if (IndexOf(Refreshed)==-1 && IndexOfStack(Refreshed)==-1) return; /* $ 13.04.2002 KM - Вызываем принудительный Commit() для фрейма имеющего члена NextModal, это означает что активным сейчас является VMenu, а значит Commit() сам не будет вызван после возврата из функции. Устраняет ещё один момент неперерисовки, когда один над другим находится несколько объектов VMenu. Пример: настройка цветов. Теперь AltF9 в диалоге настройки цветов корректно перерисовывает меню. */ if (RefreshedFrame && RefreshedFrame->NextModal) Commit(); }
void Manager::RefreshCommit() { _MANAGER(CleverSysLog clv(L"Manager::RefreshCommit()")); _MANAGER(SysLog(L"RefreshedFrame=%p",RefreshedFrame)); if (!RefreshedFrame) return; if (IndexOf(RefreshedFrame)==-1 && IndexOfStack(RefreshedFrame)==-1) return; if (!RefreshedFrame->Locked()) { if (!Global->IsRedrawFramesInProcess) RefreshedFrame->ShowConsoleTitle(); if (RefreshedFrame) RefreshedFrame->Refresh(); if (!RefreshedFrame) return; CtrlObject->Macro.SetMode(RefreshedFrame->GetMacroMode()); } if ((Global->Opt->ViewerEditorClock && (RefreshedFrame->GetType() == MODALTYPE_EDITOR || RefreshedFrame->GetType() == MODALTYPE_VIEWER)) || (Global->WaitInMainLoop && Global->Opt->Clock)) ShowTime(1); }
void Manager::UpdateCommit() { _MANAGER(CleverSysLog clv(L"Manager::UpdateCommit()")); _MANAGER(SysLog(L"DeletedFrame=%p, InsertedFrame=%p, ExecutedFrame=%p",DeletedFrame,InsertedFrame, ExecutedFrame)); if (ExecutedFrame) { DeleteCommit(); ExecuteCommit(); return; } int FrameIndex=IndexOf(DeletedFrame); if (-1!=FrameIndex) { ActivateFrame(FrameList[FrameIndex] = InsertedFrame); ActivatedFrame->FrameToBack=CurrentFrame; DeleteCommit(); } else { _MANAGER(SysLog(L"ERROR! DeletedFrame not found")); } }
void Manager::InsertWindow(window_ptr_ref Inserted) { _MANAGER(CleverSysLog clv(L"Manager::InsertWindow(window *Inserted, int Index)")); _MANAGER(SysLog(L"Inserted=%p, Index=%i",Inserted, Index)); CheckAndPushWindow(Inserted,&Manager::InsertCommit); }
void Manager::ExecuteModal(window_ptr_ref Executed) { _MANAGER(CleverSysLog clv(L"Manager::ExecuteModal (window *Executed)")); _MANAGER(SysLog(L"Executed=%p",Executed)); bool stop=false; auto& stop_ref=m_Executed[Executed]; if (stop_ref) return; stop_ref=&stop; auto OriginalStartManager = StartManager; StartManager = true; for (;;) { Commit(); if (stop) { break; } ProcessMainLoop(); } StartManager = OriginalStartManager; return;// GetModalExitCode(); }
void Manager::InsertFrame(Frame *Inserted, int Index) { _MANAGER(CleverSysLog clv(L"Manager::InsertFrame(Frame *Inserted, int Index)")); _MANAGER(SysLog(L"Inserted=%p, Index=%i",Inserted, Index)); if (Index==-1) Index=FramePos; InsertedFrame=Inserted; }
void Manager::DeleteWindow(window_ptr_ref Deleted) { _MANAGER(CleverSysLog clv(L"Manager::DeleteWindow(window *Deleted)")); _MANAGER(SysLog(L"Deleted=%p",Deleted)); const auto& Window=Deleted?Deleted:m_currentWindow; assert(Window); CheckAndPushWindow(Window,&Manager::DeleteCommit); Window->SetDeleting(); }
void Manager::ActivateFrame(Frame *Activated) { _MANAGER(CleverSysLog clv(L"Manager::ActivateFrame(Frame *Activated)")); _MANAGER(SysLog(L"Activated=%i",Activated)); if (IndexOf(Activated)==-1 && IndexOfStack(Activated)==-1) return; if (!ActivatedFrame) { ActivatedFrame=Activated; } }
void Manager::ExecuteNonModal() { _MANAGER(CleverSysLog clv(L"Manager::ExecuteNonModal ()")); _MANAGER(SysLog(L"ExecutedFrame=%p, InsertedFrame=%p, DeletedFrame=%p",ExecutedFrame, InsertedFrame, DeletedFrame)); Frame *NonModal=InsertedFrame?InsertedFrame:(ExecutedFrame?ExecutedFrame:ActivatedFrame); if (!NonModal) { return; } /* $ 14.05.2002 SKV Положим текущий фрэйм в список "родителей" полумодальных фрэймов */ //Frame *SaveFrame=CurrentFrame; //AddSemiModalBackFrame(SaveFrame); int NonModalIndex=IndexOf(NonModal); if (-1==NonModalIndex) { InsertedFrame=NonModal; ExecutedFrame=nullptr; InsertCommit(); InsertedFrame=nullptr; } else { ActivateFrame(NonModalIndex); } //Frame* ModalStartLevel=NonModal; for (;;) { Commit(); if (CurrentFrame!=NonModal || EndLoop) { break; } ProcessMainLoop(); } //ExecuteModal(NonModal); /* $ 14.05.2002 SKV ... и уберём его же. */ //RemoveSemiModalBackFrame(SaveFrame); }
void Manager::CloseAll() { _MANAGER(CleverSysLog clv(L"Manager::CloseAll()")); Frame *iFrame; for (int i=ModalStackCount-1; i>=0; i--) { iFrame=ModalStack[i]; DeleteFrame(iFrame); DeleteCommit(); DeletedFrame=nullptr; } for (int i=FrameCount-1; i>=0; i--) { iFrame=(*this)[i]; DeleteFrame(iFrame); DeleteCommit(); DeletedFrame=nullptr; } xf_free(FrameList); FrameList=nullptr; FrameCount=FramePos=0; }
void Manager::DeactivateCommit() { _MANAGER(CleverSysLog clv(L"Manager::DeactivateCommit()")); _MANAGER(SysLog(L"DeactivatedFrame=%p",DeactivatedFrame)); /*$ 18.04.2002 skv Если нечего активировать, то в общем-то не надо и деактивировать. */ if (!DeactivatedFrame || !ActivatedFrame) { return; } if (!ActivatedFrame) { _MANAGER("WARNING! !ActivatedFrame"); } if (DeactivatedFrame) { DeactivatedFrame->OnChangeFocus(0); } int modalIndex=IndexOfStack(DeactivatedFrame); if (-1 != modalIndex && modalIndex== ModalStackCount-1) { /*if (IsSemiModalBackFrame(ActivatedFrame)) { // Является ли "родителем" полумодального фрэйма? ModalStackCount--; } else {*/ if (IndexOfStack(ActivatedFrame)==-1) { ModalStack[ModalStackCount-1]=ActivatedFrame; } else { ModalStackCount--; } // } } }
void Manager::ExecuteCommit() { _MANAGER(CleverSysLog clv(L"Manager::ExecuteCommit()")); _MANAGER(SysLog(L"ExecutedFrame=%p",ExecutedFrame)); if (!ExecutedFrame) { return; } if (ModalStackCount == ModalStackSize) { ModalStack = (Frame **) xf_realloc(ModalStack, ++ModalStackSize * sizeof(Frame *)); } ModalStack [ModalStackCount++] = ExecutedFrame; ActivatedFrame=ExecutedFrame; }
void Manager::ExecuteModal(Frame *Executed) { _MANAGER(CleverSysLog clv(L"Manager::ExecuteModal (Frame *Executed)")); _MANAGER(SysLog(L"Executed=%p, ExecutedFrame=%p",Executed,ExecutedFrame)); if (!Executed && !ExecutedFrame) { return; } if (Executed) { if (ExecutedFrame) { _MANAGER(SysLog(L"WARNING! Попытка в одном цикле запустить в модальном режиме два фрейма. Executed=%p, ExecitedFrame=%p",Executed, ExecutedFrame)); return;// nullptr; //?? Определить, какое значение правильно возвращать в этом случае } else { ExecutedFrame=Executed; } } int ModalStartLevel=ModalStackCount; int OriginalStartManager=StartManager; StartManager=TRUE; for (;;) { Commit(); if (ModalStackCount<=ModalStartLevel) { break; } ProcessMainLoop(); } StartManager=OriginalStartManager; return;// GetModalExitCode(); }
void Manager::PluginsMenu() { _MANAGER(SysLog(1)); int curType = CurrentFrame->GetType(); if (curType == MODALTYPE_PANELS || curType == MODALTYPE_EDITOR || curType == MODALTYPE_VIEWER || curType == MODALTYPE_DIALOG) { /* 02.01.2002 IS ! Вывод правильной помощи по Shift-F1 в меню плагинов в редакторе/вьюере/диалоге ! Если на панели QVIEW или INFO открыт файл, то считаем, что это полноценный вьюер и запускаем с соответствующим параметром плагины */ if (curType==MODALTYPE_PANELS) { int pType=CtrlObject->Cp()->ActivePanel->GetType(); if (pType==QVIEW_PANEL || pType==INFO_PANEL) { string strType, strCurFileName; CtrlObject->Cp()->GetTypeAndName(strType, strCurFileName); if (!strCurFileName.IsEmpty()) { DWORD Attr=apiGetFileAttributes(strCurFileName); // интересуют только обычные файлы if (Attr!=INVALID_FILE_ATTRIBUTES && !(Attr&FILE_ATTRIBUTE_DIRECTORY)) curType=MODALTYPE_VIEWER; } } } // в редакторе, вьюере или диалоге покажем свою помощь по Shift-F1 const wchar_t *Topic=curType==MODALTYPE_EDITOR?L"Editor": curType==MODALTYPE_VIEWER?L"Viewer": curType==MODALTYPE_DIALOG?L"Dialog":nullptr; CtrlObject->Plugins->CommandsMenu(curType,0,Topic); } _MANAGER(SysLog(-1)); }
void Manager::ActivateCommit() { _MANAGER(CleverSysLog clv(L"Manager::ActivateCommit()")); _MANAGER(SysLog(L"ActivatedFrame=%p",ActivatedFrame)); if (CurrentFrame==ActivatedFrame) { RefreshedFrame=ActivatedFrame; return; } int FrameIndex=IndexOf(ActivatedFrame); if (-1!=FrameIndex) { FramePos=FrameIndex; } /* 14.05.2002 SKV Если мы пытаемся активировать полумодальный фрэйм, то надо его вытащит на верх стэка модалов. */ for (int I=0; I<ModalStackCount; I++) { if (ModalStack[I]==ActivatedFrame) { Frame *tmp=ModalStack[I]; ModalStack[I]=ModalStack[ModalStackCount-1]; ModalStack[ModalStackCount-1]=tmp; break; } } RefreshedFrame=CurrentFrame=ActivatedFrame; InterlockedExchange(&CurrentWindowType,CurrentFrame->GetType()); }
void Manager::CloseAll() { _MANAGER(CleverSysLog clv(L"Manager::CloseAll()")); while(!m_modalWindows.empty()) { DeleteWindow(m_modalWindows.back()); Commit(); } while(!m_windows.empty()) { DeleteWindow(m_windows.back()); Commit(); } m_windows.clear(); }
void Manager::InsertCommit() { _MANAGER(CleverSysLog clv(L"Manager::InsertCommit()")); _MANAGER(SysLog(L"InsertedFrame=%p",InsertedFrame)); if (InsertedFrame) { if (FrameListSize <= FrameCount) { FrameList=(Frame **)xf_realloc(FrameList,sizeof(*FrameList)*(FrameCount+1)); FrameListSize++; } InsertedFrame->FrameToBack=CurrentFrame; FrameList[FrameCount]=InsertedFrame; if (!ActivatedFrame) { ActivatedFrame=InsertedFrame; } FrameCount++; } }
void Manager::DeleteFrame(Frame *Deleted) { _MANAGER(CleverSysLog clv(L"Manager::DeleteFrame(Frame *Deleted)")); _MANAGER(SysLog(L"Deleted=%p",Deleted)); for (int i=0; i<FrameCount; i++) { Frame *iFrame=FrameList[i]; if (iFrame->RemoveModal(Deleted)) { return; } } if (!Deleted) { DeletedFrame=CurrentFrame; } else { DeletedFrame=Deleted; } }
int Manager::ProcessMouse(MOUSE_EVENT_RECORD *MouseEvent) { // При каптюренной мыши отдаем управление заданному объекту // if (ScreenObject::CaptureMouseObject) // return ScreenObject::CaptureMouseObject->ProcessMouse(MouseEvent); int ret=FALSE; // _D(SysLog(1,"Manager::ProcessMouse()")); if (CurrentFrame) ret=CurrentFrame->ProcessMouse(MouseEvent); // _D(SysLog(L"Manager::ProcessMouse() ret=%i",ret)); _MANAGER(SysLog(-1)); return ret; }
void Manager::ExecuteNonModal(window_ptr_ref NonModal) { _MANAGER(CleverSysLog clv(L"Manager::ExecuteNonModal ()")); if (!NonModal) return; for (;;) { Commit(); if (m_currentWindow!=NonModal || EndLoop) { break; } ProcessMainLoop(); } }
/* $ 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; }
/* $ 29.12.2000 IS Аналог CloseAll, но разрешает продолжение полноценной работы в фаре, если пользователь продолжил редактировать файл. Возвращает TRUE, если все закрыли и можно выходить из фара. */ BOOL Manager::ExitAll() { _MANAGER(CleverSysLog clv(L"Manager::ExitAll()")); for (int i=this->ModalStackCount-1; i>=0; i--) { Frame *iFrame=this->ModalStack[i]; if (!iFrame->GetCanLoseFocus(TRUE)) { int PrevFrameCount=ModalStackCount; iFrame->ProcessKey(KEY_ESC); Commit(); if (PrevFrameCount==ModalStackCount) { return FALSE; } } } for (int i=FrameCount-1; i>=0; i--) { Frame *iFrame=FrameList[i]; if (!iFrame->GetCanLoseFocus(TRUE)) { ActivateFrame(iFrame); Commit(); int PrevFrameCount=FrameCount; iFrame->ProcessKey(KEY_ESC); Commit(); if (PrevFrameCount==FrameCount) { return FALSE; } } } return TRUE; }
int Manager::ProcessKey(DWORD Key) { int ret=FALSE; if (CurrentFrame) { DWORD KeyM=(Key&(~KEY_CTRLMASK)); if (!((KeyM >= KEY_MACRO_BASE && KeyM <= KEY_MACRO_ENDBASE) || (KeyM >= KEY_OP_BASE && KeyM <= KEY_OP_ENDBASE))) // пропустим макро-коды { switch (CurrentFrame->GetType()) { case MODALTYPE_PANELS: { _ALGO(CleverSysLog clv(L"Manager::ProcessKey()")); _ALGO(SysLog(L"Key=%s",_FARKEY_ToName(Key))); #ifndef NO_WRAPPER if (CtrlObject->Cp()->ActivePanel->GetMode() == PLUGIN_PANEL) { PluginHandle *ph=(PluginHandle*)CtrlObject->Cp()->ActivePanel->GetPluginHandle(); if (ph && ph->pPlugin->IsOemPlugin()) if (CtrlObject->Cp()->ActivePanel->SendKeyToPlugin(Key,TRUE)) return TRUE; } #endif // NO_WRAPPER break; } #if 0 case MODALTYPE_VIEWER: //if(((FileViewer*)CurrentFrame)->ProcessViewerInput(FrameManager->GetLastInputRecord())) // return TRUE; break; case MODALTYPE_EDITOR: //if(((FileEditor*)CurrentFrame)->ProcessEditorInput(FrameManager->GetLastInputRecord())) // return TRUE; break; case MODALTYPE_DIALOG: //((Dialog*)CurrentFrame)->CallDlgProc(DN_KEY,((Dialog*)CurrentFrame)->GetDlgFocusPos(),Key); break; case MODALTYPE_VMENU: case MODALTYPE_HELP: case MODALTYPE_COMBOBOX: case MODALTYPE_USER: case MODALTYPE_FINDFOLDER: default: break; #endif } } #if defined(FAR_ALPHA_VERSION) // сей код для проверки исключатор, просьба не трогать :-) if (Key == KEY_CTRLALTAPPS || Key == KEY_RCTRLRALTAPPS || Key == KEY_CTRLRALTAPPS || Key == KEY_RCTRLALTAPPS) { struct __ECODE { NTSTATUS Code; const wchar_t *Name; } ECode[]= { {EXCEPTION_ACCESS_VIOLATION,L"Access Violation (Read)"}, {EXCEPTION_ACCESS_VIOLATION,L"Access Violation (Write)"}, {EXCEPTION_INT_DIVIDE_BY_ZERO,L"Divide by zero"}, {EXCEPTION_ILLEGAL_INSTRUCTION,L"Illegal instruction"}, {EXCEPTION_STACK_OVERFLOW,L"Stack Overflow"}, {EXCEPTION_FLT_DIVIDE_BY_ZERO,L"Floating-point divide by zero"}, {EXCEPTION_BREAKPOINT,L"Breakpoint"}, #ifdef _M_IA64 {EXCEPTION_DATATYPE_MISALIGNMENT,L"Alignment fault (IA64 specific)",}, #endif /* {EXCEPTION_FLT_OVERFLOW,"EXCEPTION_FLT_OVERFLOW"}, {EXCEPTION_SINGLE_STEP,"EXCEPTION_SINGLE_STEP",}, {EXCEPTION_ARRAY_BOUNDS_EXCEEDED,"EXCEPTION_ARRAY_BOUNDS_EXCEEDED",}, {EXCEPTION_FLT_DENORMAL_OPERAND,"EXCEPTION_FLT_DENORMAL_OPERAND",}, {EXCEPTION_FLT_INEXACT_RESULT,"EXCEPTION_FLT_INEXACT_RESULT",}, {EXCEPTION_FLT_INVALID_OPERATION,"EXCEPTION_FLT_INVALID_OPERATION",}, {EXCEPTION_FLT_STACK_CHECK,"EXCEPTION_FLT_STACK_CHECK",}, {EXCEPTION_FLT_UNDERFLOW,"EXCEPTION_FLT_UNDERFLOW",}, {EXCEPTION_INT_OVERFLOW,"EXCEPTION_INT_OVERFLOW",0}, {EXCEPTION_PRIV_INSTRUCTION,"EXCEPTION_PRIV_INSTRUCTION",0}, {EXCEPTION_IN_PAGE_ERROR,"EXCEPTION_IN_PAGE_ERROR",0}, {EXCEPTION_NONCONTINUABLE_EXCEPTION,"EXCEPTION_NONCONTINUABLE_EXCEPTION",0}, {EXCEPTION_INVALID_DISPOSITION,"EXCEPTION_INVALID_DISPOSITION",0}, {EXCEPTION_GUARD_PAGE,"EXCEPTION_GUARD_PAGE",0}, {EXCEPTION_INVALID_HANDLE,"EXCEPTION_INVALID_HANDLE",0}, */ }; static union { int i; int *iptr; double d; } zero_const; //, refers; zero_const.i=0L; MenuItemEx ModalMenuItem; ModalMenuItem.Clear(); VMenu2 ModalMenu(L"Test Exceptions",nullptr,0,ScrY-4); ModalMenu.SetFlags(VMENU_WRAPMODE); ModalMenu.SetPosition(-1,-1,0,0); for (size_t I=0; I<ARRAYSIZE(ECode); I++) { ModalMenuItem.strName = ECode[I].Name; ModalMenu.AddItem(&ModalMenuItem); } int ExitCode=ModalMenu.Run(); switch (ExitCode) { case -1: return TRUE; case 0: zero_const.i=*zero_const.iptr; break; case 1: *zero_const.iptr = 0; break; case 2: zero_const.i=1/zero_const.i; break; case 3: #if defined(_MSC_VER) #ifdef _M_IA64 #define __REG_IA64_IntR0 1024 __setReg(__REG_IA64_IntR0, 666); #else __ud2(); #endif #elif defined(__GNUC__) asm("ud2"); #else #error "Unsupported compiler" #endif break; case 4: Test_EXCEPTION_STACK_OVERFLOW(nullptr); break; case 5: //refers.d = 1.0/zero_const.d; break; case 6: DebugBreak(); break; #ifdef _M_IA64 case 7: { BYTE temp[10]={}; double* val; val = (double*)(&temp[3]); printf("%lf\n", *val); } #endif } Message(MSG_WARNING, 1, L"Test Exceptions failed", L"", ECode[ExitCode].Name, L"", MSG(MOk)); return TRUE; } #endif /*** БЛОК ПРИВЕЛЕГИРОВАННЫХ КЛАВИШ ! ***/ /*** КОТОРЫЕ НЕЛЬЗЯ НАМАКРОСИТЬ ***/ switch (Key) { case KEY_ALT|KEY_NUMPAD0: case KEY_RALT|KEY_NUMPAD0: case KEY_ALTINS: case KEY_RALTINS: { RunGraber(); return TRUE; } case KEY_CONSOLE_BUFFER_RESIZE: Sleep(1); ResizeAllFrame(); return TRUE; } /*** А вот здесь - все остальное! ***/ if (!Global->IsProcessAssignMacroKey) // в любом случае если кому-то не нужны все клавиши или { bool scrollable = false; if ( Global->Opt->WindowMode ) { int frame_type = CurrentFrame->GetType(); scrollable = frame_type != MODALTYPE_EDITOR && frame_type != MODALTYPE_VIEWER; }; switch (Key) { // <Удалить после появления макрофункции Scroll> case KEY_CTRLALTUP: case KEY_RCTRLRALTUP: case KEY_CTRLRALTUP: case KEY_RCTRLALTUP: if(scrollable) { Global->Console->ScrollWindow(-1); return TRUE; } break; case KEY_CTRLALTDOWN: case KEY_RCTRLRALTDOWN: case KEY_CTRLRALTDOWN: case KEY_RCTRLALTDOWN: if(scrollable) { Global->Console->ScrollWindow(1); return TRUE; } break; case KEY_CTRLALTPGUP: case KEY_RCTRLRALTPGUP: case KEY_CTRLRALTPGUP: case KEY_RCTRLALTPGUP: if(scrollable) { Global->Console->ScrollWindow(-ScrY); return TRUE; } break; case KEY_CTRLALTHOME: case KEY_RCTRLRALTHOME: case KEY_CTRLRALTHOME: case KEY_RCTRLALTHOME: if(scrollable) { while(Global->Console->ScrollWindow(-ScrY)); return TRUE; } break; case KEY_CTRLALTPGDN: case KEY_RCTRLRALTPGDN: case KEY_CTRLRALTPGDN: case KEY_RCTRLALTPGDN: if(scrollable) { Global->Console->ScrollWindow(ScrY); return TRUE; } break; case KEY_CTRLALTEND: case KEY_RCTRLRALTEND: case KEY_CTRLRALTEND: case KEY_RCTRLALTEND: if(scrollable) { while(Global->Console->ScrollWindow(ScrY)); return TRUE; } break; // </Удалить после появления макрофункции Scroll> case KEY_CTRLW: case KEY_RCTRLW: ShowProcessList(); return TRUE; case KEY_F11: PluginsMenu(); FrameManager->RefreshFrame(); //_MANAGER(SysLog(-1)); return TRUE; case KEY_ALTF9: case KEY_RALTF9: { //_MANAGER(SysLog(1,"Manager::ProcessKey, KEY_ALTF9 pressed...")); Sleep(1); SetVideoMode(); Sleep(1); /* В процессе исполнения Alt-F9 (в нормальном режиме) в очередь консоли попадает WINDOW_BUFFER_SIZE_EVENT, формируется в ChangeVideoMode(). В режиме исполнения макросов ЭТО не происходит по вполне понятным причинам. */ if (CtrlObject->Macro.IsExecuting()) { int PScrX=ScrX; int PScrY=ScrY; Sleep(1); GetVideoMode(CurSize); if (PScrX+1 == CurSize.X && PScrY+1 == CurSize.Y) { //_MANAGER(SysLog(-1,"GetInputRecord(WINDOW_BUFFER_SIZE_EVENT); return KEY_NONE")); return TRUE; } else { PrevScrX=PScrX; PrevScrY=PScrY; //_MANAGER(SysLog(-1,"GetInputRecord(WINDOW_BUFFER_SIZE_EVENT); return KEY_CONSOLE_BUFFER_RESIZE")); Sleep(1); return ProcessKey(KEY_CONSOLE_BUFFER_RESIZE); } } //_MANAGER(SysLog(-1)); return TRUE; } case KEY_F12: { int TypeFrame=FrameManager->GetCurrentFrame()->GetType(); if (TypeFrame != MODALTYPE_HELP && TypeFrame != MODALTYPE_DIALOG) { DeactivateFrame(FrameMenu(),0); //_MANAGER(SysLog(-1)); return TRUE; } break; // отдадим F12 дальше по цепочке } case KEY_CTRLALTSHIFTPRESS: case KEY_RCTRLALTSHIFTPRESS: { if (!(Global->Opt->CASRule&1) && Key == KEY_CTRLALTSHIFTPRESS) break; if (!(Global->Opt->CASRule&2) && Key == KEY_RCTRLALTSHIFTPRESS) break; if (!Global->Opt->OnlyEditorViewerUsed) { if (CurrentFrame->FastHide()) { int isPanelFocus=CurrentFrame->GetType() == MODALTYPE_PANELS; if (isPanelFocus) { int LeftVisible=CtrlObject->Cp()->LeftPanel->IsVisible(); int RightVisible=CtrlObject->Cp()->RightPanel->IsVisible(); int CmdLineVisible=CtrlObject->CmdLine->IsVisible(); int KeyBarVisible=CtrlObject->Cp()->MainKeyBar.IsVisible(); CtrlObject->CmdLine->ShowBackground(); CtrlObject->Cp()->LeftPanel->Hide0(); CtrlObject->Cp()->RightPanel->Hide0(); switch (Global->Opt->PanelCtrlAltShiftRule) { case 0: CtrlObject->CmdLine->Show(); CtrlObject->Cp()->MainKeyBar.Show(); break; case 1: CtrlObject->Cp()->MainKeyBar.Show(); break; } WaitKey(Key==KEY_CTRLALTSHIFTPRESS?KEY_CTRLALTSHIFTRELEASE:KEY_RCTRLALTSHIFTRELEASE); if (LeftVisible) CtrlObject->Cp()->LeftPanel->Show(); if (RightVisible) CtrlObject->Cp()->RightPanel->Show(); if (CmdLineVisible) CtrlObject->CmdLine->Show(); if (KeyBarVisible) CtrlObject->Cp()->MainKeyBar.Show(); } else { ImmediateHide(); WaitKey(Key==KEY_CTRLALTSHIFTPRESS?KEY_CTRLALTSHIFTRELEASE:KEY_RCTRLALTSHIFTRELEASE); } FrameManager->RefreshFrame(); } return TRUE; } break; } case KEY_CTRLTAB: case KEY_RCTRLTAB: case KEY_CTRLSHIFTTAB: case KEY_RCTRLSHIFTTAB: if (CurrentFrame->GetCanLoseFocus()) { DeactivateFrame(CurrentFrame,(Key==KEY_CTRLTAB||Key==KEY_RCTRLTAB)?1:-1); } _MANAGER(SysLog(-1)); return TRUE; } } CurrentFrame->UpdateKeyBar(); CurrentFrame->ProcessKey(Key); } _MANAGER(SysLog(-1)); return ret; }
void Manager::SwitchToPanels() { _MANAGER(CleverSysLog clv(L"Manager::SwitchToPanels()")); ActivateFrame(0); }
void Manager::ExecuteFrame(Frame *Executed) { _MANAGER(CleverSysLog clv(L"Manager::ExecuteFrame(Frame *Executed)")); _MANAGER(SysLog(L"Executed=%p",Executed)); ExecutedFrame=Executed; }
void Manager::RefreshFrame(int Index) { _MANAGER(CleverSysLog clv(L"Manager::RefreshFrame(int Index)")); _MANAGER(SysLog(L"Index=%d",Index)); RefreshFrame((*this)[Index]); }
void Manager::ActivateFrame(int Index) { _MANAGER(CleverSysLog clv(L"Manager::ActivateFrame(int Index)")); _MANAGER(SysLog(L"Index=%i",Index)); ActivateFrame((*this)[Index]); }