ADD: Improvement in user interface regarding the configuration of archivers.

ADD: When attempting to quit configuration of archivers with unsaved modification, we're now prompt to save or not.
ADD: When disabling an archiver configuration, the whole setting turn gray.
ADD: We may now start a new archiver configuration by copying an existing one.
ADD: We may now import/export configuration or archivers.
ADD: We may now sort the archivers in the configuration.
ADD: Function enable/disable all the archivers at once.
ADD: New internal command "cm_ConfigArchivers".
ADD: When importing/export toolbar to TC, there is now an translation between "cm_ConfigArchivers" and "cm_PackerConfig".
ADD: Little variable reminder helper in popup menu for commands and parameters.
UPD: Language file regenerated. Minimal impact with above modification since existing translation have been re-used, with no additional "Fuzzy".
UPD: French language translation back 100% done.
This commit is contained in:
Denis Bisson 2018-06-14 01:09:23 +00:00
commit 21e0a429dd
40 changed files with 341406 additions and 339844 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1891,6 +1891,10 @@ msgstr ""
msgid "Copy path to command line"
msgstr ""
#: tfrmmain.actbenchmark.caption
msgid "&Benchmark"
msgstr ""
#: tfrmmain.actbriefview.caption
msgid "Brief view"
msgstr ""
@ -1985,6 +1989,10 @@ msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT"
msgid "Compare Directories"
msgstr ""
#: tfrmmain.actconfigarchivers.caption
msgid "Configuration of Archivers"
msgstr ""
#: tfrmmain.actconfigdirhotlist.caption
msgctxt "tfrmmain.actconfigdirhotlist.caption"
msgid "Configuration of Directory Hotlist"
@ -2797,11 +2805,6 @@ msgctxt "tfrmmain.lblcommandpath.caption"
msgid "Path"
msgstr ""
#: tfrmmain.menuitem2.caption
msgctxt "TFRMMAIN.MENUITEM2.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.mi2080.caption
msgid "&20/80"
msgstr ""
@ -2843,181 +2846,6 @@ msgstr ""
msgid "Create link..."
msgstr ""
#: tfrmmain.miline1.caption
msgctxt "TFRMMAIN.MILINE1.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline10.caption
msgctxt "TFRMMAIN.MILINE10.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline11.caption
msgctxt "TFRMMAIN.MILINE11.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline12.caption
msgctxt "TFRMMAIN.MILINE12.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline13.caption
msgctxt "TFRMMAIN.MILINE13.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline14.caption
msgctxt "TFRMMAIN.MILINE14.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline15.caption
msgctxt "TFRMMAIN.MILINE15.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline16.caption
msgctxt "TFRMMAIN.MILINE16.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline17.caption
msgctxt "TFRMMAIN.MILINE17.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline18.caption
msgctxt "TFRMMAIN.MILINE18.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline19.caption
msgctxt "TFRMMAIN.MILINE19.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline2.caption
msgctxt "TFRMMAIN.MILINE2.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline20.caption
msgctxt "TFRMMAIN.MILINE20.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline21.caption
msgctxt "TFRMMAIN.MILINE21.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline22.caption
msgctxt "TFRMMAIN.MILINE22.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline23.caption
msgctxt "TFRMMAIN.MILINE23.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline24.caption
msgctxt "TFRMMAIN.MILINE24.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline25.caption
msgctxt "TFRMMAIN.MILINE25.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline26.caption
msgctxt "TFRMMAIN.MILINE26.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline3.caption
msgctxt "TFRMMAIN.MILINE3.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline32.caption
msgctxt "TFRMMAIN.MILINE32.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline33.caption
msgctxt "TFRMMAIN.MILINE33.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline37.caption
msgctxt "TFRMMAIN.MILINE37.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline38.caption
msgctxt "TFRMMAIN.MILINE38.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline39.caption
msgctxt "TFRMMAIN.MILINE39.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline4.caption
msgctxt "TFRMMAIN.MILINE4.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline40.caption
msgctxt "TFRMMAIN.MILINE40.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline47.caption
msgctxt "TFRMMAIN.MILINE47.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline5.caption
msgctxt "TFRMMAIN.MILINE5.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline50.caption
msgctxt "TFRMMAIN.MILINE50.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline55.caption
msgctxt "TFRMMAIN.MILINE55.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline6.caption
msgctxt "TFRMMAIN.MILINE6.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline7.caption
msgctxt "TFRMMAIN.MILINE7.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline8.caption
msgctxt "TFRMMAIN.MILINE8.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.miline9.caption
msgctxt "TFRMMAIN.MILINE9.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.milogclear.caption
msgid "Clear"
msgstr ""
@ -3080,16 +2908,6 @@ msgstr ""
msgid "C&onfiguration"
msgstr ""
#: tfrmmain.mnucontextline1.caption
msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.mnucontextline2.caption
msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION"
msgid "-"
msgstr ""
#: tfrmmain.mnufavoritetabs.caption
msgid "Favorites"
msgstr ""
@ -3153,11 +2971,6 @@ msgctxt "TFRMMAIN.TBPASTE.CAPTION"
msgid "Paste"
msgstr ""
#: tfrmmain.tbseparator.caption
msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION"
msgid "-"
msgstr ""
#: tfrmmaincommandsdlg.btncancel.caption
msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION"
msgid "&Cancel"
@ -3755,88 +3568,228 @@ msgstr ""
msgid "Please select one of the subpages, this page does not contain any settings."
msgstr ""
#: tfrmoptionsarchivers.btnautoconfig.caption
msgid "A&uto Configure"
msgstr ""
#: tfrmoptionsarchivers.btnmultiarcadd.caption
msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION"
#: tfrmoptionsarchivers.btnarchiveradd.caption
msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption"
msgid "A&dd"
msgstr ""
#: tfrmoptionsarchivers.btnmultiarcapply.caption
msgctxt "tfrmoptionsarchivers.btnmultiarcapply.caption"
#: tfrmoptionsarchivers.btnarchiveraddhelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchiverapply.caption
msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption"
msgid "A&pply"
msgstr ""
#: tfrmoptionsarchivers.btnmultiarcdelete.caption
msgctxt "tfrmoptionsarchivers.btnmultiarcdelete.caption"
msgid "D&elete"
#: tfrmoptionsarchivers.btnarchivercopy.caption
msgid "Cop&y"
msgstr ""
#: tfrmoptionsarchivers.btnmultiarcrename.caption
msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION"
msgid "&Rename"
#: tfrmoptionsarchivers.btnarchiverdelete.caption
msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption"
msgid "Delete"
msgstr ""
#: tfrmoptionsarchivers.btnrelativearchiver.hint
msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint"
#: tfrmoptionsarchivers.btnarchiverdeletehelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchiverextracthelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchiverlisthelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchiverother.caption
msgid "Oth&er..."
msgstr ""
#: tfrmoptionsarchivers.btnarchiverrelativer.hint
msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint"
msgid "Some functions to select appropriate path"
msgstr ""
#: tfrmoptionsarchivers.chkmultiarcdebug.caption
msgid "De&bug mode"
#: tfrmoptionsarchivers.btnarchiverrename.caption
msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption"
msgid "&Rename"
msgstr ""
#: tfrmoptionsarchivers.chkmultiarcenabled.caption
#: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint
msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.btnarchivertesthelper.hint
msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint"
msgid "Variable reminder helper"
msgstr ""
#: tfrmoptionsarchivers.chkarchiverenabled.caption
msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption"
msgid "E&nabled"
msgstr ""
#: tfrmoptionsarchivers.chkmultiarcoutput.caption
#: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption
msgid "De&bug mode"
msgstr ""
#: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption
msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption"
msgid "S&how console output"
msgstr ""
#: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption
msgid "Uni&x file attributes"
msgstr ""
#: tfrmoptionsarchivers.ckbarchiverunixpath.caption
msgid "&Unix path delimiter \"/\""
msgstr ""
#: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption
msgid "Windows &file attributes"
msgstr ""
#: tfrmoptionsarchivers.ckbarchiverwindowspath.caption
msgid "Windows path deli&miter \"\\\""
msgstr ""
#: tfrmoptionsarchivers.gbarchiverformatparsingmode.caption
msgid "Format parsing mode:"
msgstr ""
#: tfrmoptionsarchivers.gbarchiverids.caption
msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:"
msgstr ""
#: tfrmoptionsarchivers.gbarchiveroptions.caption
msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION"
msgid "Options"
msgid "Options:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveadd.caption
#: tfrmoptionsarchivers.lblarchiveradd.caption
msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption"
msgid "Add&ing:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveextension.caption
msgid "E&xtension:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveextract.caption
msgid "Ex&tract:"
msgstr ""
#: tfrmoptionsarchivers.lblarchivelist.caption
msgid "&List:"
msgstr ""
#: tfrmoptionsarchivers.lblarchivelistend.caption
msgid "Listing &finish (optional):"
msgstr ""
#: tfrmoptionsarchivers.lblarchivelistformat.caption
msgid "Listing for&mat:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveliststart.caption
msgid "Listin&g start (optional):"
msgstr ""
#: tfrmoptionsarchivers.lblarchiver.caption
#: tfrmoptionsarchivers.lblarchiverarchiver.caption
msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption"
msgid "Arc&hiver:"
msgstr ""
#: tfrmoptionsarchivers.lbldescription.caption
#: tfrmoptionsarchivers.lblarchiverdelete.caption
msgid "De&lete:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverdescription.caption
msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption"
msgid "De&scription:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverextension.caption
msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption"
msgid "E&xtension:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverextract.caption
msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption"
msgid "Ex&tract:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption
msgid "Extract &without path:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveridposition.caption
msgid "ID Po&sition:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverids.caption
msgid "&ID:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiveridseekrange.caption
msgid "ID See&k Range:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverlist.caption
msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption"
msgid "&List:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverlistbox.caption
msgid "Archi&vers:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverlistend.caption
msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption"
msgid "Listing &finish (optional):"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverlistformat.caption
msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption"
msgid "Listing for&mat:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverliststart.caption
msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption"
msgid "Listin&g start (optional):"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverpasswordquery.caption
msgid "Password &query string:"
msgstr ""
#: tfrmoptionsarchivers.lblarchiverselfextract.caption
msgid "Create self extractin&g archive:"
msgstr ""
#: tfrmoptionsarchivers.lblarchivertest.caption
msgid "Tes&t:"
msgstr ""
#: tfrmoptionsarchivers.miarchiverautoconfigure.caption
msgid "Auto Configure"
msgstr ""
#: tfrmoptionsarchivers.miarchiverdisableall.caption
msgid "Disable all"
msgstr ""
#: tfrmoptionsarchivers.miarchiverdiscardmodification.caption
msgid "Discard modifications"
msgstr ""
#: tfrmoptionsarchivers.miarchiverenableall.caption
msgid "Enable all"
msgstr ""
#: tfrmoptionsarchivers.miarchiverexport.caption
msgctxt "tfrmoptionsarchivers.miarchiverexport.caption"
msgid "Export..."
msgstr ""
#: tfrmoptionsarchivers.miarchiverimport.caption
msgctxt "tfrmoptionsarchivers.miarchiverimport.caption"
msgid "Import..."
msgstr ""
#: tfrmoptionsarchivers.miarchiversortarchivers.caption
msgid "Sort archivers"
msgstr ""
#: tfrmoptionsarchivers.tbarchiveradditional.caption
msgid "Additional"
msgstr ""
@ -11045,55 +10998,126 @@ msgstr ""
msgid "Add at &beginning;Add at the end;Smart add"
msgstr ""
#: ulng.rsoptarchivedelete
msgid "Delete:"
#: ulng.rsoptarchiveconfiguresavetochange
msgid "To change current editing archive configuration, either APPLY or DELETE current editing one"
msgstr ""
#: ulng.rsoptarchiveextractwithoutpath
msgid "Extract without path:"
#: ulng.rsoptarchiveradditonalcmd
msgid "Mode dependent, additional command"
msgstr ""
#: ulng.rsoptarchiveformmode
msgid "Format parsing mode:"
#: ulng.rsoptarchiveraddonlynotempty
msgid "Add if it is non-empty"
msgstr ""
#: ulng.rsoptarchiveid
msgid "ID:"
#: ulng.rsoptarchiverarchivel
msgid "Archive File (long name)"
msgstr ""
#: ulng.rsoptarchiveidpos
msgid "ID Position:"
#: ulng.rsoptarchiverarchives
msgid "Archive file (short name)"
msgstr ""
#: ulng.rsoptarchiveidseekrange
msgid "ID Seek Range:"
#: ulng.rsoptarchiverchangeencoding
msgid "Change Archiver Listing Encoding"
msgstr ""
#: ulng.rsoptarchiveparam
msgid "Parameter"
#: ulng.rsoptarchiverconfirmdelete
msgid "Are you sure you want to delete: %s"
msgstr ""
#: ulng.rsoptarchivepasswordquery
msgid "Password query string:"
#: ulng.rsoptarchiverdefaultexportfilename
msgid "Exported Archiver Configuration"
msgstr ""
#: ulng.rsoptarchiveselfextract
msgid "Create self extracting archive:"
#: ulng.rsoptarchivererrorlevel
msgid "errorlevel"
msgstr ""
#: ulng.rsoptarchivetest
msgid "Test:"
#: ulng.rsoptarchiverexportcaption
msgid "Export archiver configuration"
msgstr ""
#: ulng.rsoptarchiverexportdone
msgid "Exportation of %d elements to file \"%s\" completed."
msgstr ""
#: ulng.rsoptarchiverexportprompt
msgid "Select the one(s) you want to export"
msgstr ""
#: ulng.rsoptarchiverfilelistl
msgid "Filelist (long names)"
msgstr ""
#: ulng.rsoptarchiverfilelists
msgid "Filelist (short names)"
msgstr ""
#: ulng.rsoptarchiverimportcaption
msgid "Import archiver configuration"
msgstr ""
#: ulng.rsoptarchiverimportdone
msgid "Importation of %d elements from file \"%s\" completed."
msgstr ""
#: ulng.rsoptarchiverimportfile
msgid "Select the file to import archiver configuration(s)"
msgstr ""
#: ulng.rsoptarchiverimportprompt
msgid "Select the one(s) you want to import"
msgstr ""
#: ulng.rsoptarchiverjustname
msgid "Use name only, without path"
msgstr ""
#: ulng.rsoptarchiverjustpath
msgid "Use path only, without name"
msgstr ""
#: ulng.rsoptarchiverprograml
msgid "Archive Program (long name)"
msgstr ""
#: ulng.rsoptarchiverprograms
msgid "Archive Program (short name)"
msgstr ""
#: ulng.rsoptarchiverquoteall
msgid "Quote all names"
msgstr ""
#: ulng.rsoptarchiverquotewithspace
msgid "Quote names with spaces"
msgstr ""
#: ulng.rsoptarchiversinglefprocess
msgid "Single filename to process"
msgstr ""
#: ulng.rsoptarchivertargetsubdir
msgid "Target subdirecory"
msgstr ""
#: ulng.rsoptarchiveruseansi
msgid "Use ANSI encoding"
msgstr ""
#: ulng.rsoptarchiveruseutf8
msgid "Use UTF8 encoding"
msgstr ""
#: ulng.rsoptarchiverwheretosave
msgid "Enter location and filename where to save archiver configuration"
msgstr ""
#: ulng.rsoptarchivetypename
msgid "Archive type name:"
msgstr ""
#: ulng.rsoptarchivevalue
msgctxt "ulng.rsoptarchivevalue"
msgid "Value"
msgstr ""
#: ulng.rsoptassocpluginwith
msgid "Associate plugin \"%s\" with:"
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -20,7 +20,7 @@ object frmMain: TfrmMain
SessionProperties = 'nbConsole.Height;seLogWindow.Height;TreePanel.Width'
ShowHint = True
ShowInTaskBar = stAlways
LCLVersion = '1.6.0.4'
LCLVersion = '1.8.4.0'
Visible = True
object MainToolBar: TKASToolBar
AnchorSideTop.Control = Owner
@ -1404,6 +1404,9 @@ object frmMain: TfrmMain
object mnuConfigFolderTabs: TMenuItem
Action = actConfigFolderTabs
end
object miConfigArchivers: TMenuItem
Action = actConfigArchivers
end
object miLine55: TMenuItem
Caption = '-'
end
@ -2668,6 +2671,12 @@ object frmMain: TfrmMain
Hint = 'Switch between left and right file list'
OnExecute = actExecute
end
object actConfigArchivers: TAction
Tag = 5
Category = 'Configuration'
Caption = 'Configuration of Archivers'
OnExecute = actExecute
end
end
object pmHotList: TPopupMenu
Images = imgLstDirectoryHotlist

View file

@ -2,7 +2,7 @@
Double Commander
-------------------------------------------------------------------------
Licence : GNU GPL v 2.0
Copyright (C) 2006-2016 Alexander Koblov (Alexx2000@mail.ru)
Copyright (C) 2006-2018 Alexander Koblov (Alexx2000@mail.ru)
Main Dialog window
@ -106,6 +106,7 @@ type
actConfigSaveSettings: TAction;
actExecuteScript: TAction;
actFocusSwap: TAction;
actConfigArchivers: TAction;
actUnmarkCurrentNameExt: TAction;
actMarkCurrentNameExt: TAction;
actUnmarkCurrentName: TAction;
@ -217,6 +218,7 @@ type
lblRightDriveInfo: TLabel;
lblLeftDriveInfo: TLabel;
lblCommandPath: TLabel;
miConfigArchivers: TMenuItem;
mnuConfigSaveSettings: TMenuItem;
miLine55: TMenuItem;
mnuConfigureFavoriteTabs: TMenuItem;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Creates Total Commander fake window (some plugins don't work without it)
Copyright (C) 2009-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2009-2018 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -211,7 +211,7 @@ const
(TCCommand: 'cm_ThumbnailsConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Thumbnails
(TCCommand: 'cm_LogConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Log file
(TCCommand: 'cm_IgnoreConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Ignore list
(TCCommand: 'cm_PackerConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Packer
(TCCommand: 'cm_PackerConfig'; TCIcon: 34; DCCommand: 'cm_ConfigArchivers'; DCParameters: '' ), //Conf: Packer
(TCCommand: 'cm_ZipPackerConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: ZIP packer
(TCCommand: 'cm_Confirmation'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Misc, Confirmation
(TCCommand: 'cm_ConfigSavePos'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Conf: Save position

View file

@ -4,7 +4,7 @@
-------------------------------------------------------------------------
Implementing of Showing messages with localization
Copyright (C) 2007-2016 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2007-2018 Alexander Koblov (alexx2000@mail.ru)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -122,6 +122,7 @@ function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; var Va
function ShowInputComboBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String) : Boolean;
function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean;
function ShowInputMultiSelectListBox(const sCaption, sPrompt : String; slValueList, slOutputIndexSelected : TStringList) : Boolean;
procedure msgLoadLng;
@ -584,14 +585,13 @@ begin
TForm(TComponent(Sender).Owner).ModalResult:=mrOk;
end;
function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList;
var sValue : String; var SelectedChoice:integer) : Boolean;
function InnerShowInputListBox(const sCaption, sPrompt: String; bMultiSelect:boolean; slValueList,slOutputIndexSelected:TStringList; var sValue: String; var SelectedChoice:integer) : Boolean;
var
frmDialog : TForm;
lblPrompt : TLabel;
lbValue : TListBox;
bbtnOK,
bbtnCancel : TBitBtn;
bbtnOK, bbtnCancel, bbtnSelectAll : TBitBtn;
iIndex, iModalResult: integer;
ProcedureHolder:TProcedureHolder;
begin
SelectedChoice:=-1;
@ -625,12 +625,29 @@ begin
height := (Screen.Height div 2);
Items.Assign(slValueList);
ItemIndex:=Items.IndexOf(sValue);
lbValue.MultiSelect:=bMultiSelect;
if (ItemIndex=-1) AND (Items.count>0) then ItemIndex:=0;
Left := 6;
AnchorToNeighbour(akTop, 6, lblPrompt);
Constraints.MinWidth := max(280, Screen.Width div 4);
OnDblClick:= ProcedureHolder.ListBoxDblClick;
end;
if bMultiSelect then
begin
bbtnSelectAll := TBitBtn.Create(frmDialog);
with bbtnSelectAll do
begin
Parent := frmDialog;
Kind := bkAll;
Cancel := True;
Left := 6;
Width:= 90;
Anchors := [akTop, akLeft];
AnchorToNeighbour(akTop, 18, lbValue);
AnchorSide[akLeft].Control := lbValue;
AnchorSide[akLeft].Side := asrLeft;
end;
end;
bbtnCancel := TBitBtn.Create(frmDialog);
with bbtnCancel do
begin
@ -655,11 +672,21 @@ begin
AnchorToNeighbour(akTop, 18, lbValue);
AnchorToNeighbour(akRight, 6, bbtnCancel);
end;
Result := (ShowModal = mrOK) AND (lbValue.ItemIndex<>-1);
iModalResult:=ShowModal;
Result := (iModalResult = mrOK) AND (lbValue.ItemIndex<>-1);
if (not Result) AND (bMultiSelect) AND (iModalResult = mrAll) then
begin
lbValue.SelectAll;
Result:=True;
end;
if Result then
begin
sValue:=lbValue.Items.Strings[lbValue.ItemIndex];
SelectedChoice:=lbValue.ItemIndex
SelectedChoice:=lbValue.ItemIndex;
if bMultiSelect then
for iIndex:=0 to pred(lbValue.Items.count) do
if lbValue.Selected[iIndex] then
slOutputIndexSelected.Add(IntToStr(iIndex));
end;
finally
FreeAndNil(frmDialog);
@ -670,6 +697,20 @@ begin
end;
end;
function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean;
begin
result := InnerShowInputListBox(sCaption, sPrompt, False, slValueList, nil, sValue, SelectedChoice);
end;
function ShowInputMultiSelectListBox(const sCaption, sPrompt : String; slValueList, slOutputIndexSelected : TStringList) : Boolean;
var
sDummyValue:string;
iDummySelectedChoice:integer;
begin
if slValueList.Count>0 then sDummyValue := slValueList.Strings[0];
result := InnerShowInputListBox(sCaption, sPrompt, True, slValueList, slOutputIndexSelected, sDummyValue, iDummySelectedChoice);
end;
function MsgChoiceBox(const Message: String; Buttons: TDynamicStringArray): Integer;
const
cButtonSpace = 8;

View file

@ -12,7 +12,7 @@
Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru)
Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru)
Copyright (C) 2006-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2006-2018 Alexander Koblov (alexx2000@mail.ru)
}
@ -146,6 +146,9 @@ const
// 10 - changed Icons/CustomDriveIcons to Icons/CustomIcons
ConfigVersion = 10;
// Configuration related filenames
sMULTIARC_FILENAME = 'multiarc.ini';
TKeyTypingModifierToShift: array[TKeyTypingModifier] of TShiftState =
([], [ssAlt], [ssCtrl, ssAlt]);
@ -720,7 +723,7 @@ end;
function LoadMultiArcConfig(var {%H-}ErrorMessage: String): Boolean;
begin
gMultiArcList.LoadFromFile(gpCfgDir + 'multiarc.ini');
gMultiArcList.LoadFromFile(gpCfgDir + sMULTIARC_FILENAME);
Result := True;
end;
@ -1200,8 +1203,8 @@ begin
if not mbFileExists(gpCfgDir + 'pixmaps.txt') then
CopyFile(gpGlobalCfgDir + 'pixmaps.txt', gpCfgDir + 'pixmaps.txt');
// multiarc configuration file
if not mbFileExists(gpCfgDir + 'multiarc.ini') then
CopyFile(gpGlobalCfgDir + 'multiarc.ini', gpCfgDir + 'multiarc.ini');
if not mbFileExists(gpCfgDir + sMULTIARC_FILENAME) then
CopyFile(gpGlobalCfgDir + sMULTIARC_FILENAME, gpCfgDir + sMULTIARC_FILENAME);
end;
end;
@ -1943,8 +1946,8 @@ begin
LoadConfigCheckErrors(@LoadHotManConfig, gpCfgDir + gNameSCFile, ErrorMessage);
{ MultiArc addons }
if mbFileExists(gpCfgDir + 'multiarc.ini') then
LoadConfigCheckErrors(@LoadMultiArcConfig, gpCfgDir + 'multiarc.ini', ErrorMessage);
if mbFileExists(gpCfgDir + sMULTIARC_FILENAME) then
LoadConfigCheckErrors(@LoadMultiArcConfig, gpCfgDir + sMULTIARC_FILENAME, ErrorMessage);
{ Various history }
if mbFileExists(gpCfgDir + 'history.xml') then

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Localization core unit
Copyright (C) 2007-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2007-2018 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -100,7 +100,39 @@ resourcestring
rsMsgSelectOnlyCheckSumFiles = 'Please select only checksum files!';
rsMsgPresetAlreadyExists = 'Preset "%s" already exists. Overwrite?';
rsMsgVolumeSizeEnter = 'Please enter the volume size:';
// Archiver section.
rsMsgArchiverCustomParams = 'Additional parameters for archiver command-line:';
rsOptArchiverConfirmDelete = 'Are you sure you want to delete: %s';
rsOptArchiverImportFile = 'Select the file to import archiver configuration(s)';
rsOptArchiverWhereToSave = 'Enter location and filename where to save archiver configuration';
rsOptArchiverDefaultExportFilename = 'Exported Archiver Configuration';
rsOptArchiverImportCaption = 'Import archiver configuration';
rsOptArchiverImportPrompt = 'Select the one(s) you want to import';
rsOptArchiverImportDone = 'Importation of %d elements from file "%s" completed.';
rsOptArchiverExportCaption = 'Export archiver configuration';
rsOptArchiverExportPrompt = 'Select the one(s) you want to export';
rsOptArchiverExportDone = 'Exportation of %d elements to file "%s" completed.';
rsOptArchiverProgramL = 'Archive Program (long name)';
rsOptArchiverProgramS = 'Archive Program (short name)';
rsOptArchiverArchiveL = 'Archive File (long name)';
rsOptArchiverArchiveS = 'Archive file (short name)';
rsOptArchiverFileListL = 'Filelist (long names)';
rsOptArchiverFileListS = 'Filelist (short names)';
rsOptArchiverSingleFProcess = 'Single filename to process';
rsOptArchiverErrorLevel = 'errorlevel';
rsOptArchiverChangeEncoding = 'Change Archiver Listing Encoding';
rsOptArchiverTargetSubDir = 'Target subdirecory';
rsOptArchiverAdditonalCmd = 'Mode dependent, additional command';
rsOptArchiverAddOnlyNotEmpty = 'Add if it is non-empty';
rsOptArchiverQuoteWithSpace = 'Quote names with spaces';
rsOptArchiverQuoteAll = 'Quote all names';
rsOptArchiverJustName = 'Use name only, without path';
rsOptArchiverJustPath = 'Use path only, without name';
rsOptArchiverUseAnsi = 'Use ANSI encoding';
rsOptArchiverUseUTF8 = 'Use UTF8 encoding';
rsOptArchiveConfigureSaveToChange = 'To change current editing archive configuration, either APPLY or DELETE current editing one';
rsMsgMasterPassword = 'Master Password';
rsMsgMasterPasswordEnter = 'Please enter the master password:';
rsMsgWrongPasswordTryAgain = 'Wrong password!'#13'Please try again!';
@ -599,17 +631,7 @@ resourcestring
rsOptConfigSortOrder = 'Classic, legacy order;Alphabetic order (but language still first)';
rsOptDifferFramePosition = 'Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right';
//-------------------------------
rsOptArchiveParam = 'Parameter';
rsOptArchiveValue = 'Value';
rsOptArchiveDelete = 'Delete:';
rsOptArchiveTest = 'Test:';
rsOptArchiveExtractWithoutPath = 'Extract without path:';
rsOptArchiveSelfExtract = 'Create self extracting archive:';
rsOptArchiveID = 'ID:';
rsOptArchiveIDPos = 'ID Position:';
rsOptArchiveIDSeekRange = 'ID Seek Range:';
rsOptArchivePasswordQuery = 'Password query string:';
rsOptArchiveFormMode = 'Format parsing mode:';
//-------------------------------
rsOptEnterExt = 'Enter extension';
rsOptAssocPluginWith = 'Associate plugin "%s" with:';

View file

@ -4,7 +4,7 @@
This unit contains DC actions of the main form
Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru)
Copyright (C) 2008-2016 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2008-2018 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -354,6 +354,7 @@ type
procedure cm_ExecuteScript(const {%H-}Params: array of string);
procedure cm_FocusSwap(const {%H-}Params: array of string);
procedure cm_Benchmark(const {%H-}Params: array of string);
procedure cm_ConfigArchivers(const {%H-}Params: array of string);
// Internal commands
procedure cm_ExecuteToolbarItem(const Params: array of string);
@ -380,7 +381,7 @@ uses uFindFiles, Forms, Controls, Dialogs, Clipbrd, strutils, LCLProc, HelpIntfs
uHotDir, DCXmlConfig, dmCommonData, fOptionsFrame, foptionsDirectoryHotlist,
fOptionsToolbar, fMainCommandsDlg, uConnectionManager, fOptionsTabs, fOptionsFavoriteTabs,
fTreeViewMenu, fOptionsTreeViewMenu, fOptionsTreeViewMenuColor, uArchiveFileSource,
fOptionsFileSearch, fOptionsHotKeys, fBenchmark
fOptionsFileSearch, fOptionsHotKeys, fBenchmark, fOptionsArchivers
{$IFDEF COLUMNSFILEVIEW_VTV}
, uColumnsFileViewVtv
{$ELSE}
@ -4825,6 +4826,18 @@ begin
OperationsManager.AddOperation(TBenchmarkOperation.Create(frmMain));
end;
{ TMainCommands.cm_ConfigArchivers }
procedure TMainCommands.cm_ConfigArchivers(const {%H-}Params: array of string);
var
Editor: TOptionsEditor;
Options: IOptionsDialog;
begin
Options := ShowOptions(TfrmOptionsArchivers);
Editor := Options.GetEditor(TfrmOptionsArchivers);
Application.ProcessMessages;
if Editor.CanFocus then Editor.SetFocus;
end;
{ TMainCommands.cm_AddNewSearch }
procedure TMainCommands.cm_AddNewSearch(const Params: array of string);
var

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Implementation of multi archiver support
Copyright (C) 2010-2013 Koblov Alexander (Alexx2000@mail.ru)
Copyright (C) 2010-2018 Koblov Alexander (Alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -129,6 +129,7 @@ type
constructor Create;
destructor Destroy; override;
function CanYouHandleThisFile(const FileName: String): Boolean;
function Clone: TMultiArcItem;
property FID: AnsiString read FSignature write SetSignature;
property FIDPos: AnsiString read FSignaturePosition write SetSignaturePosition;
property FIDSeekRange: AnsiString read GetSignatureSeekRange write SetSignatureSeekRange;
@ -151,6 +152,9 @@ type
procedure LoadFromFile(const FileName: String);
procedure SaveToFile(const FileName: String);
function Add(const S: String; aMultiArcItem: TMultiArcItem): Integer;
function Insert(Index: integer; const S: string; aMultiArcItem: TMultiArcItem): integer;
function Clone: TMultiArcList;
function ComputeSignature(Seed: dword = $00000000): dword;
procedure Delete(Index: Integer);
property Names[Index: Integer]: String read GetName write SetName;
property Items[Index: Integer]: TMultiArcItem read GetItem; default;
@ -160,7 +164,7 @@ type
implementation
uses
LCLProc, StrUtils, Math, FileUtil, DCClassesUtf8, uDCUtils, DCOSUtils;
crc, LCLProc, StrUtils, Math, FileUtil, DCClassesUtf8, uDCUtils, DCOSUtils;
{ TMultiArcList }
@ -239,6 +243,7 @@ var
FirstTime: Boolean = True;
MultiArcItem: TMultiArcItem;
begin
Self.Clear;
IniFile:= TIniFileEx.Create(FileName, fmOpenRead);
try
Sections:= TStringList.Create;
@ -347,11 +352,68 @@ begin
Result := FList.AddObject(S, aMultiArcItem);
end;
function TMultiArcList.Insert(Index: integer; const S: string; aMultiArcItem: TMultiArcItem): integer;
begin
try
FList.InsertObject(Index, S, aMultiArcItem);
Result := Index;
except
Result := -1;
end;
end;
procedure TMultiArcList.Delete(Index: Integer);
begin
Items[Index].Free;
FList.Delete(Index);
end;
function TMultiArcList.Clone: TMultiArcList;
var
Index: integer;
begin
Result := TMultiArcList.Create;
for Index := 0 to pred(Self.Count) do
Result.Add(Self.FList.Strings[Index], Self.Items[Index].Clone);
end;
{ TMultiArcList.ComputeSignature }
// Routine tries to pickup all char chain from element of all entries and compute a unique CRC32.
// This CRC32 will be a kind of signature of the MultiArc settings.
function TMultiArcList.ComputeSignature(Seed: dword): dword;
procedure UpdateSignature(sInfo: string);
begin
if length(sInfo) > 0 then
Result := crc32(Result, @sInfo[1], length(sInfo));
end;
var
Index, iInnerIndex: integer;
begin
Result := Seed;
for Index := 0 to pred(Count) do
begin
UpdateSignature(Self.FList.Strings[Index]);
UpdateSignature(Self.Items[Index].FDescription);
UpdateSignature(Self.Items[Index].FArchiver);
UpdateSignature(Self.Items[Index].FExtension);
UpdateSignature(Self.Items[Index].FList);
UpdateSignature(Self.Items[Index].FStart);
UpdateSignature(Self.Items[Index].FEnd);
for iInnerIndex := 0 to pred(Self.Items[Index].FFormat.Count) do
UpdateSignature(Self.Items[Index].FFormat.Strings[iInnerIndex]);
UpdateSignature(Self.Items[Index].FExtract);
UpdateSignature(Self.Items[Index].FAdd);
UpdateSignature(Self.Items[Index].FDelete);
UpdateSignature(Self.Items[Index].FTest);
UpdateSignature(Self.Items[Index].FExtractWithoutPath);
UpdateSignature(Self.Items[Index].FAddSelfExtract);
UpdateSignature(Self.Items[Index].FPasswordQuery);
UpdateSignature(Self.Items[Index].FID);
UpdateSignature(Self.Items[Index].FIDPos);
UpdateSignature(Self.Items[Index].FIDSeekRange);
Result := crc32(Result, @Self.Items[Index].FFormMode, sizeof(Self.Items[Index].FFormMode));
Result := crc32(Result, @Self.Items[Index].FEnabled, sizeof(Self.Items[Index].FEnabled));
Result := crc32(Result, @Self.Items[Index].FOutput, sizeof(Self.Items[Index].FOutput));
Result := crc32(Result, @Self.Items[Index].FDebug, sizeof(Self.Items[Index].FDebug));
end;
end;
{ TMultiArcItem }
@ -512,6 +574,33 @@ begin
end;
end;
function TMultiArcItem.Clone: TMultiArcItem;
begin
Result := TMultiArcItem.Create;
//Keep elements in some ordre a when loading them from the .ini, it will be simpler to validate if we are missing one.
Result.FArchiver := Self.FArchiver;
Result.FDescription := Self.FDescription;
Result.FID := Self.FID;
Result.FIDPos := Self.FIDPos;
Result.FIDSeekRange := Self.FIDSeekRange;
Result.FExtension := Self.FExtension;
Result.FStart := Self.FStart;
Result.FEnd := Self.FEnd;
Result.FFormat.Assign(Self.FFormat);
Result.FList := Self.FList;
Result.FExtract := Self.FExtract;
Result.FExtractWithoutPath := Self.FExtractWithoutPath;
Result.FTest := Self.FTest;
Result.FDelete := Self.FDelete;
Result.FAdd := Self.FAdd;
Result.FAddSelfExtract := Self.FAddSelfExtract;
Result.FPasswordQuery := Self.FPasswordQuery;
Result.FFormMode := Self.FFormMode;
Result.FEnabled := Self.FEnabled;
Result.FOutput := Self.FOutput;
Result.FDebug := Self.FDebug;
end;
{ TSignatureList }
function TSignatureList.GetSignature(Index: Integer): PSignature;