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