diff --git a/ABTool.lpi b/ABTool.lpi
index a7bd021..3a511f9 100644
--- a/ABTool.lpi
+++ b/ABTool.lpi
@@ -19,9 +19,9 @@
-
+
@@ -148,7 +148,6 @@
-
@@ -166,7 +165,7 @@
-
+
@@ -176,6 +175,9 @@
+
+
+
diff --git a/ABTool.res b/ABTool.res
index a28f8c4..df56e3f 100644
Binary files a/ABTool.res and b/ABTool.res differ
diff --git a/ABTool/Packages/soft.test01.ini b/ABTool/Packages/soft.test01.ini
index bc1efd1..48aaca5 100644
--- a/ABTool/Packages/soft.test01.ini
+++ b/ABTool/Packages/soft.test01.ini
@@ -1,31 +1,41 @@
#
# ABTool v0.7.0
-#
+# Пакет программ для установки
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название программы"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
-1=\\setup1.exe /1 /2
-2=\\___abtool.exe\setup2.exe
-3=\___\setup3.exe
-[ 2]
-4=\\setup4.exe /1
-[ 3]
-5=\\setup5.exe
-6=\\setup6.exe /1
+Name=Пакет программ 1
+Description=Пакет программ 1, используемый по умолчанию
+[Группа 1]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+Имя4=\\setup1.exe /ключ1 /ключ2
+Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя6=\папка_в_корне_диска\setup3.exe
+[Группа 2]
+Имя4=\\setup4.exe /ключ1
+[Группа 3]
+Имя5=\\setup5.exe
+Имя6=\\setup6.exe /ключ1
+[Группа 4]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+Имя4=\\setup1.exe /ключ1 /ключ2
+Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя6=\папка_в_корне_диска\setup3.exe
diff --git a/ABTool/Packages/soft.test02.ini b/ABTool/Packages/soft.test02.ini
index bc1efd1..d5bd04c 100644
--- a/ABTool/Packages/soft.test02.ini
+++ b/ABTool/Packages/soft.test02.ini
@@ -1,31 +1,46 @@
#
# ABTool v0.7.0
-#
+# Пакет программ для установки
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название программы"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
-1=\\setup1.exe /1 /2
-2=\\___abtool.exe\setup2.exe
-3=\___\setup3.exe
-[ 2]
-4=\\setup4.exe /1
-[ 3]
-5=\\setup5.exe
-6=\\setup6.exe /1
+Name=Пакет программ 2
+Description=Пакет программ 2, используемый по умолчанию
+[Группа 1]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+Имя4=\\setup1.exe /ключ1 /ключ2
+Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя6=\папка_в_корне_диска\setup3.exe
+[Группа 2]
+Имя4=\\setup4.exe /ключ1
+[Группа 3]
+Имя5=\\setup5.exe
+Имя6=\\setup6.exe /ключ1
+[Группа 4]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+Имя4=\\setup1.exe /ключ1 /ключ2
+Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя6=\папка_в_корне_диска\setup3.exe
+[Группа 5]
+Имя4=\\setup4.exe /ключ1
+[Группа 6]
+Имя5=\\setup5.exe
+Имя6=\\setup6.exe /ключ1
diff --git a/ABTool/Packages/soft.test03.ini b/ABTool/Packages/soft.test03.ini
index bc1efd1..4b922cb 100644
--- a/ABTool/Packages/soft.test03.ini
+++ b/ABTool/Packages/soft.test03.ini
@@ -1,31 +1,31 @@
#
# ABTool v0.7.0
-#
+# Пакет программ для установки
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название программы"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
-1=\\setup1.exe /1 /2
-2=\\___abtool.exe\setup2.exe
-3=\___\setup3.exe
-[ 2]
-4=\\setup4.exe /1
-[ 3]
-5=\\setup5.exe
-6=\\setup6.exe /1
+Name=Пакет программ 3
+Description=Пакет программ 3, используемый по умолчанию
+[Группа 1]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+[Группа 2]
+Имя4=\\setup4.exe /ключ1
+[Группа 3]
+Имя5=\\setup5.exe
+Имя6=\\setup6.exe /ключ1
diff --git a/ABTool/Packages/soft.test04.ini b/ABTool/Packages/soft.test04.ini
index bc1efd1..0e6d8ef 100644
--- a/ABTool/Packages/soft.test04.ini
+++ b/ABTool/Packages/soft.test04.ini
@@ -1,31 +1,31 @@
#
# ABTool v0.7.0
-#
+# Пакет программ для установки
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название программы"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
-1=\\setup1.exe /1 /2
-2=\\___abtool.exe\setup2.exe
-3=\___\setup3.exe
-[ 2]
-4=\\setup4.exe /1
-[ 3]
-5=\\setup5.exe
-6=\\setup6.exe /1
+Name=Пакет программ 4
+Description=Пакет программ 4, используемый по умолчанию
+[Группа 1]
+Имя1=\\setup1.exe /ключ1 /ключ2
+Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
+Имя3=\папка_в_корне_диска\setup3.exe
+[Группа 2]
+Имя4=\\setup4.exe /ключ1
+[Группа 3]
+Имя5=\\setup5.exe
+Имя6=\\setup6.exe /ключ1
diff --git a/ABTool/Packages/tools.test01.ini b/ABTool/Packages/tools.test01.ini
index 88c8987..63afd15 100644
--- a/ABTool/Packages/tools.test01.ini
+++ b/ABTool/Packages/tools.test01.ini
@@ -1,36 +1,36 @@
#
# ABTool v0.7.0
-#
+# Пакет утилит для запуска
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название утилиты"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
- 1=\\1.exe /1 /2
- 2=\\___abtool.exe\2.exe
- 3=\___\3.exe
- 4=\\4.exe /1
-[ 2]
- 5=\\5.exe
- 6=\\6.exe
-[ 3]
- 7=\\7.exe /1
- 8=\\8.exe
- 9=\\9.exe
- 10=\\10.exe /1 /2
- 11=\\11.exe
+Name=Пакет утилит 1
+Description=Пакет утилит 1, используемый по умолчанию
+[Группа 1]
+Утилита 1=\\утилита1.exe /ключ1 /ключ2
+Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
+Утилита 3=\папка_в_корне_диска\утилита3.exe
+Утилита 4=\\утилита4.exe /ключ1
+[Группа 2]
+Утилита 5=\\утилита5.exe
+Утилита 6=\\утилита6.exe
+[Группа 3]
+Утилита 7=\\утилита7.exe /ключ1
+Утилита 8=\\утилита8.exe
+Утилита 9=\\утилита9.exe
+Утилита 10=\\утилита10.exe /ключ1 /ключ2
+Утилита 11=\\утилита11.exe
diff --git a/ABTool/Packages/tools.test02.ini b/ABTool/Packages/tools.test02.ini
index 88c8987..87f054d 100644
--- a/ABTool/Packages/tools.test02.ini
+++ b/ABTool/Packages/tools.test02.ini
@@ -1,36 +1,36 @@
#
# ABTool v0.7.0
-#
+# Пакет утилит для запуска
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название утилиты"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
- 1=\\1.exe /1 /2
- 2=\\___abtool.exe\2.exe
- 3=\___\3.exe
- 4=\\4.exe /1
-[ 2]
- 5=\\5.exe
- 6=\\6.exe
-[ 3]
- 7=\\7.exe /1
- 8=\\8.exe
- 9=\\9.exe
- 10=\\10.exe /1 /2
- 11=\\11.exe
+Name=Пакет утилит 2
+Description=Пакет утилит 2, используемый по умолчанию
+[Группа 1]
+Утилита 1=\\утилита1.exe /ключ1 /ключ2
+Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
+Утилита 3=\папка_в_корне_диска\утилита3.exe
+Утилита 4=\\утилита4.exe /ключ1
+[Группа 2]
+Утилита 5=\\утилита5.exe
+Утилита 6=\\утилита6.exe
+[Группа 3]
+Утилита 7=\\утилита7.exe /ключ1
+Утилита 8=\\утилита8.exe
+Утилита 9=\\утилита9.exe
+Утилита 10=\\утилита10.exe /ключ1 /ключ2
+Утилита 11=\\утилита11.exe
diff --git a/ABTool/Packages/tools.test03.ini b/ABTool/Packages/tools.test03.ini
index 88c8987..ac993e7 100644
--- a/ABTool/Packages/tools.test03.ini
+++ b/ABTool/Packages/tools.test03.ini
@@ -1,36 +1,36 @@
#
# ABTool v0.7.0
-#
+# Пакет утилит для запуска
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название утилиты"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
- 1=\\1.exe /1 /2
- 2=\\___abtool.exe\2.exe
- 3=\___\3.exe
- 4=\\4.exe /1
-[ 2]
- 5=\\5.exe
- 6=\\6.exe
-[ 3]
- 7=\\7.exe /1
- 8=\\8.exe
- 9=\\9.exe
- 10=\\10.exe /1 /2
- 11=\\11.exe
+Name=Пакет утилит 3
+Description=Пакет утилит 3, используемый по умолчанию
+[Группа 1]
+Утилита 1=\\утилита1.exe /ключ1 /ключ2
+Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
+Утилита 3=\папка_в_корне_диска\утилита3.exe
+Утилита 4=\\утилита4.exe /ключ1
+[Группа 2]
+Утилита 5=\\утилита5.exe
+Утилита 6=\\утилита6.exe
+[Группа 3]
+Утилита 7=\\утилита7.exe /ключ1
+Утилита 8=\\утилита8.exe
+Утилита 9=\\утилита9.exe
+Утилита 10=\\утилита10.exe /ключ1 /ключ2
+Утилита 11=\\утилита11.exe
diff --git a/ABTool/Packages/tools.test04.ini b/ABTool/Packages/tools.test04.ini
index 88c8987..348cde6 100644
--- a/ABTool/Packages/tools.test04.ini
+++ b/ABTool/Packages/tools.test04.ini
@@ -1,36 +1,36 @@
#
# ABTool v0.7.0
-#
+# Пакет утилит для запуска
#
-# [PackageInfo] :
-# Name -
-# Description -
+# Секция [PackageInfo] содержит общую информацию о данном пакете:
+# Name - Название пакета
+# Description - Краткое описание пакета
#
-# (, ,
-# ..).
-# :
-# " "=" ".
-# \ ( ; )
-# \\ ( ABTool.exe).
-# .
-# .
-# .
+# В квадратных скобках указывается название группы (например, антивирусы,
+# проигрыватели и т.д.).
+# Далее без кавычек указывается:
+# "Название утилиты"="путь к файлу".
+# Путь может начинаться с \ (если путь абсолютный; без буквы диска)
+# или с \\ (если путь относителен ABTool.exe).
+# Нельзя под один пункт указывать несколько команд.
+# Можно указывать дополнительные ключи запуска.
+# Во всех параметрах не должно быть разрывов строк.
#
#============================================================================
[PackageInfo]
-Name=
-Description= ,
-[ 1]
- 1=\\1.exe /1 /2
- 2=\\___abtool.exe\2.exe
- 3=\___\3.exe
- 4=\\4.exe /1
-[ 2]
- 5=\\5.exe
- 6=\\6.exe
-[ 3]
- 7=\\7.exe /1
- 8=\\8.exe
- 9=\\9.exe
- 10=\\10.exe /1 /2
- 11=\\11.exe
+Name=Пакет утилит 4
+Description=Пакет утилит 4, используемый по умолчанию
+[Группа 1]
+Утилита 1=\\утилита1.exe /ключ1 /ключ2
+Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
+Утилита 3=\папка_в_корне_диска\утилита3.exe
+Утилита 4=\\утилита4.exe /ключ1
+[Группа 2]
+Утилита 5=\\утилита5.exe
+Утилита 6=\\утилита6.exe
+[Группа 3]
+Утилита 7=\\утилита7.exe /ключ1
+Утилита 8=\\утилита8.exe
+Утилита 9=\\утилита9.exe
+Утилита 10=\\утилита10.exe /ключ1 /ключ2
+Утилита 11=\\утилита11.exe
diff --git a/README.md b/README.md
index e5c02b1..3160c46 100644
--- a/README.md
+++ b/README.md
@@ -10,9 +10,18 @@ Homepage: [abtool.ru](http://abtool.ru/)
Online help (only Russian for now, sorry): [abtool.ru/onlinehelp](http://abtool.ru/onlinehelp/)
+## Requirements for development environment
+
+* Windows OS (because ABTool is windows-only software)
+* [Lazarus 1.8.4](https://www.lazarus-ide.org/) and newer
+* [LCLextensions 0.6.1](/dependencies/lclextensions-0.6.1.zip) and newer
+* [VirtualTreeView 5.5.3-R1](/dependencies/virtualtreeview-5.5.3-R1.zip) and newer
+
+Porting to Delphi is welcome. You can create your fork of this repository for these purposes.
+
## License
-This software is licensed under **The MIT License** (read [LICENSE](LICENSE) file).
+This software is licensed under **[The MIT License](LICENSE)**.
This means that you can use, distribute, sell and change the program as you want, under the following conditions:
* explicit indication of my authorship of the original project;
@@ -43,6 +52,15 @@ So, I'd like to thank everybody listed and not listed here who made or keeps mak
Онлайн справка: [abtool.ru/onlinehelp](http://abtool.ru/onlinehelp/)
+## Требования к среде разработки
+
+* Windows OS (потому что ABTool предназначена только для Windows)
+* [Lazarus 1.8.4](https://www.lazarus-ide.org/) и новее
+* [LCLextensions 0.6.1](/dependencies/lclextensions-0.6.1.zip) и новее
+* [VirtualTreeView 5.5.3-R1](/dependencies/virtualtreeview-5.5.3-R1.zip) и новее
+
+Приветствуется портирование под Delphi. Можете создать свой форк этого репозитория для этих целей.
+
## Лицензия
Эта программа распространяется под **[Лицензией MIT](LICENSE)**.
diff --git a/dmain.pas b/dmain.pas
index c428f13..a19b6cf 100644
--- a/dmain.pas
+++ b/dmain.pas
@@ -110,5 +110,8 @@ begin
ToolsPackages.Load(ptTools);
end;
+
+
+
end.
diff --git a/fmain.lfm b/fmain.lfm
index 240540f..3e3a8a3 100644
--- a/fmain.lfm
+++ b/fmain.lfm
@@ -1,7 +1,7 @@
object fmMain: TfmMain
- Left = 304
+ Left = 299
Height = 450
- Top = 87
+ Top = 82
Width = 350
BorderIcons = [biSystemMenu, biMinimize]
Caption = 'ABTool'
@@ -3220,11 +3220,11 @@ object fmMain: TfmMain
Height = 430
Top = 0
Width = 350
- ActivePage = tabTools
+ ActivePage = tabSoft
Align = alClient
Images = dmMain.imgIcons
TabHeight = 20
- TabIndex = 1
+ TabIndex = 0
TabOrder = 0
object tabSoft: TTabSheet
Caption = 'Установка'
@@ -3239,13 +3239,18 @@ object fmMain: TfmMain
Align = alClient
BorderSpacing.Bottom = 3
BorderStyle = bsNone
- CheckImageKind = ckDarkCheck
- DefaultText = 'Node'
- Header.AutoSizeIndex = 0
+ DefaultText = 'Программа'
+ DragOperations = []
+ Header.AutoSizeIndex = -1
Header.Columns = <>
Header.MainColumn = -1
+ IncrementalSearch = isVisibleOnly
+ IncrementalSearchStart = ssAlwaysStartOver
TabOrder = 0
+ TreeOptions.AutoOptions = [toAutoDropExpand, toAutoExpand, toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick]
+ OnGetText = vstSoftPkgContentsGetText
+ OnInitNode = vstSoftPkgContentsInitNode
end
object pnSoftTop: TPanel
Left = 0
@@ -3268,6 +3273,7 @@ object fmMain: TfmMain
BorderSpacing.Top = 2
BorderSpacing.Right = 1
ItemHeight = 13
+ OnChange = cmbSoftPkgSelectChange
Style = csDropDownList
TabOrder = 0
end
@@ -3440,6 +3446,7 @@ object fmMain: TfmMain
BorderSpacing.Top = 2
BorderSpacing.Right = 1
ItemHeight = 13
+ OnChange = cmbToolsPkgSelectChange
Style = csDropDownList
TabOrder = 0
end
@@ -3564,20 +3571,22 @@ object fmMain: TfmMain
end
object vstToolsPkgContents: TVirtualStringTree
Left = 0
- Height = 306
+ Height = 303
Top = 64
Width = 342
Align = alClient
+ BorderSpacing.Bottom = 3
BorderStyle = bsNone
- CheckImageKind = ckDarkCheck
- DefaultText = 'Node'
+ DefaultText = 'Утилита'
DragOperations = []
- Header.AutoSizeIndex = 0
+ Header.AutoSizeIndex = -1
Header.Columns = <>
Header.MainColumn = -1
+ IncrementalSearch = isVisibleOnly
+ IncrementalSearchStart = ssAlwaysStartOver
TabOrder = 3
- TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toReadOnly, toEditOnClick]
- TreeOptions.SelectionOptions = [toAlwaysSelectNode]
+ TreeOptions.AutoOptions = [toAutoDropExpand, toAutoExpand, toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
+ OnGetText = vstToolsPkgContentsGetText
end
end
object tabSystem: TTabSheet
diff --git a/fmain.pas b/fmain.pas
index 1629fc4..c162daf 100644
--- a/fmain.pas
+++ b/fmain.pas
@@ -6,11 +6,26 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
- StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, VirtualTrees, Types,
- dMain, uFileUtils, uPackage, uPackageUtils, uPackageList;
+ StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, virtualtreeview_package,
+ VirtualTrees, dMain, uPackage, uPackageList;
type
+ // Указатель на тип данных TRootNodeData
+ PRootNodeData = ^TRootNodeData;
+ // Тип данных для работы с корневыми нодами
+ TRootNodeData = record
+ FName: String;
+ end;
+
+ // Указатель на тип данных TChildNodeData
+ PChildNodeData = ^TChildNodeData;
+ // Тип данных для работы с дочерними нодами
+ TChildNodeData = record
+ FName: String;
+ FPath: String;
+ end;
+
{ TfmMain }
TfmMain = class(TForm)
@@ -34,18 +49,43 @@ type
tabSystem: TTabSheet;
tabTools: TTabSheet;
vstSoftPkgContents: TVirtualStringTree;
- vstToolsPkgContents: TVirtualStringTree;
- // Создание формы и обновление выпадающих меню пакетов программ и утилит
+ vstToolsPkgContents: TVirtualStringTree;
+ // Создание формы и обновление выпадающих меню пакетов программ и утилит
procedure FormCreate(Sender: TObject);
+ // Смена пакета программ через выпадающий список
+ procedure cmbSoftPkgSelectChange(Sender: TObject);
+ // Смена пакета утилит через выпадающий список
+ procedure cmbToolsPkgSelectChange(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов программ
procedure btnSoftPkgReloadClick(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
procedure btnToolsPkgReloadClick(Sender: TObject);
+ // Отображение отметок в нодах дерева программ
+ procedure vstSoftPkgContentsInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
+ var InitialStates: TVirtualNodeInitStates);
+ // Отображение имён утилит в нодах дерева программ
+ procedure vstSoftPkgContentsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
+ Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
+ // Отображение имён утилит в нодах дерева утилит
+ procedure vstToolsPkgContentsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
+ Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
private
- // Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу
- procedure ReloadPackagesList(APackageType: TPackageType);
+ // Создание ноды в указанном дереве с указанными параметрами
+ function AddNode(AVST: TVirtualStringTree; ARootNode: PVirtualNode; AName: String;
+ APath: String = ''): PVirtualNode;
+ // Создание ноды в указанном дереве с указанными параметрами
+ //function AddNode(AVST: TVirtualStringTree; ARootNode: PVirtualNode; AName: String;
+ // APath: String = ''): PVirtualNode;
+ // Отображение имён программ в нодах деревьев при инициализации деревьев
+ procedure SetNodeText(AVST: TVirtualStringTree; Node: PVirtualNode; Column: TColumnIndex;
+ TextType: TVSTTextType; var CellText: String);
+ // Заполнение дерева содержимым пакета
+ procedure PackageFillVST(AVST: TVirtualStringTree; APackage: TPackage);
public
-
+ // Выбор пакета. Заполняется дерево и отображается описание пакета.
+ procedure SetActivePackage(AType: TPackageType; APackageIndex: Integer);
+ // Перезагрузка дерева пакетов и выпадающих списков пакетов по указанному типу
+ procedure ReloadPackagesList(APackageType: TPackageType);
end;
var
@@ -56,61 +96,197 @@ implementation
{$R *.lfm}
{ TfmMain }
-
+
{------------------------------------------------------------------------------
-Процедура: TfmMain.ReloadPackagesList()
-Назначение: Создание формы и обновление выпадающих меню пакетов программ и утилит
-Вх. параметры: Sender: TObject
+Функция: TPackage.AddNode()
+Назначение: Создание дочерней ноды в указанном дереве с указанными параметрами
+Вх. параметры:
+ AVST: TVirtualStringTree - компонент дерева, в котором нужно создать ноду
+ ARootNode: PVirtualNode - указатель на ноду-родителя (для создания ноды, вложенной в неё)
+ AName: String - название ноды (для отображения имени программы или утилиты)
+ APath: String = '' - путь к программе или утилите (не заполняется для корневых нод)
+Возвращает: PVirtualNode - указатель на созданную ноду списка
+------------------------------------------------------------------------------}
+function TfmMain.AddNode(AVST: TVirtualStringTree; ARootNode: PVirtualNode; AName: String;
+ APath: String = ''): PVirtualNode;
+var
+ ptrData: PChildNodeData;
+begin
+ Result := AVST.AddChild(ARootNode);
+ AVST.ValidateNode(Result, False);
+ ptrData := AVST.GetNodeData(Result);
+ ptrData^.FName := AName;
+ //if Assigned(APath) then
+ ptrData^.FPath := APath;
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.SetNodeText()
+Назначение: Отображение имён программ в нодах деревьев при инициализации деревьев
+------------------------------------------------------------------------------}
+procedure TfmMain.SetNodeText(AVST: TVirtualStringTree; Node: PVirtualNode; Column: TColumnIndex;
+ TextType: TVSTTextType; var CellText: String);
+var
+ PData: PRootNodeData;
+begin
+ PData := AVST.GetNodeData(Node);
+ CellText := PData^.FName;
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.SetActivePackage()
+Назначение: Выбор пакета. Заполняется дерево и отображается описание пакета.
+Вх. параметры:
+ AType: TPackageType - тип пакета
+ APackageIndex: integer - номер пакета в списке (а равно в соотв. ComboBox)
+------------------------------------------------------------------------------}
+procedure TfmMain.SetActivePackage(AType: TPackageType; APackageIndex: Integer);
+var
+ Package: TPackage;
+begin
+ case (AType) of
+ ptSoft:
+ begin
+ Package := dmMain.SoftPackages[APackageIndex];
+ PackageFillVST(vstSoftPkgContents, Package);
+ labSoftPkgDescription.Caption := Package.Description;
+ end;
+ ptTools:
+ begin
+ Package := dmMain.ToolsPackages[APackageIndex];
+ PackageFillVST(vstToolsPkgContents, Package);
+ labToolsPkgDescription.Caption := Package.Description;
+ end;
+ else
+ raise Exception.Create('TfmMain.SetActivePackage(): передан неизвестный тип пакета');
+ end;
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.PackageFillVST()
+Назначение: Заполнение дерева содержимым пакета
+Вх. параметры:
+ AVST: TVirtualStringTree - компонент дерева, которое необходимо заполнить
+ APackage: TPackage - объект пакета
+------------------------------------------------------------------------------}
+procedure TfmMain.PackageFillVST(AVST: TVirtualStringTree; APackage: TPackage);
+var
+ Sections: TStringList;
+ SectionItems: TStringList;
+ keySection: Integer;
+ keyItem: Integer;
+ Path: String;
+ ptrRootNode: PVirtualNode;
+ ptrChildNode: PVirtualNode;
+begin
+ AVST.Clear;
+ Sections := TStringList.Create;
+ SectionItems := TStringList.Create;
+ APackage.ReadSections(Sections);
+ for keySection := 0 to Sections.Count - 1 do
+ begin
+ if Sections[keySection] = 'PackageInfo' then
+ continue;
+ ptrRootNode := AddNode(AVST, nil, Sections[keySection]);
+ APackage.ReadSection(Sections[keySection], SectionItems);
+ if SectionItems.Count > 0 then
+ begin
+ for keyItem := 0 to SectionItems.Count - 1 do
+ begin
+ Path := APackage.ReadString(Sections[keySection], SectionItems[keyItem], '');
+ AddNode(AVST, ptrRootNode, SectionItems[keyItem], Path);
+ end;
+ end;
+ end;
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.ReloadPackagesList()
+Назначение: Обновление выпадающих меню пакетов при создании окна
------------------------------------------------------------------------------}
procedure TfmMain.FormCreate(Sender: TObject);
begin
ReloadPackagesList(ptSoft);
ReloadPackagesList(ptTools);
-end;
-
+end;
+
{------------------------------------------------------------------------------
-Процедура: TfmMain.btnSoftPkgReloadClick()
-Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов программ
-Вх. параметры: Sender: TObject
+Процедура: TfmMain.btnSoftPkgReloadClick()
+Назначение: Обрабока клика по кнопке обновления выпадающего списка пакетов программ
------------------------------------------------------------------------------}
procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject);
begin
ReloadPackagesList(ptSoft);
end;
-
+
{------------------------------------------------------------------------------
-Процедура: TfmMain.btnToolsPkgReloadClick()
-Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
-Вх. параметры: Sender: TObject
+Процедура: TfmMain.btnToolsPkgReloadClick()
+Назначение: Обрабока клика по кнопке обновления выпадающего списка пакетов утилит
------------------------------------------------------------------------------}
procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject);
begin
ReloadPackagesList(ptTools);
end;
+{------------------------------------------------------------------------------
+Процедура: TfmMain.vstSoftPkgContentsGetText()
+Назначение: Отображение имён программ в нодах дерева программ
+------------------------------------------------------------------------------}
+procedure TfmMain.vstSoftPkgContentsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
+ Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
+begin
+ SetNodeText(vstSoftPkgContents, Node, Column, TextType, CellText);
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.vstSoftPkgContentsGetText()
+Назначение: Отображение имён утилит в нодах дерева утилит
+------------------------------------------------------------------------------}
+procedure TfmMain.vstToolsPkgContentsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
+ Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
+begin
+ SetNodeText(vstToolsPkgContents, Node, Column, TextType, CellText);
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.vstSoftPkgContentsInitNode()
+Назначение: Отображение отметок в нодах дерева программ
+------------------------------------------------------------------------------}
+procedure TfmMain.vstSoftPkgContentsInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
+ var InitialStates: TVirtualNodeInitStates);
+begin
+ //Sender.CheckType[Node] := ctTriStateCheckBox;
+ case (Sender.GetNodeLevel(Node)) of
+ 0: Node^.CheckType := ctTriStateCheckBox;
+ 1: Node^.CheckType := ctCheckBox;
+ end;
+end;
+
{------------------------------------------------------------------------------
Процедура: TfmMain.ReloadPackagesList()
-Назначение: Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу
+Назначение: Перезагрузка пакетов и заполнение выпадающих списков пакетов
Вх. параметры: APackageType: TPackageType - тип списка пакета
------------------------------------------------------------------------------}
procedure TfmMain.ReloadPackagesList(APackageType: TPackageType);
var
- LastIndex: integer;
+ LastIndex: Integer;
Key: Integer;
- Pkg: TPackage;
- Combo: TComboBox;
PackageList: TPackageList;
-begin
+ Package: TPackage;
+ Combo: TComboBox;
+begin
case (APackageType) of
- ptSoft: begin
+ ptSoft:
+ begin
Combo := cmbSoftPkgSelect;
PackageList := dmMain.SoftPackages;
end;
- ptTools: begin
+ ptTools:
+ begin
Combo := cmbToolsPkgSelect;
PackageList := dmMain.ToolsPackages;
end;
- ptUnknown: raise Exception.Create('TfmMain.ReloadPackagesList(): передан ptUnknown');
+ else raise Exception.Create('TfmMain.ReloadPackagesList(): передан неизвестный тип пакета');
end;
LastIndex := Combo.ItemIndex;
if LastIndex < 0 then
@@ -121,14 +297,32 @@ begin
begin
for Key := 0 to PackageList.Count - 1 do
begin
- Pkg := PackageList[Key];
- Combo.Items.Add(Pkg.Name + ' (' + ExtractFileName(Pkg.FileName) + ')');
+ Package := PackageList[Key];
+ Combo.Items.Add(Package.Name + ' (' + ExtractFileName(Package.FileName) + ')');
end;
end;
if Combo.Items.Count <= LastIndex then
LastIndex := Combo.Items.Count - 1;
Combo.ItemIndex := LastIndex;
+ SetActivePackage(APackageType, LastIndex);
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.cmbSoftPkgSelectChange()
+Назначение: Смена пакета программ через выпадающий список
+------------------------------------------------------------------------------}
+procedure TfmMain.cmbSoftPkgSelectChange(Sender: TObject);
+begin
+ SetActivePackage(ptSoft, cmbSoftPkgSelect.ItemIndex);
+end;
+
+{------------------------------------------------------------------------------
+Процедура: TfmMain.cmbSoftPkgSelectChange()
+Назначение: Смена пакета утилит через выпадающий список
+------------------------------------------------------------------------------}
+procedure TfmMain.cmbToolsPkgSelectChange(Sender: TObject);
+begin
+ SetActivePackage(ptTools, cmbToolsPkgSelect.ItemIndex);
end;
end.
-