Changeset 290 for trunk/UItemList.pas


Ignore:
Timestamp:
Mar 25, 2019, 12:51:41 AM (6 years ago)
Author:
chronos
Message:
  • Modified: List and item forms for BuildingKind and Nation converted to generic forms.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UItemList.pas

    r285 r290  
    1111  TDataType = (dtNone, dtString, dtBoolean, dtInteger, dtFloat, dtColor,
    1212    dtTime, dtDate, dtDateTime);
     13
     14  { TItemField }
    1315
    1416  TItemField = class
     
    1921    Position: TPoint;
    2022    Size: TPoint;
     23    procedure Assign(Source: TItemField);
    2124  end;
    2225
     
    2528  TItemFields = class(TFPGObjectList<TItemField>)
    2629    function AddField(Index: Integer; SysName, Name: string; DataType: TDataType): TItemField;
     30    function SearchByIndex(Index: Integer): TItemField;
    2731  end;
    2832
     
    3741    Id: Integer;
    3842    Name: string;
    39     function GetFields: TItemFields; virtual;
     43    class function GetFields: TItemFields; virtual;
     44    function GetField(Index: Integer): TItemField;
    4045    procedure GetValue(Index: Integer; out Value); virtual;
     46    function GetValueInteger(Index: Integer): Integer;
     47    function GetValueString(Index: Integer): string;
     48    function GetValueColor(Index: Integer): TColor;
     49    function GetValueBoolean(Index: Integer): Boolean;
     50    function GetValueAsText(Index: Integer): string;
    4151    procedure SetValue(Index: Integer; var Value); virtual;
     52    procedure SetValueInteger(Index: Integer; Value: Integer);
     53    procedure SetValueString(Index: Integer; Value: string);
     54    procedure SetValueColor(Index: Integer; Value: TColor);
     55    procedure SetValueBoolean(Index: Integer; Value: Boolean);
    4256    procedure Assign(Source: TItem); virtual;
    4357    procedure LoadFromNode(Node: TDOMNode); virtual;
    4458    procedure SaveToNode(Node: TDOMNode); virtual;
    4559    class function GetClassSysName: string; virtual;
     60    class function GetClassName: string; virtual;
    4661  end;
    4762
     
    6883implementation
    6984
     85resourcestring
     86  SYes = 'Yes';
     87  SNo = 'No';
     88  SItem = 'Item';
     89  SName = 'Name';
     90
     91{ TItemField }
     92
     93procedure TItemField.Assign(Source: TItemField);
     94begin
     95  SysName := Source.SysName;
     96  Name := Source.Name;
     97  Index := Source.Index;
     98  DataType := Source.DataType;
     99  Position := Source.Position;
     100  Size := Source.Size;
     101end;
     102
    70103{ TItemList }
    71104
     
    185218end;
    186219
     220function TItemFields.SearchByIndex(Index: Integer): TItemField;
     221var
     222  I: Integer;
     223begin
     224  I := 0;
     225  while (I < Count) and (Items[I].Index <> Index) do Inc(I);
     226  if I < Count then Result := Items[I]
     227    else Result := nil;
     228end;
     229
    187230{ TItem }
    188231
     
    192235  ValueColor: TColor;
    193236  ValueInteger: Integer;
     237  ValueBoolean: Boolean;
    194238begin
    195239  if Field.DataType = dtString then begin
     
    205249    SetValue(Field.Index, ValueInteger);
    206250  end else
     251  if Field.DataType = dtBoolean then begin
     252    Source.GetValue(Field.Index, ValueBoolean);
     253    SetValue(Field.Index, ValueBoolean);
     254  end else
    207255  raise Exception.Create('Unsupported field value data type');
    208256end;
     
    250298end;
    251299
    252 function TItem.GetFields: TItemFields;
     300class function TItem.GetFields: TItemFields;
    253301begin
    254302  Result := TItemFields.Create;
    255   Result.AddField(1, 'Name', 'Name', dtString);
     303  Result.AddField(1, 'Name', SName, dtString);
     304end;
     305
     306function TItem.GetField(Index: Integer): TItemField;
     307var
     308  Fields: TItemFields;
     309begin
     310  Result := TItemField.Create;
     311  Fields := GetFields;
     312  try
     313    Result.Assign(Fields[Index]);
     314  finally
     315    Fields.Free;
     316  end;
    256317end;
    257318
     
    260321end;
    261322
     323function TItem.GetValueString(Index: Integer): string;
     324begin
     325  GetValue(Index, Result);
     326end;
     327
     328function TItem.GetValueInteger(Index: Integer): Integer;
     329begin
     330  GetValue(Index, Result);
     331end;
     332
     333function TItem.GetValueColor(Index: Integer): TColor;
     334begin
     335  GetValue(Index, Result);
     336end;
     337
     338function TItem.GetValueBoolean(Index: Integer): Boolean;
     339begin
     340  GetValue(Index, Result);
     341end;
     342
     343function TItem.GetValueAsText(Index: Integer): string;
     344var
     345  Fields: TItemFields;
     346  ItemField: TItemField;
     347begin
     348  Fields := GetFields;
     349  ItemField := GetField(Fields.IndexOf(Fields.SearchByIndex(Index)));
     350  if ItemField.DataType = dtInteger then Result := IntToStr(GetValueInteger(Index))
     351  else if ItemField.DataType = dtString then Result := GetValueString(Index)
     352  else if ItemField.DataType = dtColor then Result := ''
     353  else if ItemField.DataType = dtBoolean then begin
     354    if GetValueBoolean(Index) then Result := SYes else Result := SNo;
     355  end;
     356  ItemField.Free;
     357  Fields.Free;
     358end;
     359
    262360procedure TItem.SetValue(Index: Integer; var Value);
    263361begin
     362end;
     363
     364procedure TItem.SetValueInteger(Index: Integer; Value: Integer);
     365begin
     366  SetValue(Index, Value);
     367end;
     368
     369procedure TItem.SetValueString(Index: Integer; Value: string);
     370begin
     371  SetValue(Index, Value);
     372end;
     373
     374procedure TItem.SetValueColor(Index: Integer; Value: TColor);
     375begin
     376  SetValue(Index, Value);
     377end;
     378
     379procedure TItem.SetValueBoolean(Index: Integer; Value: Boolean);
     380begin
     381  SetValue(Index, Value);
    264382end;
    265383
     
    318436end;
    319437
     438class function TItem.GetClassName: string;
     439begin
     440  Result := SItem;
     441end;
     442
    320443end.
    321444
Note: See TracChangeset for help on using the changeset viewer.