FileViewer::FileViewer(const wchar_t *Name,int EnableSwitch,int DisableHistory, const wchar_t *Title, int X1,int Y1,int X2,int Y2,UINT aCodePage): View(false,aCodePage) { _OT(SysLog(L"[%p] FileViewer::FileViewer(II variant...)", this)); DisableEdit=TRUE; if (X1 < 0) X1=0; if (X2 < 0 || X2 > ScrX) X2=ScrX; if (Y1 < 0) Y1=0; if (Y2 < 0 || Y2 > ScrY) Y2=ScrY; if (X1 >= X2) { X1=0; X2=ScrX; } if (Y1 >= Y2) { Y1=0; Y2=ScrY; } SetPosition(X1,Y1,X2,Y2); FullScreen=(!X1 && !Y1 && X2==ScrX && Y2==ScrY); View.SetTitle(Title); Init(Name,EnableSwitch,DisableHistory,-1,L"",nullptr,FALSE); }
Panel::Panel(window_ptr Owner): ScreenObject(std::move(Owner)) { _OT(SysLog(L"[%p] Panel::Panel()", this)); SrcDragPanel=nullptr; DragX=DragY=-1; };
void FilePanels::ResizeConsole() { Frame::ResizeConsole(); CtrlObject->CmdLine->ResizeConsole(); MainKeyBar.ResizeConsole(); TopMenuBar.ResizeConsole(); SetScreenPosition(); _OT(SysLog(L"[%p] FilePanels::ResizeConsole() {%d, %d - %d, %d}", this,X1,Y1,X2,Y2)); }
void FilePanels::SetScreenPosition() { _OT(SysLog(L"[%p] FilePanels::SetScreenPosition() {%d, %d - %d, %d}", this,X1,Y1,X2,Y2)); CtrlObject->CmdLine->SetPosition(0,ScrY-(Opt.ShowKeyBar),ScrX-1,ScrY-(Opt.ShowKeyBar)); TopMenuBar.SetPosition(0,0,ScrX,0); MainKeyBar.SetPosition(0,ScrY,ScrX,ScrY); SetPanelPositions(LeftPanel->IsFullScreen(),RightPanel->IsFullScreen()); SetPosition(0,0,ScrX,ScrY); }
void GetVideoMode(COORD& Size) { //чтоб решить баг винды приводящий к появлению скролов и т.п. после потери фокуса SaveConsoleWindowRect(); Size.X=0; Size.Y=0; Console().GetSize(Size); ScrX=Size.X-1; ScrY=Size.Y-1; assert(ScrX>0); assert(ScrY>0); if (PrevScrX == -1) PrevScrX=ScrX; if (PrevScrY == -1) PrevScrY=ScrY; _OT(SysLog(L"ScrX=%d ScrY=%d",ScrX,ScrY)); Global->ScrBuf->AllocBuf(Size.Y, Size.X); _OT(ViewConsoleInfo()); }
SaveScreen::SaveScreen(int X1,int Y1,int X2,int Y2) { _OT(SysLog(L"[%p] SaveScreen::SaveScreen(X1=%i,Y1=%i,X2=%i,Y2=%i)",this,X1,Y1,X2,Y2)); X1=std::min(static_cast<int>(ScrX), std::max(0, X1)); X2=std::min(static_cast<int>(ScrX), std::max(0, X2)); Y1=std::min(static_cast<int>(ScrY), std::max(0, Y1)); Y2=std::min(static_cast<int>(ScrY), std::max(0, Y2)); SaveArea(X1,Y1,X2,Y2); }
void FileViewer::OnDestroy() { _OT(SysLog(L"[%p] FileViewer::OnDestroy()",this)); if (!DisableHistory && (CtrlObject->Cp()->ActivePanel || StrCmp(strName, L"-"))) { string strFullFileName; View.GetFileName(strFullFileName); CtrlObject->ViewHistory->AddToHistory(strFullFileName,0); } }
FileViewer::FileViewer(const wchar_t *Name,int EnableSwitch,int DisableHistory, int DisableEdit,long ViewStartPos,const wchar_t *PluginData, NamesList *ViewNamesList,int ToSaveAs,UINT aCodePage): View(false,aCodePage), FullScreen(TRUE), DisableEdit(DisableEdit) { _OT(SysLog(L"[%p] FileViewer::FileViewer(I variant...)", this)); SetPosition(0,0,ScrX,ScrY); Init(Name,EnableSwitch,DisableHistory,ViewStartPos,PluginData,ViewNamesList,ToSaveAs); }
void GetVideoMode(COORD& Size) { //чтоб решить баг винды приводящий к появлению скролов и т.п. после потери фокуса SaveConsoleWindowRect(); Size.X=0; Size.Y=0; Console.GetSize(Size); ScrX=Size.X-1; ScrY=Size.Y-1; assert(ScrX>0); assert(ScrY>0); WidthNameForMessage=(ScrX*38)/100+1; if (PrevScrX == -1) PrevScrX=ScrX; if (PrevScrY == -1) PrevScrY=ScrY; _OT(SysLog(L"ScrX=%d ScrY=%d",ScrX,ScrY)); ScrBuf.AllocBuf(Size.X,Size.Y); _OT(ViewConsoleInfo()); }
KeyBar::KeyBar(): Owner(nullptr), AltState(0), CtrlState(0), ShiftState(0), DisableMask(0), RegReaded(FALSE) { _OT(SysLog(L"[%p] KeyBar::KeyBar()", this)); ClearArray(KeyCounts); ClearArray(KeyTitles); ClearArray(KeyTitlesCustom); }
Frame::Frame(): FrameToBack(nullptr), NextModal(nullptr), PrevModal(nullptr), DynamicallyBorn(TRUE), CanLoseFocus(FALSE), ExitCode(-1), KeyBarVisible(0), TitleBarVisible(0), FrameKeyBar(nullptr), MacroMode(0) { _OT(SysLog(L"[%p] Frame::Frame()", this)); }
window::window(): ScreenObjectWithShadow(nullptr), m_ID(windowID++), m_CanLoseFocus(FALSE), m_ExitCode(-1), m_KeyBarVisible(0), m_TitleBarVisible(0), m_windowKeyBar(nullptr), m_Deleting(false), m_BlockCounter(0), m_MacroArea(MACROAREA_OTHER) { _OT(SysLog(L"[%p] window::window()", this)); }
void CommandLine::DisplayObject() { _OT(SysLog(L"[%p] CommandLine::DisplayObject()",this)); const auto CurLength = DrawPrompt(); CmdStr.SetObjectColor(COL_COMMANDLINE,COL_COMMANDLINESELECTED); CmdStr.SetPosition(m_X1 + static_cast<int>(CurLength), m_Y1, m_X2, m_Y2); CmdStr.Show(); GotoXY(m_X2+1,m_Y1); SetColor(COL_COMMANDLINEPREFIX); Text(L'\x2191'); // up arrow }
void FileList::DisplayObject() { Height=Y2-Y1-4+!Opt.ShowColumnTitles+(Opt.ShowPanelStatus ? 0:2); _OT(SysLog(L"[%p] FileList::DisplayObject()",this)); if (UpdateRequired) { UpdateRequired=FALSE; Update(UpdateRequiredMode); } ProcessPluginCommand(); ShowFileList(FALSE); }
FilePanels::~FilePanels() { _OT(SysLog(L"[%p] FilePanels::~FilePanels()", this)); if (LastLeftFilePanel!=LeftPanel && LastLeftFilePanel!=RightPanel) DeletePanel(LastLeftFilePanel); if (LastRightFilePanel!=LeftPanel && LastRightFilePanel!=RightPanel) DeletePanel(LastRightFilePanel); DeletePanel(LeftPanel); LeftPanel=nullptr; DeletePanel(RightPanel); RightPanel=nullptr; }
FilePanels::FilePanels(): LastLeftFilePanel(0), LastRightFilePanel(0), LeftPanel(CreatePanel(Opt.LeftPanel.Type)), RightPanel(CreatePanel(Opt.RightPanel.Type)), ActivePanel(0), LastLeftType(0), LastRightType(0), LeftStateBeforeHide(0), RightStateBeforeHide(0) { _OT(SysLog(L"[%p] FilePanels::FilePanels()", this)); MacroMode = MACRO_SHELL; KeyBarVisible = Opt.ShowKeyBar; // SetKeyBar(&MainKeyBar); // _D(SysLog(L"MainKeyBar=0x%p",&MainKeyBar)); }
void CommandLine::DisplayObject() { _OT(SysLog(L"[%p] CommandLine::DisplayObject()",this)); auto PromptList = GetPrompt(); size_t MaxLength = PromptSize*ObjWidth()/100; size_t CurLength = 0; GotoXY(X1,Y1); std::for_each(CONST_RANGE(PromptList, i) { SetColor(i.second); string str(i.first); if(CurLength + str.size() > MaxLength) TruncPathStr(str, std::max(0, static_cast<int>(MaxLength - CurLength))); Text(str); CurLength += str.size(); });
FileViewer::FileViewer( const wchar_t *Name,int EnableSwitch,int DisableHistory, int DisableEdit,__int64 ViewStartPos,const wchar_t *PluginData, NamesList *ViewNamesList,int ToSaveAs,UINT aCodePage, const wchar_t *Title, int DeleteOnClose) : View(false,aCodePage), FullScreen(true), DisableEdit(DisableEdit), delete_on_close(0) { _OT(SysLog(L"[%p] FileViewer::FileViewer(I variant...)", this)); str_title = (Title && *Title ? Title : L""); if (!str_title.IsEmpty()) View.SetTitle(Title); if (DeleteOnClose) { delete_on_close = DeleteOnClose == 1 ? 1 : 2; SetTempViewName(Name, DeleteOnClose == 1 ? TRUE : FALSE); } SetPosition(0,0,ScrX,ScrY); Init(Name,EnableSwitch,DisableHistory,ViewStartPos,PluginData,ViewNamesList,ToSaveAs); }
void FilePanels::OnChangeFocus(int f) { _OT(SysLog(L"FilePanels::OnChangeFocus(%i)",f)); /* $ 20.06.2001 tran баг с отрисовкой при копировании и удалении не учитывался LockRefreshCount */ if (f) { /*$ 22.06.2001 SKV + update панелей при получении фокуса */ CtrlObject->Cp()->GetAnotherPanel(ActivePanel)->UpdateIfChanged(UIC_UPDATE_FORCE_NOTIFICATION); ActivePanel->UpdateIfChanged(UIC_UPDATE_FORCE_NOTIFICATION); /* $ 13.04.2002 KM ! ??? Я не понял зачем здесь Redraw, если Redraw вызывается следом во Frame::OnChangeFocus. */ // Redraw(); ActivePanel->SetCurPath(); Frame::OnChangeFocus(1); } }
Panel::~Panel() { _OT(SysLog(L"[%p] Panel::~Panel()", this)); EndDrag(); }
FileViewer::~FileViewer() { _OT(SysLog(L"[%p] ~FileViewer::FileViewer()",this)); }
int FarAppMain(int argc, char **argv) { Opt.IsUserAdmin = (geteuid()==0); _OT(SysLog(L"[[[[[[[[New Session of FAR]]]]]]]]]")); FARString strEditName; FARString strViewName; FARString DestNames[2]; int StartLine=-1,StartChar=-1; int CntDestName=0; // количество параметров-имен каталогов /*$ 18.04.2002 SKV Попользуем floating point что бы проинициализировался vc-ный fprtl. */ #ifdef _MSC_VER float x=1.1f; wchar_t buf[15]; swprintf(buf,L"%f",x); #endif // если под дебагером, то отключаем исключения однозначно, // иначе - смотря что указал юзвер. #if defined(_DEBUGEXC) Opt.ExceptRules=-1; #else Opt.ExceptRules=-1;//IsDebuggerPresent()?0:-1; #endif // Opt.ExceptRules=-1; #ifdef __GNUC__ Opt.ExceptRules=0; #endif //_SVS(SysLog(L"Opt.ExceptRules=%d",Opt.ExceptRules)); SetRegRootKey(HKEY_CURRENT_USER); Opt.strRegRoot = L"Software/Far2"; // По умолчанию - брать плагины из основного каталога Opt.LoadPlug.MainPluginDir=TRUE; Opt.LoadPlug.PluginsPersonal=TRUE; Opt.LoadPlug.PluginsCacheOnly=FALSE; g_strFarPath = g_strFarModuleName; bool translated = TranslateFarString<TranslateInstallPath_Bin2Share>(g_strFarPath); CutToSlash(g_strFarPath, true); if (translated) { // /usr/bin/something -> /usr/share/far2l g_strFarPath+= L"/" FAR_BASENAME; } WINPORT(SetEnvironmentVariable)(L"FARHOME", g_strFarPath); AddEndSlash(g_strFarPath); // don't inherit from parent process in any case WINPORT(SetEnvironmentVariable)(L"FARUSER", nullptr); WINPORT(SetEnvironmentVariable)(L"FARADMINMODE", Opt.IsUserAdmin?L"1":nullptr); // макросы не дисаблим Opt.Macro.DisableMacro=0; for (int I=1; I<argc; I++) { std::wstring arg_w = MB2Wide(argv[I]); if ((arg_w[0]==L'/' || arg_w[0]==L'-') && arg_w[1]) { switch (Upper(arg_w[1])) { case L'A': switch (Upper(arg_w[2])) { case 0: Opt.CleanAscii=TRUE; break; case L'G': if (!arg_w[3]) Opt.NoGraphics=TRUE; break; } break; case L'E': if (iswdigit(arg_w[2])) { StartLine=_wtoi((const wchar_t *)&arg_w[2]); wchar_t *ChPtr=wcschr((wchar_t *)&arg_w[2],L':'); if (ChPtr) StartChar=_wtoi(ChPtr+1); } if (I+1<argc) { strEditName = argv[I+1]; I++; } break; case L'V': if (I+1<argc) { strViewName = argv[I+1]; I++; } break; case L'M': switch (Upper(arg_w[2])) { case 0: Opt.Macro.DisableMacro|=MDOL_ALL; break; case L'A': if (!arg_w[3]) Opt.Macro.DisableMacro|=MDOL_AUTOSTART; break; } break; case L'I': Opt.SmallIcon=TRUE; break; case L'X': Opt.ExceptRules=0; #if defined(_DEBUGEXC) if (Upper(arg_w[2])==L'D' && !arg_w[3]) Opt.ExceptRules=1; #endif break; case L'C': if (Upper(arg_w[2])==L'O' && !arg_w[3]) { Opt.LoadPlug.PluginsCacheOnly=TRUE; Opt.LoadPlug.PluginsPersonal=FALSE; } break; case L'?': case L'H': ControlObject::ShowCopyright(1); show_help(); return 0; #ifdef DIRECT_RT case L'D': if (Upper(arg_w[2])==L'O' && !arg_w[3]) DirectRT=1; break; #endif case L'W': { Opt.WindowMode=TRUE; } break; } } else // простые параметры. Их может быть max две штукА. { if (CntDestName < 2) { if (IsPluginPrefixPath((const wchar_t *)arg_w.c_str())) { DestNames[CntDestName++] = (const wchar_t *)arg_w.c_str(); } else { apiExpandEnvironmentStrings((const wchar_t *)arg_w.c_str(), DestNames[CntDestName]); Unquote(DestNames[CntDestName]); ConvertNameToFull(DestNames[CntDestName],DestNames[CntDestName]); if (apiGetFileAttributes(DestNames[CntDestName]) != INVALID_FILE_ATTRIBUTES) CntDestName++; //??? } } } } //Настройка OEM сортировки. Должна быть после CopyGlobalSettings и перед InitKeysArray! //LocalUpperInit(); //InitLCIDSort(); //Инициализация массива клавиш. Должна быть после CopyGlobalSettings! InitKeysArray(); //WaitForInputIdle(GetCurrentProcess(),0); std::set_new_handler(nullptr); if (!Opt.LoadPlug.MainPluginDir) //если есть ключ /p то он отменяет /co Opt.LoadPlug.PluginsCacheOnly=FALSE; if (Opt.LoadPlug.PluginsCacheOnly) { Opt.LoadPlug.strCustomPluginsPath.Clear(); Opt.LoadPlug.MainPluginDir=FALSE; Opt.LoadPlug.PluginsPersonal=FALSE; } InitConsole(); GetRegKey(L"Language",L"Main",Opt.strLanguage,L"English"); if (!Lang.Init(g_strFarPath,true,MNewFileName)) { ControlObject::ShowCopyright(1); LPCWSTR LngMsg; switch(Lang.GetLastError()) { case LERROR_BAD_FILE: LngMsg = L"\nError: language data is incorrect or damaged.\n\nPress any key to exit..."; break; case LERROR_FILE_NOT_FOUND: LngMsg = L"\nError: cannot find language data.\n\nPress any key to exit..."; break; default: LngMsg = L"\nError: cannot load language data.\n\nPress any key to exit..."; break; } Console.Write(LngMsg,StrLength(LngMsg)); Console.FlushInputBuffer(); WaitKey(); // А стоит ли ожидать клавишу??? Стоит return 1; } WINPORT(SetEnvironmentVariable)(L"FARLANG",Opt.strLanguage); SetHighlighting(); initMacroVarTable(1); if (Opt.ExceptRules == -1) { GetRegKey(L"System",L"ExceptRules",Opt.ExceptRules,1); } //ErrorMode=SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX|(Opt.ExceptRules?SEM_NOGPFAULTERRORBOX:0)|(GetRegKey(L"System/Exception", L"IgnoreDataAlignmentFaults", 0)?SEM_NOALIGNMENTFAULTEXCEPT:0); //SetErrorMode(ErrorMode); int Result=MainProcessSEH(strEditName,strViewName,DestNames[0],DestNames[1],StartLine,StartChar); EmptyInternalClipboard(); doneMacroVarTable(1); VTShell_Shutdown();//ensure VTShell deinitialized before statics destructors called _OT(SysLog(L"[[[[[Exit of FAR]]]]]]]]]")); return Result; }
SaveScreen::~SaveScreen() { _OT(SysLog(L"[%p] SaveScreen::~SaveScreen()", this)); RestoreArea(); }
SaveScreen::SaveScreen(int X1,int Y1,int X2,int Y2) { fix_coordinates(X1, Y1, X2, Y2); _OT(SysLog(L"[%p] SaveScreen::SaveScreen(X1=%i,Y1=%i,X2=%i,Y2=%i)",this,X1,Y1,X2,Y2)); SaveArea(X1,Y1,X2,Y2); }
SaveScreen::SaveScreen() { _OT(SysLog(L"[%p] SaveScreen::SaveScreen()", this)); SaveArea(0,0,ScrX,ScrY); }
window::~window() { _OT(SysLog(L"[%p] window::~window()", this)); }
Frame::~Frame() { _OT(SysLog(L"[%p] Frame::~Frame()", this)); DestroyAllModal(); // xf_free(ModalStack); }
void FilePanels::DisplayObject() { // if ( !Focus ) // return; _OT(SysLog(L"[%p] FilePanels::Redraw() {%d, %d - %d, %d}", this,X1,Y1,X2,Y2)); CtrlObject->CmdLine->ShowBackground(); if (Opt.ShowMenuBar) CtrlObject->TopMenuBar->Show(); CtrlObject->CmdLine->Show(); if (Opt.ShowKeyBar) MainKeyBar.Show(); else if (MainKeyBar.IsVisible()) MainKeyBar.Hide(); KeyBarVisible=Opt.ShowKeyBar; #if 1 if (LeftPanel->IsVisible()) LeftPanel->Show(); if (RightPanel->IsVisible()) RightPanel->Show(); #else Panel *PassivePanel=nullptr; int PassiveIsLeftFlag=TRUE; if (Opt.LeftPanel.Focus) { ActivePanel=LeftPanel; PassivePanel=RightPanel; PassiveIsLeftFlag=FALSE; } else { ActivePanel=RightPanel; PassivePanel=LeftPanel; PassiveIsLeftFlag=TRUE; } //! Вначале "показываем" пассивную панель if (PassiveIsLeftFlag) { if (Opt.LeftPanel.Visible) { LeftPanel->Show(); } if (Opt.RightPanel.Visible) { RightPanel->Show(); } } else { if (Opt.RightPanel.Visible) { RightPanel->Show(); } if (Opt.LeftPanel.Visible) { LeftPanel->Show(); } } #endif }