AnthonyAxenov
685274a356
Отображение формы настроек переделано. Теперь она создаётся только 1 раз при первом вызове. Добавлен выпадающий списк для выбора локализаций. Кнопка сброса к дефолту изменена. Чтение настроек из abtool.ini (кроме локализаций). Сброс контроллов к актуальным настройкам при каждом показе формы настроек. Считанные настройки хранятся в глобальной переменной внутри uOptions. Таким образом: - исключены циклические ссылки с участием dMain ради доступа к настройкам - теперь можно только вызвать конструктор TOptions, а сам созданный объект нигде не сохранять: объект GlobalOptions уже будет доступен Новая функция dMain.GetLocalesIniFileList для получения списка файлов локализаций. Обновлены ini-файлы. Мелочи по оформлению кода.
276 lines
10 KiB
ObjectPascal
276 lines
10 KiB
ObjectPascal
unit dMain;
|
||
|
||
{$mode objfpc}{$H+}
|
||
|
||
interface
|
||
|
||
uses
|
||
Classes, SysUtils, FileUtil, Controls, Menus, Forms, PopupNotifier, Dialogs,
|
||
VirtualTrees, uPackage, uPackageList, fOptions, uOptions;
|
||
|
||
type
|
||
|
||
{ TdmMain }
|
||
|
||
TdmMain = class(TDataModule)
|
||
imgIcons: TImageList;
|
||
mbRefresh: TMenuItem;
|
||
MenuItem1: TMenuItem;
|
||
mmMain: TMainMenu;
|
||
mbInstallCheckAll: TMenuItem;
|
||
mbInstallExpandTree: TMenuItem;
|
||
mbInstallCollapseTree: TMenuItem;
|
||
mbInstallCheckInvert: TMenuItem;
|
||
mbInstallCheckNone: TMenuItem;
|
||
mbTree: TMenuItem;
|
||
mbCollapseTree: TMenuItem;
|
||
mbExpandTree: TMenuItem;
|
||
mbCheck: TMenuItem;
|
||
mbCheckAll: TMenuItem;
|
||
mbCheckInvert: TMenuItem;
|
||
mbCheckNone: TMenuItem;
|
||
mbOptions: TMenuItem;
|
||
mbHelp: TMenuItem;
|
||
mbOnlineHelp: TMenuItem;
|
||
mbAbout: TMenuItem;
|
||
mbOptionsMain: TMenuItem;
|
||
mbOptionsPkg: TMenuItem;
|
||
pmInstallTree: TPopupMenu;
|
||
pmInstallCheck: TPopupMenu;
|
||
procedure DataModuleCreate(Sender: TObject);
|
||
procedure mbAboutClick(Sender: TObject);
|
||
procedure mbCheckAllClick(Sender: TObject);
|
||
procedure mbCheckNoneClick(Sender: TObject);
|
||
procedure mbCollapseTreeClick(Sender: TObject);
|
||
procedure mbExpandTreeClick(Sender: TObject);
|
||
procedure mbOptionsMainClick(Sender: TObject);
|
||
procedure mbOptionsPkgClick(Sender: TObject);
|
||
procedure mbRefreshClick(Sender: TObject);
|
||
private
|
||
// Форма настроек
|
||
fmOptions: TfmOptions;
|
||
// Подготовка директорий
|
||
procedure PrepareDirs();
|
||
// Подготовка списков пакетов
|
||
procedure PreparePackageLists();
|
||
public
|
||
// путь к файлу ABTool.exe
|
||
ABToolExePath: String;
|
||
// путь к директории ABTool
|
||
ABToolDataPath: String;
|
||
// путь к директории ABTool\Packages
|
||
ABToolPkgPath: String;
|
||
// путь к директории ABTool\Languages
|
||
ABToolLangPath: String;
|
||
// путь к директории ABTool\Logs
|
||
ABToolLogPath: String;
|
||
// Список объектов пакетов программ для установки
|
||
SoftPackages: TPackageList;
|
||
// Список объектов пакетов утилит для запуска
|
||
ToolsPackages: TPackageList;
|
||
// Установка состояния отметки для всех корневых нод указанного дерева
|
||
procedure SetVSTCheckState(AVST: TBaseVirtualTree; AState: boolean);
|
||
// Показ формы настроек на указанной странице и возврат модального результата
|
||
function CallOptionsForm(APageIndex: byte = 0): TModalResult;
|
||
end;
|
||
|
||
var
|
||
dmMain: TdmMain;
|
||
|
||
implementation
|
||
|
||
uses fMain;
|
||
|
||
{$R *.lfm}
|
||
|
||
{ TdmMain }
|
||
|
||
{------------------------------------------------------------------------------
|
||
Конструктор: TdmMain.Create()
|
||
Назначение: Создание датамодуля, подготовка путей и списков пакетов
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.DataModuleCreate(Sender: TObject);
|
||
begin
|
||
PrepareDirs();
|
||
PreparePackageLists();
|
||
TOptions.Create(dmMain.ABToolDataPath + '\abtool.ini');
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Конструктор: TdmMain.SetVSTCheckState()
|
||
Назначение: Установка состояния отметки для всех корневых нод указанного дерева
|
||
Вх. параметры:
|
||
AVST: TBaseVirtualTree - дерево
|
||
AState: boolean - состояние отметок: TRUE выбрать все, FALSE снять выбор со всех
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.SetVSTCheckState(AVST: TBaseVirtualTree; AState: boolean);
|
||
var
|
||
Node: PVirtualNode;
|
||
|
||
// Установка состояния отметки ноды-родителя дочерним нодам
|
||
procedure CheckChildNodes(ANode: PVirtualNode);
|
||
var
|
||
ChildNode: PVirtualNode;
|
||
begin
|
||
ChildNode := AVST.GetFirstChild(ANode);
|
||
while Assigned(ChildNode) do
|
||
begin
|
||
CheckChildNodes(ChildNode);
|
||
ChildNode^.CheckState := ChildNode^.Parent^.CheckState;
|
||
ChildNode := AVST.GetNextSibling(ChildNode);
|
||
end;
|
||
end;
|
||
|
||
begin
|
||
AVST.BeginUpdate;
|
||
try
|
||
Node := AVST.GetFirst;
|
||
while Assigned(Node) do
|
||
begin
|
||
if AState = true then
|
||
Node^.CheckState := csCheckedNormal
|
||
else
|
||
Node^.CheckState := csUncheckedNormal;
|
||
CheckChildNodes(Node);
|
||
Node := AVST.GetNextSibling(Node);
|
||
end;
|
||
finally
|
||
AVST.EndUpdate;
|
||
end;
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Конструктор: TdmMain.mbCheckAllClick()
|
||
Назначение: Обработка клика п. меню "Выбрать всё"
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.mbCheckAllClick(Sender: TObject);
|
||
begin
|
||
SetVSTCheckState(fmMain.vstSoftPkgContents, true);
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Конструктор: TdmMain.mbCheckNoneClick()
|
||
Назначение: Обработка клика п. меню "Снять выбор"
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.mbCheckNoneClick(Sender: TObject);
|
||
begin
|
||
SetVSTCheckState(fmMain.vstSoftPkgContents, false);
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Процедура: TdmMain.mbCollapseTreeClick()
|
||
Назначение: Сворачивание дерева на активной вкладке главного окна
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.mbCollapseTreeClick(Sender: TObject);
|
||
begin
|
||
case (fmMain.PageControl.ActivePageIndex) of
|
||
0: fmMain.vstSoftPkgContents.FullCollapse();
|
||
1: fmMain.vstToolsPkgContents.FullCollapse();
|
||
end;
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Процедура: TdmMain.mbCollapseTreeClick()
|
||
Назначение: Разворачивание дерева на активной вкладке главного окна
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.mbExpandTreeClick(Sender: TObject);
|
||
begin
|
||
case (fmMain.PageControl.ActivePageIndex) of
|
||
0: fmMain.vstSoftPkgContents.FullExpand();
|
||
1: fmMain.vstToolsPkgContents.FullExpand();
|
||
end;
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Процедура: TdmMain.mbRefreshClick()
|
||
Назначение: Обновление списка пакетов и дерева на активной вкладке главного окна
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.mbRefreshClick(Sender: TObject);
|
||
begin
|
||
case (fmMain.PageControl.ActivePageIndex) of
|
||
0: fmMain.btnSoftPkgReload.Click;
|
||
1: fmMain.btnToolsPkgReload.Click;
|
||
end;
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Процедура: TdmMain.PrepareDirs()
|
||
Назначение: Подготовка директорий
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.PrepareDirs();
|
||
begin
|
||
ABToolExePath := ExtractFilePath(ParamStr(0));
|
||
ABToolDataPath := ABToolExePath + 'ABTool\';
|
||
ABToolPkgPath := ABToolDataPath + 'Packages\';
|
||
ABToolLangPath := ABToolDataPath + 'Languages\';
|
||
ABToolLogPath := ABToolDataPath + 'Logs\';
|
||
if not DirectoryExists(ABToolPkgPath) then
|
||
ForceDirectories(ABToolPkgPath);
|
||
if not DirectoryExists(ABToolLangPath) then
|
||
ForceDirectories(ABToolLangPath);
|
||
if not DirectoryExists(ABToolLogPath) then
|
||
ForceDirectories(ABToolLogPath);
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Процедура: TdmMain.PreparePackageLists()
|
||
Назначение: Подготовка списков пакетов
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.PreparePackageLists();
|
||
begin
|
||
SoftPackages := TPackageList.Create;
|
||
SoftPackages.Load(ptSoft);
|
||
ToolsPackages := TPackageList.Create;
|
||
ToolsPackages.Load(ptTools);
|
||
end;
|
||
|
||
{------------------------------------------------------------------------------
|
||
Функция: TdmMain.CallOptionsForm()
|
||
Назначение: Показ формы настроек на указанной странице и возврат модального
|
||
результата
|
||
Возвращает: TModalResult
|
||
------------------------------------------------------------------------------}
|
||
function TdmMain.CallOptionsForm(APageIndex: byte = 0): TModalResult;
|
||
begin
|
||
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.
|
||
|