lazarus/components/sqldbrest/design/frasqldbresourcefields.pp
2019-05-11 16:03:10 +00:00

158 lines
3.4 KiB
ObjectPascal

unit frasqldbresourcefields;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, ComCtrls, DB, sqldbrestschema, sqldbschemaedittools;
type
{ TResourceFieldsEditFrame }
TResourceFieldsEditFrame = class(TBaseEditFrame)
ILFields: TImageList;
LVFields: TListView;
procedure LVFieldsDblClick(Sender: TObject);
private
FOnSelectField: TNotifyEvent;
FResource: TSQLDBRestResource;
procedure AddFieldToList(Fld: TSQLDBRestField);
procedure SetResource(AValue: TSQLDBRestResource);
procedure ShowField(LI: TListItem; Fld: TSQLDBRestField);
Protected
procedure SetFrameData(aData: TObject); override;
public
Procedure ShowResource;
Function Modified : Boolean; override;
Procedure SaveData; override;
Function FrameCaption : String; override;
Property Resource : TSQLDBRestResource Read FResource Write SetResource;
Property OnSelectField : TNotifyEvent Read FOnSelectField Write FOnSelectField;
end;
implementation
uses typinfo;
{$R *.lfm}
Const
idxChecked = 0;
idxUnChecked = 1;
idxField = 2;
idxKey = 3;
{ TResourceFieldsEditFrame }
procedure TResourceFieldsEditFrame.SetResource(AValue: TSQLDBRestResource);
begin
if FResource=AValue then Exit;
FResource:=AValue;
ShowResource;
end;
procedure TResourceFieldsEditFrame.SetFrameData(aData: TObject);
begin
Resource:=aData as TSQLDBRestResource;
end;
procedure TResourceFieldsEditFrame.ShowField(LI: TListItem; Fld: TSQLDBRestField);
procedure ShowBool(Idx : Integer; B : Boolean; ImgIdx : Integer = idxChecked);
begin
LI.SubItems[Idx]:='';
if B then
LI.SubItemImages[Idx]:=ImgIdx;
end;
Procedure ShowOp(idx : Integer; O : TRestFieldOption);
begin
ShowBool(Idx,O in fld.Options);
end;
Var
i : Integer;
S : String;
begin
LI.Data:=Fld;
LI.ImageIndex:=idxField;
LI.Caption:=Fld.PublicName;
for I:=0 to LVFields.ColumnCount-1 do
LI.SubItems.Add('');
LI.SubItems[0]:=Fld.FieldName;
LI.SubItems[1]:=TypeNames[Fld.FieldType];
S:=GetEnumName(TypeInfo(TFieldType),Ord(Fld.NativeFieldType));
LI.SubItems[2]:=S;
LI.SubItems[3]:=Fld.GeneratorName;
ShowBool(4,foInKey in Fld.Options,idxKey);
ShowOp(5,foInInsert);
ShowOp(6,foInUpdate);
ShowOp(7,foRequired);
ShowOp(8,foFilter);
ShowOp(9,foOrderBy);
ShowOp(10,foOrderByDesc);
end;
procedure TResourceFieldsEditFrame.LVFieldsDblClick(Sender: TObject);
begin
if Assigned(OnSelectField) and Assigned(LVFields.Selected) And Assigned(LVFields.Selected.Data) then
OnSelectField(TSQLDBRestResource(LVFields.Selected.Data));
end;
procedure TResourceFieldsEditFrame.AddFieldToList(Fld: TSQLDBRestField);
Var
LI : TListItem;
begin
LI:=LVFields.Items.Add;
ShowField(LI,Fld);
end;
procedure TResourceFieldsEditFrame.ShowResource;
Var
I : Integer;
begin
With LVFields.Items do
begin
BeginUpdate;
try
Clear;
if Not assigned(Resource) then
exit;
For I:=0 to Resource.Fields.Count-1 do
AddFieldToList(Resource.Fields[I]);
finally
EndUpdate;
end;
end;
end;
function TResourceFieldsEditFrame.Modified: Boolean;
begin
Result:=False;
end;
procedure TResourceFieldsEditFrame.SaveData;
begin
// nothing to do
end;
function TResourceFieldsEditFrame.FrameCaption: String;
begin
if FResource=Nil then
Result:=SUnknownObject
else
Result:=Resource.ResourceName;
Result:=Format(SEditObjectFields,[Result]);
end;
end.