mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
693 lines
26 KiB
ObjectPascal
693 lines
26 KiB
ObjectPascal
{
|
|
Double Commander
|
|
------------------------------------------------------------
|
|
Seksi Commander
|
|
----------------------------
|
|
Licence : GNU GPL v 2.0
|
|
Author : radek.cervinka@centrum.cz
|
|
|
|
Globals variables and some consts
|
|
|
|
contributors:
|
|
|
|
Copyright (C) 2006-2008 Alexander Koblov (Alexx2000@mail.ru)
|
|
|
|
Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru)
|
|
|
|
Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru)
|
|
|
|
}
|
|
|
|
unit uGlobs;
|
|
|
|
interface
|
|
uses
|
|
Classes, Controls, uExts, uColorExt, Graphics, uClassesEx, uWDXModule,
|
|
uColumns,uhotkeymanger,uActs, uWFXModule, uWCXModule;
|
|
|
|
type
|
|
TControlPosition = object
|
|
Left: Integer;
|
|
Top: Integer;
|
|
Width: Integer;
|
|
Height: Integer;
|
|
|
|
procedure Save(Control: TControl);
|
|
procedure Restore(Control: TControl);
|
|
end;
|
|
|
|
type
|
|
{ Log options }
|
|
TLogOptions = set of (log_cp_mv_ln, log_delete, log_dir_op, log_arc_op,
|
|
log_vfs_op, log_success, log_errors, log_info);
|
|
|
|
var
|
|
{ For localization }
|
|
gPOFileName : String;
|
|
|
|
{ WDX plugins }
|
|
gWdxPlugins:TWDXModuleList;
|
|
{ WCX plugins }
|
|
gWCXPlugins: TWCXModuleList;
|
|
{ WFX plugins }
|
|
gWFXPlugins: TWFXModuleList;
|
|
|
|
{ Columns Set }
|
|
ColSet:TPanelColumnsList;
|
|
|
|
{ Layout page }
|
|
gButtonBar,
|
|
gToolBarFlat,
|
|
gDriveBar1,
|
|
gDriveBar2,
|
|
gDriveBarFlat,
|
|
gDriveMenuButton,
|
|
gDirectoryTabs,
|
|
gCurDir,
|
|
gTabHeader,
|
|
gStatusBar,
|
|
gCmdLine,
|
|
gLogWindow,
|
|
gKeyButtons,
|
|
gInterfaceFlat : Boolean;
|
|
|
|
gToolBarIconSize : Integer;
|
|
|
|
gDirSortFirst:Boolean=True; // want to show dir first in panels
|
|
gDirHistoryCount:Integer=30; // how many history we remember
|
|
gShowSystemFiles:Boolean=True;
|
|
gTerm: String;
|
|
gRunTerm: String;
|
|
gCaseSensitiveSort:Boolean=True;
|
|
gLynxLike:Boolean=True;
|
|
gDirSelect:Boolean=True;
|
|
|
|
gMouseSelectionEnabled: Boolean = True;
|
|
gMouseSelectionButton: Integer = 0;
|
|
|
|
glsHotDir:TStringListEx;
|
|
glsDirHistory:TStringListEx;
|
|
glsMaskHistory : TStringListEx;
|
|
gCutTextToColWidth : Boolean;
|
|
gScrollMode: Integer;
|
|
gTrayIcon: Boolean;
|
|
gShortFileSizeFormat:Boolean=True;
|
|
|
|
gDateTimeFormat : String;
|
|
|
|
gDriveBlackList: String;
|
|
|
|
gShowWarningMessages: Boolean;
|
|
|
|
{ Tools page }
|
|
|
|
gUseExtEdit:Boolean=False;
|
|
gUseExtView:Boolean=False;
|
|
gUseExtDiff:Boolean=False;
|
|
|
|
gExtEdit:String='emacs';
|
|
gExtView:String='emacs';
|
|
gExtDiff:String='gtk-diff';
|
|
gLuaLib:String='/usr/lib/liblua5.1.so';
|
|
gExts:TExts;
|
|
gColorExt:TColorExt;
|
|
|
|
gFontName: String;
|
|
gFontSize: Integer;
|
|
gFontStyle: TFontStyles;
|
|
gEditorFontName: String;
|
|
gEditorFontSize: Integer;
|
|
gEditorFontStyle: TFontStyles;
|
|
gViewerFontName: String;
|
|
gViewerFontSize: Integer;
|
|
gViewerFontStyle: TFontStyles;
|
|
|
|
gViewerPos:TControlPosition;
|
|
gEditorPos:TControlPosition;
|
|
|
|
{ File panels color page }
|
|
|
|
gBackColor, //Background color
|
|
gBackColor2, //Background color 2
|
|
gForeColor, //text color
|
|
gMarkColor, // Mark color
|
|
gCursorColor, //Cursor color
|
|
gCursorText : TColor; //text color under cursor
|
|
gUseInvertedSelection:boolean=false;
|
|
|
|
gShowIcons : Boolean;
|
|
gIconsSize : Integer;
|
|
gUseMmapInSearch : Boolean;
|
|
gCustomDriveIcons : Boolean; // for use custom drive icons under windows
|
|
|
|
{ File operations page }
|
|
|
|
gCopyBlockSize : Integer;
|
|
gDropReadOnlyFlag : Boolean = True;
|
|
gWipePassNumber: Integer;
|
|
gProcessComments: Boolean;
|
|
|
|
gRenameSelOnlyName:boolean;
|
|
|
|
{ Folder tabs page }
|
|
|
|
gDirTabOptions,
|
|
gDirTabLimit : Integer;
|
|
|
|
{ Log page }
|
|
gLogFile : Boolean;
|
|
gLogFileName : String;
|
|
gLogOptions : TLogOptions = [log_cp_mv_ln, log_delete, log_dir_op, log_arc_op,
|
|
log_vfs_op, log_success, log_errors, log_info];
|
|
|
|
{ Configuration page }
|
|
gUseIniInProgramDir,
|
|
gSaveDirHistory,
|
|
gSaveCmdLineHistory,
|
|
gSaveFileMaskHistory : Boolean;
|
|
|
|
{ Quick Search page}
|
|
gQuickSearch : Boolean;
|
|
gQuickSearchMode : TShiftState = [ssCtrl, ssAlt];
|
|
gQuickSearchMatchBeginning,
|
|
gQuickSearchMatchEnding : Boolean;
|
|
|
|
{HotKey Manager}
|
|
HotMan:THotKeyManager;
|
|
|
|
{Actions}
|
|
Actions:TActs;
|
|
|
|
const
|
|
{ Tabs options }
|
|
tb_always_visible = 1;
|
|
tb_multiple_lines = 2;
|
|
tb_same_width = 4;
|
|
tb_text_length_limit = 8;
|
|
tb_confirm_close_all = 16;
|
|
tb_close_on_dbl_click = 32;
|
|
tb_open_new_in_foreground = 64;
|
|
tb_open_new_near_current = 128;
|
|
tb_show_asterisk_for_locked = 256;
|
|
tb_activate_panel_on_click = 512;
|
|
|
|
function LoadGlobs : Boolean;
|
|
procedure SaveGlobs;
|
|
function LoadStringsFromFile(var list:TStringListEx; const sFileName:String):boolean;
|
|
|
|
procedure LoadDefaultHotkeyBindings;
|
|
|
|
procedure ResizeToScreen(Control:TControl; Width:integer=1024; Height:integer=768);
|
|
|
|
// for debugging only, can be removed
|
|
procedure dbgShowWindowPos(const pos: TControlPosition);
|
|
|
|
const
|
|
cMaxStringItems=50;
|
|
|
|
var
|
|
gIni:TIniFileEx = nil;
|
|
|
|
implementation
|
|
uses
|
|
Forms, LCLProc, SysUtils, uGlobsPaths, uLng, uShowMsg, uFileProcs, uOSUtils;
|
|
|
|
procedure LoadDefaultHotkeyBindings;
|
|
begin
|
|
// if not assigned(HotMan) then exit;
|
|
With HotMan do
|
|
begin
|
|
AddHotKey('Alt+X','cm_Exit','','FrmMain','FrmMain');
|
|
AddHotKey('F3','cm_View','','FrmMain','FrmMain');
|
|
AddHotKey('F4','cm_Edit','','FrmMain','FrmMain');
|
|
AddHotKey('F5','cm_Copy','','FrmMain','FrmMain');
|
|
AddHotKey('F6','cm_Rename','','FrmMain','FrmMain');
|
|
AddHotKey('F7','cm_MakeDir','','FrmMain','FrmMain');
|
|
AddHotKey('F1','cm_About','','FrmMain','FrmMain');
|
|
AddHotKey('F9','cm_ShowMenu','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+R','cm_Refresh','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+F7','cm_Search','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+D','cm_DirHotList','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+F3','cm_SortByName','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+F4','cm_SortByExt','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+F6','cm_SortBySize','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+F5','cm_SortByDate','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+M','cm_MultiRename','','FrmMain','FrmMain');
|
|
AddHotKey('Shift+F5','cm_CopySamePanel','','FrmMain','FrmMain');
|
|
AddHotKey('Shift+F6','cm_RenameOnly','','FrmMain','FrmMain');
|
|
AddHotKey('Shift+F4','cm_EditNew','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+H','cm_DirHistory','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+7','cm_ShowCmdLineHistory','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+X','cm_RunTerm','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+L','cm_CalculateSpace','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+Enter','cm_FileProperties','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+T','cm_NewTab','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+W','cm_RemoveTab','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Z','cm_EditComment','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+F5','cm_PackFiles','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+F9','cm_ExtractFiles','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+F1','cm_LeftOpenDrives','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+F2','cm_RightOpenDrives','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+P','cm_AddPathToCmdLine','','FrmMain','FrmMain');
|
|
AddHotKey('Shift+F2','cm_FocusCmdLine','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Left','cm_TransferLeft','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Right','cm_TransferRight','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+PgDn','cm_OpenArchive','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+S','cm_QuickSearch','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Alt+X','cm_CopyNamesToClip','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Alt+C','cm_CopyFullNamesToClip','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+Z','cm_TargetEqualSource','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+U','cm_Exchange','','FrmMain','FrmMain');
|
|
AddHotKey('Alt+Del','cm_Wipe','','FrmMain','FrmMain');
|
|
AddHotKey('Ctrl+Tab','cm_NextTab','','FrmMain','FrmMain');
|
|
AddHotKey('Shift+Ctrl+Tab','cm_PrevTab','','FrmMain','FrmMain');
|
|
// AddHotKey('','cm_','','FrmMain','FrmMain');
|
|
end;
|
|
end;
|
|
|
|
procedure ResizeToScreen(Control:TControl; Width:integer=1024; Height:integer=768);
|
|
var SWidth, SHeight,
|
|
PersW, PersH,
|
|
NewW, NewH :Integer;
|
|
begin
|
|
SWidth:=Screen.DesktopWidth;
|
|
SHeight:=Screen.DesktopHeight;
|
|
|
|
if (SWidth=Width) and (SHeight=Height) then exit;
|
|
|
|
PersW:=round((SWidth*100)/Width);
|
|
PersH:=round((SHeight*100)/Height);
|
|
|
|
NewW:=round((Control.Width*PersW)/100);
|
|
NewH:=round((Control.Height*PersH)/100);
|
|
|
|
Control.Width:=NewW;
|
|
Control.Height:=NewH;
|
|
end;
|
|
|
|
// for debugging only, can be removed
|
|
procedure dbgShowWindowPos(const pos: TControlPosition);
|
|
begin
|
|
DebugLn('TWindowPos');
|
|
DebugLn('Left: ', IntToStr(pos.Left));
|
|
DebugLn('Top: ', IntToStr(pos.Top));
|
|
DebugLn('Width: ', IntToStr(pos.Width));
|
|
DebugLn('Height: ', IntToStr(pos.Height));
|
|
DebugLn('END');
|
|
end;
|
|
|
|
procedure TControlPosition.Save(Control: TControl);
|
|
begin
|
|
Left := Control.Left;
|
|
Top := Control.Top;
|
|
Width := Control.Width;
|
|
Height := Control.Height;
|
|
end;
|
|
|
|
procedure TControlPosition.Restore(Control: TControl);
|
|
begin
|
|
Control.Left := Left;
|
|
Control.Top := Top;
|
|
Control.Width := Width;
|
|
Control.Height := Height;
|
|
// Resize window for screen size if need
|
|
ResizeToScreen(Control);
|
|
end;
|
|
|
|
procedure LoadWindowPos(var pos:TControlPosition; sPrefix:String);
|
|
begin
|
|
pos.Left:=gIni.ReadInteger('Configuration', sPrefix+'left',50);
|
|
pos.Top:=gIni.ReadInteger('Configuration', sPrefix+'top',50);
|
|
pos.Width:= gIni.ReadInteger('Configuration', sPrefix+'width',300);
|
|
pos.Height:= gIni.ReadInteger('Configuration', sPrefix+'height',400);
|
|
end;
|
|
|
|
procedure SaveWindowPos(pos: TControlPosition; sPrefix:String);
|
|
begin
|
|
gIni.WriteInteger('Configuration', sPrefix+'left', pos.Left);
|
|
gIni.WriteInteger('Configuration', sPrefix+'top', pos.Top);
|
|
gIni.WriteInteger('Configuration', sPrefix+'width', pos.Width);
|
|
gIni.WriteInteger('Configuration', sPrefix+'height', pos.Height);
|
|
end;
|
|
|
|
procedure InitGlobs;
|
|
begin
|
|
{ Create default configuration files if need }
|
|
// main ini file
|
|
if not mbFileExists(gpIniDir + 'doublecmd.ini') then
|
|
CopyFile(gpCfgDir + 'doublecmd.ini', gpIniDir + 'doublecmd.ini');
|
|
// toolbar file
|
|
if not mbFileExists(gpIniDir + 'default.bar') then
|
|
CopyFile(gpCfgDir + 'default.bar', gpIniDir + 'default.bar');
|
|
// extension file
|
|
if not mbFileExists(gpIniDir + 'doublecmd.ext') then
|
|
CopyFile(gpCfgDir + 'doublecmd.ext', gpIniDir + 'doublecmd.ext');
|
|
// pixmaps file
|
|
if not mbFileExists(gpIniDir + 'pixmaps.txt') then
|
|
CopyFile(gpCfgDir + 'pixmaps.txt', gpIniDir + 'pixmaps.txt');
|
|
// editor highlight file1
|
|
if not mbFileExists(gpIniDir + 'editor.col') then
|
|
CopyFile(gpCfgDir + 'editor.col', gpIniDir + 'editor.col');
|
|
// editor highlight file2
|
|
if not mbFileExists(gpIniDir + 'twilight.col') then
|
|
CopyFile(gpCfgDir + 'twilight.col', gpIniDir + 'twilight.col');
|
|
|
|
gIni := TIniFileEx.Create(gpIniDir + 'doublecmd.ini');
|
|
gExts := TExts.Create;
|
|
gColorExt := TColorExt.Create;
|
|
glsHotDir := TStringListEx.Create;
|
|
glsDirHistory := TStringListEx.Create;
|
|
glsMaskHistory := TStringListEx.Create;
|
|
|
|
HotMan:=THotKeyManager.Create;
|
|
Actions:=TActs.Create;
|
|
end;
|
|
|
|
procedure DeInitGlobs;
|
|
begin
|
|
if assigned(gColorExt) then
|
|
FreeAndNil(gColorExt);
|
|
if assigned(glsDirHistory) then
|
|
FreeAndNil(glsDirHistory);
|
|
if assigned(glsHotDir) then
|
|
FreeAndNil(glsHotDir);
|
|
if Assigned(glsMaskHistory) then
|
|
FreeAndNil(glsMaskHistory);
|
|
if Assigned(gExts) then
|
|
FreeAndNil(gExts);
|
|
if Assigned(gIni) then
|
|
FreeAndNil(gIni);
|
|
if Assigned(gWdxPlugins) then
|
|
gWdxPlugins.Free;
|
|
if Assigned(gWCXPlugins) then
|
|
FreeAndNil(gWCXPlugins);
|
|
if Assigned(gWFXPlugins) then
|
|
FreeAndNil(gWFXPlugins);
|
|
if Assigned(ColSet) then
|
|
ColSet.Free;
|
|
if Assigned(HotMan) then
|
|
HotMan.Free;
|
|
if Assigned(Actions) then
|
|
Actions.Free;
|
|
end;
|
|
|
|
function LoadGlobs : Boolean;
|
|
var
|
|
Ini: TIniFileEx;
|
|
begin
|
|
Result := False;
|
|
DebugLn('Loading configuration...');
|
|
InitGlobs;
|
|
|
|
{ Load location of configuration files }
|
|
Ini := TIniFileEx.Create(gpCfgDir + 'doublecmd.ini');
|
|
gUseIniInProgramDir := Ini.ReadBool('Configuration', 'UseIniInProgramDir', False);
|
|
Ini.Free;
|
|
|
|
{ Layout page }
|
|
|
|
gButtonBar := gIni.ReadBool('Layout', 'ButtonBar', True);
|
|
gToolBarFlat := gIni.ReadBool('ButtonBar', 'FlatIcons', True);
|
|
gToolBarIconSize := gIni.ReadInteger('ButtonBar', 'ButtonHeight', 16);
|
|
gDriveBar1 := gIni.ReadBool('Layout', 'DriveBar1', True);
|
|
gDriveBar2 := gIni.ReadBool('Layout', 'DriveBar2', True);
|
|
gDriveBarFlat := gIni.ReadBool('Layout', 'DriveBarFlat', True);
|
|
gDriveMenuButton := gIni.ReadBool('Layout', 'DriveMenuButton', True);
|
|
gDirectoryTabs := gIni.ReadBool('Layout', 'DirectoryTabs', True);
|
|
gCurDir := gIni.ReadBool('Layout', 'CurDir', True);
|
|
gTabHeader := gIni.ReadBool('Layout', 'TabHeader', True);
|
|
gStatusBar := gIni.ReadBool('Layout', 'StatusBar', True);
|
|
gCmdLine := gIni.ReadBool('Layout', 'CmdLine', True);
|
|
gLogWindow := gIni.ReadBool('Layout', 'LogWindow', True);
|
|
gKeyButtons := gIni.ReadBool('Layout', 'KeyButtons', True);
|
|
gInterfaceFlat := gIni.ReadBool('Layout', 'InterfaceFlat', True);
|
|
|
|
gShowSystemFiles := gIni.ReadBool('Configuration', 'ShowSystemFiles', False);
|
|
gPOFileName := gIni.ReadString('Configuration', 'Language', '');
|
|
gTerm := gIni.ReadString('Configuration', 'Term', Terminal);
|
|
gCaseSensitiveSort := gIni.ReadBool('Configuration', 'CaseSensitiveSort', False);
|
|
gLynxLike := gIni.ReadBool('Configuration', 'LynxLike', True);
|
|
gDirSelect := gIni.ReadBool('Configuration', 'DirSelect', True);
|
|
glsHotDir.CommaText := gIni.ReadString('Configuration', 'HotDir', '');
|
|
gShortFileSizeFormat := gIni.ReadBool('Configuration', 'ShortFileSizeFormat', True);
|
|
gScrollMode := gIni.ReadInteger('Configuration', 'ScrollMode', 0);
|
|
gTrayIcon := gIni.ReadBool('Configuration', 'TrayIcon', False);
|
|
gDateTimeFormat := gIni.ReadString('Configuration', 'DateTimeFormat', 'dd.mm.yy');
|
|
gDriveBlackList:= gIni.ReadString('Configuration', 'DriveBlackList', '');
|
|
gShowWarningMessages := gIni.ReadBool('Configuration', 'ShowWarningMessages', True);
|
|
|
|
gMouseSelectionEnabled:= gIni.ReadBool('Configuration', 'MouseSelectionEnabled', True);
|
|
gMouseSelectionButton := gIni.ReadInteger('Configuration', 'MouseSelectionButton', 0);
|
|
|
|
gDirTabOptions := gIni.ReadInteger('Configuration', 'DirTabOptions', 273);
|
|
gDirTabLimit := gIni.ReadInteger('Configuration', 'DirTabLimit', 32);
|
|
|
|
gUseExtEdit := gIni.ReadBool('Configuration', 'UseExtEdit', False);
|
|
gUseExtView := gIni.ReadBool('Configuration', 'UseExtView', False);
|
|
gUseExtDiff := gIni.ReadBool('Configuration', 'UseExtDiff', False);
|
|
|
|
gExtEdit := gIni.ReadString('Configuration', 'ExtEdit', '');
|
|
gExtView := gIni.ReadString('Configuration', 'ExtView', '');
|
|
gExtDiff := gIni.ReadString('Configuration', 'ExtDiff', '');
|
|
gRunTerm := gIni.ReadString('Configuration', 'RunTerm', Terminal);
|
|
|
|
gLuaLib:=gIni.ReadString('Configuration', 'LuaLib', gLuaLib);
|
|
|
|
|
|
{ Fonts }
|
|
gFontName:=gIni.ReadString('Configuration', 'Font.Name', 'default');
|
|
DebugLn('gFontName:',gFontName);
|
|
gEditorFontName:=gIni.ReadString('Configuration', 'Editor.Font.Name', 'default');
|
|
DebugLn('gEditorFontName:',gEditorFontName);
|
|
gViewerFontName:=gIni.ReadString('Configuration', 'Viewer.Font.Name', 'default');
|
|
DebugLn('gViewerEditorFontName:',gViewerFontName);
|
|
gFontSize:=gIni.ReadInteger('Configuration', 'Font.Size', 10);
|
|
gEditorFontSize:=gIni.ReadInteger('Configuration', 'Editor.Font.Size', 14);
|
|
gViewerFontSize:=gIni.ReadInteger('Configuration', 'Viewer.Font.Size', 14);
|
|
gFontStyle := TFontStyles(gIni.ReadInteger('Configuration', 'Font.Style', 1));
|
|
gEditorFontStyle:= TFontStyles(gIni.ReadInteger('Configuration', 'Editor.Font.Style', 0));
|
|
gViewerFontStyle:= TFontStyles(gIni.ReadInteger('Configuration', 'Viewer.Font.Style', 0));
|
|
{ Colors }
|
|
gForeColor := gIni.ReadInteger('Colors', 'ForeColor', clDefault);
|
|
gBackColor := gIni.ReadInteger('Colors', 'BackColor', clWhite);
|
|
gBackColor2 := gIni.ReadInteger('Colors', 'BackColor2', clWhite);
|
|
gMarkColor := gIni.ReadInteger('Colors', 'MarkColor', clRed);
|
|
gCursorColor := gIni.ReadInteger('Colors', 'CursorColor', clHighlight);
|
|
gCursorText := gIni.ReadInteger('Colors', 'CursorText', clHighlightedText);
|
|
gUseInvertedSelection:= gIni.ReadBool('Colors', 'UseInvertedSelection', false);
|
|
{ File operations }
|
|
gCopyBlockSize := gIni.ReadInteger('Configuration', 'CopyBlockSize', 65536);
|
|
gDropReadOnlyFlag := gIni.ReadBool('Configuration', 'DropReadOnlyFlag', True);
|
|
gUseMmapInSearch := gIni.ReadBool('Configuration', 'UseMmapInSearch', False);
|
|
gWipePassNumber:= gIni.ReadInteger('Configuration', 'WipePassNumber', 1);
|
|
gProcessComments := gIni.ReadBool('Configuration', 'ProcessComments', True);
|
|
gRenameSelOnlyName:= gIni.ReadBool('Configuration', 'RenameSelOnlyName', false);
|
|
{ Log }
|
|
gLogFile := gIni.ReadBool('Configuration', 'LogFile', True);
|
|
gLogFileName := gIni.ReadString('Configuration', 'LogFileName', gpIniDir + 'doublecmd.log');
|
|
gLogOptions := TLogOptions(gIni.ReadInteger('Configuration', 'LogOptions', Integer(gLogOptions)));
|
|
{ Configuration page }
|
|
gSaveDirHistory := gIni.ReadBool('Configuration', 'SaveDirHistory', True);
|
|
gSaveCmdLineHistory := gIni.ReadBool('Configuration', 'SaveCmdLineHistory', True);
|
|
gSaveFileMaskHistory := gIni.ReadBool('Configuration', 'SaveFileMaskHistory', True);
|
|
{ Quick Search page}
|
|
gQuickSearch := gIni.ReadBool('Configuration', 'QuickSearch', True);
|
|
gQuickSearchMode := TShiftState(gIni.ReadInteger('Configuration', 'QuickSearchMode', Integer(gQuickSearchMode)));
|
|
gQuickSearchMatchBeginning := gIni.ReadBool('Configuration', 'QuickSearchMatchBeginning', True);
|
|
gQuickSearchMatchEnding := gIni.ReadBool('Configuration', 'QuickSearchMatchEnding', True);
|
|
|
|
gShowIcons := gIni.ReadBool('Configuration', 'ShowIcons', True);
|
|
gIconsSize := gIni.ReadInteger('Configuration', 'IconsSize', 16);
|
|
|
|
gCustomDriveIcons := gIni.ReadBool('Configuration', 'CustomDriveIcons', False);
|
|
|
|
gCutTextToColWidth := gIni.ReadBool('Configuration', 'CutTextToColWidth', False);
|
|
|
|
if mbFileExists(gpIniDir + 'doublecmd.ext') then
|
|
gExts.LoadFromFile(gpIniDir + 'doublecmd.ext');
|
|
|
|
if mbFileExists(gpIniDir + 'dirhistory.txt') then
|
|
LoadStringsFromFile(glsDirHistory,gpIniDir + 'dirhistory.txt');
|
|
|
|
if mbFileExists(gpIniDir + 'maskhistory.txt') then
|
|
LoadStringsFromFile(glsMaskHistory, gpIniDir + 'maskhistory.txt');
|
|
|
|
gColorExt.Load;
|
|
|
|
DebugLn('Loading viewer position...');
|
|
LoadWindowPos(gViewerPos, 'Viewer.');
|
|
DebugLn('Loading editor position...');
|
|
LoadWindowPos(gEditorPos, 'Editor.');
|
|
|
|
{ Localization }
|
|
DoLoadLng;
|
|
msgLoadLng;
|
|
Result := True;
|
|
|
|
{Wdx Plugins and columns}
|
|
//---------------------
|
|
gWdxPlugins:=TWDXModuleList.Create;
|
|
gWdxPlugins.Load(gIni);
|
|
ColSet:=TPanelColumnsList.Create;
|
|
ColSet.Load(gIni);
|
|
//---------------------
|
|
{ WCX plugins }
|
|
gWCXPlugins:= TWCXModuleList.Create;
|
|
gWCXPlugins.Load(gIni);
|
|
{ WFX plugins }
|
|
gWFXPlugins:= TWFXModuleList.Create;
|
|
gWFXPlugins.Load(gIni);
|
|
end;
|
|
|
|
function LoadStringsFromFile(var list:TStringListEx; const sFileName:String):boolean;
|
|
var
|
|
i:Integer;
|
|
begin
|
|
Assert(list <> nil,'LoadStringsFromFile: list=nil');
|
|
list.Clear;
|
|
Result:=False;
|
|
if not mbFileExists(sFileName) then Exit;
|
|
list.LoadFromFile(sFileName);
|
|
for i:=list.Count-1 downto 0 do
|
|
if i>cMaxStringItems then
|
|
list.Delete(i)
|
|
else
|
|
Break;
|
|
Result:=True;
|
|
end;
|
|
|
|
|
|
procedure SaveGlobs;
|
|
var
|
|
Ini: TIniFileEx;
|
|
begin
|
|
if gSaveDirHistory then
|
|
glsDirHistory.SaveToFile(gpIniDir + 'dirhistory.txt');
|
|
if gSaveFileMaskHistory then
|
|
glsMaskHistory.SaveToFile(gpIniDir + 'maskhistory.txt');
|
|
|
|
{ Layout page }
|
|
|
|
gIni.WriteBool('Layout', 'ButtonBar', gButtonBar);
|
|
gIni.WriteBool('ButtonBar', 'FlatIcons', gToolBarFlat);
|
|
gIni.WriteInteger('ButtonBar', 'ButtonHeight', gToolBarIconSize);
|
|
gIni.WriteBool('Layout', 'DriveBar1', gDriveBar1);
|
|
gIni.WriteBool('Layout', 'DriveBar2', gDriveBar2);
|
|
gIni.WriteBool('Layout', 'DriveBarFlat', gDriveBarFlat);
|
|
gIni.WriteBool('Layout', 'DriveMenuButton', gDriveMenuButton);
|
|
gIni.WriteBool('Layout', 'DirectoryTabs', gDirectoryTabs);
|
|
gIni.WriteBool('Layout', 'CurDir', gCurDir);
|
|
gIni.WriteBool('Layout', 'TabHeader', gTabHeader);
|
|
gIni.WriteBool('Layout', 'StatusBar', gStatusBar);
|
|
gIni.WriteBool('Layout', 'CmdLine', gCmdLine);
|
|
gIni.WriteBool('Layout', 'LogWindow', gLogWindow);
|
|
gIni.WriteBool('Layout', 'KeyButtons', gKeyButtons);
|
|
gIni.WriteBool('Layout', 'InterfaceFlat', gInterfaceFlat);
|
|
|
|
gIni.WriteBool('Configuration', 'ShowSystemFiles', gShowSystemFiles);
|
|
gIni.WriteString('Configuration', 'Language', gPOFileName);
|
|
gIni.WriteString('Configuration', 'Term', gTerm);
|
|
gIni.WriteBool('Configuration', 'CaseSensitiveSort', gCaseSensitiveSort);
|
|
gIni.WriteBool('Configuration', 'LynxLike', gLynxLike);
|
|
gIni.WriteBool('Configuration', 'DirSelect', gDirSelect);
|
|
gIni.WriteString('Configuration', 'HotDir', glsHotDir.CommaText);
|
|
gIni.WriteBool('Configuration', 'ShortFileSizeFormat', gShortFileSizeFormat);
|
|
gIni.WriteInteger('Configuration', 'ScrollMode', gScrollMode);
|
|
gIni.WriteBool('Configuration', 'TrayIcon', gTrayIcon);
|
|
gIni.WriteString('Configuration', 'DateTimeFormat', gDateTimeFormat);
|
|
gIni.WriteString('Configuration', 'DriveBlackList', gDriveBlackList);
|
|
gIni.WriteBool('Configuration', 'ShowWarningMessages', gShowWarningMessages);
|
|
|
|
gIni.WriteBool('Configuration', 'MouseSelectionEnabled', gMouseSelectionEnabled);
|
|
gIni.WriteInteger('Configuration', 'MouseSelectionButton', gMouseSelectionButton);
|
|
|
|
gIni.WriteInteger('Configuration', 'DirTabOptions', gDirTabOptions);
|
|
gIni.WriteInteger('Configuration', 'DirTabLimit', gDirTabLimit);
|
|
|
|
gIni.WriteBool('Configuration', 'UseExtEdit', gUseExtEdit);
|
|
gIni.WriteBool('Configuration', 'UseExtView', gUseExtView);
|
|
gIni.WriteBool('Configuration', 'UseExtDiff', gUseExtDiff);
|
|
|
|
gIni.WriteString('Configuration', 'ExtEdit', gExtEdit);
|
|
gIni.WriteString('Configuration', 'ExtView', gExtView);
|
|
gIni.WriteString('Configuration', 'ExtDiff', gExtDiff);
|
|
gIni.WriteString('Configuration', 'RunTerm', gRunTerm);
|
|
|
|
gIni.WriteString('Configuration', 'LuaLib', gLuaLib);
|
|
|
|
{ Fonts }
|
|
gIni.WriteString('Configuration', 'Font.Name', gFontName);
|
|
gIni.WriteString('Configuration', 'Editor.Font.Name', gEditorFontName);
|
|
gIni.WriteString('Configuration', 'Viewer.Font.Name', gViewerFontName);
|
|
|
|
gIni.WriteInteger('Configuration', 'Font.Size', gFontSize);
|
|
gIni.WriteInteger('Configuration', 'Editor.Font.Size', gEditorFontSize);
|
|
gIni.WriteInteger('Configuration', 'Viewer.Font.Size', gViewerFontSize);
|
|
|
|
gIni.WriteInteger('Configuration', 'Font.Style', Integer(gFontStyle));
|
|
gIni.WriteInteger('Configuration', 'Editor.Font.Style', Integer(gEditorFontStyle));
|
|
gIni.WriteInteger('Configuration', 'Viewer.Font.Style', Integer(gViewerFontStyle));
|
|
{ Colors }
|
|
gIni.WriteInteger('Colors', 'ForeColor', gForeColor);
|
|
gIni.WriteInteger('Colors', 'BackColor', gBackColor);
|
|
gIni.WriteInteger('Colors', 'BackColor2', gBackColor2);
|
|
gIni.WriteInteger('Colors', 'MarkColor', gMarkColor);
|
|
gIni.WriteInteger('Colors', 'CursorColor', gCursorColor);
|
|
gIni.WriteInteger('Colors', 'CursorText', gCursorText);
|
|
gIni.WriteBool('Colors', 'UseInvertedSelection', gUseInvertedSelection);
|
|
|
|
|
|
{ File operations }
|
|
gIni.WriteInteger('Configuration', 'CopyBlockSize', gCopyBlockSize);
|
|
gIni.WriteBool('Configuration', 'DropReadOnlyFlag', gDropReadOnlyFlag);
|
|
gIni.WriteBool('Configuration', 'UseMmapInSearch', gUseMmapInSearch);
|
|
gIni.WriteInteger('Configuration', 'WipePassNumber', gWipePassNumber);
|
|
gIni.WriteBool('Configuration', 'ProcessComments', gProcessComments);
|
|
gIni.WriteBool('Configuration', 'RenameSelOnlyName', gRenameSelOnlyName);
|
|
{ Log }
|
|
gIni.WriteBool('Configuration', 'LogFile', gLogFile);
|
|
gIni.WriteString('Configuration', 'LogFileName', gLogFileName);
|
|
gIni.WriteInteger('Configuration', 'LogOptions', Integer(gLogOptions));
|
|
{ Configuration page }
|
|
gIni.WriteBool('Configuration', 'SaveDirHistory', gSaveDirHistory);
|
|
gIni.WriteBool('Configuration', 'SaveCmdLineHistory', gSaveCmdLineHistory);
|
|
gIni.WriteBool('Configuration', 'SaveFileMaskHistory', gSaveFileMaskHistory);
|
|
{ Quick Search page}
|
|
gIni.WriteBool('Configuration', 'QuickSearch', gQuickSearch);
|
|
gIni.WriteInteger('Configuration', 'QuickSearchMode', Integer(gQuickSearchMode));
|
|
gIni.WriteBool('Configuration', 'QuickSearchMatchBeginning', gQuickSearchMatchBeginning);
|
|
gIni.WriteBool('Configuration', 'QuickSearchMatchEnding', gQuickSearchMatchEnding);
|
|
|
|
gIni.WriteBool('Configuration', 'ShowIcons', gShowIcons);
|
|
gIni.WriteInteger('Configuration', 'IconsSize', gIconsSize);
|
|
|
|
gIni.WriteBool('Configuration', 'CutTextToColWidth', gCutTextToColWidth);
|
|
|
|
SaveWindowPos(gViewerPos, 'Viewer.');
|
|
SaveWindowPos(gEditorPos, 'Editor.');
|
|
|
|
gExts.SaveToFile(gpIniDir + 'doublecmd.ext');
|
|
gColorExt.Save;
|
|
|
|
//TODO: Save hotkeys
|
|
//HotMan.Save();
|
|
|
|
{ Plugins }
|
|
gWdxPlugins.Save(gIni);
|
|
gWFXPlugins.Save(gIni);
|
|
gWCXPlugins.Save(gIni);
|
|
|
|
{ Save location of configuration files }
|
|
try
|
|
Ini:= TIniFileEx.Create(gpCfgDir + 'doublecmd.ini');
|
|
Ini.WriteBool('Configuration', 'UseIniInProgramDir', gUseIniInProgramDir);
|
|
finally
|
|
Ini.Free;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
|
|
finalization
|
|
DeInitGlobs;
|
|
end.
|