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.Create()
Назначение:    Создание списка пакетов по указанному типу
Вх. параметры: 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.GetPackageByIndex()
Назначение:    Получение количества пакетов в списке
Возвращает:    integer - число пакетов в списке
------------------------------------------------------------------------------}
function TPackageList.Count(): integer;
begin
   Result := Length(FPackages);
end;

end.

