Нормальная загрузка и смена пакетов программ и утилит, подгрузка деревьев.

Пакеты читаются в кодировке UTF8.
This commit is contained in:
Anthony Axenov 2019-01-20 13:41:33 +08:00
parent c473d722da
commit 43d2f180fd
14 changed files with 511 additions and 260 deletions

View File

@ -19,9 +19,9 @@
<VersionInfo> <VersionInfo>
<UseVersionInfo Value="True"/> <UseVersionInfo Value="True"/>
<MinorVersionNr Value="7"/> <MinorVersionNr Value="7"/>
<RevisionNr Value="1"/>
<Language Value="0419"/> <Language Value="0419"/>
<Attributes pvaDebug="True" pvaPrivateBuild="True"/> <Attributes pvaDebug="True" pvaPrivateBuild="True"/>
<StringTable ProductVersion="0.7.1.0"/>
</VersionInfo> </VersionInfo>
<BuildModes Count="2"> <BuildModes Count="2">
<Item1 Name="Debug" Default="True"/> <Item1 Name="Debug" Default="True"/>
@ -148,7 +148,6 @@
<Linking> <Linking>
<Debugging> <Debugging>
<DebugInfoType Value="dsDwarf2Set"/> <DebugInfoType Value="dsDwarf2Set"/>
<UseHeaptrc Value="True"/>
<TrashVariables Value="True"/> <TrashVariables Value="True"/>
<UseExternalDbgSyms Value="True"/> <UseExternalDbgSyms Value="True"/>
</Debugging> </Debugging>
@ -166,7 +165,7 @@
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<Exceptions Count="3"> <Exceptions Count="4">
<Item1> <Item1>
<Name Value="EAbort"/> <Name Value="EAbort"/>
</Item1> </Item1>
@ -176,6 +175,9 @@
<Item3> <Item3>
<Name Value="EFOpenError"/> <Name Value="EFOpenError"/>
</Item3> </Item3>
<Item4>
<Name Value="RunError(211)"/>
</Item4>
</Exceptions> </Exceptions>
</Debugging> </Debugging>
</CONFIG> </CONFIG>

Binary file not shown.

View File

@ -1,31 +1,41 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет программ для установки # Пакет программ для установки
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название программы"="путь к файлу". # "Название программы"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет программ 1
Description=Пакет программ, используемый по умолчанию Description=Пакет программ 1, используемый по умолчанию
[Группа 1] [Группа 1]
Имя1=\\setup1.exe /ключ1 /ключ2 Имя1=\\setup1.exe /ключ1 /ключ2
Имя2=\\папка_рядом_с_abtool.exe\setup2.exe Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
Имя3=\папка_в_корне_диска\setup3.exe Имя3=\папка_в_корне_диска\setup3.exe
[Группа 2] Имя4=\\setup1.exe /ключ1 /ключ2
Имя4=\\setup4.exe /ключ1 Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
[Группа 3] Имя6=\папка_в_корне_диска\setup3.exe
Имя5=\\setup5.exe [Группа 2]
Имя6=\\setup6.exe /ключ1 Имя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

View File

@ -1,31 +1,46 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет программ для установки # Пакет программ для установки
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название программы"="путь к файлу". # "Название программы"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет программ 2
Description=Пакет программ, используемый по умолчанию Description=Пакет программ 2, используемый по умолчанию
[Группа 1] [Группа 1]
Имя1=\\setup1.exe /ключ1 /ключ2 Имя1=\\setup1.exe /ключ1 /ключ2
Имя2=\\папка_рядом_с_abtool.exe\setup2.exe Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
Имя3=\папка_в_корне_диска\setup3.exe Имя3=\папка_в_корне_диска\setup3.exe
[Группа 2] Имя4=\\setup1.exe /ключ1 /ключ2
Имя4=\\setup4.exe /ключ1 Имя5=\\папка_рядом_с_abtool.exe\setup2.exe
[Группа 3] Имя6=\папка_в_корне_диска\setup3.exe
Имя5=\\setup5.exe [Группа 2]
Имя6=\\setup6.exe /ключ1 Имя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

View File

@ -1,31 +1,31 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет программ для установки # Пакет программ для установки
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название программы"="путь к файлу". # "Название программы"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет программ 3
Description=Пакет программ, используемый по умолчанию Description=Пакет программ 3, используемый по умолчанию
[Группа 1] [Группа 1]
Имя1=\\setup1.exe /ключ1 /ключ2 Имя1=\\setup1.exe /ключ1 /ключ2
Имя2=\\папка_рядом_с_abtool.exe\setup2.exe Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
Имя3=\папка_в_корне_диска\setup3.exe Имя3=\папка_в_корне_диска\setup3.exe
[Группа 2] [Группа 2]
Имя4=\\setup4.exe /ключ1 Имя4=\\setup4.exe /ключ1
[Группа 3] [Группа 3]
Имя5=\\setup5.exe Имя5=\\setup5.exe
Имя6=\\setup6.exe /ключ1 Имя6=\\setup6.exe /ключ1

View File

@ -1,31 +1,31 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет программ для установки # Пакет программ для установки
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название программы"="путь к файлу". # "Название программы"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет программ 4
Description=Пакет программ, используемый по умолчанию Description=Пакет программ 4, используемый по умолчанию
[Группа 1] [Группа 1]
Имя1=\\setup1.exe /ключ1 /ключ2 Имя1=\\setup1.exe /ключ1 /ключ2
Имя2=\\папка_рядом_с_abtool.exe\setup2.exe Имя2=\\папка_рядом_с_abtool.exe\setup2.exe
Имя3=\папка_в_корне_диска\setup3.exe Имя3=\папка_в_корне_диска\setup3.exe
[Группа 2] [Группа 2]
Имя4=\\setup4.exe /ключ1 Имя4=\\setup4.exe /ключ1
[Группа 3] [Группа 3]
Имя5=\\setup5.exe Имя5=\\setup5.exe
Имя6=\\setup6.exe /ключ1 Имя6=\\setup6.exe /ключ1

View File

@ -1,36 +1,36 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет утилит для запуска # Пакет утилит для запуска
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название утилиты"="путь к файлу". # "Название утилиты"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет утилит 1
Description=Пакет программ, используемый по умолчанию Description=Пакет утилит 1, используемый по умолчанию
[Группа 1] [Группа 1]
Утилита 1=\\утилита1.exe /ключ1 /ключ2 Утилита 1=\\утилита1.exe /ключ1 /ключ2
Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
Утилита 3=\папка_в_корне_диска\утилита3.exe Утилита 3=\папка_в_корне_диска\утилита3.exe
Утилита 4=\\утилита4.exe /ключ1 Утилита 4=\\утилита4.exe /ключ1
[Группа 2] [Группа 2]
Утилита 5=\\утилита5.exe Утилита 5=\\утилита5.exe
Утилита 6=\\утилита6.exe Утилита 6=\\утилита6.exe
[Группа 3] [Группа 3]
Утилита 7=\\утилита7.exe /ключ1 Утилита 7=\\утилита7.exe /ключ1
Утилита 8=\\утилита8.exe Утилита 8=\\утилита8.exe
Утилита 9=\\утилита9.exe Утилита 9=\\утилита9.exe
Утилита 10=\\утилита10.exe /ключ1 /ключ2 Утилита 10=\\утилита10.exe /ключ1 /ключ2
Утилита 11=\\утилита11.exe Утилита 11=\\утилита11.exe

View File

@ -1,36 +1,36 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет утилит для запуска # Пакет утилит для запуска
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название утилиты"="путь к файлу". # "Название утилиты"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет утилит 2
Description=Пакет программ, используемый по умолчанию Description=Пакет утилит 2, используемый по умолчанию
[Группа 1] [Группа 1]
Утилита 1=\\утилита1.exe /ключ1 /ключ2 Утилита 1=\\утилита1.exe /ключ1 /ключ2
Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
Утилита 3=\папка_в_корне_диска\утилита3.exe Утилита 3=\папка_в_корне_диска\утилита3.exe
Утилита 4=\\утилита4.exe /ключ1 Утилита 4=\\утилита4.exe /ключ1
[Группа 2] [Группа 2]
Утилита 5=\\утилита5.exe Утилита 5=\\утилита5.exe
Утилита 6=\\утилита6.exe Утилита 6=\\утилита6.exe
[Группа 3] [Группа 3]
Утилита 7=\\утилита7.exe /ключ1 Утилита 7=\\утилита7.exe /ключ1
Утилита 8=\\утилита8.exe Утилита 8=\\утилита8.exe
Утилита 9=\\утилита9.exe Утилита 9=\\утилита9.exe
Утилита 10=\\утилита10.exe /ключ1 /ключ2 Утилита 10=\\утилита10.exe /ключ1 /ключ2
Утилита 11=\\утилита11.exe Утилита 11=\\утилита11.exe

View File

@ -1,36 +1,36 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет утилит для запуска # Пакет утилит для запуска
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название утилиты"="путь к файлу". # "Название утилиты"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет утилит 3
Description=Пакет программ, используемый по умолчанию Description=Пакет утилит 3, используемый по умолчанию
[Группа 1] [Группа 1]
Утилита 1=\\утилита1.exe /ключ1 /ключ2 Утилита 1=\\утилита1.exe /ключ1 /ключ2
Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
Утилита 3=\папка_в_корне_диска\утилита3.exe Утилита 3=\папка_в_корне_диска\утилита3.exe
Утилита 4=\\утилита4.exe /ключ1 Утилита 4=\\утилита4.exe /ключ1
[Группа 2] [Группа 2]
Утилита 5=\\утилита5.exe Утилита 5=\\утилита5.exe
Утилита 6=\\утилита6.exe Утилита 6=\\утилита6.exe
[Группа 3] [Группа 3]
Утилита 7=\\утилита7.exe /ключ1 Утилита 7=\\утилита7.exe /ключ1
Утилита 8=\\утилита8.exe Утилита 8=\\утилита8.exe
Утилита 9=\\утилита9.exe Утилита 9=\\утилита9.exe
Утилита 10=\\утилита10.exe /ключ1 /ключ2 Утилита 10=\\утилита10.exe /ключ1 /ключ2
Утилита 11=\\утилита11.exe Утилита 11=\\утилита11.exe

View File

@ -1,36 +1,36 @@
# #
# ABTool v0.7.0 # ABTool v0.7.0
# Пакет утилит для запуска # Пакет утилит для запуска
# #
# Секция [PackageInfo] содержит общую информацию о данном пакете: # Секция [PackageInfo] содержит общую информацию о данном пакете:
# Name - Название пакета # Name - Название пакета
# Description - Краткое описание пакета # Description - Краткое описание пакета
# #
# В квадратных скобках указывается название группы (например, антивирусы, # В квадратных скобках указывается название группы (например, антивирусы,
# проигрыватели и т.д.). # проигрыватели и т.д.).
# Далее без кавычек указывается: # Далее без кавычек указывается:
# "Название утилиты"="путь к файлу". # "Название утилиты"="путь к файлу".
# Путь может начинаться с \ (если путь абсолютный; без буквы диска) # Путь может начинаться с \ (если путь абсолютный; без буквы диска)
# или с \\ (если путь относителен ABTool.exe). # или с \\ (если путь относителен ABTool.exe).
# Нельзя под один пункт указывать несколько команд. # Нельзя под один пункт указывать несколько команд.
# Можно указывать дополнительные ключи запуска. # Можно указывать дополнительные ключи запуска.
# Во всех параметрах не должно быть разрывов строк. # Во всех параметрах не должно быть разрывов строк.
# #
#============================================================================ #============================================================================
[PackageInfo] [PackageInfo]
Name=Пакет по умолчанию Name=Пакет утилит 4
Description=Пакет программ, используемый по умолчанию Description=Пакет утилит 4, используемый по умолчанию
[Группа 1] [Группа 1]
Утилита 1=\\утилита1.exe /ключ1 /ключ2 Утилита 1=\\утилита1.exe /ключ1 /ключ2
Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe Утилита 2=\\папка_рядом_с_abtool.exe\утилита2.exe
Утилита 3=\папка_в_корне_диска\утилита3.exe Утилита 3=\папка_в_корне_диска\утилита3.exe
Утилита 4=\\утилита4.exe /ключ1 Утилита 4=\\утилита4.exe /ключ1
[Группа 2] [Группа 2]
Утилита 5=\\утилита5.exe Утилита 5=\\утилита5.exe
Утилита 6=\\утилита6.exe Утилита 6=\\утилита6.exe
[Группа 3] [Группа 3]
Утилита 7=\\утилита7.exe /ключ1 Утилита 7=\\утилита7.exe /ключ1
Утилита 8=\\утилита8.exe Утилита 8=\\утилита8.exe
Утилита 9=\\утилита9.exe Утилита 9=\\утилита9.exe
Утилита 10=\\утилита10.exe /ключ1 /ключ2 Утилита 10=\\утилита10.exe /ключ1 /ключ2
Утилита 11=\\утилита11.exe Утилита 11=\\утилита11.exe

View File

@ -10,9 +10,18 @@ Homepage: [abtool.ru](http://abtool.ru/)
Online help (only Russian for now, sorry): [abtool.ru/onlinehelp](http://abtool.ru/onlinehelp/) 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 ## 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: 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; * 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/) Онлайн справка: [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)**. Эта программа распространяется под **[Лицензией MIT](LICENSE)**.

View File

@ -110,5 +110,8 @@ begin
ToolsPackages.Load(ptTools); ToolsPackages.Load(ptTools);
end; end;
end. end.

View File

@ -1,7 +1,7 @@
object fmMain: TfmMain object fmMain: TfmMain
Left = 304 Left = 299
Height = 450 Height = 450
Top = 87 Top = 82
Width = 350 Width = 350
BorderIcons = [biSystemMenu, biMinimize] BorderIcons = [biSystemMenu, biMinimize]
Caption = 'ABTool' Caption = 'ABTool'
@ -3220,11 +3220,11 @@ object fmMain: TfmMain
Height = 430 Height = 430
Top = 0 Top = 0
Width = 350 Width = 350
ActivePage = tabTools ActivePage = tabSoft
Align = alClient Align = alClient
Images = dmMain.imgIcons Images = dmMain.imgIcons
TabHeight = 20 TabHeight = 20
TabIndex = 1 TabIndex = 0
TabOrder = 0 TabOrder = 0
object tabSoft: TTabSheet object tabSoft: TTabSheet
Caption = 'Установка' Caption = 'Установка'
@ -3239,13 +3239,18 @@ object fmMain: TfmMain
Align = alClient Align = alClient
BorderSpacing.Bottom = 3 BorderSpacing.Bottom = 3
BorderStyle = bsNone BorderStyle = bsNone
CheckImageKind = ckDarkCheck DefaultText = 'Программа'
DefaultText = 'Node' DragOperations = []
Header.AutoSizeIndex = 0 Header.AutoSizeIndex = -1
Header.Columns = <> Header.Columns = <>
Header.MainColumn = -1 Header.MainColumn = -1
IncrementalSearch = isVisibleOnly
IncrementalSearchStart = ssAlwaysStartOver
TabOrder = 0 TabOrder = 0
TreeOptions.AutoOptions = [toAutoDropExpand, toAutoExpand, toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick] TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick]
OnGetText = vstSoftPkgContentsGetText
OnInitNode = vstSoftPkgContentsInitNode
end end
object pnSoftTop: TPanel object pnSoftTop: TPanel
Left = 0 Left = 0
@ -3268,6 +3273,7 @@ object fmMain: TfmMain
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 1 BorderSpacing.Right = 1
ItemHeight = 13 ItemHeight = 13
OnChange = cmbSoftPkgSelectChange
Style = csDropDownList Style = csDropDownList
TabOrder = 0 TabOrder = 0
end end
@ -3440,6 +3446,7 @@ object fmMain: TfmMain
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 1 BorderSpacing.Right = 1
ItemHeight = 13 ItemHeight = 13
OnChange = cmbToolsPkgSelectChange
Style = csDropDownList Style = csDropDownList
TabOrder = 0 TabOrder = 0
end end
@ -3564,20 +3571,22 @@ object fmMain: TfmMain
end end
object vstToolsPkgContents: TVirtualStringTree object vstToolsPkgContents: TVirtualStringTree
Left = 0 Left = 0
Height = 306 Height = 303
Top = 64 Top = 64
Width = 342 Width = 342
Align = alClient Align = alClient
BorderSpacing.Bottom = 3
BorderStyle = bsNone BorderStyle = bsNone
CheckImageKind = ckDarkCheck DefaultText = 'Утилита'
DefaultText = 'Node'
DragOperations = [] DragOperations = []
Header.AutoSizeIndex = 0 Header.AutoSizeIndex = -1
Header.Columns = <> Header.Columns = <>
Header.MainColumn = -1 Header.MainColumn = -1
IncrementalSearch = isVisibleOnly
IncrementalSearchStart = ssAlwaysStartOver
TabOrder = 3 TabOrder = 3
TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toReadOnly, toEditOnClick] TreeOptions.AutoOptions = [toAutoDropExpand, toAutoExpand, toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
TreeOptions.SelectionOptions = [toAlwaysSelectNode] OnGetText = vstToolsPkgContentsGetText
end end
end end
object tabSystem: TTabSheet object tabSystem: TTabSheet

256
fmain.pas
View File

@ -6,11 +6,26 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, VirtualTrees, Types, StdCtrls, ExtCtrls, Buttons, ActnList, EditBtn, Menus, virtualtreeview_package,
dMain, uFileUtils, uPackage, uPackageUtils, uPackageList; VirtualTrees, dMain, uPackage, uPackageList;
type type
// Указатель на тип данных TRootNodeData
PRootNodeData = ^TRootNodeData;
// Тип данных для работы с корневыми нодами
TRootNodeData = record
FName: String;
end;
// Указатель на тип данных TChildNodeData
PChildNodeData = ^TChildNodeData;
// Тип данных для работы с дочерними нодами
TChildNodeData = record
FName: String;
FPath: String;
end;
{ TfmMain } { TfmMain }
TfmMain = class(TForm) TfmMain = class(TForm)
@ -34,18 +49,43 @@ type
tabSystem: TTabSheet; tabSystem: TTabSheet;
tabTools: TTabSheet; tabTools: TTabSheet;
vstSoftPkgContents: TVirtualStringTree; vstSoftPkgContents: TVirtualStringTree;
vstToolsPkgContents: TVirtualStringTree; vstToolsPkgContents: TVirtualStringTree;
// Создание формы и обновление выпадающих меню пакетов программ и утилит // Создание формы и обновление выпадающих меню пакетов программ и утилит
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
// Смена пакета программ через выпадающий список
procedure cmbSoftPkgSelectChange(Sender: TObject);
// Смена пакета утилит через выпадающий список
procedure cmbToolsPkgSelectChange(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов программ // Обрабока клика по кнопке обновления выпадающего меню пакетов программ
procedure btnSoftPkgReloadClick(Sender: TObject); procedure btnSoftPkgReloadClick(Sender: TObject);
// Обрабока клика по кнопке обновления выпадающего меню пакетов утилит // Обрабока клика по кнопке обновления выпадающего меню пакетов утилит
procedure btnToolsPkgReloadClick(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 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 public
// Выбор пакета. Заполняется дерево и отображается описание пакета.
procedure SetActivePackage(AType: TPackageType; APackageIndex: Integer);
// Перезагрузка дерева пакетов и выпадающих списков пакетов по указанному типу
procedure ReloadPackagesList(APackageType: TPackageType);
end; end;
var var
@ -56,61 +96,197 @@ implementation
{$R *.lfm} {$R *.lfm}
{ TfmMain } { TfmMain }
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Процедура: TfmMain.ReloadPackagesList() Функция: TPackage.AddNode()
Назначение: Создание формы и обновление выпадающих меню пакетов программ и утилит Назначение: Создание дочерней ноды в указанном дереве с указанными параметрами
Вх. параметры: Sender: TObject Вх. параметры:
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); procedure TfmMain.FormCreate(Sender: TObject);
begin begin
ReloadPackagesList(ptSoft); ReloadPackagesList(ptSoft);
ReloadPackagesList(ptTools); ReloadPackagesList(ptTools);
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Процедура: TfmMain.btnSoftPkgReloadClick() Процедура: TfmMain.btnSoftPkgReloadClick()
Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов программ Назначение: Обрабока клика по кнопке обновления выпадающего списка пакетов программ
Вх. параметры: Sender: TObject
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject); procedure TfmMain.btnSoftPkgReloadClick(Sender: TObject);
begin begin
ReloadPackagesList(ptSoft); ReloadPackagesList(ptSoft);
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Процедура: TfmMain.btnToolsPkgReloadClick() Процедура: TfmMain.btnToolsPkgReloadClick()
Назначение: Обрабока клика по кнопке обновления выпадающего меню пакетов утилит Назначение: Обрабока клика по кнопке обновления выпадающего списка пакетов утилит
Вх. параметры: Sender: TObject
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject); procedure TfmMain.btnToolsPkgReloadClick(Sender: TObject);
begin begin
ReloadPackagesList(ptTools); ReloadPackagesList(ptTools);
end; 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() Процедура: TfmMain.ReloadPackagesList()
Назначение: Перезагрузка списка пакетов и выпадающих меню пакетов по указанному типу Назначение: Перезагрузка пакетов и заполнение выпадающих списков пакетов
Вх. параметры: APackageType: TPackageType - тип списка пакета Вх. параметры: APackageType: TPackageType - тип списка пакета
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
procedure TfmMain.ReloadPackagesList(APackageType: TPackageType); procedure TfmMain.ReloadPackagesList(APackageType: TPackageType);
var var
LastIndex: integer; LastIndex: Integer;
Key: Integer; Key: Integer;
Pkg: TPackage;
Combo: TComboBox;
PackageList: TPackageList; PackageList: TPackageList;
begin Package: TPackage;
Combo: TComboBox;
begin
case (APackageType) of case (APackageType) of
ptSoft: begin ptSoft:
begin
Combo := cmbSoftPkgSelect; Combo := cmbSoftPkgSelect;
PackageList := dmMain.SoftPackages; PackageList := dmMain.SoftPackages;
end; end;
ptTools: begin ptTools:
begin
Combo := cmbToolsPkgSelect; Combo := cmbToolsPkgSelect;
PackageList := dmMain.ToolsPackages; PackageList := dmMain.ToolsPackages;
end; end;
ptUnknown: raise Exception.Create('TfmMain.ReloadPackagesList(): передан ptUnknown'); else raise Exception.Create('TfmMain.ReloadPackagesList(): передан неизвестный тип пакета');
end; end;
LastIndex := Combo.ItemIndex; LastIndex := Combo.ItemIndex;
if LastIndex < 0 then if LastIndex < 0 then
@ -121,14 +297,32 @@ begin
begin begin
for Key := 0 to PackageList.Count - 1 do for Key := 0 to PackageList.Count - 1 do
begin begin
Pkg := PackageList[Key]; Package := PackageList[Key];
Combo.Items.Add(Pkg.Name + ' (' + ExtractFileName(Pkg.FileName) + ')'); Combo.Items.Add(Package.Name + ' (' + ExtractFileName(Package.FileName) + ')');
end; end;
end; end;
if Combo.Items.Count <= LastIndex then if Combo.Items.Count <= LastIndex then
LastIndex := Combo.Items.Count - 1; LastIndex := Combo.Items.Count - 1;
Combo.ItemIndex := LastIndex; 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;
end. end.