222 lines
8.0 KiB
ObjectPascal
222 lines
8.0 KiB
ObjectPascal
unit dMain;
|
||
|
||
{$mode objfpc}{$H+}
|
||
|
||
interface
|
||
|
||
uses
|
||
Classes, SysUtils, FileUtil, Controls, Menus, VirtualTrees, uPackage, uPackageList;
|
||
|
||
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;
|
||
mbOptonsMain: TMenuItem;
|
||
mbOptionsPkg: TMenuItem;
|
||
pmInstallTree: TPopupMenu;
|
||
pmInstallCheck: TPopupMenu;
|
||
procedure DataModuleCreate(Sender: TObject);
|
||
procedure mbCheckAllClick(Sender: TObject);
|
||
procedure mbCheckNoneClick(Sender: TObject);
|
||
procedure mbCollapseTreeClick(Sender: TObject);
|
||
procedure mbExpandTreeClick(Sender: TObject);
|
||
procedure mbRefreshClick(Sender: TObject);
|
||
private
|
||
// Подготовка директорий
|
||
procedure PrepareDirs();
|
||
// Подготовка списков пакетов
|
||
procedure PreparePackages();
|
||
public
|
||
{ Публичные переменные, которые доступны во всех юнитах с подключенным uses ..., dMain }
|
||
|
||
// путь к файлу 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);
|
||
end;
|
||
|
||
var
|
||
dmMain: TdmMain;
|
||
|
||
implementation
|
||
|
||
uses fMain;
|
||
|
||
{$R *.lfm}
|
||
|
||
{ TdmMain }
|
||
|
||
{------------------------------------------------------------------------------
|
||
Конструктор: TdmMain.Create()
|
||
Назначение: Создание датамодуля, подготовка путей и списков пакетов
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.DataModuleCreate(Sender: TObject);
|
||
begin
|
||
PrepareDirs();
|
||
PreparePackages();
|
||
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.PreparePackages()
|
||
Назначение: Подготовка директорий
|
||
------------------------------------------------------------------------------}
|
||
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.PreparePackages()
|
||
Назначение: Подготовка списков пакетов
|
||
------------------------------------------------------------------------------}
|
||
procedure TdmMain.PreparePackages();
|
||
begin
|
||
SoftPackages := TPackageList.Create;
|
||
SoftPackages.Load(ptSoft);
|
||
ToolsPackages := TPackageList.Create;
|
||
ToolsPackages.Load(ptTools);
|
||
end;
|
||
|
||
end.
|
||
|