abtool/uoptions.pas

374 lines
16 KiB
ObjectPascal
Raw Normal View History

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.