mirror of https://gitlab.com/basile.b/dexed.git
257 lines
6.3 KiB
Plaintext
257 lines
6.3 KiB
Plaintext
unit ce_dubprojeditor;
|
|
|
|
{$I ce_defines.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
|
Menus, StdCtrls, Buttons, ComCtrls, jsonparser, fpjson,
|
|
ce_widget, ce_common, ce_interfaces, ce_observer, ce_dubproject;
|
|
|
|
type
|
|
|
|
{ TCEDubProjectEditorWidget }
|
|
|
|
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
|
btnAddProp: TSpeedButton;
|
|
btnAddProp1: TSpeedButton;
|
|
btnDelProp: TSpeedButton;
|
|
btnDelProp1: TSpeedButton;
|
|
edValue: TMemo;
|
|
PageControl1: TPageControl;
|
|
pnlToolBar: TPanel;
|
|
pnlToolBar1: TPanel;
|
|
propTree: TTreeView;
|
|
treeInspect: TTreeView;
|
|
TabSheet1: TTabSheet;
|
|
TabSheet2: TTabSheet;
|
|
procedure propTreeSelectionChanged(Sender: TObject);
|
|
private
|
|
fSelectedNode: TTreeNode;
|
|
fProj: TCEDubProject;
|
|
fNodeSources: TTreeNode;
|
|
fNodeConfig: TTreeNode;
|
|
procedure updateEditor;
|
|
procedure updateInspector;
|
|
procedure updateValueEditor;
|
|
procedure setJsonValueFromEditor;
|
|
//
|
|
procedure projNew(aProject: ICECommonProject);
|
|
procedure projChanged(aProject: ICECommonProject);
|
|
procedure projClosing(aProject: ICECommonProject);
|
|
procedure projFocused(aProject: ICECommonProject);
|
|
procedure projCompiling(aProject: ICECommonProject);
|
|
//
|
|
protected
|
|
procedure SetVisible(Value: boolean); override;
|
|
public
|
|
constructor create(aOwner: TComponent); override;
|
|
end;
|
|
|
|
implementation
|
|
{$R *.lfm}
|
|
|
|
{$REGION Standard Comp/Obj ----------------------------------------------------}
|
|
constructor TCEDubProjectEditorWidget.create(aOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
fNodeSources := treeInspect.Items[0];
|
|
fNodeConfig := treeInspect.Items[1];
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.SetVisible(Value: boolean);
|
|
begin
|
|
inherited;
|
|
if not Value then exit;
|
|
//
|
|
updateEditor;
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
{$REGION ICEProjectObserver ----------------------------------------------------}
|
|
procedure TCEDubProjectEditorWidget.projNew(aProject: ICECommonProject);
|
|
begin
|
|
fProj := nil;
|
|
enabled := false;
|
|
if aProject.getFormat <> pfDub then
|
|
exit;
|
|
enabled := true;
|
|
fProj := TCEDubProject(aProject.getProject);
|
|
//
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.projChanged(aProject: ICECommonProject);
|
|
begin
|
|
if fProj = nil then
|
|
exit;
|
|
if aProject.getProject <> fProj then
|
|
exit;
|
|
if not Visible then
|
|
exit;
|
|
|
|
updateEditor;
|
|
updateInspector;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.projClosing(aProject: ICECommonProject);
|
|
begin
|
|
if fProj = nil then
|
|
exit;
|
|
if aProject.getProject <> fProj then
|
|
exit;
|
|
fProj := nil;
|
|
//
|
|
updateEditor;
|
|
updateInspector;
|
|
enabled := false;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.projFocused(aProject: ICECommonProject);
|
|
begin
|
|
fProj := nil;
|
|
enabled := false;
|
|
if aProject.getFormat <> pfDub then
|
|
exit;
|
|
fProj := TCEDubProject(aProject.getProject);
|
|
enabled := true;
|
|
if not Visible then
|
|
exit;
|
|
|
|
updateEditor;
|
|
updateInspector;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.projCompiling(aProject: ICECommonProject);
|
|
begin
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
{$REGION Editor ----------------------------------------------------------------}
|
|
procedure TCEDubProjectEditorWidget.propTreeSelectionChanged(Sender: TObject);
|
|
begin
|
|
fSelectedNode := nil;
|
|
if propTree.Selected = nil then exit;
|
|
//
|
|
fSelectedNode := propTree.Selected;
|
|
updateValueEditor;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.setJsonValueFromEditor;
|
|
var
|
|
dat: TJSONData;
|
|
vFloat: TJSONFloat;
|
|
vInt: integer;
|
|
vInt64: int64;
|
|
vBool: boolean;
|
|
begin
|
|
if fSelectedNode = nil then exit;
|
|
if fSelectedNode.Data = nil then exit;
|
|
//
|
|
dat := TJSONData(fSelectedNode.Data);
|
|
case dat.JSONType of
|
|
jtNumber:
|
|
case TJSONNumber(dat).NumberType of
|
|
ntFloat:
|
|
if TryStrToFloat(edValue.Text, vFloat) then
|
|
dat.AsFloat := vFloat;
|
|
ntInt64:
|
|
if TryStrToInt64(edValue.Text, vInt64) then
|
|
dat.AsInt64 := vInt64;
|
|
ntInteger:
|
|
if TryStrToInt(edValue.Text, vInt) then
|
|
dat.AsInteger := vInt;
|
|
end;
|
|
jtBoolean:
|
|
if TryStrToBool(edValue.Text, vBool) then
|
|
dat.AsBoolean := vBool;
|
|
jtString:
|
|
dat.AsString := edValue.Text;
|
|
end;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.updateValueEditor;
|
|
var
|
|
dat: TJSONData;
|
|
begin
|
|
edValue.Clear;
|
|
if fSelectedNode = nil then exit;
|
|
if fSelectedNode.Data = nil then exit;
|
|
//
|
|
dat := TJSONData(fSelectedNode.Data);
|
|
case dat.JSONType of
|
|
jtNumber:
|
|
case TJSONNumber(dat).NumberType of
|
|
ntFloat:
|
|
edValue.Text := FloatToStr(dat.AsFloat);
|
|
ntInt64:
|
|
edValue.Text := IntToStr(dat.AsInt64);
|
|
ntInteger:
|
|
edValue.Text := IntToStr(dat.AsInteger);
|
|
end;
|
|
jtBoolean:
|
|
edValue.Text := BoolToStr(dat.AsBoolean);
|
|
jtString:
|
|
edValue.Text := dat.AsString;
|
|
end;
|
|
end;
|
|
|
|
procedure TCEDubProjectEditorWidget.updateEditor;
|
|
|
|
procedure addPropsFrom(node: TTreeNode; data: TJSONData);
|
|
var
|
|
i: integer;
|
|
c: TTreeNode;
|
|
begin
|
|
if data.JSONType = jtObject then for i := 0 to data.Count-1 do
|
|
begin
|
|
c := node.TreeNodes.AddChildObject(node, TJSONObject(data).Names[i],
|
|
TJSONObject(data).Items[i]);
|
|
case TJSONObject(data).Items[i].JSONType of
|
|
jtObject, jtArray:
|
|
addPropsFrom(c, TJSONObject(data).Items[i]);
|
|
end;
|
|
end else if data.JSONType = jtArray then for i := 0 to data.Count-1 do
|
|
begin
|
|
c := node.TreeNodes.AddChildObject(node, format('item %d',[i]),
|
|
TJSONArray(data).Items[i]);
|
|
case TJSONArray(data).Items[i].JSONType of
|
|
jtObject, jtArray:
|
|
addPropsFrom(c, TJSONArray(data).Items[i]);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
propTree.Items.Clear;
|
|
if (fProj = nil) or (fProj.json = nil) then
|
|
exit;
|
|
//
|
|
propTree.BeginUpdate;
|
|
addPropsFrom(propTree.Items.Add(nil, 'project'), fProj.json);
|
|
propTree.EndUpdate;
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
{$REGION Inspector -------------------------------------------------------------}
|
|
procedure TCEDubProjectEditorWidget.updateInspector;
|
|
var
|
|
i: integer;
|
|
begin
|
|
if (fNodeConfig = nil) or (fNodeSources = nil) then
|
|
exit;
|
|
//
|
|
fNodeConfig.DeleteChildren;
|
|
fNodeSources.DeleteChildren;
|
|
//
|
|
if (fProj = nil) then
|
|
exit;
|
|
//
|
|
for i:= 0 to fProj.getConfigurationCount -1 do
|
|
treeInspect.Items.AddChild(fNodeConfig, fProj.getConfigurationName(i));
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
end.
|
|
|