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

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

View File

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

View File

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

View File

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