﻿unit Screen.Test;

interface

{$SCOPEDENUMS ON}

uses
  System.Types, System.Classes, FGX.Forms, FGX.Controls, FGX.Controls.Types, FGX.StaticLabel,
  FGX.CollectionView, FGX.Layout, FGX.CardPanel, FGX.Layout.Types, FGX.Button, FGX.Line,
  FGX.Button.Types, FGX.GraphicControl, FGX.Shape;

type
  TTest = class(TfgForm)
    CollectionView: TfgCollectionView;
    CollectionView_Styles: TfgCollectionViewStyles;
    CollectionView_Style1: TfgCollectionViewStyle;
    CardPanel: TfgCardPanel;
    NameLabel: TfgLabel;
    fgButton2: TfgButton;
    fgLine1: TfgLine;
    procedure fgFormCreate(Sender: TObject);
    function  CollectionViewGetItemCount(Sender: TObject): Integer;
    procedure CollectionViewBindItem(Sender: TObject; const AIndex: Integer; const AStyle: String; const AItem: TfgItemWrapper);
    procedure fgFormShow(Sender: TObject);
    procedure fgButton2Tap(Sender: TObject);
  private
    FCount: integer;
    FStyleSizeInPx: Integer;
    procedure CalculateStyleHeight;
  end;

implementation

{$R *.xfm}

uses
  System.SysUtils, FGX.Platform, System.Math, FGX.Screen;

{ TTest }

procedure TTest.fgButton2Tap(Sender: TObject);
begin
  inherited;
  FCount := Random(15) + 1;
  (Sender as TfgButton).Text := 'Count: ' + FCount.ToString;
  CalculateStyleHeight;
  CollectionView.ReloadItems;
  CollectionView.Height := FStyleSizeInPx * CollectionView.Count * TfgScreenManager.Main.Scale;
end;

procedure TTest.fgFormCreate(Sender: TObject);
begin
  fgButton2Tap(fgButton2);
end;

procedure TTest.fgFormShow(Sender: TObject);
begin
  CalculateStyleHeight;
end;

procedure TTest.CalculateStyleHeight;
begin
  NameLabel.Size.SetSizeF(NameLabel.MeasureSize(TfgMeasuringSpecification.Fixed, NameLabel.Bounds.Width, TfgMeasuringSpecification.Unspecified, 0));
  NameLabel.Size.Height := NameLabel.Size.Height + NameLabel.ContentPadding.Top + NameLabel.ContentPadding.Bottom;
  if NameLabel.AlignWithMargins then
    NameLabel.Height := NameLabel.Height + NameLabel.Margins.Top + NameLabel.Margins.Bottom;
  CardPanel.Height := NameLabel.Size.Height + CardPanel.Padding.Top + CardPanel.Padding.Bottom;
  if CardPanel.AlignWithMargins then
    CardPanel.Height := CardPanel.Height + CardPanel.Margins.Top + CardPanel.Margins.Bottom;
  CollectionView_Style1.Height := (CardPanel.Height + fgLine1.Height + CollectionView_Style1.Padding.Top + CollectionView_Style1.Padding.Bottom);
  FStyleSizeInPx := Ceil(CollectionView_Style1.Height / TfgScreenManager.Main.Scale);
end;

function TTest.CollectionViewGetItemCount(Sender: TObject): Integer;
begin
  Result := FCount;
end;

procedure TTest.CollectionViewBindItem(Sender: TObject; const AIndex: Integer; const AStyle: String; const AItem: TfgItemWrapper);
begin
  AItem.GetControlByLookupName<TfgLabel>('fname').Text := 'Item ' + AIndex.ToString;
end;

end.
