From 685274a356f8cee3655bf70a32523dcccbd7adab Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Sat, 26 Jan 2019 01:37:22 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=90=D0=A1=D0=A2=D0=A0=D0=9E=D0=99?= =?UTF-8?q?=D0=9A=D0=98=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE.=20=D0=A2=D0=B5?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BE=D0=BD=D0=B0=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D1=91=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=201=20=D1=80=D0=B0=D0=B7=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B5.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E?= =?UTF-8?q?=D1=89=D0=B8=D0=B9=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9.?= =?UTF-8?q?=20=D0=9A=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20=D1=81=D0=B1=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=B0=20=D0=BA=20=D0=B4=D0=B5=D1=84=D0=BE=D0=BB?= =?UTF-8?q?=D1=82=D1=83=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?.=20=D0=A7=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=B8=D0=B7=20abtool.ini=20(?= =?UTF-8?q?=D0=BA=D1=80=D0=BE=D0=BC=D0=B5=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9).=20=D0=A1=D0=B1=D1=80?= =?UTF-8?q?=D0=BE=D1=81=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BA=20=D0=B0=D0=BA=D1=82=D1=83=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=BC=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=D0=BC=20=D0=BF=D1=80=D0=B8=20=D0=BA=D0=B0?= =?UTF-8?q?=D0=B6=D0=B4=D0=BE=D0=BC=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B5?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA.=20=D0=A1=D1=87=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8=20=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8=20uOp?= =?UTF-8?q?tions.=20=D0=A2=D0=B0=D0=BA=D0=B8=D0=BC=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BC:=20-=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D1=8B=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=20=D1=83=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC=20dMain=20=D1=80=D0=B0=D0=B4=D0=B8=20=D0=B4=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=83=D0=BF=D0=B0=20=D0=BA=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=D0=BC=20-=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D1=82?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B2=D1=8B=D0=B7=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20TOptions,=20=D0=B0=20=D1=81=D0=B0=D0=BC=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=20=D0=BD=D0=B8=D0=B3=D0=B4=D0=B5?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F?= =?UTF-8?q?=D1=82=D1=8C:=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=20GlobalOp?= =?UTF-8?q?tions=20=D1=83=D0=B6=D0=B5=20=D0=B1=D1=83=D0=B4=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B5=D0=BD=20=D0=9D=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20dMain.GetLocalesIniFileList=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B9.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20ini-=D1=84=D0=B0=D0=B9=D0=BB=D1=8B.=20=D0=9C=D0=B5?= =?UTF-8?q?=D0=BB=D0=BE=D1=87=D0=B8=20=D0=BF=D0=BE=20=D0=BE=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D1=8E=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ABTool.lpi | 8 +- ABTool.lpr | 3 +- ABTool/Languages/DEBUG.lng | 187 ++++++++++++++++++ ABTool/Languages/English.lng | 189 ++++++++++++++++++ ABTool/Languages/Russian.lng | 185 +++++++++++++++++ ABTool/abtool.ini | 31 ++- dmain.lfm | 36 ++++ dmain.pas | 119 ++++++----- fmain.lfm | 4 +- foptions.lfm | 172 +++++++++++----- foptions.pas | 77 ++++++-- ufileutils.pas | 73 ++++--- uoptions.pas | 373 +++++++++++++++++++++++++++++++++++ upackage.pas | 44 ++--- upackagelist.pas | 18 +- 15 files changed, 1325 insertions(+), 194 deletions(-) create mode 100644 ABTool/Languages/DEBUG.lng create mode 100644 ABTool/Languages/English.lng create mode 100644 ABTool/Languages/Russian.lng create mode 100644 uoptions.pas diff --git a/ABTool.lpi b/ABTool.lpi index 619bf6b..e740634 100644 --- a/ABTool.lpi +++ b/ABTool.lpi @@ -75,7 +75,7 @@ - + @@ -120,9 +120,15 @@ + + + + + + diff --git a/ABTool.lpr b/ABTool.lpr index 8d09071..d4864ec 100644 --- a/ABTool.lpr +++ b/ABTool.lpr @@ -13,7 +13,8 @@ uses {$IFDEF UNIX} {$IFDEF UseCThreads} uPackage, uPackageUtils, uPackageList, - fOptions; + fOptions, + uOptions; {$R *.res} diff --git a/ABTool/Languages/DEBUG.lng b/ABTool/Languages/DEBUG.lng new file mode 100644 index 0000000..549e162 --- /dev/null +++ b/ABTool/Languages/DEBUG.lng @@ -0,0 +1,187 @@ +; Author: AnthonyAxenov, anthonysoprano.93@gmail.com, abtool.ru +; Date: 20:11 20.05.2015 +[Info] +; Language name - required +Name=DEBUG +; ABTool version required +ABToolVer=0.8.0 + +[Main] +; Bidirectional mode: +; = 1 - Left to right +; = 2 - Right to left with right alignment +; = 3 - Right to left with left alignment +; = 4 - Right to left with right alignment only for reading (not typing) +Bidi=1 + +[SplashForm] +; +; Splash form +; +SplashForm_Lab_Loading=SplashForm_Lab_Loading + +[MainForm] +; +; Main form +; +;Tabs +MainForm_Tab_Soft=MainForm_Tab_Soft +MainForm_Tab_Tools=MainForm_Tab_Tools +MainForm_Tab_System=MainForm_Tab_System +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysInfo=MainForm_Tab_SysInfo +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysCare=MainForm_Tab_SysCare +MainForm_Tab_Log=MainForm_Tab_Log + +;Common buttons on toolbars +MainForm_Btn_List=MainForm_Btn_List +MainForm_Mnb_ExpandAll=MainForm_Mnb_ExpandAll +MainForm_Mnb_CollapseAll=MainForm_Mnb_CollapseAll +MainForm_Btn_Search=MainForm_Btn_Search +MainForm_Mnb_PackDefault=MainForm_Mnb_PackDefault +MainForm_Mnb_PacksEdit=MainForm_Mnb_PacksEdit + +;"Programms" tab +MainForm_Btn_SoftCheck=MainForm_Btn_SoftCheck +MainForm_Mnb_SoftCheckAll=MainForm_Mnb_SoftCheckAll +MainForm_Mnb_SoftCheckNone=MainForm_Mnb_SoftCheckNone +MainForm_Btn_SoftPackages=MainForm_Btn_SoftPackages +MainForm_Btn_SoftStart=MainForm_Btn_SoftStart + +;"Utilities" tab +MainForm_Btn_ToolsPackages=MainForm_Btn_ToolsPackages + +;"System" tab +MainForm_Lab_System=MainForm_Lab_System +MainForm_SInfo_RowOSVer=MainForm_SInfo_RowPCName +MainForm_SInfo_RowPCName=MainForm_SInfo_RowPCName +MainForm_SInfo_RowUserName=MainForm_SInfo_RowUserName +MainForm_Lab_UserVars=MainForm_Lab_UserVars +MainForm_Vars_Col1=MainForm_Vars_Col1 +MainForm_Vars_Col2=MainForm_Vars_Col2 +MainForm_Lab_SysVars=MainForm_Lab_SysVars +MainForm_Btn_SysInfoRefresh=MainForm_Btn_SysInfoRefresh +MainForm_Btn_VarsEdit=MainForm_Btn_VarsEdit +MainForm_Mnb_CopyVarValue=MainForm_Mnb_CopyVarValue +MainForm_Mnb_CopyVarLine=MainForm_Mnb_CopyVarLine +MainForm_Mnb_CopyVarAll=MainForm_Mnb_CopyVarAll +MainForm_Grp_Power=MainForm_Grp_Power +MainForm_Btn_PowerOff=MainForm_Btn_PowerOff +MainForm_Btn_Reboot=MainForm_Btn_Reboot + +;"Log" tab +MainForm_Btn_LogClear=MainForm_Btn_LogClear +MainForm_Btn_LogSave=MainForm_Btn_LogSave + +;Other strings in this window +;MainForm_Caption=ABTool Debugging +MainForm_Btn_Options=MainForm_Btn_Options + +[OptionsForm] +; +; Options form +; +;Tabs +OptForm_Tab_Common=OptForm_Tab_Common +OptForm_Tab_Interface=OptForm_Tab_Interface +OptForm_Tab_Packages=OptForm_Tab_Packages +OptForm_Tab_About=OptForm_Tab_About + +;"Common" tab +; "OptForm_Grp_Lang / Language" +OptForm_Grp_Lang=OptForm_Grp_Lang +OptForm_Lab_LangFileIs=OptForm_Lab_LangFileIs +OptForm_Lab_LangNameIs=OptForm_Lab_LangNameIs +OptForm_Lab_LangVerIs=OptForm_Lab_LangVerIs +OptForm_Grp_Soft=OptForm_Grp_Soft +OptForm_Chb_ChkExitCodes=OptForm_Chb_ChkExitCodes +OptForm_Chb_ChkExitCodesHint=OptForm_Chb_ChkExitCodesHint +OptForm_Chb_DntUnChkItems=OptForm_Chb_DntUnChkItems +OptForm_Chb_DntUnChkItemsHint=OptForm_Chb_DntUnChkItemsHint +OptForm_Chb_ColorSoftTree=OptForm_Chb_ColorSoftTree +OptForm_Chb_ColorSoftTreeHint=OptForm_Chb_ColorSoftTreeHint +OptForm_Chb_ShowProgress=OptForm_Chb_ShowProgress +OptForm_Chb_ShowProgressHint=OptForm_Chb_ShowProgressHint +OptForm_Chb_ExpandSoft=OptForm_Chb_ExpandSoft +OptForm_Chb_ExpandSoftHint=OptForm_Chb_ExpandSoftHint +OptForm_Chb_QuietREG=OptForm_Chb_QuietREG +OptForm_Chb_QuietREGHint=OptForm_Chb_QuietREGHint +OptForm_Grp_Tools=OptForm_Grp_Tools +OptForm_Chb_HideOnTool=OptForm_Chb_HideOnTool +OptForm_Chb_HideOnToolHint=OptForm_Chb_HideOnToolHint +OptForm_Chb_ExpandTools=OptForm_Chb_ExpandTools +OptForm_Chb_ExpandToolsHint=OptForm_Chb_ExpandToolsHint +; "OptForm_Url_DownloadLangs / Download other languages" +OptForm_Url_DownloadLangs=OptForm_Url_DownloadLangs + +;"Interface" tab +OptForm_Chb_ShowLog=OptForm_Chb_ShowLog +OptForm_Chb_ShowLogHint=OptForm_Chb_ShowLogHint +OptForm_Chb_DrawOutlines=OptForm_Chb_DrawOutlines +OptForm_Chb_DrawOutlinesHint=OptForm_Chb_DrawOutlinesHint +OptForm_Chb_ScreenSnap=OptForm_Chb_ScreenSnap +OptForm_Chb_ScreenSnapHint=OptForm_Chb_ScreenSnapHint +OptForm_Chb_OnTop=OptForm_Chb_OnTop +OptForm_Chb_OnTopHint=OptForm_Chb_OnTopHint +OptForm_Chb_ShowPkgDesc=OptForm_Chb_ShowPkgDesc +OptForm_Chb_ShowPkgDescHint=OptForm_Chb_ShowPkgDescHint +OptForm_Chb_SrchVisible=OptForm_Chb_SrchVisible +OptForm_Chb_SrchVisibleHint=OptForm_Chb_SrchVisibleHint +OptForm_Chb_ScrollLog=OptForm_Chb_ScrollLog +OptForm_Chb_ScrollLogHint=OptForm_Chb_ScrollLogHint +OptForm_Grp_PkgSwitchMethod=OptForm_Grp_PkgSwitchMethod +OptForm_Rdb_PkgSwByMenu=OptForm_Rdb_PkgSwByMenu +OptForm_Rdb_PkgSwByMenuHint=OptForm_Rdb_PkgSwByMenuHint +OptForm_Rdb_PkgSwByTabs=OptForm_Rdb_PkgSwByTabs +OptForm_Rdb_PkgSwByTabsHint=OptForm_Rdb_PkgSwByTabsHint +OptForm_Chb_PkgSwShrinkTabs=OptForm_Chb_PkgSwShrinkTabs +OptForm_Chb_PkgSwShrinkTabsHint=OptForm_Chb_PkgSwShrinkTabsHint +OptForm_Cmb_PkgSwTabsPosHint=OptForm_Cmb_PkgSwTabsPosHint +OptForm_Cmb_PkgSwTabsPosTop=OptForm_Cmb_PkgSwTabsPosTop +OptForm_Cmb_PkgSwTabsPosBottom=OptForm_Cmb_PkgSwTabsPosBottom +OptForm_Cmb_PkgSwTabsPosLeft=OptForm_Cmb_PkgSwTabsPosLeft +OptForm_Cmb_PkgSwTabsPosRight=OptForm_Cmb_PkgSwTabsPosRight + +;"Packages" tab +OptForm_Grp_PkgSoft=OptForm_Grp_PkgSoft +OptForm_Grp_PkgTools=OptForm_Grp_PkgTools +OptForm_Btn_BrowseUserSoftPkg=OptForm_Btn_BrowseUserSoftPkg +OptForm_Btn_BrowseUserSoftPkgHint=OptForm_Btn_BrowseUserSoftPkgHint +OptForm_Btn_ClearUserSoftPkgHint=OptForm_Btn_ClearUserSoftPkgHint +OptForm_Btn_OpenIniDir=OptForm_Btn_OpenIniDir +OptForm_Btn_OpenIniDirHint=OptForm_Btn_OpenIniDirHint +OptForm_Grp_PkgInfo=OptForm_Grp_PkgInfo +OptForm_Lab_PkgNameIs=OptForm_Lab_PkgNameIs +OptForm_Lab_PkgDescIs=OptForm_Lab_PkgDescIs + +;"About" tab +OptForm_Lab_ABToolBuildIs=OptForm_Lab_ABToolBuildIs +OptForm_Lab_WhatsNew=OptForm_Lab_WhatsNew +OptForm_Url_ReportBug=OptForm_Url_ReportBug +OptForm_Url_Help=OptForm_Url_Help +OptForm_Btn_CheckUpdates=OptForm_Btn_CheckUpdates +OptForm_Btn_CheckingUpdates=OptForm_Btn_CheckingUpdates + +;Other strings in this window +OptForm_Caption=OptForm_Caption +OptForm_Btn_ResetOptions=OptForm_Btn_ResetOptions +OptForm_Btn_SaveOptions=OptForm_Btn_SaveOptions +OptForm_Btn_Close=OptForm_Btn_Close + +[ProgressForm] +; +; Installation progress form +; +[ChoosePkgForm] +; +; Form to choose package +; +[Messages] +; +; Messages to show +; +[Log] +; +; Log messages +; \ No newline at end of file diff --git a/ABTool/Languages/English.lng b/ABTool/Languages/English.lng new file mode 100644 index 0000000..4ffec32 --- /dev/null +++ b/ABTool/Languages/English.lng @@ -0,0 +1,189 @@ +; Author: AnthonyAxenov, anthonysoprano.93@gmail.com, abtool.ru +; Date: 20:11 20.05.2015 +[Info] +; Language name - required +Name=English +; ABTool version required +ABToolVer=0.8.0 + +[Main] +; Bidirectional mode: +; = 1 - Left to right +; = 2 - Right to left with right alignment +; = 3 - Right to left with left alignment +; = 4 - Right to left with right alignment only for reading (not typing) +Bidi=1 + +[SplashForm] +; +; Splash form +; +SplashForm_Lab_Loading=Loading... +[MainForm] +; +; Main form +; +;Tabs +MainForm_Tab_Soft=Programms +MainForm_Tab_Tools=Utilities +MainForm_Tab_System=System +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysInfo=Common info +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysCare=Maintenance +MainForm_Tab_Log=Log + +;Common buttons on toolbars +MainForm_Btn_List=List +MainForm_Mnb_ExpandAll=Expand all +MainForm_Mnb_CollapseAll=Collapse all +MainForm_Btn_Search=Search +MainForm_Mnb_PackDefault=Default +MainForm_Mnb_PacksEdit=Package management... + +;"Programms" tab +MainForm_Btn_SoftCheck=Choose +MainForm_Mnb_SoftCheckAll=Choose all +MainForm_Mnb_SoftCheckNone=Choose none +MainForm_Btn_SoftPackages=Programm packages +MainForm_Btn_SoftStart=<<< Start installation >>> + +;"Utilities" tab +MainForm_Btn_ToolsPackages=Utility packages + +;"System" tab +MainForm_Lab_System=System +MainForm_SInfo_RowOSVer=OS version +MainForm_SInfo_RowPCName=PC name +MainForm_SInfo_RowUserName=User name +MainForm_Lab_UserVars=Environment variables for +MainForm_Vars_Col1=Variable +MainForm_Vars_Col2=Value +MainForm_Lab_SysVars=System environment variables +MainForm_Btn_SysInfoRefresh=Refresh +MainForm_Btn_VarsEdit=Edit variables... +MainForm_Mnb_CopyVarValue=Copy value to clipboard +MainForm_Mnb_CopyVarLine=Copy variable with value +MainForm_Mnb_CopyVarAll=Copy all +MainForm_Grp_Power=Power management +MainForm_Btn_PowerOff=Power off +MainForm_Btn_Reboot=Reboot + +;"Log" tab +MainForm_Btn_LogClear=Clear log +MainForm_Btn_LogSave=Save log to file... + +;Other strings in this window +;MainForm_Caption=ABTool in English! +MainForm_Btn_Options=Options + +[OptionsForm] +; +; Options form +; +;Tabs +OptForm_Tab_Common=Common +OptForm_Tab_Interface=Interface +OptForm_Tab_Packages=Packages +OptForm_Tab_About=About + +;"Common" tab +; "OptForm_Grp_Lang / Language" +OptForm_Grp_Lang= +OptForm_Lab_LangFileIs=Filename: +OptForm_Lab_LangNameIs=Language: +OptForm_Lab_LangVerIs=Version: +OptForm_Grp_Soft=Software tab +OptForm_Chb_ChkExitCodes=Immediately report if the return code <> 0 +OptForm_Chb_ChkExitCodesHint=When the installer is finished with a code other than zero, you will be asked to terminate the installation process +OptForm_Chb_DntUnChkItems=Leave the check box checked with the return code <> 0 +OptForm_Chb_DntUnChkItemsHint=Later, you can try to install only those programs, the installation of which was not completed correctly +OptForm_Chb_ColorSoftTree=Color software tree list after installing +OptForm_Chb_ColorSoftTreeHint=When the installation process is complete, a list of programs to be is colored as follows: Failed to start red, return code <> 0 blue +OptForm_Chb_ShowProgress=Show the overall process of software installation +OptForm_Chb_ShowProgressHint=During installation, the main window will disappear and there will be another, displaying the overall progress of the installation. Otherwise - the main window will not disappear, but will be blocked +OptForm_Chb_ExpandSoft=Expand software tree when package is loaded +OptForm_Chb_ExpandSoftHint= +OptForm_Chb_QuietREG=Silent import from REG-files +OptForm_Chb_QuietREGHint=REGEDIT will not ask for confirmation +OptForm_Grp_Tools=Utilities tab +OptForm_Chb_HideOnTool=Hide ABTool when utility is launched +OptForm_Chb_HideOnToolHint=When utility is launched, ABTool will not disturb +OptForm_Chb_ExpandTools=Expand utilities tree when package is loaded +OptForm_Chb_ExpandToolsHint= +; "OptForm_Url_DownloadLangs / Download other languages" +;OptForm_Url_DownloadLangs= + +;"Interface" tab +OptForm_Chb_ShowLog=Show log tab +OptForm_Chb_ShowLogHint=The log appears on the an additional tab and contains complete protocol of events +OptForm_Chb_DrawOutlines=Draw lists outlines +OptForm_Chb_DrawOutlinesHint=It applies both to the Software and Utilities tabs +OptForm_Chb_ScreenSnap=Snap ABTool to the screen borders when moving +OptForm_Chb_ScreenSnapHint= +OptForm_Chb_OnTop=Keep ABTool on top +OptForm_Chb_OnTopHint= +OptForm_Chb_ShowPkgDesc=Show package descriptions +OptForm_Chb_ShowPkgDescHint=It applies both to the Software and Utilities tabs +OptForm_Chb_SrchVisible=Search bar is always shown +OptForm_Chb_SrchVisibleHint=It applies both to the Software and Utilities tabs +OptForm_Chb_ScrollLog=Always scroll log to the end +OptForm_Chb_ScrollLogHint= +OptForm_Grp_PkgSwitchMethod=Package switching method +OptForm_Rdb_PkgSwByMenu=Let me choose via package menu +OptForm_Rdb_PkgSwByMenuHint=It applies both to the Software and Utilities tabs +OptForm_Rdb_PkgSwByTabs=Show packages as tabs: +OptForm_Rdb_PkgSwByTabsHint=It applies both to the Software and Utilities tabs +OptForm_Chb_PkgSwShrinkTabs=Fit all names (long names will be trimmed) +OptForm_Chb_PkgSwShrinkTabsHint=If disabled, all packages' names may not fit on this panel +OptForm_Cmb_PkgSwTabsPosHint=Choose package tabs position +OptForm_Cmb_PkgSwTabsPosTop=Top +OptForm_Cmb_PkgSwTabsPosBottom=Bottom +OptForm_Cmb_PkgSwTabsPosLeft=Left +OptForm_Cmb_PkgSwTabsPosRight=Right + +;"Packages" tab +OptForm_Grp_PkgSoft=Software +OptForm_Grp_PkgTools=Utilities +OptForm_Btn_BrowseUserSoftPkg=Choose +OptForm_Btn_BrowseUserSoftPkgHint=Choose your package in special window +OptForm_Btn_ClearUserSoftPkgHint=Clear field +OptForm_Btn_OpenIniDir=Open ABTool_ini directory +OptForm_Btn_OpenIniDirHint= +OptForm_Grp_PkgInfo=Package info +OptForm_Lab_PkgNameIs=Name: +OptForm_Lab_PkgDescIs=Description: + +;"About" tab +OptForm_Lab_ABToolBuildIs=build +OptForm_Lab_WhatsNew=What's new in this version: +OptForm_Url_ReportBug=Report bug +OptForm_Url_Help=Get help +OptForm_Btn_CheckUpdates=Check updates +OptForm_Btn_CheckingUpdates=Checking updates... + +;Other strings in this window +OptForm_Caption=ABTool options +OptForm_Btn_ResetOptions=Reset +OptForm_Btn_SaveOptions=Save +OptForm_Btn_Close=Close + +[ProgressForm] +; +; Installation progress form +; + +[ChoosePkgForm] +; +; Form to choose package +; + +[Messages] +; +; Messages to show +; + +[Log] +; +; Log messages +; diff --git a/ABTool/Languages/Russian.lng b/ABTool/Languages/Russian.lng new file mode 100644 index 0000000..cc2391f --- /dev/null +++ b/ABTool/Languages/Russian.lng @@ -0,0 +1,185 @@ +; Author: AnthonyAxenov, anthonysoprano.93@gmail.com, abtool.ru +; Date: 20:11 20.05.2015 +[Info] +; Language name - required +Name= +; ABTool version required +ABToolVer=0.8.0 + +[Main] +; Bidirectional mode: +; = 1 - Left to right +; = 2 - Right to left with right alignment +; = 3 - Right to left with left alignment +; = 4 - Right to left with right alignment only for reading (not typing) +Bidi=2 + +[SplashForm] +; +; Splash form +; +SplashForm_Lab_Loading=... +[MainForm] +; +; Main form +; +;Tabs +MainForm_Tab_Soft= +MainForm_Tab_Tools= +MainForm_Tab_System= +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysInfo= +; Deprecated since v0.8.0.313 (19:01 19.05.2015) +;MainForm_Tab_SysCare= +MainForm_Tab_Log= + +;Common buttons on toolbars +MainForm_Btn_List= +MainForm_Mnb_ExpandAll= +MainForm_Mnb_CollapseAll= +MainForm_Btn_Search= +MainForm_Mnb_PackDefault= +MainForm_Mnb_PacksEdit= ... + +;"Programms" tab +MainForm_Btn_SoftCheck= +MainForm_Mnb_SoftCheckAll= +MainForm_Mnb_SoftCheckNone= +MainForm_Btn_SoftPackages= +MainForm_Btn_SoftStart=<<< >>> + +;"Utilities" tab +MainForm_Btn_ToolsPackages= + +;"System" tab +MainForm_Lab_System= +MainForm_SInfo_RowOSVer= +MainForm_SInfo_RowPCName= +MainForm_SInfo_RowUserName= +MainForm_Lab_UserVars= +MainForm_Vars_Col1= +MainForm_Vars_Col2= +MainForm_Lab_SysVars= +MainForm_Btn_SysInfoRefresh= +MainForm_Btn_VarsEdit=... +MainForm_Mnb_CopyVarValue= +MainForm_Mnb_CopyVarLine= +MainForm_Mnb_CopyVarAll= +MainForm_Grp_Power= +MainForm_Btn_PowerOff= +MainForm_Btn_Reboot= + +;"Log" tab +MainForm_Btn_LogClear= +MainForm_Btn_LogSave=... + +;Other strings in this window +MainForm_Btn_Options= + +[OptionsForm] +; +; Options form +; +;Tabs +OptForm_Tab_Common= +OptForm_Tab_Interface= +OptForm_Tab_Packages= +OptForm_Tab_About= + +;"Common" tab +; "OptForm_Grp_Lang / Language" +OptForm_Grp_Lang= +OptForm_Lab_LangFileIs=: +OptForm_Lab_LangNameIs=: +OptForm_Lab_LangVerIs=: +OptForm_Grp_Soft= +OptForm_Chb_ChkExitCodes= <> 0 +OptForm_Chb_ChkExitCodesHint= , , +OptForm_Chb_DntUnChkItems= <> 0 +OptForm_Chb_DntUnChkItemsHint= , +OptForm_Chb_ColorSoftTree= +OptForm_Chb_ColorSoftTreeHint= : , <> 0 +OptForm_Chb_ShowProgress= +OptForm_Chb_ShowProgressHint= , . , +OptForm_Chb_ExpandSoft= +OptForm_Chb_ExpandSoftHint= +OptForm_Chb_QuietREG= REG- +OptForm_Chb_QuietREGHint= , +OptForm_Grp_Tools= +OptForm_Chb_HideOnTool= ABTool +OptForm_Chb_HideOnToolHint= ABTool +OptForm_Chb_ExpandTools= +OptForm_Chb_ExpandToolsHint= +; "OptForm_Url_DownloadLangs / Download other languages" +OptForm_Url_DownloadLangs= + +;"Interface" tab +OptForm_Chb_ShowLog= +OptForm_Chb_ShowLogHint= +OptForm_Chb_DrawOutlines= +OptForm_Chb_DrawOutlinesHint= +OptForm_Chb_ScreenSnap= +OptForm_Chb_ScreenSnapHint= +OptForm_Chb_OnTop= +OptForm_Chb_OnTopHint= +OptForm_Chb_ShowPkgDesc= +OptForm_Chb_ShowPkgDescHint= , +OptForm_Chb_SrchVisible= +OptForm_Chb_SrchVisibleHint= , +OptForm_Chb_ScrollLog= +OptForm_Chb_ScrollLogHint= +OptForm_Grp_PkgSwitchMethod= +OptForm_Rdb_PkgSwByMenu= +OptForm_Rdb_PkgSwByMenuHint= , +OptForm_Rdb_PkgSwByTabs= : +OptForm_Rdb_PkgSwByTabsHint= , +OptForm_Chb_PkgSwShrinkTabs= ( ) +OptForm_Chb_PkgSwShrinkTabsHint= , +OptForm_Cmb_PkgSwTabsPosHint= +OptForm_Cmb_PkgSwTabsPosTop= +OptForm_Cmb_PkgSwTabsPosBottom= +OptForm_Cmb_PkgSwTabsPosLeft= +OptForm_Cmb_PkgSwTabsPosRight= + +;"Packages" tab +OptForm_Grp_PkgSoft= +OptForm_Grp_PkgTools= +OptForm_Btn_BrowseUserSoftPkg= +OptForm_Btn_BrowseUserSoftPkgHint= +OptForm_Btn_ClearUserSoftPkgHint= +OptForm_Btn_OpenIniDir= ABTool_ini +OptForm_Btn_OpenIniDirHint= +OptForm_Grp_PkgInfo= +OptForm_Lab_PkgNameIs=: +OptForm_Lab_PkgDescIs=: + +;"About" tab +OptForm_Lab_ABToolBuildIs= +OptForm_Lab_WhatsNew= : +OptForm_Url_ReportBug= +OptForm_Url_Help= +OptForm_Btn_CheckUpdates= +OptForm_Btn_CheckingUpdates= ... + +;Other strings in this window +OptForm_Caption= ABTool +OptForm_Btn_ResetOptions= +OptForm_Btn_SaveOptions= +OptForm_Btn_Close= + +[ProgressForm] +; +; Installation progress form +; +[ChoosePkgForm] +; +; Form to choose package +; +[Messages] +; +; Messages to show +; +[Log] +; +; Log messages +; \ No newline at end of file diff --git a/ABTool/abtool.ini b/ABTool/abtool.ini index 092d001..ca9c81e 100644 --- a/ABTool/abtool.ini +++ b/ABTool/abtool.ini @@ -1,25 +1,22 @@ [Options] +Locale= + +ScreenSnap=1 +ShowPkgDesc=1 +DrawOutlines=1 +OnTop=0 + ChkExitCodes=0 DntUnChkItems=1 ColorSoftTree=1 ShowProgress=1 -ExpandSoft=1 QuietREG=0 +ExpandSoft=1 + HideOnTool=0 ExpandTools=1 -ShowLog=1 -DrawOutlines=1 -ScreenSnap=1 -OnTop=0 -ShowPkgDesc=1 -SrchVisible=0 -[UserSoftPackages] -UserSoftPkg1= -UserSoftPkg2= -UserSoftPkg3= -LastUserSoftPkg=0 -[UserToolPackages] -UserToolPkg1= -UserToolPkg2= -UserToolPkg3= -LastUserToolPkg=0 + +Left= +Top= +Width= +Height= \ No newline at end of file diff --git a/dmain.lfm b/dmain.lfm index 9342fab..f1e7542 100644 --- a/dmain.lfm +++ b/dmain.lfm @@ -3678,6 +3678,42 @@ object dmMain: TdmMain end object mbRefresh: TMenuItem Caption = 'Обновить' + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00994E + 0399994E035C9B500400994E031A984D026C984D02A6984D02CC984D02C1984D + 028C984D024D994E03109C510500A2570A00A65B0D00FFFFFF00FFFFFF009C51 + 05CC9C5105CC9C510585A35806BFC8841AE3EAA71FF5FCB920FFFCB920F1EAA6 + 1FCFC78219A6A35909789D520622A2570A00A65B0D00FFFFFF00FFFFFF00A257 + 0ACCF9BF40FFA2570ACCF7B52AFFF6B01CFFF7B11EFFF8B527FFF8B527F1F7B1 + 1ED6F6B01CB4F8BA3490AB62105FA3580B19A65B0D00FFFFFF00FFFFFF00A85D + 0ECCF2B339FFF3B844FFEEA824FFF2B339FFC37E23DCA85D0ECCA85D0EC1C27E + 22BAE7A937B2EFAB2A90F3B8436DAD631243A95E0F06FFFFFF00FFFFFF00AF64 + 14CCECB149FFE6A334FFEEB752FFAF6414CCAF641494AD621200AA5F0F00AE63 + 134AAF641488E4A74491E8A83B6DCA88314EAF641419FFFFFF00FFFFFF00B66B + 19CCEBB861FFE7B057FFE7B057FFEEBF6AFFB66B19CCB76C1A5CB56A1800AF64 + 1400B56A1932C7843178E3A84E6CDCA24C54B66B1925FFFFFF00FFFFFF00BD72 + 1E99BE731FCCBE731FCCBE731FCCBE731FCCBE731FCCBD721E99C0752000C378 + 2300BD721E00BE731F33E5B06140E7B4663FBD721E20FFFFFF00FFFFFF00C67B + 2620E8B86F3FE6B46C40C57A2533C2782200BF752000C1762100C67B2699C57A + 25CCC57A25CCC57A25CCC57A25CCC57A25CCC67B2699FFFFFF00FFFFFF00CD82 + 2A25E6B16654E8B5706CD8984478CE832B32CF842C00CB802800CC81295CCD82 + 2ACCF3CD84FFECBD77FFECBD77FFF0C57EFFCD822ACCFFFFFF00FFFFFF00D489 + 3019E2A7554EEDBC766DEEBE7491D4893088D58A314AD98E3300D3882F00D489 + 3094D48930CCF4CD84FFEAB772FFF1C67EFFD48930CCFFFFFF00FFFFFF00DA8F + 3406DD943A43F8D2896DF4C57D90F4C77AB2E5A852BADB9034C1DB9034CCE5A8 + 52DCF7CD85FFF2C27AFFF8D389FFF7CD85FFDB9034CCFFFFFF00FFFFFF00DC91 + 3500E0953919E49E435FFCD88D90FACF85B4FBD086D6FCD489F1FCD489FFFBD0 + 86FFFACF85FFFBD389FFE19639CCFEDD92FFE19639CCFFFFFF00FFFFFF00DC91 + 3500E1963900E59A3D22E79F4378F1B964A6FACF80CFFEDA8EF1FEDA8EFFFACF + 81F5F1BB65E3E79E42BFE59A3D85E59A3DCCE59A3DCCFFFFFF00FFFFFF00DC91 + 3500E1963900E59A3D00E89D3F10E99E404DE99E408CE99E40C1E99E40CCE99E + 40A6E99E406CE89D3F1AE69B3D00E99E405CE99E4099FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } ImageIndex = 16 ShortCut = 16466 OnClick = mbRefreshClick diff --git a/dmain.pas b/dmain.pas index 7753c32..c910e41 100644 --- a/dmain.pas +++ b/dmain.pas @@ -5,8 +5,8 @@ unit dMain; interface uses - Classes, SysUtils, FileUtil, Controls, Menus, Forms, PopupNotifier, - VirtualTrees, uPackage, uPackageList, fOptions; + Classes, SysUtils, FileUtil, Controls, Menus, Forms, PopupNotifier, Dialogs, + VirtualTrees, uPackage, uPackageList, fOptions, uOptions; type @@ -47,13 +47,13 @@ type procedure mbOptionsPkgClick(Sender: TObject); procedure mbRefreshClick(Sender: TObject); private + // Форма настроек + fmOptions: TfmOptions; // Подготовка директорий - procedure PrepareDirs(); + procedure PrepareDirs(); // Подготовка списков пакетов - procedure PreparePackages(); + procedure PreparePackageLists(); public - { Публичные переменные, которые доступны во всех юнитах с подключенным uses ..., dMain } - // путь к файлу ABTool.exe ABToolExePath: String; // путь к директории ABTool @@ -65,11 +65,13 @@ type // путь к директории ABTool\Logs ABToolLogPath: String; // Список объектов пакетов программ для установки - SoftPackages: TPackageList; + SoftPackages: TPackageList; // Список объектов пакетов утилит для запуска ToolsPackages: TPackageList; // Установка состояния отметки для всех корневых нод указанного дерева procedure SetVSTCheckState(AVST: TBaseVirtualTree; AState: boolean); + // Показ формы настроек на указанной странице и возврат модального результата + function CallOptionsForm(APageIndex: byte = 0): TModalResult; end; var @@ -82,7 +84,7 @@ uses fMain; {$R *.lfm} { TdmMain } - + {------------------------------------------------------------------------------ Конструктор: TdmMain.Create() Назначение: Создание датамодуля, подготовка путей и списков пакетов @@ -90,29 +92,20 @@ uses fMain; procedure TdmMain.DataModuleCreate(Sender: TObject); begin PrepareDirs(); - PreparePackages(); + PreparePackageLists(); + TOptions.Create(dmMain.ABToolDataPath + '\abtool.ini'); end; -procedure TdmMain.mbAboutClick(Sender: TObject); -var - fmOptions: TfmOptions; -begin - fmOptions := TfmOptions.Create(fmMain); - fmOptions.PageControl.ActivePageIndex := 2; - fmOptions.ShowModal; -end; - - {------------------------------------------------------------------------------ -Конструктор: TdmMain.SetVSTCheckState() -Назначение: Установка состояния отметки для всех корневых нод указанного дерева +Конструктор: TdmMain.SetVSTCheckState() +Назначение: Установка состояния отметки для всех корневых нод указанного дерева Вх. параметры: AVST: TBaseVirtualTree - дерево AState: boolean - состояние отметок: TRUE выбрать все, FALSE снять выбор со всех ------------------------------------------------------------------------------} procedure TdmMain.SetVSTCheckState(AVST: TBaseVirtualTree; AState: boolean); var - Node: PVirtualNode; + Node: PVirtualNode; // Установка состояния отметки ноды-родителя дочерним нодам procedure CheckChildNodes(ANode: PVirtualNode); @@ -147,23 +140,23 @@ begin end; {------------------------------------------------------------------------------ -Конструктор: TdmMain.mbCheckAllClick() -Назначение: Обработка клика п. меню "Выбрать всё" +Конструктор: TdmMain.mbCheckAllClick() +Назначение: Обработка клика п. меню "Выбрать всё" ------------------------------------------------------------------------------} procedure TdmMain.mbCheckAllClick(Sender: TObject); begin SetVSTCheckState(fmMain.vstSoftPkgContents, true); -end; - +end; + {------------------------------------------------------------------------------ -Конструктор: TdmMain.mbCheckNoneClick() -Назначение: Обработка клика п. меню "Снять выбор" +Конструктор: TdmMain.mbCheckNoneClick() +Назначение: Обработка клика п. меню "Снять выбор" ------------------------------------------------------------------------------} procedure TdmMain.mbCheckNoneClick(Sender: TObject); begin SetVSTCheckState(fmMain.vstSoftPkgContents, false); end; - + {------------------------------------------------------------------------------ Процедура: TdmMain.mbCollapseTreeClick() Назначение: Сворачивание дерева на активной вкладке главного окна @@ -199,9 +192,9 @@ begin 1: fmMain.btnToolsPkgReload.Click; end; end; - + {------------------------------------------------------------------------------ -Процедура: TdmMain.PreparePackages() +Процедура: TdmMain.PrepareDirs() Назначение: Подготовка директорий ------------------------------------------------------------------------------} procedure TdmMain.PrepareDirs(); @@ -218,34 +211,64 @@ begin if not DirectoryExists(ABToolLogPath) then ForceDirectories(ABToolLogPath); end; - + {------------------------------------------------------------------------------ -Процедура: TdmMain.PreparePackages() +Процедура: TdmMain.PreparePackageLists() Назначение: Подготовка списков пакетов ------------------------------------------------------------------------------} -procedure TdmMain.PreparePackages(); +procedure TdmMain.PreparePackageLists(); begin SoftPackages := TPackageList.Create; SoftPackages.Load(ptSoft); ToolsPackages := TPackageList.Create; ToolsPackages.Load(ptTools); -end; - -procedure TdmMain.mbOptionsMainClick(Sender: TObject); -var - fmOptions: TfmOptions; -begin - fmOptions := TfmOptions.Create(fmMain); - fmOptions.ShowModal; end; -procedure TdmMain.mbOptionsPkgClick(Sender: TObject); -var - fmOptions: TfmOptions; +{------------------------------------------------------------------------------ +Функция: TdmMain.CallOptionsForm() +Назначение: Показ формы настроек на указанной странице и возврат модального + результата +Возвращает: TModalResult +------------------------------------------------------------------------------} +function TdmMain.CallOptionsForm(APageIndex: byte = 0): TModalResult; begin - fmOptions := TfmOptions.Create(fmMain); - fmOptions.PageControl.ActivePageIndex := 1; - fmOptions.ShowModal; + if fmOptions = nil then + fmOptions := TfmOptions.Create(fmMain); + fmOptions.PageControl.ActivePageIndex := APageIndex; + Result := fmOptions.ShowModal; +end; + +{------------------------------------------------------------------------------ +Процедура: TdmMain.mbOptionsMainClick() +Назначение: Обработка клика п. меню "Настройки - Основные..." +------------------------------------------------------------------------------} +procedure TdmMain.mbOptionsMainClick(Sender: TObject); +begin + CallOptionsForm; +end; + +{------------------------------------------------------------------------------ +Процедура: TdmMain.mbOptionsPkgClick() +Назначение: Обработка клика п. меню "Настройки - Управление пакетами..." +------------------------------------------------------------------------------} +procedure TdmMain.mbOptionsPkgClick(Sender: TObject); +begin + case CallOptionsForm(1) of + mrOK: ;//ShowMessage('mrOK'); + mrClose: ;//ShowMessage('mrClose'); + end; +end; + +{------------------------------------------------------------------------------ +Процедура: TdmMain.mbAboutClick() +Назначение: Обработка клика п. меню "Помощь - О программе..." +------------------------------------------------------------------------------} +procedure TdmMain.mbAboutClick(Sender: TObject); +begin + case CallOptionsForm(2) of + mrOK: ;//ShowMessage('mrOK'); + mrClose: ;//ShowMessage('mrClose'); + end; end; end. diff --git a/fmain.lfm b/fmain.lfm index c016d7d..a41b8d8 100644 --- a/fmain.lfm +++ b/fmain.lfm @@ -1,7 +1,7 @@ object fmMain: TfmMain - Left = 301 + Left = 1513 Height = 450 - Top = 108 + Top = 182 Width = 350 BorderIcons = [biSystemMenu, biMinimize] Caption = 'ABTool' diff --git a/foptions.lfm b/foptions.lfm index b102c81..929aa11 100644 --- a/foptions.lfm +++ b/foptions.lfm @@ -1,7 +1,7 @@ object fmOptions: TfmOptions - Left = 656 + Left = 1451 Height = 450 - Top = 109 + Top = 164 Width = 350 BorderIcons = [biSystemMenu] BorderStyle = bsDialog @@ -3207,13 +3207,15 @@ object fmOptions: TfmOptions 71FE000F5EFF000773FE000387FE800176FD80002DC38001693C0003D1190007 36A3800F57F7800F8AFFC00F76FFC01F8BFFE03FBEFFF47FBDFF } - OnCreate = FormCreate + OnClose = FormClose + OnShow = FormShow Position = poMainFormCenter + ShowHint = True ShowInTaskBar = stNever LCLVersion = '1.8.4.0' object PageControl: TPageControl Left = 0 - Height = 416 + Height = 412 Top = 0 Width = 350 ActivePage = tabCommon @@ -3223,30 +3225,30 @@ object fmOptions: TfmOptions TabWidth = 86 object tabCommon: TTabSheet Caption = 'Общие' - ClientHeight = 390 + ClientHeight = 386 ClientWidth = 342 object grpOptInstall: TGroupBox Left = 5 - Height = 171 - Top = 131 + Height = 159 + Top = 149 Width = 332 Align = alTop BorderSpacing.Left = 5 BorderSpacing.Top = 5 BorderSpacing.Right = 5 Caption = 'Вкладка «Установка»' - ClientHeight = 153 + ClientHeight = 141 ClientWidth = 328 TabOrder = 0 object cbChkExitCodes: TCheckBox Left = 5 Height = 19 - Top = 5 + Top = 4 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Немедленно сообщать о коде возврата <> 0' TabOrder = 0 @@ -3254,12 +3256,12 @@ object fmOptions: TfmOptions object cbDntUnChkItems: TCheckBox Left = 5 Height = 19 - Top = 29 + Top = 27 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Не снимать отметку с чекбокса при коде возврата <> 0' TabOrder = 1 @@ -3267,12 +3269,12 @@ object fmOptions: TfmOptions object cbShowProgress: TCheckBox Left = 5 Height = 19 - Top = 77 + Top = 73 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Отображать общий ход установки программ' TabOrder = 2 @@ -3280,12 +3282,12 @@ object fmOptions: TfmOptions object cbColorSoftTree: TCheckBox Left = 5 Height = 19 - Top = 53 + Top = 50 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Раскрашивать список программ после установки' TabOrder = 3 @@ -3293,12 +3295,12 @@ object fmOptions: TfmOptions object cbQuietREG: TCheckBox Left = 5 Height = 19 - Top = 101 + Top = 96 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Тихий импорт REG-файлов' TabOrder = 4 @@ -3306,12 +3308,12 @@ object fmOptions: TfmOptions object cbExpandSoft: TCheckBox Left = 5 Height = 19 - Top = 125 + Top = 119 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Раскрывать дерево после загрузки пакета' TabOrder = 5 @@ -3319,26 +3321,26 @@ object fmOptions: TfmOptions end object grpOptTools: TGroupBox Left = 5 - Height = 73 - Top = 307 + Height = 67 + Top = 313 Width = 332 Align = alTop BorderSpacing.Left = 5 BorderSpacing.Top = 5 BorderSpacing.Right = 5 Caption = 'Вкладка «Утилиты»' - ClientHeight = 55 + ClientHeight = 49 ClientWidth = 328 TabOrder = 1 object cbHideOnTool: TCheckBox Left = 5 Height = 19 - Top = 5 + Top = 4 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Скрывать главное окно при запуске утилит' TabOrder = 0 @@ -3346,12 +3348,12 @@ object fmOptions: TfmOptions object cbExpandTools: TCheckBox Left = 5 Height = 19 - Top = 29 + Top = 27 Width = 318 Align = alTop AutoSize = False BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Раскрывать дерево после загрузки пакета' TabOrder = 1 @@ -3359,25 +3361,25 @@ object fmOptions: TfmOptions end object grpOptMainform: TGroupBox Left = 5 - Height = 121 - Top = 5 + Height = 111 + Top = 33 Width = 332 Align = alTop BorderSpacing.Left = 5 BorderSpacing.Top = 5 BorderSpacing.Right = 5 Caption = 'Главное окно' - ClientHeight = 103 + ClientHeight = 93 ClientWidth = 328 TabOrder = 2 object cbOnTop: TCheckBox Left = 5 Height = 19 - Top = 77 + Top = 73 Width = 318 Align = alTop BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Поверх всех окон' TabOrder = 0 @@ -3385,23 +3387,23 @@ object fmOptions: TfmOptions object cbDrawOutlines: TCheckBox Left = 5 Height = 19 - Top = 53 + Top = 50 Width = 318 Align = alTop BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 - Caption = 'Рисовать линии при отрисовке деревьев' + Caption = 'Рисовать в деревьях линии уровней вложенности' TabOrder = 1 end object cbShowPkgDesc: TCheckBox Left = 5 Height = 19 - Top = 29 + Top = 27 Width = 318 Align = alTop BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Показывать описания пакетов' TabOrder = 2 @@ -3409,16 +3411,45 @@ object fmOptions: TfmOptions object cbScreenSnap: TCheckBox Left = 5 Height = 19 - Top = 5 + Top = 4 Width = 318 Align = alTop BorderSpacing.Left = 5 - BorderSpacing.Top = 5 + BorderSpacing.Top = 4 BorderSpacing.Right = 5 Caption = 'Прилипание к краям экрана' TabOrder = 3 end end + object pnLanguage: TPanel + Left = 0 + Height = 28 + Top = 0 + Width = 342 + Align = alTop + BevelOuter = bvNone + ClientHeight = 28 + ClientWidth = 342 + TabOrder = 3 + object cmbLanguage: TComboBox + Left = 108 + Height = 21 + Top = 4 + Width = 230 + Anchors = [akTop, akLeft, akRight] + ItemHeight = 13 + Style = csDropDownList + TabOrder = 0 + end + object Label1: TLabel + Left = 8 + Height = 13 + Top = 8 + Width = 83 + Caption = 'Язык / Language' + ParentColor = False + end + end end object tabPackages: TTabSheet Caption = 'Пакеты' @@ -3427,7 +3458,6 @@ object fmOptions: TfmOptions Caption = 'О программе' ClientHeight = 390 ClientWidth = 342 - OnContextPopup = tabAboutContextPopup object imgLogo: TImage Left = 147 Height = 48 @@ -3720,18 +3750,18 @@ object fmOptions: TfmOptions end object btnClose: TButton Left = 272 - Height = 25 - Top = 420 + Height = 29 + Top = 416 Width = 75 Anchors = [akTop, akRight] Caption = 'Закрыть' - OnClick = btnCloseClick + ModalResult = 11 TabOrder = 1 end object btnSave: TButton Left = 109 - Height = 25 - Top = 420 + Height = 29 + Top = 416 Width = 132 Anchors = [akTop, akLeft, akRight] Caption = 'Сохранить' @@ -3741,15 +3771,53 @@ object fmOptions: TfmOptions Font.Pitch = fpVariable Font.Quality = fqDraft Font.Style = [fsBold] + ModalResult = 1 + OnClick = btnSaveClick ParentFont = False TabOrder = 2 end - object btnSetDefault: TButton - Left = 4 - Height = 25 - Top = 420 - Width = 75 - Caption = 'Сброс' - TabOrder = 3 + object btnSetDefault: TSpeedButton + Left = 8 + Height = 24 + Hint = 'Установить настройки по умолчанию' + Top = 418 + Width = 24 + Flat = True + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00994E + 0399994E035C9B500400994E031A984D026C984D02A6984D02CC984D02C1984D + 028C984D024D994E03109C510500A2570A00A65B0D00FFFFFF00FFFFFF009C51 + 05CC9C5105CC9C510585A35806BFC8841AE3EAA71FF5FCB920FFFCB920F1EAA6 + 1FCFC78219A6A35909789D520622A2570A00A65B0D00FFFFFF00FFFFFF00A257 + 0ACCF9BF40FFA2570ACCF7B52AFFF6B01CFFF7B11EFFF8B527FFF8B527F1F7B1 + 1ED6F6B01CB4F8BA3490AB62105FA3580B19A65B0D00FFFFFF00FFFFFF00A85D + 0ECCF2B339FFF3B844FFEEA824FFF2B339FFC37E23DCA85D0ECCA85D0EC1C27E + 22BAE7A937B2EFAB2A90F3B8436DAD631243A95E0F06FFFFFF00FFFFFF00AF64 + 14CCECB149FFE6A334FFEEB752FFAF6414CCAF641494AD621200AA5F0F00AE63 + 134AAF641488E4A74491E8A83B6DCA88314EAF641419FFFFFF00FFFFFF00B66B + 19CCEBB861FFE7B057FFE7B057FFEEBF6AFFB66B19CCB76C1A5CB56A1800AF64 + 1400B56A1932C7843178E3A84E6CDCA24C54B66B1925FFFFFF00FFFFFF00BD72 + 1E99BE731FCCBE731FCCBE731FCCBE731FCCBE731FCCBD721E99C0752000C378 + 2300BD721E00BE731F33E5B06140E7B4663FBD721E20FFFFFF00FFFFFF00C67B + 2620E8B86F3FE6B46C40C57A2533C2782200BF752000C1762100C67B2699C57A + 25CCC57A25CCC57A25CCC57A25CCC57A25CCC67B2699FFFFFF00FFFFFF00CD82 + 2A25E6B16654E8B5706CD8984478CE832B32CF842C00CB802800CC81295CCD82 + 2ACCF3CD84FFECBD77FFECBD77FFF0C57EFFCD822ACCFFFFFF00FFFFFF00D489 + 3019E2A7554EEDBC766DEEBE7491D4893088D58A314AD98E3300D3882F00D489 + 3094D48930CCF4CD84FFEAB772FFF1C67EFFD48930CCFFFFFF00FFFFFF00DA8F + 3406DD943A43F8D2896DF4C57D90F4C77AB2E5A852BADB9034C1DB9034CCE5A8 + 52DCF7CD85FFF2C27AFFF8D389FFF7CD85FFDB9034CCFFFFFF00FFFFFF00DC91 + 3500E0953919E49E435FFCD88D90FACF85B4FBD086D6FCD489F1FCD489FFFBD0 + 86FFFACF85FFFBD389FFE19639CCFEDD92FFE19639CCFFFFFF00FFFFFF00DC91 + 3500E1963900E59A3D22E79F4378F1B964A6FACF80CFFEDA8EF1FEDA8EFFFACF + 81F5F1BB65E3E79E42BFE59A3D85E59A3DCCE59A3DCCFFFFFF00FFFFFF00DC91 + 3500E1963900E59A3D00E89D3F10E99E404DE99E408CE99E40C1E99E40CCE99E + 40A6E99E406CE89D3F1AE69B3D00E99E405CE99E4099FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } end end diff --git a/foptions.pas b/foptions.pas index c50e266..45b9d9b 100644 --- a/foptions.pas +++ b/foptions.pas @@ -5,15 +5,14 @@ unit fOptions; interface uses - Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel, - ComCtrls, ExtCtrls, StdCtrls, Menus, Types; + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + ComCtrls, ExtCtrls, StdCtrls, Menus, Buttons, uOptions; type { TfmOptions } TfmOptions = class(TForm) - btnSetDefault: TButton; btnSave: TButton; btnClose: TButton; btnCheckUpdates: TButton; @@ -33,6 +32,7 @@ type cbHideOnTool: TCheckBox; cbDrawOutlines: TCheckBox; cbScreenSnap: TCheckBox; + cmbLanguage: TComboBox; grpOptMainform: TGroupBox; grpOptInstall: TGroupBox; grpOptTools: TGroupBox; @@ -40,18 +40,20 @@ type labAboutTitle: TLabel; labCopyright: TLabel; labDescription: TLabel; + Label1: TLabel; mmLicenseText: TMemo; PageControl: TPageControl; + pnLanguage: TPanel; + btnSetDefault: TSpeedButton; tabCommon: TTabSheet; tabPackages: TTabSheet; tabAbout: TTabSheet; tabLicense: TTabSheet; - procedure btnCloseClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure tabAboutContextPopup(Sender: TObject; MousePos: TPoint; - var Handled: Boolean); + procedure btnSaveClick(Sender: TObject); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure FormShow(Sender: TObject); private - + procedure ResetControlls; public end; @@ -65,20 +67,65 @@ implementation { TfmOptions } -procedure TfmOptions.FormCreate(Sender: TObject); +{------------------------------------------------------------------------------ +Процедура: TfmOptions.btnSaveClick() +Назначение: Закрытие формы настроек и возврат модального результата при клике + по кнопке "Сохранить" +Описание: Закрытие формы происходит автоматически благодаря свойству + ModalResult = mrOK, заданному кнопке в инспекторе объектов. +------------------------------------------------------------------------------} +procedure TfmOptions.btnSaveClick(Sender: TObject); begin - + //TODO сохранение настроек end; -procedure TfmOptions.btnCloseClick(Sender: TObject); +{------------------------------------------------------------------------------ +Процедура: TfmOptions.FormClose() +Назначение: Закрытие формы при её закрытии через кнопку в заголовке и возврат + модального результата +------------------------------------------------------------------------------} +procedure TfmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin - Self.Destroy; + ModalResult := mrClose; end; - -procedure TfmOptions.tabAboutContextPopup(Sender: TObject; MousePos: TPoint; - var Handled: Boolean); + +{------------------------------------------------------------------------------ +Процедура: TfmOptions.FormShow() +Назначение: Показ окна настроек +Описание: Форма настроек создаётся однажды при её первом вызове. При закрытии + она не уничтожается. Она может быть закрыта без сохранения настроек. При + повторном открытии окна контроллы должны принять состояние, соответствущее + текущим (при запуске или прошлом сохранении) настройкам. В противном случае, + повторное открытие окна отобразит прошлые несохранённые изменения - это + введёт пользователя в заблуждение и он примет эти настройки как текущие. +------------------------------------------------------------------------------} +procedure TfmOptions.FormShow(Sender: TObject); begin + ResetControlls; +end; + +{------------------------------------------------------------------------------ +Процедура: TfmOptions.ResetControlls() +Назначение: Сброс состояния контроллов в сооответствии с текущими настройками +------------------------------------------------------------------------------} +procedure TfmOptions.ResetControlls; +begin + cmbLanguage.Items := GlobalOptions.ReadAvailableLocales(false); + cbScreenSnap.Checked := GlobalOptions.ScreenSnap; + cbShowPkgDesc.Checked := GlobalOptions.ShowPkgDesc; + cbDrawOutlines.Checked := GlobalOptions.DrawOutlines; + cbOnTop.Checked := GlobalOptions.OnTop; + + cbChkExitCodes.Checked := GlobalOptions.ChkExitCodes; + cbDntUnChkItems.Checked := GlobalOptions.DntUnChkItems; + cbColorSoftTree.Checked := GlobalOptions.ColorSoftTree; + cbShowProgress.Checked := GlobalOptions.ShowProgress; + cbQuietREG.Checked := GlobalOptions.QuietREG; + cbExpandSoft.Checked := GlobalOptions.ExpandSoft; + + cbHideOnTool.Checked := GlobalOptions.HideOnTool; + cbExpandTools.Checked := GlobalOptions.ExpandTools; end; end. diff --git a/ufileutils.pas b/ufileutils.pas index f553280..4a85d0d 100644 --- a/ufileutils.pas +++ b/ufileutils.pas @@ -5,16 +5,19 @@ unit uFileUtils; interface uses - Classes, SysUtils, FileUtil, Types, uPackage; + Classes, SysUtils, FileUtil, uPackage; // Получение списка файлов в директории -function GetFileList(Path, FileMask: String; FullPaths: Boolean = True): TStringList; +function GetFileList(APath, AFileMask: String; AFullPaths: Boolean = True): TStringList; -// Получение списка всех файлов внутри директории ABTool\ -function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList; +// Получение списка всех файлов внутри директории ABTool +function GetABToolFileList(ASubDir, AFileMask: String; AFullPaths: Boolean = True): TStringList; // Получение списка всех файлов пакетов -function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList; +function GetPackagesIniFileList(APackageType: TPackageType; AFullPaths: Boolean = True): TStringList; + +// Получение списка всех файлов локализаций +function GetLocalesIniFileList(AFullPaths: Boolean = True): TStringList; implementation @@ -22,27 +25,27 @@ implementation Функция: GetFileList Назначение: Получение списка файлов в директории Вх. параметры: - Path: string - путь к директории, список файлов которой нужно получить - FileMask: string - маска файлов, по которой нужно отфильтровать список файлов - FullPaths: boolean - возвращать полные пути (true) или только имена + APath: string - путь к директории, список файлов которой нужно получить + AFileMask: string - маска файлов, по которой нужно отфильтровать список файлов + AFullPaths: boolean - возвращать полные пути (true) или только имена файлов (false). По умолчанию true. Возвращает: TStringList - список строк с полными путями или только с именами файлов ------------------------------------------------------------------------------} -function GetFileList(Path, FileMask: String; FullPaths: Boolean = True): TStringList; +function GetFileList(APath, AFileMask: String; AFullPaths: Boolean = True): TStringList; var SearchRec: TSearchRec; ResultLines: TStringList; begin ResultLines := TStringList.Create; - Path := IncludeTrailingPathDelimiter(Path); - if FindFirst(Path + FileMask, faNormal, SearchRec) = 0 then + APath := IncludeTrailingPathDelimiter(APath); + if FindFirst(APath + AFileMask, faNormal, SearchRec) = 0 then begin repeat if (SearchRec.Attr <> faDirectory) then begin - if FullPaths then - ResultLines.Add(Path + SearchRec.Name) + if AFullPaths then + ResultLines.Add(APath + SearchRec.Name) else ResultLines.Add(SearchRec.Name); end; @@ -56,37 +59,53 @@ end; Функция: GetABToolFileList Назначение: Получение списка всех файлов внутри директории ABTool\ Вх. параметры: - SubDir: string - имя директории внутри ABTool\ - FileMask: string - маска файлов, по которой нужно отфильтровать список файлов - FullPaths: boolean - возвращать полные пути (true) или только имена + ASubDir: string - имя директории внутри ABTool\ + AFileMask: string - маска файлов, по которой нужно отфильтровать список файлов + AFullPaths: boolean - возвращать полные пути (true) или только имена файлов (false). По умолчанию true. Возвращает: TStringList - список строк с полными путями или только с именами файлов пакетов ------------------------------------------------------------------------------} -function GetABToolFileList(SubDir, FileMask: String; FullPaths: Boolean = True): TStringList; +function GetABToolFileList(ASubDir, AFileMask: String; AFullPaths: Boolean = True): TStringList; begin - Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + SubDir, FileMask, FullPaths); + Result := GetFileList(ExtractFilePath(ParamStr(0)) + 'ABTool\' + ASubDir, AFileMask, AFullPaths); end; {------------------------------------------------------------------------------ Функция: GetPackagesIniFileList -Назначение: Получение спискавсех файлов пакетов +Назначение: Получение списка всех файлов пакетов Вх. параметры: - PackageType: TPackageType - тип пакета: ptSoft либо ptTools - FullPaths: boolean - возвращать полные пути (true) или только имена + APackageType: TPackageType - тип пакета: ptSoft либо ptTools + AFullPaths: boolean - возвращать полные пути (true) или только имена + файлов (false). По умолчанию true. +Возвращает: + TStringList - список строк с полными путями или только с именами файлов пакетов +Исключения: + TException - при попытке передать любой другой тип пакета +------------------------------------------------------------------------------} +function GetPackagesIniFileList(APackageType: TPackageType; AFullPaths: Boolean = True): TStringList; +begin + case (APackageType) of + ptSoft: Result := GetABToolFileList('Packages', 'soft.*.ini', AFullPaths); + ptTools: Result := GetABToolFileList('Packages', 'tools.*.ini', AFullPaths); + else raise Exception.Create('GetPackagesIniFileList(): передан неверный тип пакета'); + end; +end; + +{------------------------------------------------------------------------------ +Функция: GetPackagesIniFileList +Назначение: Получение списка всех файлов локализаций +Вх. параметры: + AFullPaths: boolean - возвращать полные пути (true) или только имена файлов (false). По умолчанию true. Возвращает: TStringList - список строк с полными путями или только с именами файлов пакетов Исключения: TException - при попытке передать ptUnknown ------------------------------------------------------------------------------} -function GetPackagesIniFileList(PackageType: TPackageType; FullPaths: Boolean = True): TStringList; +function GetLocalesIniFileList(AFullPaths: Boolean = True): TStringList; begin - case (PackageType) of - ptSoft: Result := GetABToolFileList('Packages', 'soft.*.ini', FullPaths); - ptTools: Result := GetABToolFileList('Packages', 'tools.*.ini', FullPaths); - ptUnknown: raise Exception.Create('GetPackagesIniFileList(): передан ptUnknown'); - end; + Result := GetABToolFileList('Languages', '*.lng', AFullPaths); end; end. diff --git a/uoptions.pas b/uoptions.pas new file mode 100644 index 0000000..c74f649 --- /dev/null +++ b/uoptions.pas @@ -0,0 +1,373 @@ +unit uOptions; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Forms, IniFiles, uFileUtils; + +type + // Класс настроек + + { TOptions } + + TOptions = class(TIniFile) + strict private + // Файл локализации + FLocale: string; + + // Прилипание к краям экрана + FScreenSnap: Boolean; + // Показывать описания пакетов + FShowPkgDesc: Boolean; + // Рисовать в деревьях линии уровней вложенности + FDrawOutlines: Boolean; + // Поверх всех окон + FOnTop: Boolean; + + // Немедленно сообщать о коде возврата <> 0 + FChkExitCodes: Boolean; + // Не снимать отметку с чекбокса при коде возврата <> 0 + FDntUnChkItems: Boolean; + // Раскрашивать список программ после установки + FColorSoftTree: Boolean; + // Отображать общий ход установки программ + FShowProgress: Boolean; + // Тихий импорт REG-файлов + FQuietREG: Boolean; + // Раскрывать дерево после загрузки пакета + FExpandSoft: Boolean; + + // Скрывать главное окно при запуске утилит + FHideOnTool: Boolean; + // Раскрывать дерево после загрузки пакета + FExpandTools: Boolean; + + // Последняя позиция по горизонтали от левого края экрана + FLeft: Integer; + // Последняя позиция по вертикали от верхнего края экрана + FTop: Integer; + // Последняя ширина + FWidth: Integer; + // Последняя высота + FHeight: Integer; + + // Параметры, с которыми запушена ABTool + FCLParams: TStringList; + private + // Установка параметра локализации + procedure SetLocale(ALngFilename: string); + public + // Файл локализации + property Locale: string read FLocale write SetLocale; + + // Прилипание к краям экрана + property ScreenSnap: Boolean read FScreenSnap write FScreenSnap default True; + // Показывать описания пакетов + property ShowPkgDesc: Boolean read FShowPkgDesc write FShowPkgDesc default True; + // Рисовать в деревьях линии уровней вложенности + property DrawOutlines: Boolean read FDrawOutlines write FDrawOutlines default True; + // Поверх всех окон + property OnTop: Boolean read FOnTop write FOnTop default False; + + // Немедленно сообщать о коде возврата <> 0 + property ChkExitCodes: Boolean read FChkExitCodes write FChkExitCodes default True; + // Не снимать отметку с чекбокса при коде возврата <> 0 + property DntUnChkItems: Boolean read FDntUnChkItems write FDntUnChkItems default True; + // Раскрашивать список программ после установки + property ColorSoftTree: Boolean read FColorSoftTree write FColorSoftTree default True; + // Отображать общий ход установки программ + property ShowProgress: Boolean read FShowProgress write FShowProgress default True; + // Тихий импорт REG-файлов + property QuietREG: Boolean read FQuietREG write FQuietREG default True; + // Раскрывать дерево после загрузки пакета + property ExpandSoft: Boolean read FExpandSoft write FExpandSoft default True; + + // Скрывать главное окно при запуске утилит + property HideOnTool: Boolean read FExpandSoft write FExpandSoft default False; + // Раскрывать дерево после загрузки пакета + property ExpandTools: Boolean read FExpandSoft write FExpandSoft default True; + + // Последняя позиция по горизонтали от левого края экрана + property Left: Integer read FLeft write FLeft; + // Последняя позиция по вертикали от верхнего края экрана + property Top: Integer read FTop write FTop; + // Последняя ширина + property Width: Integer read FWidth write FWidth default 350; + // Последняя высота + property Height: Integer read FHeight write FHeight default 450; + + // Параметры, с которыми запушена ABTool + property CLParams: TStringList read FCLParams; + // Пути ко всем доступным файлам локализаций + function ReadAvailableLocales(AFullPaths: Boolean = True): TStringList; + + // Создание объекта настроек и установка настроек + constructor Create(AIniFilename: string); overload; + // Деструктор объекта настроек + destructor Destroy(); override; + // Определение наличия доп. ключей запуска + function HasCLParams: Boolean; + // Установка параметров командной строки, с которыми запущен ABTool + procedure ReadCLParams; + // Поиск ключа запуска среди всех, с которыми запущен ABTool + function FindCLParam(AParamName: string): Boolean; + // Чтение настроек + procedure Load; + + end; // TOptions + +var + // Настройки - глобальный объект, доступный всем модулям, сославшимся на этот + GlobalOptions: TOptions; + +implementation + +{ TOptions } + +{------------------------------------------------------------------------------ +Конструктор: TOptions.Create() +Назначение: Создание объекта настроек и установка настроек +------------------------------------------------------------------------------} +constructor TOptions.Create(AIniFilename: string); +begin + if HasCLParams then + ReadCLParams; + //ReadAvailableLocales; + inherited Create(AIniFilename, [ifoStripComments, ifoStripInvalid]); + Load; + GlobalOptions := Self; +end; + +{------------------------------------------------------------------------------ +Деструктор: TOptions.Destroy() +------------------------------------------------------------------------------} +destructor TOptions.Destroy(); +begin + inherited Destroy(); +end; + +{------------------------------------------------------------------------------ +Функция: TOptions.HasCLParams() +Назначение: Определение наличия доп. ключей запуска +Возвращает: boolean +------------------------------------------------------------------------------} +function TOptions.HasCLParams: Boolean; +begin + Result := ParamCount > 0; + //if FDebug then + // Log('DoesABToolHaveKeys(): '+BoolToStr(Result)); +end; + +{------------------------------------------------------------------------------ +Процедура: TOptions.ReadCLParams() +Назначение: Установка параметров командной строки, с которыми запущен ABTool +------------------------------------------------------------------------------} +procedure TOptions.ReadCLParams; +var + i: byte; +begin + if HasCLParams then + begin + FCLParams := TStringList.Create; + for i := 1 to ParamCount do + FCLParams.Add(Trim(LowerCase(ParamStr(i)))); + end; +end; + +{------------------------------------------------------------------------------ +Функция: TOptions.FindCLParam() +Назначение: Поиск ключа запуска среди всех, с которыми запущен ABTool +Возвращает: boolean +------------------------------------------------------------------------------} +function TOptions.FindCLParam(AParamName: string): Boolean; +var + i: Smallint; +begin + Result := False; + if HasCLParams then + begin + for i := 0 to FCLParams.Count - 1 do + if Pos(LowerCase(AParamName), FCLParams.Strings[i]) > 0 then + begin + Result := True; + Exit; + end; + end; +end; + +{------------------------------------------------------------------------------ +Процедура: TOptions.Load() +Назначение: Чтение настроек +------------------------------------------------------------------------------} +procedure TOptions.Load; +begin + try + //TODO создание дефолтного файла настроек при отсутсвии такового + //TODO создание файла настроек по умолчанию + SetLocale(ReadString('Options', 'Locale', '')); + + FScreenSnap := ReadBool('Options', 'ScreenSnap', True); + FShowPkgDesc := ReadBool('Options', 'ShowPkgDesc', True); + FDrawOutlines := ReadBool('Options', 'DrawOutlines', True); + FOnTop := ReadBool('Options', 'OnTop', False); + + FChkExitCodes := ReadBool('Options', 'ChkExitCodes', False); + FDntUnChkItems := ReadBool('Options', 'DntUnChkItems', True); + FColorSoftTree := ReadBool('Options', 'ColorSoftTree', True); + FShowProgress := ReadBool('Options', 'ShowProgress', True); + FQuietREG := ReadBool('Options', 'QuietREG', False); + FExpandSoft := ReadBool('Options', 'ExpandSoft', True); + + FHideOnTool := ReadBool('Options', 'HideOnTool', False); + FExpandTools := ReadBool('Options', 'ExpandTools', True); + + FLeft := ReadInteger('Options', 'Left', (Screen.Width div 2) - 175); + FTop := ReadInteger('Options', 'Top', (Screen.Height div 2) - 225); + FWidth := ReadInteger('Options', 'Width', 350); + FHeight := ReadInteger('Options', 'Height', 450); + except // SysErrorMessage(GetLastError) + On E: Exception do + begin + raise Exception.Create('Не удалось прочитать настройки из файла abtool.ini.'); + //+ #13#10 + + //'Сейчас он будет создан с параметрами по умолчанию.' + #13#10 + + //'Сообщение системы: ' + #13#10 + E.Message + '(' + IntToStr(GetLastError) + ') '); + //SaveOptions(true); + end; + end; +end; + +{------------------------------------------------------------------------------ +Процедура: TOptions.SetLocale() +Назначение: Установка параметра локализации +------------------------------------------------------------------------------} +procedure TOptions.SetLocale(ALngFilename: string); +begin + //TODO проверка существования файла локализации + FLocale := ALngFilename; +end; + +{------------------------------------------------------------------------------ +Процедура: TOptions.ReadAvailableLocales() +Назначение: Получение списка всех доступных файлов локализаций +Вх. параметры: + FullPaths: boolean - возвращать полные пути (true) или только имена + файлов (false). По умолчанию true. +Возвращает: TStringList +------------------------------------------------------------------------------} +function TOptions.ReadAvailableLocales(AFullPaths: Boolean = True): TStringList; +begin + Result := GetLocalesIniFileList(AFullPaths); +end; + +{ +// Чтение настроек +function LoadOptions: boolean; +begin + Result := false; + if Options.Debug then + Log('LoadOptions()'); + Log('Загрузка настроек из abtool.ini...'); + if not (FileExists(ABToolIniPath + 'abtool.ini')) then begin + Log('Файла настроек не существует. Сейчас он будет создан с параметрами по умолчанию...'); + SaveOptions(true); + end // if FileExists + else begin + try + try + with Options do begin + ABToolIniFile := TInifile.Create(ABToolIniPath + 'abtool.ini'); + ABToolKeys := TStringList.Create; + ABToolKeys := GetABToolKeys; + if Options.Debug then + Log('LoadOptions(): ABToolKeys='+GetABToolKeys.text); + // Непосредственно чтение настроек из INI в память + if FindCLParam('+lang') then begin + LangFile := ReadString('Options','LangFile',''); + if Options.Debug then + Log('LoadOptions(): LangFile='+LangFile); + end; // if +lang + Left := ReadInteger('Options','Left', (Screen.Width div 2) - 180); + Top := ReadInteger('Options','Top', (Screen.Height div 2) - 292); + Width := ReadInteger('Options','Width', 360); + Height := ReadInteger('Options','Height', 485); + ChkExitCodes := ReadBool('Options','ChkExitCodes',false); + DntUnChkItems := ReadBool('Options','DntUnChkItems',true); + ColorSoftTree := ReadBool('Options','ColorSoftTree',true); + ShowProgress := ReadBool('Options','ShowProgress',true); + ExpandSoft := ReadBool('Options','ExpandSoft',true); + QuietREG := ReadBool('Options','QuietREG',false); + HideOnTool := ReadBool('Options','HideOnTool',false); + ExpandTools := ReadBool('Options','ExpandTools',true); + ShowLog := ReadBool('Options','ShowLog',true); + DrawOutlines := ReadBool('Options','DrawOutlines',true); + ScreenSnap := ReadBool('Options','ScreenSnap',true); + OnTop := ReadBool('Options','OnTop',false); + ShowPkgDesc := ReadBool('Options','ShowPkgDesc',true); + SrchVisible := ReadBool('Options','SrchVisible',false); + ScrollLog := ReadBool('Options','ScrollLog',true); + LastSoftPkg := ReadString('Options','LastSoftPkg', ''); + LastToolPkg := ReadString('Options','LastToolPkg', ''); + if Options.Debug then begin + Log('LoadOptions(): Left='+Left.ToString); + Log('LoadOptions(): Top='+Top.ToString); + Log('LoadOptions(): Width='+Width.ToString); + Log('LoadOptions(): Height='+Height.ToString); + Log('LoadOptions(): ChkExitCodes='+BoolToStr(ChkExitCodes)); + Log('LoadOptions(): DntUnChkItems='+BoolToStr(DntUnChkItems)); + Log('LoadOptions(): ColorSoftTree='+BoolToStr(ColorSoftTree)); + Log('LoadOptions(): ShowProgress='+BoolToStr(ShowProgress)); + Log('LoadOptions(): ExpandSoft='+BoolToStr(ExpandSoft)); + Log('LoadOptions(): QuietREG='+BoolToStr(QuietREG)); + Log('LoadOptions(): HideOnTool='+BoolToStr(HideOnTool)); + Log('LoadOptions(): ExpandTools='+BoolToStr(ExpandTools)); + Log('LoadOptions(): DrawOutlines='+BoolToStr(DrawOutlines)); + Log('LoadOptions(): ScreenSnap='+BoolToStr(ScreenSnap)); + Log('LoadOptions(): OnTop='+BoolToStr(OnTop)); + Log('LoadOptions(): ShowPkgDesc='+BoolToStr(ShowPkgDesc)); + Log('LoadOptions(): SrchVisible='+BoolToStr(SrchVisible)); + Log('LoadOptions(): ScrollLog='+BoolToStr(ScrollLog)); + Log('LoadOptions(): LastSoftPkg='+LastSoftPkg); + Log('LoadOptions(): ScrollLog='+LastToolPkg); + end; + end; // with Options + Result := true; + except // SysErrorMessage(GetLastError) + On E: Exception Do Begin + Raise Exception.Create('Не удалось прочитать настройки из файла abtool.ini.' + #13#10 + + 'Сейчас он будет создан с параметрами по умолчанию.' + #13#10 + + 'Сообщение системы: ' + #13#10 + E.Message + '(' + IntToStr(GetLastError) + ') '); + Log('Не удалось прочитать настройки из файла abtool.ini.' + #13#10 + + 'Сейчас он будет создан с параметрами по умолчанию.' + #13#10 + + 'Сообщение системы: ' + #13#10 + E.Message + '(' + IntToStr(GetLastError) + ') '); + if Options.Debug then + Log('LoadOptions() EXCEPTION Stack Trace:' + #13#10 + E.StackTrace); + SaveOptions(true); + End; // On E: Exception + end; // except + finally +// if Options.ABToolIniFile <> nil then +// Options.Free; + end; // finally + end; // if not FileExists +end; + + + + + + + + + + + + + + + + +} +end. diff --git a/upackage.pas b/upackage.pas index 46247dc..e6ebe25 100644 --- a/upackage.pas +++ b/upackage.pas @@ -26,9 +26,9 @@ type TPackage = class(TIniFile) strict private // Имя пакета: [PackageInfo] Name - FName: String; + FName: string; // Описание пакета: [PackageInfo] Description - FDescription: String; + FDescription: string; // Тип пакета FType: TPackageType; private @@ -38,19 +38,19 @@ type function SetType(): TPackageType; public // Имя пакета: [PackageInfo] Name - property Name: String read FName; + property Name: string read FName; // Описание пакета: [PackageInfo] Description - property Description: String read FDescription; + property Description: string read FDescription; // Тип пакета property PackageType: TPackageType read FType; // Создание объекта пакета и установка информации о нём - constructor Create(APkgFilename: Ansistring); overload; - // Деструктор + constructor Create(AIniFilename: string); overload; + // Деструктор объекта пакета destructor Destroy(); override; // Запуск исполняемого файла и получение результатов запуска - function ExecuteItem(const AFileName, AParams: String; AHideMainWindow: Boolean; + function ExecuteItem(const AFileName, AParams: string; AHideMainWindow: Boolean; Out AOutExitcode: Cardinal): Boolean; end; // TPackage @@ -61,33 +61,33 @@ implementation {------------------------------------------------------------------------------ Конструктор: TPackage.Create() Назначение: Создание объекта пакета и установка информации о нём -Вх. параметры: APkgFilename: Ansistring - путь к ini-файлу +Вх. параметры: AIniFilename: string - путь к ini-файлу ------------------------------------------------------------------------------} -constructor TPackage.Create(APkgFilename: Ansistring); +constructor TPackage.Create(AIniFilename: string); begin - inherited Create(APkgFilename, [ifoStripComments, ifoStripInvalid]); + inherited Create(AIniFilename, [ifoStripComments, ifoStripInvalid]); SetProperties(); end; {------------------------------------------------------------------------------ -Процедура: TPackage.SetType() -Назначение: Установка информации о пакете +Процедура: TPackage.SetType() +Назначение: Установка информации о пакете ------------------------------------------------------------------------------} procedure TPackage.SetProperties(); begin - FName := ReadString('PackageInfo', 'Name', '<без названия>'); - FDescription := ReadString('PackageInfo', 'Description', '<без описания>'); + FName := Readstring('PackageInfo', 'Name', '<без названия>'); + FDescription := Readstring('PackageInfo', 'Description', '<без описания>'); FType := SetType(); end; {------------------------------------------------------------------------------ -Функция: TPackage.SetType() -Назначение: Определение типа пакета по имени его файла -Возвращает: TPackageType - тип пакета +Функция: TPackage.SetType() +Назначение: Определение типа пакета по имени его файла +Возвращает: TPackageType - тип пакета ------------------------------------------------------------------------------} function TPackage.SetType(): TPackageType; var - SubStr: String; + SubStr: string; begin SubStr := Copy(ExtractFileName(FileName), 1, 4); if (LowerCase(SubStr) = 'soft') then @@ -99,7 +99,7 @@ begin end; {------------------------------------------------------------------------------ -Деструктор: TPackage.Destroy() +Деструктор: TPackage.Destroy() ------------------------------------------------------------------------------} destructor TPackage.Destroy(); begin @@ -110,14 +110,14 @@ end; Функция: TPackage.ExecuteItem() Назначение: Запуск исполняемого файла и получение результатов запуска Вх. параметры: - AFileName : String - путь к исполняемому файлу - AParams : String - дополнительные параметры запуска + AFileName : string - путь к исполняемому файлу + AParams : string - дополнительные параметры запуска AHideMainWindow : Boolean - скрывать главное окно ABTool (true) или нет (false) Вых. параметры: AOutExitcode : Cardinal - код завершения процесса Возвращает: boolean - true при успешном запуске программы, false при неудаче ------------------------------------------------------------------------------} -function TPackage.ExecuteItem(const AFileName, AParams: String; AHideMainWindow: Boolean; +function TPackage.ExecuteItem(const AFileName, AParams: string; AHideMainWindow: Boolean; out AOutExitcode: Cardinal): Boolean; begin diff --git a/upackagelist.pas b/upackagelist.pas index ec8f52d..a551dbe 100644 --- a/upackagelist.pas +++ b/upackagelist.pas @@ -39,7 +39,7 @@ implementation { TPackageList } {------------------------------------------------------------------------------ -Процедура: TPackageList.Create() +Процедура: TPackageList.Load() Назначение: Создание списка пакетов по указанному типу Вх. параметры: APackageType: TPackageType - тип списка пакета ------------------------------------------------------------------------------} @@ -50,8 +50,8 @@ begin end; {------------------------------------------------------------------------------ -Процедура: TPackageList.Reload() -Назначение: Заполнение списка пакетов объектами пакетов +Процедура: TPackageList.Reload() +Назначение: Заполнение списка пакетов объектами пакетов ------------------------------------------------------------------------------} procedure TPackageList.Reload(); var @@ -74,9 +74,9 @@ begin end; {------------------------------------------------------------------------------ -Функция: TPackage.GetPackageByIndex() -Назначение: Получение пакета из списка по его номеру -Возвращает: TPackage - пакет +Функция: TPackage.GetPackageByIndex() +Назначение: Получение пакета из списка по его номеру +Возвращает: TPackage - пакет ------------------------------------------------------------------------------} function TPackageList.GetPackageByIndex(Index: integer): TPackage; begin @@ -84,9 +84,9 @@ begin end; {------------------------------------------------------------------------------ -Функция: TPackage.GetPackageByIndex() -Назначение: Получение количества пакетов в списке -Возвращает: integer - число пакетов в списке +Функция: TPackage.Count() +Назначение: Получение количества пакетов в списке +Возвращает: integer - число пакетов в списке ------------------------------------------------------------------------------} function TPackageList.Count(): integer; begin