Меню выбора, кроме инвертирования

This commit is contained in:
Anthony Axenov 2019-01-20 14:38:12 +08:00
parent ddb1d7ca8f
commit 15d4e0bf31
4 changed files with 83 additions and 7 deletions

View File

@ -3713,6 +3713,7 @@ object dmMain: TdmMain
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
} }
ImageIndex = 95 ImageIndex = 95
OnClick = mbCheckAllClick
end end
object mbCheckInvert: TMenuItem object mbCheckInvert: TMenuItem
Caption = 'Инвертировать' Caption = 'Инвертировать'
@ -3793,6 +3794,7 @@ object dmMain: TdmMain
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
} }
ImageIndex = 96 ImageIndex = 96
OnClick = mbCheckNoneClick
end end
end end
object mbOptions: TMenuItem object mbOptions: TMenuItem

View File

@ -5,7 +5,7 @@ unit dMain;
interface interface
uses uses
Classes, SysUtils, FileUtil, Controls, Menus, uPackage, uPackageList; Classes, SysUtils, FileUtil, Controls, Menus, VirtualTrees, uPackage, uPackageList;
type type
@ -35,6 +35,8 @@ type
pmInstallTree: TPopupMenu; pmInstallTree: TPopupMenu;
pmInstallCheck: TPopupMenu; pmInstallCheck: TPopupMenu;
procedure DataModuleCreate(Sender: TObject); procedure DataModuleCreate(Sender: TObject);
procedure mbCheckAllClick(Sender: TObject);
procedure mbCheckNoneClick(Sender: TObject);
procedure mbCollapseTreeClick(Sender: TObject); procedure mbCollapseTreeClick(Sender: TObject);
procedure mbExpandTreeClick(Sender: TObject); procedure mbExpandTreeClick(Sender: TObject);
private private
@ -59,6 +61,8 @@ type
SoftPackages: TPackageList; SoftPackages: TPackageList;
// Список объектов пакетов утилит для запуска // Список объектов пакетов утилит для запуска
ToolsPackages: TPackageList; ToolsPackages: TPackageList;
// Установка состояния отметки для всех корневых нод указанного дерева
procedure SetVSTCheckState(AVST: TBaseVirtualTree; AState: boolean);
end; end;
var var
@ -75,13 +79,73 @@ uses fMain;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Конструктор: TdmMain.Create() Конструктор: TdmMain.Create()
Назначение: Создание датамодуля, подготовка путей и списков пакетов Назначение: Создание датамодуля, подготовка путей и списков пакетов
Вх. параметры: Sender: TObject
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
procedure TdmMain.DataModuleCreate(Sender: TObject); procedure TdmMain.DataModuleCreate(Sender: TObject);
begin begin
PrepareDirs(); PrepareDirs();
PreparePackages(); PreparePackages();
end; 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() Процедура: TdmMain.mbCollapseTreeClick()
@ -138,8 +202,5 @@ begin
ToolsPackages.Load(ptTools); ToolsPackages.Load(ptTools);
end; end;
end. end.

View File

@ -1,7 +1,7 @@
object fmMain: TfmMain object fmMain: TfmMain
Left = 299 Left = 430
Height = 450 Height = 450
Top = 82 Top = 108
Width = 350 Width = 350
BorderIcons = [biSystemMenu, biMinimize] BorderIcons = [biSystemMenu, biMinimize]
Caption = 'ABTool' Caption = 'ABTool'
@ -3226,6 +3226,7 @@ object fmMain: TfmMain
TabHeight = 20 TabHeight = 20
TabIndex = 0 TabIndex = 0
TabOrder = 0 TabOrder = 0
OnChange = PageControlChange
object tabSoft: TTabSheet object tabSoft: TTabSheet
Caption = 'Установка' Caption = 'Установка'
ClientHeight = 402 ClientHeight = 402

View File

@ -60,6 +60,7 @@ type
procedure btnSoftPkgReloadClick(Sender: TObject); procedure btnSoftPkgReloadClick(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов утилит // Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
procedure btnToolsPkgReloadClick(Sender: TObject); procedure btnToolsPkgReloadClick(Sender: TObject);
procedure PageControlChange(Sender: TObject);
// Отображение отметок в нодах дерева программ // Отображение отметок в нодах дерева программ
procedure vstSoftPkgContentsInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; procedure vstSoftPkgContentsInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates); var InitialStates: TVirtualNodeInitStates);
@ -208,6 +209,7 @@ procedure TfmMain.FormCreate(Sender: TObject);
begin begin
ReloadPackagesList(ptSoft); ReloadPackagesList(ptSoft);
ReloadPackagesList(ptTools); ReloadPackagesList(ptTools);
PageControl.ActivePageIndex := 0;
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
@ -227,6 +229,16 @@ procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject);
begin begin
ReloadPackagesList(ptTools); ReloadPackagesList(ptTools);
end; end;
{------------------------------------------------------------------------------
Процедура: TfmMain.PageControlChange()
Назначение: Обрабока переключения вкладок
------------------------------------------------------------------------------}
procedure TfmMain.PageControlChange(Sender: TObject);
begin
// меню выбора должно быть активно только на вкладке "Установка"
dmMain.mbCheck.Enabled := PageControl.ActivePageIndex = 0;
end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Процедура: TfmMain.vstSoftPkgContentsGetText() Процедура: TfmMain.vstSoftPkgContentsGetText()