From 43d2f180fd85cb89621603624eb2f084ef9b8898 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Sun, 20 Jan 2019 13:41:33 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B8=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=B5=D1=82=D0=BE=D0=B2=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BC=20=D0=B8=20=D1=83=D1=82=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=D1=82,=20=D0=BF=D0=BE=D0=B4=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D1=8C=D0=B5=D0=B2.=20?= =?UTF-8?q?=D0=9F=D0=B0=D0=BA=D0=B5=D1=82=D1=8B=20=D1=87=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B5=20UTF8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ABTool.lpi | 8 +- ABTool.res | Bin 104636 -> 104636 bytes ABTool/Packages/soft.test01.ini | 58 ++++--- ABTool/Packages/soft.test02.ini | 63 +++++--- ABTool/Packages/soft.test03.ini | 48 +++--- ABTool/Packages/soft.test04.ini | 48 +++--- ABTool/Packages/tools.test01.ini | 58 +++---- ABTool/Packages/tools.test02.ini | 58 +++---- ABTool/Packages/tools.test03.ini | 58 +++---- ABTool/Packages/tools.test04.ini | 58 +++---- README.md | 20 ++- dmain.pas | 3 + fmain.lfm | 35 +++-- fmain.pas | 256 +++++++++++++++++++++++++++---- 14 files changed, 511 insertions(+), 260 deletions(-) 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 a28f8c40358dba76a7aeb6cb510beae212a5c805..df56e3f943cfecbff0c901d7d8c6bf4a7ac3f929 100644 GIT binary patch delta 38 wcmV+>0NMY%u?D=c2C$+A0RWSu24RzE2sD!f2b2LYlbHw4gPaJroCpCRkQgWptN;K2 delta 38 wcmV+>0NMY%u?D=c2C$+A0RfYv24Ryp2b2LZlg$UulLQAegPaJroCpCRkQ~7cu>b%7 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. -