mirror of https://gitlab.com/basile.b/dexed.git
#10, add props
This commit is contained in:
parent
3eeb985081
commit
43b5e48351
|
@ -121,6 +121,7 @@ inherited CEDubProjectEditorWidget: TCEDubProjectEditorWidget
|
||||||
Width = 28
|
Width = 28
|
||||||
Align = alLeft
|
Align = alLeft
|
||||||
Layout = blGlyphBottom
|
Layout = blGlyphBottom
|
||||||
|
OnClick = btnAddPropClick
|
||||||
ShowCaption = False
|
ShowCaption = False
|
||||||
end
|
end
|
||||||
object fltEdit: TTreeFilterEdit
|
object fltEdit: TTreeFilterEdit
|
||||||
|
|
|
@ -15,6 +15,19 @@ type
|
||||||
|
|
||||||
{ TCEDubProjectEditorWidget }
|
{ TCEDubProjectEditorWidget }
|
||||||
|
|
||||||
|
TDubPropAddEvent = procedure(const propName: string; tpe: TJSONtype) of object;
|
||||||
|
|
||||||
|
TCEDubProjectPropAddPanel = class(TForm)
|
||||||
|
private
|
||||||
|
fSelType: TRadioGroup;
|
||||||
|
fEdName: TEdit;
|
||||||
|
fEvent: TDubPropAddEvent;
|
||||||
|
fBtnValidate: TBitBtn;
|
||||||
|
procedure doValidate(sender: TObject);
|
||||||
|
public
|
||||||
|
constructor construct(event: TDubPropAddEvent);
|
||||||
|
end;
|
||||||
|
|
||||||
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
||||||
btnAcceptProp: TSpeedButton;
|
btnAcceptProp: TSpeedButton;
|
||||||
btnAddProp: TSpeedButton;
|
btnAddProp: TSpeedButton;
|
||||||
|
@ -32,6 +45,7 @@ type
|
||||||
TabSheet1: TTabSheet;
|
TabSheet1: TTabSheet;
|
||||||
TabSheet2: TTabSheet;
|
TabSheet2: TTabSheet;
|
||||||
procedure btnAcceptPropClick(Sender: TObject);
|
procedure btnAcceptPropClick(Sender: TObject);
|
||||||
|
procedure btnAddPropClick(Sender: TObject);
|
||||||
procedure btnDelPropClick(Sender: TObject);
|
procedure btnDelPropClick(Sender: TObject);
|
||||||
procedure propTreeSelectionChanged(Sender: TObject);
|
procedure propTreeSelectionChanged(Sender: TObject);
|
||||||
procedure treeInspectDblClick(Sender: TObject);
|
procedure treeInspectDblClick(Sender: TObject);
|
||||||
|
@ -44,6 +58,7 @@ type
|
||||||
procedure updateInspector;
|
procedure updateInspector;
|
||||||
procedure updateValueEditor;
|
procedure updateValueEditor;
|
||||||
procedure setJsonValueFromEditor;
|
procedure setJsonValueFromEditor;
|
||||||
|
procedure addProp(const propName: string; tpe: TJSONtype);
|
||||||
//
|
//
|
||||||
procedure projNew(aProject: ICECommonProject);
|
procedure projNew(aProject: ICECommonProject);
|
||||||
procedure projChanged(aProject: ICECommonProject);
|
procedure projChanged(aProject: ICECommonProject);
|
||||||
|
@ -60,6 +75,63 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{$REGION TCEDubProjectPropAddPanel ---------------------------------------------}
|
||||||
|
constructor TCEDubProjectPropAddPanel.construct(event: TDubPropAddEvent);
|
||||||
|
var
|
||||||
|
layout: TPanel;
|
||||||
|
begin
|
||||||
|
inherited create(nil);
|
||||||
|
width := 200;
|
||||||
|
height := 120;
|
||||||
|
fEvent := event;
|
||||||
|
caption := 'add a DUB property';
|
||||||
|
//
|
||||||
|
fSelType := TRadioGroup.Create(self);
|
||||||
|
fSelType.Parent := self;
|
||||||
|
fSelType.Items.AddStrings(['array', 'object', 'value']);
|
||||||
|
fSelType.Align:= alClient;
|
||||||
|
fSelType.BorderSpacing.Around:=2;
|
||||||
|
fSelType.Caption:= 'type';
|
||||||
|
fSelType.ItemIndex:=2;
|
||||||
|
//
|
||||||
|
layout := TPanel.Create(self);
|
||||||
|
layout.Parent := self;
|
||||||
|
layout.Align := alBottom;
|
||||||
|
layout.Height := 30;
|
||||||
|
layout.BevelOuter:= bvNone;
|
||||||
|
//
|
||||||
|
fEdName := TEdit.Create(self);
|
||||||
|
fEdName.Parent := layout;
|
||||||
|
fEdName.Align:=alClient;
|
||||||
|
fEdName.BorderSpacing.Around:=4;
|
||||||
|
fEdName.Width:=80;
|
||||||
|
//
|
||||||
|
fBtnValidate := TBitBtn.Create(self);
|
||||||
|
fBtnValidate.Parent := layout;
|
||||||
|
fBtnValidate.Align:=alRight;
|
||||||
|
fBtnValidate.BorderSpacing.Around:=4;
|
||||||
|
fBtnValidate.Width:= 26;
|
||||||
|
fBtnValidate.OnClick:=@doValidate;
|
||||||
|
AssignPng(fBtnValidate, 'accept');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEDubProjectPropAddPanel.doValidate(sender: TObject);
|
||||||
|
var
|
||||||
|
tpe: TJSONtype;
|
||||||
|
begin
|
||||||
|
if assigned(fEvent) and (fEdName.Text <> '') then
|
||||||
|
begin
|
||||||
|
case fSelType.ItemIndex of
|
||||||
|
0: tpe := TJSONtype.jtArray;
|
||||||
|
1: tpe := TJSONtype.jtObject;
|
||||||
|
else tpe := TJSONtype.jtString;
|
||||||
|
end;
|
||||||
|
fEvent(fEdName.Text, tpe);
|
||||||
|
Close;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION Standard Comp/Obj -----------------------------------------------------}
|
{$REGION Standard Comp/Obj -----------------------------------------------------}
|
||||||
constructor TCEDubProjectEditorWidget.create(aOwner: TComponent);
|
constructor TCEDubProjectEditorWidget.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
|
@ -143,13 +215,15 @@ end;
|
||||||
procedure TCEDubProjectEditorWidget.propTreeSelectionChanged(Sender: TObject);
|
procedure TCEDubProjectEditorWidget.propTreeSelectionChanged(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
fSelectedNode := nil;
|
fSelectedNode := nil;
|
||||||
btnDelProp.Enabled:= false;
|
btnDelProp.Enabled := false;
|
||||||
|
btnAddProp.Enabled := false;
|
||||||
if propTree.Selected = nil then exit;
|
if propTree.Selected = nil then exit;
|
||||||
//
|
//
|
||||||
fSelectedNode := propTree.Selected;
|
fSelectedNode := propTree.Selected;
|
||||||
btnDelProp.Enabled := (fSelectedNode.Level > 0) and (fSelectedNode.Text <> 'name')
|
btnDelProp.Enabled := (fSelectedNode.Level > 0) and (fSelectedNode.Text <> 'name')
|
||||||
and (fSelectedNode.data <> nil);
|
and (fSelectedNode.data <> nil);
|
||||||
updateValueEditor;
|
updateValueEditor;
|
||||||
|
btnAddProp.Enabled := TJSONData(fSelectedNode.Data).JSONType in [jtObject, jtArray];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDubProjectEditorWidget.btnAcceptPropClick(Sender: TObject);
|
procedure TCEDubProjectEditorWidget.btnAcceptPropClick(Sender: TObject);
|
||||||
|
@ -159,6 +233,53 @@ begin
|
||||||
setJsonValueFromEditor;
|
setJsonValueFromEditor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEDubProjectEditorWidget.btnAddPropClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
pnl: TCEDubProjectPropAddPanel;
|
||||||
|
begin
|
||||||
|
if fSelectedNode = nil then exit;
|
||||||
|
//
|
||||||
|
pnl := TCEDubProjectPropAddPanel.construct(@addProp);
|
||||||
|
pnl.ShowModal;
|
||||||
|
pnl.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEDubProjectEditorWidget.addProp(const propName: string;
|
||||||
|
tpe: TJSONtype);
|
||||||
|
var
|
||||||
|
arr: TJSONArray;
|
||||||
|
obj: TJSONObject;
|
||||||
|
nod: TTreeNode;
|
||||||
|
begin
|
||||||
|
if fSelectedNode = nil then exit;
|
||||||
|
//
|
||||||
|
fProj.beginModification;
|
||||||
|
if TJSONData(fSelectedNode.Data).JSONType = jtArray then
|
||||||
|
begin
|
||||||
|
arr := TJSONArray(fSelectedNode.Data);
|
||||||
|
case tpe of
|
||||||
|
jtArray: arr.Add(TJSONArray.Create());
|
||||||
|
jtObject: arr.Add(TJSONObject.Create());
|
||||||
|
jtString:arr.Add('<value>');
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else if TJSONData(fSelectedNode.Data).JSONType = jtObject then
|
||||||
|
begin
|
||||||
|
obj := TJSONObject(fSelectedNode.Data);
|
||||||
|
case tpe of
|
||||||
|
jtArray: obj.Add(propName, TJSONArray.Create());
|
||||||
|
jtObject: obj.Add(propName, TJSONObject.Create());
|
||||||
|
jtString: obj.Add(propName, '<value>');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
fProj.endModification;
|
||||||
|
nod := propTree.Items.FindNodeWithText('<value>');
|
||||||
|
if nod <> nil then propTree.Selected := nod
|
||||||
|
else nod := propTree.Items.FindNodeWithText(propName);
|
||||||
|
if nod <> nil then propTree.Selected := nod;
|
||||||
|
propTree.MakeSelectionVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEDubProjectEditorWidget.btnDelPropClick(Sender: TObject);
|
procedure TCEDubProjectEditorWidget.btnDelPropClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
prt: TJSONData;
|
prt: TJSONData;
|
||||||
|
|
Loading…
Reference in New Issue