mirror of https://gitlab.com/basile.b/dexed.git
add helpers to edit DUB project properties, close #42
This commit is contained in:
parent
d2539669a4
commit
83b20d593d
|
@ -10,21 +10,32 @@ uses
|
||||||
ce_widget, ce_common, ce_interfaces, ce_observer, ce_dubproject, ce_sharedres;
|
ce_widget, ce_common, ce_interfaces, ce_observer, ce_dubproject, ce_sharedres;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ TCEDubProjectEditorWidget }
|
|
||||||
|
TProposalType = (ptArray, ptObject, ptValue);
|
||||||
|
|
||||||
|
TEditorProposal = record
|
||||||
|
name: string;
|
||||||
|
jtype: TProposalType;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
TDubPropAddEvent = procedure(const propName: string; tpe: TJSONtype) of object;
|
TDubPropAddEvent = procedure(const propName: string; tpe: TJSONtype) of object;
|
||||||
|
|
||||||
TCEDubProjectPropAddPanel = class(TForm)
|
TCEDubProjectPropAddPanel = class(TForm)
|
||||||
private
|
private
|
||||||
fSelType: TRadioGroup;
|
fSelType: TRadioGroup;
|
||||||
fEdName: TEdit;
|
fEdName: TComboBox;
|
||||||
fEvent: TDubPropAddEvent;
|
fEvent: TDubPropAddEvent;
|
||||||
fBtnValidate: TBitBtn;
|
fBtnValidate: TBitBtn;
|
||||||
|
fJson: TJSONData;
|
||||||
procedure doValidate(sender: TObject);
|
procedure doValidate(sender: TObject);
|
||||||
|
procedure selTypeChanged(sender: TObject);
|
||||||
|
procedure setSelFromProposal(sender: TObject);
|
||||||
public
|
public
|
||||||
constructor construct(event: TDubPropAddEvent);
|
constructor construct(event: TDubPropAddEvent; json: TJSONData);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TCEDubProjectEditorWidget }
|
||||||
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
||||||
btnAcceptProp: TSpeedButton;
|
btnAcceptProp: TSpeedButton;
|
||||||
btnAddProp: TSpeedButton;
|
btnAddProp: TSpeedButton;
|
||||||
|
@ -77,12 +88,61 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
const
|
||||||
|
proposals: array[0..42] of TEditorProposal = (
|
||||||
|
(name: 'authors'; jtype: ptArray),
|
||||||
|
(name: 'buildOptions'; jtype: ptArray),
|
||||||
|
(name: 'buildRequirements'; jtype: ptArray),
|
||||||
|
(name: 'buildTypes'; jtype: ptObject),
|
||||||
|
(name: 'configurations'; jtype: ptArray),
|
||||||
|
(name: 'copyFiles'; jtype: ptArray),
|
||||||
|
(name: 'copyright'; jtype: ptValue),
|
||||||
|
(name: 'cov'; jtype: ptArray),
|
||||||
|
(name: 'ddoc'; jtype: ptArray),
|
||||||
|
(name: 'ddoxFilterArgs'; jtype: ptArray),
|
||||||
|
(name: 'debug'; jtype: ptArray),
|
||||||
|
(name: 'debugVersions'; jtype: ptArray),
|
||||||
|
(name: 'dependencies'; jtype: ptObject),
|
||||||
|
(name: 'description'; jtype: ptValue),
|
||||||
|
(name: 'dflags'; jtype: ptArray),
|
||||||
|
(name: 'docs'; jtype: ptArray),
|
||||||
|
(name: 'excludedSourceFiles'; jtype: ptArray),
|
||||||
|
(name: 'homepage'; jtype: ptValue),
|
||||||
|
(name: 'lflags'; jtype: ptArray),
|
||||||
|
(name: 'libs'; jtype: ptArray),
|
||||||
|
(name: 'license'; jtype: ptValue),
|
||||||
|
(name: 'mainSourceFile'; jtype: ptValue),
|
||||||
|
(name: 'name'; jtype: ptValue),
|
||||||
|
(name: 'plain'; jtype: ptArray),
|
||||||
|
(name: 'platforms'; jtype: ptArray),
|
||||||
|
(name: 'postBuildCommands'; jtype: ptArray),
|
||||||
|
(name: 'postGenerateCommands';jtype: ptArray),
|
||||||
|
(name: 'preBuildCommands'; jtype: ptArray),
|
||||||
|
(name: 'preGenerateCommands'; jtype: ptArray),
|
||||||
|
(name: 'profile'; jtype: ptArray),
|
||||||
|
(name: 'release'; jtype: ptArray),
|
||||||
|
(name: 'sourceFiles'; jtype: ptArray),
|
||||||
|
(name: 'stringImportPaths'; jtype: ptArray),
|
||||||
|
(name: 'subConfigurations'; jtype: ptObject),
|
||||||
|
(name: 'subPackages'; jtype: ptArray),
|
||||||
|
(name: 'systemDependencies'; jtype: ptValue),
|
||||||
|
(name: 'targetName'; jtype: ptValue),
|
||||||
|
(name: 'targetPath'; jtype: ptValue),
|
||||||
|
(name: 'targetType'; jtype: ptValue),
|
||||||
|
(name: 'unittest'; jtype: ptArray),
|
||||||
|
(name: 'unittest-cov'; jtype: ptArray),
|
||||||
|
(name: 'versions'; jtype: ptArray),
|
||||||
|
(name: 'workingDirectory'; jtype: ptValue)
|
||||||
|
);
|
||||||
|
|
||||||
{$REGION TCEDubProjectPropAddPanel ---------------------------------------------}
|
{$REGION TCEDubProjectPropAddPanel ---------------------------------------------}
|
||||||
constructor TCEDubProjectPropAddPanel.construct(event: TDubPropAddEvent);
|
constructor TCEDubProjectPropAddPanel.construct(event: TDubPropAddEvent; json: TJSONData);
|
||||||
var
|
var
|
||||||
layout: TPanel;
|
layout: TPanel;
|
||||||
|
i: integer;
|
||||||
begin
|
begin
|
||||||
inherited create(nil);
|
inherited create(nil);
|
||||||
|
fJson := json;
|
||||||
width := 280;
|
width := 280;
|
||||||
height := 130;
|
height := 130;
|
||||||
fEvent := event;
|
fEvent := event;
|
||||||
|
@ -98,19 +158,24 @@ begin
|
||||||
fSelType.Caption:= 'type';
|
fSelType.Caption:= 'type';
|
||||||
fSelType.ItemIndex:=2;
|
fSelType.ItemIndex:=2;
|
||||||
fSelType.Hint:= 'type of the property to add';
|
fSelType.Hint:= 'type of the property to add';
|
||||||
|
fSelType.OnSelectionChanged:= @selTypeChanged;
|
||||||
//
|
//
|
||||||
layout := TPanel.Create(self);
|
layout := TPanel.Create(self);
|
||||||
layout.Parent := self;
|
layout.Parent := self;
|
||||||
layout.Align := alBottom;
|
layout.Align := alBottom;
|
||||||
layout.Height := 30;
|
layout.Height := 32;
|
||||||
layout.BevelOuter:= bvNone;
|
layout.BevelOuter:= bvNone;
|
||||||
//
|
//
|
||||||
fEdName := TEdit.Create(self);
|
fEdName := TComboBox.Create(self);
|
||||||
fEdName.Parent := layout;
|
fEdName.Parent := layout;
|
||||||
fEdName.Align:=alClient;
|
fEdName.Align:=alClient;
|
||||||
fEdName.BorderSpacing.Around:=4;
|
fEdName.BorderSpacing.Around:=4;
|
||||||
fEdName.Width:=80;
|
fEdName.Width:=80;
|
||||||
fEdName.Hint:='name of the property to add';
|
fEdName.Hint:='name of the property to add';
|
||||||
|
for i:= low(proposals) to high(proposals) do
|
||||||
|
fEdName.Items.Add(proposals[i].name);
|
||||||
|
fEdName.AutoComplete := true;
|
||||||
|
fEdName.OnChange := @setSelFromProposal;
|
||||||
//
|
//
|
||||||
fBtnValidate := TBitBtn.Create(self);
|
fBtnValidate := TBitBtn.Create(self);
|
||||||
fBtnValidate.Parent := layout;
|
fBtnValidate.Parent := layout;
|
||||||
|
@ -120,6 +185,34 @@ begin
|
||||||
fBtnValidate.OnClick:=@doValidate;
|
fBtnValidate.OnClick:=@doValidate;
|
||||||
fBtnValidate.Hint:='accept and add a property';
|
fBtnValidate.Hint:='accept and add a property';
|
||||||
AssignPng(fBtnValidate, 'ACCEPT');
|
AssignPng(fBtnValidate, 'ACCEPT');
|
||||||
|
//
|
||||||
|
selTypeChanged(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEDubProjectPropAddPanel.selTypeChanged(sender: TObject);
|
||||||
|
begin
|
||||||
|
if fJson.isNotNil then
|
||||||
|
fEdName.Enabled := fJson.JSONType <> TJSONtype.jtArray;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEDubProjectPropAddPanel.setSelFromProposal(sender: TObject);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
fSelType.Enabled:=true;
|
||||||
|
for i:= low(proposals) to high(proposals) do
|
||||||
|
begin
|
||||||
|
if fEdName.Text = proposals[i].name then
|
||||||
|
begin
|
||||||
|
case proposals[i].jtype of
|
||||||
|
ptArray:fSelType.ItemIndex:=0;
|
||||||
|
ptObject:fSelType.ItemIndex:=1;
|
||||||
|
ptValue:fSelType.ItemIndex:=2;
|
||||||
|
end;
|
||||||
|
fSelType.Enabled := false;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDubProjectPropAddPanel.doValidate(sender: TObject);
|
procedure TCEDubProjectPropAddPanel.doValidate(sender: TObject);
|
||||||
|
@ -257,7 +350,7 @@ var
|
||||||
begin
|
begin
|
||||||
if fSelectedNode.isNil then exit;
|
if fSelectedNode.isNil then exit;
|
||||||
//
|
//
|
||||||
pnl := TCEDubProjectPropAddPanel.construct(@addProp);
|
pnl := TCEDubProjectPropAddPanel.construct(@addProp, TJSONData(fSelectedNode.Data));
|
||||||
pnl.ShowModal;
|
pnl.ShowModal;
|
||||||
pnl.Free;
|
pnl.Free;
|
||||||
end;
|
end;
|
||||||
|
|
Loading…
Reference in New Issue