unit fmuDeviceCaps;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,
  //
  untTypes,
  LineX, ComCtrls, ExtCtrls;

type
  TfmDeviceCaps = class(TForm)
    Panel1: TPanel;
    ListView: TListView;
    Panel2: TPanel;
    Panel3: TPanel;
    btnClose: TButton;
  private
    procedure Init(ALine: TLineX; AFont: TFont);
  end;

procedure ShowDeviceCapsDialog(ALine: TLineX; AFont: TFont);

implementation

{$R *.DFM}

procedure ShowDeviceCapsDialog(ALine: TLineX; AFont: TFont);
var
  fm: TfmDeviceCaps;
begin
  fm := TfmDeviceCaps.Create(nil);
  try
    fm.Init(ALine, AFont);
    fm.ShowModal;
  finally
    fm.Free;
  end;
end;

procedure TfmDeviceCaps.Init(ALine: TLineX; AFont: TFont);
const
  BoolToSupported: array[Boolean] of String = (' ',
    '');
  CapDigitalToStr: array[Boolean] of String = ('', '');

  function GetColumnsCount: String;
  var
    I: Integer;
  begin
    Result := '';
    for I := 0 to ALine.DeviceRows - 1 do
    begin
      if Result <> '' then Result := Result + ', ';
      Result := Result +
        Format('(: %d, : %d)', [I, ALine.GetDeviceColumns(I)]);
    end;
  end;

  procedure ListItemsAdd(AListItems: TListItems; const ACaption, AValue: String);
  var
    lvItem: TListItem;
  begin
    lvItem := AListItems.Add;
    lvItem.Caption := ACaption;
    lvItem.SubItems.Add(AValue);
  end;

begin
  Font := AFont;
  with ListView.Items do
  begin
    BeginUpdate;
    try
      Clear;
      ListItemsAdd(ListView.Items, '', ALine.DeviceDescription);
      ListItemsAdd(ListView.Items, '  ',
        CapBlinkToStr[IntToCapBlink(ALine.CapBlink)]);
      ListItemsAdd(ListView.Items, '  ',
        Format('%s, %s', [S_DISP_DT_SBLINK, S_DISP_DT_SWINDOW]));
      ListItemsAdd(ListView.Items, ' ',
        BoolToSupported[ALine.CapBrightness]);
      ListItemsAdd(ListView.Items, '   ',
        CapCharacterSetToStr[IntToCapCharacterSet(ALine.CapCharacterSet)]);
      ListItemsAdd(ListView.Items, '  ',
        ALine.CharacterSetList);
      ListItemsAdd(ListView.Items, ' ',
        BoolToSupported[ALine.CapDescriptors]);
      ListItemsAdd(ListView.Items, ' ',
        IntToStr(ALine.DeviceDescriptors));
      ListItemsAdd(ListView.Items, '  ',
        BoolToSupported[ALine.CapHMarquee]);
      ListItemsAdd(ListView.Items, '  ',
        BoolToSupported[ALine.CapVMarquee]);
      ListItemsAdd(ListView.Items, '  ',
        BoolToSupported[ALine.CapICharWait]);
      ListItemsAdd(ListView.Items, '  ',
        IntToStr(ALine.DeviceRows));
      ListItemsAdd(ListView.Items, '  ',
        GetColumnsCount);
      ListItemsAdd(ListView.Items, '   ',
       BoolToSupported[ALine.CapStatus]);
      ListItemsAdd(ListView.Items, '',
       BoolToSupported[ALine.CapSelfTest]);
      ListItemsAdd(ListView.Items, ' ',
        BoolToSupported[ALine.CapDownloadFonts]);
   finally
     EndUpdate;
   end;
 end;
end;

end.
