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

218 lines
4.9 KiB
ObjectPascal

unit frasqldbrestfieldedit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, Spin, ExtCtrls, db, sqldbschemaedittools, sqldbrestschema;
type
{ TSQLDBRestFieldEditFrame }
TSQLDBRestFieldEditFrame = class(TBaseEditFrame)
CBFieldType: TComboBox;
CBNativeFieldType: TComboBox;
CGFieldOptions: TCheckGroup;
LPublicName1: TLabel;
LPublicName2: TLabel;
LPublicName3: TLabel;
LPublicName4: TLabel;
LSEMaxLen: TLabel;
CGFilters: TCheckGroup;
EGeneratorName: TEdit;
EPublicName: TEdit;
EFieldName: TEdit;
LPublicName: TLabel;
SEMaxLen: TSpinEdit;
procedure CGFieldOptionsItemClick(Sender: TObject; Index: integer);
private
FField: TSQLDBRestField;
procedure CheckFiltersEnabled;
procedure SetField(AValue: TSQLDBRestField);
Protected
Procedure SetFrameData(aData: TObject); override;
public
Constructor Create(aOwner : TComponent); override;
Function Modified : Boolean; override;
Procedure SaveData; override;
Procedure ShowField;
Function FrameCaption : String; override;
Property Field : TSQLDBRestField Read FField Write SetField;
end;
implementation
uses typinfo;
{$R *.lfm}
{ TSQLDBRestFieldEditFrame }
procedure TSQLDBRestFieldEditFrame.CGFieldOptionsItemClick(Sender: TObject;
Index: integer);
begin
if Index=ord(foFilter) then
CheckFiltersEnabled;
end;
procedure TSQLDBRestFieldEditFrame.CheckFiltersEnabled;
begin
CGFilters.Enabled:=CGFieldOptions.Checked[ord(foFilter)];
end;
procedure TSQLDBRestFieldEditFrame.SetField(AValue: TSQLDBRestField);
begin
if FField=AValue then Exit;
FField:=AValue;
ShowField;
end;
procedure TSQLDBRestFieldEditFrame.SetFrameData(aData: TObject);
begin
Field:=aData as TSQLDBRestField;
end;
constructor TSQLDBRestFieldEditFrame.Create(aOwner: TComponent);
Var
T : TRestFieldType;
FT : TFieldType;
begin
inherited Create(aOwner);
CBFieldType.Items.Clear;
For T in TRestFieldType do
if T<>rftUnknown then
CBFieldType.Items.Add(TypeNames[T]);
CBNativeFieldType.Items.Clear;
For FT in TFieldType do
if FT<>ftUnknown then
CBNativeFieldType.Items.Add(GetEnumName(TypeInfo(TFieldType),Ord(FT)))
end;
function TSQLDBRestFieldEditFrame.Modified: Boolean;
Procedure DoOption(O : TRestFieldOption);
begin
Result:=Result or (CGFieldOptions.Checked[Ord(O)]<> (O in Field.Options))
end;
Procedure DoFilter(F : TRestFieldFilter);
begin
Result:=Result or (CGFilters.Checked[Ord(F)]<> (F in Field.Filters));
end;
Var
O : TRestFieldOption;
FO : TRestFieldFilter;
begin
With FField do
begin
Result:=(PublicName <> EPublicName.Text) or
(FieldName <> EFieldName.Text) or
(GeneratorName <> EGeneratorName.Text) or
(FieldType <> TRestFieldType(CBFieldType.ItemIndex+1)) or
(NativeFieldType <> TFieldType(CBNativeFieldType.ItemIndex+1)) or
(MaxLen<>SEMaxLen.Value);
For O in TRestFieldOption do
DoOption(O);
For FO in TRestFieldFilter do
DoFilter(FO);
end;
end;
procedure TSQLDBRestFieldEditFrame.SaveData;
Procedure DoOption(O : TRestFieldOption);
begin
if CGFieldOptions.Checked[Ord(O)] then
Field.Options:=Field.Options+[O]
else
Field.Options:=Field.Options-[O]
end;
Procedure DoFilter(F : TRestFieldFilter);
begin
if CGFilters.Checked[Ord(F)] and (foFilter in Field.Options) then
Field.Filters:=Field.Filters+[F]
else
Field.Filters:=Field.Filters-[F];
end;
Var
O : TRestFieldOption;
FO : TRestFieldFilter;
begin
With FField do
begin
PublicName := EPublicName.Text;
FieldName := EFieldName.Text;
GeneratorName := EGeneratorName.Text;
FieldType := TRestFieldType(CBFieldType.ItemIndex+1);
NativeFieldType := TFieldType(CBNativeFieldType.ItemIndex+1);
MaxLen:=SEMaxLen.Value;
For O in TRestFieldOption do
DoOption(O);
For FO in TRestFieldFilter do
DoFilter(FO);
end;
end;
procedure TSQLDBRestFieldEditFrame.ShowField;
Procedure DoOption(O : TRestFieldOption);
begin
CGFieldOptions.Checked[Ord(O)]:=O in Field.Options;
end;
Procedure DoFilter(F : TRestFieldFilter);
begin
CGFilters.Checked[Ord(F)]:=(foFilter in Field.Options) and (F in Field.Filters);
end;
Var
O : TRestFieldOption;
FO : TRestFieldFilter;
begin
With FField do
begin
EPublicName.Text:=PublicName;
EFieldName.Text:=FieldName;
EGeneratorName.Text:=GeneratorName;
CBFieldType.ItemIndex:=Ord(FieldType)-1;
CBNativeFieldType.ItemIndex:=Ord(NativeFieldType)-1;
SEMaxLen.Value:=MaxLen;
For O in TRestFieldOption do
DoOption(O);
CheckFiltersEnabled;
For FO in TRestFieldFilter do
DoFilter(FO);
end;
end;
function TSQLDBRestFieldEditFrame.FrameCaption: String;
begin
if FField=Nil then
Result:=SUnknownObject
else
Result:=FField.PublicName;
Result:=Format(SEditObject,[SField,Result]);
end;
end.