abtool/upackagelist.pas
AnthonyAxenov 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
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.