This repository has been archived on 2025-07-14. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
abtool/upackagelist.pas
anthony 685274a356 НАСТРОЙКИ
Отображение формы настроек переделано. Теперь она создаётся только 1 раз при первом вызове.
Добавлен выпадающий списк для выбора локализаций. Кнопка сброса к дефолту изменена.
Чтение настроек из abtool.ini (кроме локализаций). Сброс контроллов к актуальным настройкам при каждом показе формы настроек.
Считанные настройки хранятся в глобальной переменной внутри uOptions. Таким образом:
- исключены циклические ссылки с участием dMain ради доступа к настройкам
- теперь можно только вызвать конструктор TOptions, а сам созданный объект нигде не сохранять: объект GlobalOptions уже будет доступен
Новая функция dMain.GetLocalesIniFileList для получения списка файлов локализаций.
Обновлены ini-файлы. Мелочи по оформлению кода.
2019-01-26 01:37:22 +08:00

98 lines
3.3 KiB
ObjectPascal

unit uPackageList;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, uFileUtils, uPackage;
type
{ TPackageList }
// Класс списка пакетов
TPackageList = class
private
// Тип списка пакетов
FType: TPackageType;
// Список пакетов
FPackages: array of TPackage;
// Получение пакета из списка по его номеру
function GetPackageByIndex(Index: integer): TPackage;
public
// Тип списка пакетов
property PackageType: TPackageType read FType;
// Список пакетов
property Packages[Index: Integer]: TPackage read GetPackageByIndex; default;
// Создание списка пакетов по указанному типу
procedure Load(APackageType: TPackageType);
// Заполнение списка пакетов объектами пакетов
procedure Reload();
// Получение количества пакетов в списке
function Count(): integer;
end; // TPackageList
implementation
{ TPackageList }
{------------------------------------------------------------------------------
Процедура: TPackageList.Load()
Назначение: Создание списка пакетов по указанному типу
Вх. параметры: APackageType: TPackageType - тип списка пакета
------------------------------------------------------------------------------}
procedure TPackageList.Load(APackageType: TPackageType);
begin
FType := APackageType;
Reload();
end;
{------------------------------------------------------------------------------
Процедура: TPackageList.Reload()
Назначение: Заполнение списка пакетов объектами пакетов
------------------------------------------------------------------------------}
procedure TPackageList.Reload();
var
FileList: TStringList;
FileMask: String;
Key: Integer;
begin
FPackages := nil;
case (FType) of
ptSoft: FileMask := 'soft.*.ini';
ptTools: FileMask := 'tools.*.ini';
ptUnknown: raise Exception.Create('TPackageList.Reload(): тип не может быть ptUnknown');
end;
FileList := GetABToolFileList('Packages', FileMask);
for Key := 0 to FileList.Count - 1 do
begin
SetLength(FPackages, Length(FPackages)+1);
FPackages[Key] := TPackage.Create(FileList[Key]);
end;
end;
{------------------------------------------------------------------------------
Функция: TPackage.GetPackageByIndex()
Назначение: Получение пакета из списка по его номеру
Возвращает: TPackage - пакет
------------------------------------------------------------------------------}
function TPackageList.GetPackageByIndex(Index: integer): TPackage;
begin
Result := FPackages[Index];
end;
{------------------------------------------------------------------------------
Функция: TPackage.Count()
Назначение: Получение количества пакетов в списке
Возвращает: integer - число пакетов в списке
------------------------------------------------------------------------------}
function TPackageList.Count(): integer;
begin
Result := Length(FPackages);
end;
end.