abtool/dmain.pas

222 lines
8.0 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.