mirror of https://gitlab.com/basile.b/dexed.git
common project inspector + update init layout, close #69
This commit is contained in:
parent
f2de2bacff
commit
900d98e847
|
@ -2,206 +2,124 @@ inherited CEDubProjectEditorWidget: TCEDubProjectEditorWidget
|
|||
Left = 771
|
||||
Height = 424
|
||||
Top = 245
|
||||
Width = 411
|
||||
Width = 402
|
||||
Caption = 'Dub project editor'
|
||||
ClientHeight = 424
|
||||
ClientWidth = 411
|
||||
ClientWidth = 402
|
||||
inherited Back: TPanel
|
||||
Height = 424
|
||||
Width = 411
|
||||
Width = 402
|
||||
ClientHeight = 424
|
||||
ClientWidth = 411
|
||||
ClientWidth = 402
|
||||
inherited Content: TPanel
|
||||
Height = 388
|
||||
Width = 411
|
||||
Width = 402
|
||||
ClientHeight = 388
|
||||
ClientWidth = 411
|
||||
object PageControl1: TPageControl[0]
|
||||
ClientWidth = 402
|
||||
object propTree: TTreeView[0]
|
||||
Left = 4
|
||||
Height = 380
|
||||
Height = 352
|
||||
Top = 4
|
||||
Width = 403
|
||||
ActivePage = TabSheet1
|
||||
Width = 394
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
TabIndex = 0
|
||||
DefaultItemHeight = 16
|
||||
HideSelection = False
|
||||
Images = imgList
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Inspector'
|
||||
ClientHeight = 344
|
||||
ClientWidth = 395
|
||||
object pnlToolBar1: TPanel
|
||||
Left = 4
|
||||
Height = 26
|
||||
Top = 2
|
||||
Width = 387
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Right = 2
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 26
|
||||
ClientWidth = 387
|
||||
TabOrder = 0
|
||||
object fltInspect: TTreeFilterEdit
|
||||
Left = 30
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 355
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = treeInspect
|
||||
end
|
||||
object btnRefresh: TBitBtn
|
||||
Left = 0
|
||||
Height = 26
|
||||
Hint = 'refresh the files and configurations'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnRefreshClick
|
||||
Spacing = 0
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
object treeInspect: TTreeView
|
||||
Left = 4
|
||||
Height = 308
|
||||
Top = 32
|
||||
Width = 387
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
DefaultItemHeight = 16
|
||||
DragMode = dmAutomatic
|
||||
HideSelection = False
|
||||
Images = imgList
|
||||
PopupMenu = contextMenu
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 1
|
||||
ToolTips = False
|
||||
OnDblClick = treeInspectDblClick
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020002000000000000000000000000000000FFFFFFFF000000000000
|
||||
0000000C000000536F757263652066696C6573010000000100000001000000FF
|
||||
FFFFFF0000000000000000000E000000436F6E66696775726174696F6E73
|
||||
}
|
||||
end
|
||||
ToolTips = False
|
||||
OnSelectionChanged = propTreeSelectionChanged
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoThemedDraw]
|
||||
TreeLinePenStyle = psClear
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 2
|
||||
Height = 26
|
||||
Top = 360
|
||||
Width = 398
|
||||
Align = alBottom
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 26
|
||||
ClientWidth = 398
|
||||
TabOrder = 1
|
||||
object edProp: TEdit
|
||||
Left = 2
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 366
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
TabOrder = 0
|
||||
end
|
||||
object TabSheet2: TTabSheet
|
||||
Caption = 'Editor'
|
||||
ClientHeight = 344
|
||||
ClientWidth = 395
|
||||
object propTree: TTreeView
|
||||
Left = 4
|
||||
Height = 280
|
||||
Top = 32
|
||||
Width = 387
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
DefaultItemHeight = 16
|
||||
HideSelection = False
|
||||
Images = imgList
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnSelectionChanged = propTreeSelectionChanged
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoThemedDraw]
|
||||
TreeLinePenStyle = psClear
|
||||
end
|
||||
object pnlToolBar: TPanel
|
||||
Left = 4
|
||||
Height = 26
|
||||
Top = 2
|
||||
Width = 387
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Right = 2
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 26
|
||||
ClientWidth = 387
|
||||
TabOrder = 1
|
||||
object btnAddProp: TSpeedButton
|
||||
Left = 0
|
||||
Height = 26
|
||||
Hint = 'add property'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnAddPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object fltEdit: TTreeFilterEdit
|
||||
Left = 58
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 327
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = propTree
|
||||
end
|
||||
object btnDelProp: TSpeedButton
|
||||
Left = 28
|
||||
Height = 26
|
||||
Hint = 'delete selected property'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnDelPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 2
|
||||
Height = 26
|
||||
Top = 316
|
||||
Width = 391
|
||||
Align = alBottom
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 26
|
||||
ClientWidth = 391
|
||||
TabOrder = 2
|
||||
object edProp: TEdit
|
||||
Left = 2
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 359
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAcceptProp: TSpeedButton
|
||||
Left = 363
|
||||
Height = 26
|
||||
Hint = 'accept property value'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alRight
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnAcceptPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
end
|
||||
object btnAcceptProp: TSpeedButton
|
||||
Left = 370
|
||||
Height = 26
|
||||
Hint = 'accept property value'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alRight
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnAcceptPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TCEToolBar
|
||||
Width = 403
|
||||
Width = 394
|
||||
object btnUpdate: TCEToolButton[0]
|
||||
Left = 57
|
||||
Hint = 'reload project'
|
||||
Top = 0
|
||||
Caption = 'btnUpdate'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDelProp: TCEToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'delete property'
|
||||
Top = 0
|
||||
Caption = 'btnDelProp'
|
||||
OnClick = btnDelPropClick
|
||||
resourceName = 'TEXTFIELD_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddProp: TCEToolButton[2]
|
||||
Left = 1
|
||||
Hint = 'add a property'
|
||||
Top = 0
|
||||
Caption = 'btnAddProp'
|
||||
OnClick = btnAddPropClick
|
||||
resourceName = 'TEXTFIELD_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button3: TCEToolButton[3]
|
||||
Left = 85
|
||||
Height = 28
|
||||
Top = 0
|
||||
Width = 11
|
||||
Caption = 'button3'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object fltEdit: TTreeFilterEdit[4]
|
||||
Left = 96
|
||||
Height = 26
|
||||
Hint = 'filter properties'
|
||||
Top = 2
|
||||
Width = 296
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Align = alRight
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 2
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = propTree
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -7,7 +7,8 @@ interface
|
|||
uses
|
||||
Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics,
|
||||
Dialogs, ExtCtrls, Menus, StdCtrls, Buttons, ComCtrls, xjsonparser, xfpjson,
|
||||
ce_widget, ce_common, ce_interfaces, ce_observer, ce_dubproject, ce_sharedres;
|
||||
ce_widget, ce_common, ce_interfaces, ce_observer, ce_dubproject, ce_sharedres,
|
||||
ce_dsgncontrols;
|
||||
|
||||
type
|
||||
|
||||
|
@ -38,36 +39,25 @@ type
|
|||
{ TCEDubProjectEditorWidget }
|
||||
TCEDubProjectEditorWidget = class(TCEWidget, ICEProjectObserver)
|
||||
btnAcceptProp: TSpeedButton;
|
||||
btnAddProp: TSpeedButton;
|
||||
btnDelProp: TSpeedButton;
|
||||
btnRefresh: TBitBtn;
|
||||
btnAddProp: TCEToolButton;
|
||||
btnDelProp: TCEToolButton;
|
||||
btnUpdate: TCEToolButton;
|
||||
edProp: TEdit;
|
||||
fltEdit: TTreeFilterEdit;
|
||||
imgList: TImageList;
|
||||
MenuItem1: TMenuItem;
|
||||
PageControl1: TPageControl;
|
||||
Panel1: TPanel;
|
||||
pnlToolBar: TPanel;
|
||||
pnlToolBar1: TPanel;
|
||||
propTree: TTreeView;
|
||||
fltInspect: TTreeFilterEdit;
|
||||
treeInspect: TTreeView;
|
||||
TabSheet1: TTabSheet;
|
||||
TabSheet2: TTabSheet;
|
||||
procedure btnAcceptPropClick(Sender: TObject);
|
||||
procedure btnAddPropClick(Sender: TObject);
|
||||
procedure btnDelPropClick(Sender: TObject);
|
||||
procedure btnRefreshClick(Sender: TObject);
|
||||
procedure MenuItem1Click(Sender: TObject);
|
||||
procedure propTreeSelectionChanged(Sender: TObject);
|
||||
procedure treeInspectDblClick(Sender: TObject);
|
||||
private
|
||||
fSelectedNode: TTreeNode;
|
||||
fProj: TCEDubProject;
|
||||
fNodeSources: TTreeNode;
|
||||
fNodeConfig: TTreeNode;
|
||||
procedure updateEditor;
|
||||
procedure updateInspector;
|
||||
procedure updateValueEditor;
|
||||
procedure setJsonValueFromEditor;
|
||||
procedure addProp(const propName: string; tpe: TJSONtype);
|
||||
|
@ -81,6 +71,7 @@ type
|
|||
//
|
||||
protected
|
||||
procedure SetVisible(value: boolean); override;
|
||||
procedure setToolBarFlat(value: boolean); override;
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
end;
|
||||
|
@ -236,23 +227,23 @@ end;
|
|||
constructor TCEDubProjectEditorWidget.create(aOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
toolbarVisible:=false;
|
||||
fNodeSources := treeInspect.Items[0];
|
||||
fNodeConfig := treeInspect.Items[1];
|
||||
//
|
||||
AssignPng(btnAddProp, 'TEXTFIELD_ADD');
|
||||
AssignPng(btnDelProp, 'TEXTFIELD_DELETE');
|
||||
setToolBarVisible(true);
|
||||
AssignPng(btnAcceptProp, 'ACCEPT');
|
||||
AssignPng(btnRefresh, 'ARROW_UPDATE');
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.SetVisible(value: boolean);
|
||||
begin
|
||||
inherited;
|
||||
if not value then exit;
|
||||
//
|
||||
if not value then
|
||||
exit;
|
||||
updateEditor;
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.setToolBarFlat(value: boolean);
|
||||
begin
|
||||
inherited;
|
||||
btnAcceptProp.Flat:=value;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
{$REGION ICEProjectObserver ----------------------------------------------------}
|
||||
|
@ -264,7 +255,6 @@ begin
|
|||
exit;
|
||||
enabled := true;
|
||||
fProj := TCEDubProject(project.getProject);
|
||||
//
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.projChanged(project: ICECommonProject);
|
||||
|
@ -277,7 +267,6 @@ begin
|
|||
exit;
|
||||
|
||||
updateEditor;
|
||||
updateInspector;
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.projClosing(project: ICECommonProject);
|
||||
|
@ -289,7 +278,6 @@ begin
|
|||
fProj := nil;
|
||||
|
||||
updateEditor;
|
||||
updateInspector;
|
||||
enabled := false;
|
||||
end;
|
||||
|
||||
|
@ -300,7 +288,6 @@ begin
|
|||
if project.getFormat <> pfDub then
|
||||
begin
|
||||
updateEditor;
|
||||
updateInspector;
|
||||
exit;
|
||||
end;
|
||||
fProj := TCEDubProject(project.getProject);
|
||||
|
@ -315,7 +302,6 @@ begin
|
|||
end;
|
||||
|
||||
updateEditor;
|
||||
updateInspector;
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.projCompiling(project: ICECommonProject);
|
||||
|
@ -333,8 +319,9 @@ begin
|
|||
fSelectedNode := nil;
|
||||
btnDelProp.Enabled := false;
|
||||
btnAddProp.Enabled := false;
|
||||
if propTree.Selected.isNil then exit;
|
||||
//
|
||||
if propTree.Selected.isNil then
|
||||
exit;
|
||||
|
||||
fSelectedNode := propTree.Selected;
|
||||
btnDelProp.Enabled := (fSelectedNode.Level > 0) and (fSelectedNode.Text <> 'name')
|
||||
and fSelectedNode.data.isNotNil;
|
||||
|
@ -344,8 +331,8 @@ end;
|
|||
|
||||
procedure TCEDubProjectEditorWidget.btnAcceptPropClick(Sender: TObject);
|
||||
begin
|
||||
if fSelectedNode.isNil then exit;
|
||||
//
|
||||
if fSelectedNode.isNil then
|
||||
exit;
|
||||
setJsonValueFromEditor;
|
||||
propTree.FullExpand;
|
||||
end;
|
||||
|
@ -354,8 +341,8 @@ procedure TCEDubProjectEditorWidget.btnAddPropClick(Sender: TObject);
|
|||
var
|
||||
pnl: TCEDubProjectPropAddPanel;
|
||||
begin
|
||||
if fSelectedNode.isNil then exit;
|
||||
//
|
||||
if fSelectedNode.isNil then
|
||||
exit;
|
||||
pnl := TCEDubProjectPropAddPanel.construct(@addProp, TJSONData(fSelectedNode.Data));
|
||||
pnl.ShowModal;
|
||||
pnl.Free;
|
||||
|
@ -368,8 +355,8 @@ var
|
|||
obj: TJSONObject;
|
||||
nod: TTreeNode;
|
||||
begin
|
||||
if fSelectedNode.isNil then exit;
|
||||
//
|
||||
if fSelectedNode.isNil then
|
||||
exit;
|
||||
fProj.beginModification;
|
||||
if TJSONData(fSelectedNode.Data).JSONType = jtArray then
|
||||
begin
|
||||
|
@ -410,7 +397,7 @@ begin
|
|||
if fSelectedNode.Text = 'name' then exit;
|
||||
if fSelectedNode.Data.isNil then exit;
|
||||
if fSelectedNode.Parent.Data.isNil then exit;
|
||||
//
|
||||
|
||||
fProj.beginModification;
|
||||
prt := TJSONData(fSelectedNode.Parent.Data);
|
||||
if prt.JSONType = jtObject then
|
||||
|
@ -418,7 +405,7 @@ begin
|
|||
else if prt.JSONType = jtArray then
|
||||
TJSONArray(prt).Delete(fSelectedNode.Index);
|
||||
fProj.endModification;
|
||||
//
|
||||
|
||||
updateValueEditor;
|
||||
end;
|
||||
|
||||
|
@ -444,10 +431,9 @@ var
|
|||
vInt64: int64;
|
||||
vBool: boolean;
|
||||
begin
|
||||
if fSelectedNode.isNil then exit;
|
||||
if fSelectedNode.Data.isNil then exit;
|
||||
if fProj.isNil then exit;
|
||||
//
|
||||
if fSelectedNode.isNil or fSelectedNode.Data.isNil or fProj.isNil then
|
||||
exit;
|
||||
|
||||
fProj.beginModification;
|
||||
dat := TJSONData(fSelectedNode.Data);
|
||||
case dat.JSONType of
|
||||
|
@ -479,7 +465,7 @@ begin
|
|||
edProp.Clear;
|
||||
if fSelectedNode.isNil then exit;
|
||||
if fSelectedNode.Data.isNil then exit;
|
||||
//
|
||||
|
||||
dat := TJSONData(fSelectedNode.Data);
|
||||
case dat.JSONType of
|
||||
jtNumber:
|
||||
|
@ -546,84 +532,12 @@ begin
|
|||
edProp.Clear;
|
||||
if fProj.isNil or fProj.json.isNil then
|
||||
exit;
|
||||
//
|
||||
|
||||
propTree.BeginUpdate;
|
||||
addPropsFrom(propTree.Items.Add(nil, 'project'), fProj.json);
|
||||
propTree.EndUpdate;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
{$REGION Inspector -------------------------------------------------------------}
|
||||
procedure TCEDubProjectEditorWidget.updateInspector;
|
||||
var
|
||||
i: integer;
|
||||
j: integer;
|
||||
node : TTreeNode;
|
||||
begin
|
||||
if fNodeConfig.isNil or fNodeSources.isNil then
|
||||
exit;
|
||||
//
|
||||
fNodeConfig.DeleteChildren;
|
||||
fNodeSources.DeleteChildren;
|
||||
//
|
||||
if fProj.isNil then
|
||||
exit;
|
||||
//
|
||||
j := fProj.getActiveConfigurationIndex;
|
||||
treeInspect.BeginUpdate;
|
||||
for i:= 0 to fProj.configurationCount-1 do
|
||||
begin
|
||||
if i <> j then
|
||||
begin
|
||||
node := treeInspect.Items.AddChild(fNodeConfig, fProj.configurationName(i));
|
||||
node.ImageIndex := 3;
|
||||
node.SelectedIndex := 3;
|
||||
node.StateIndex := 3;
|
||||
end
|
||||
else
|
||||
begin
|
||||
node := treeInspect.Items.AddChild(fNodeConfig, fProj.configurationName(i) +' (active)');
|
||||
node.ImageIndex := 10;
|
||||
node.SelectedIndex := 10;
|
||||
node.StateIndex := 10;
|
||||
end;
|
||||
end;
|
||||
for i := 0 to fProj.sourcesCount-1 do
|
||||
begin
|
||||
node := treeInspect.Items.AddChild(fNodeSources, fProj.sourceRelative(i));
|
||||
node.ImageIndex := 2;
|
||||
node.SelectedIndex := 2;
|
||||
node.StateIndex := 2;
|
||||
end;
|
||||
// first update or update cause by editor
|
||||
if (not fNodeConfig.Expanded) and (not fNodeSources.Expanded) then
|
||||
treeInspect.FullExpand;
|
||||
treeInspect.EndUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEDubProjectEditorWidget.treeInspectDblClick(Sender: TObject);
|
||||
var
|
||||
node: TTreeNode;
|
||||
fname: string;
|
||||
begin
|
||||
if treeInspect.Selected.isNil then exit;
|
||||
if fProj.isNil then exit;
|
||||
node := treeInspect.Selected;
|
||||
// open file
|
||||
if node.Parent = fNodeSources then
|
||||
begin
|
||||
fname := fProj.sourceAbsolute(node.Index);
|
||||
if isEditable(fname.extractFileExt) then
|
||||
getMultiDocHandler.openDocument(fname);
|
||||
end
|
||||
// select active config
|
||||
else if node.Parent = fNodeConfig then
|
||||
begin
|
||||
fProj.setActiveConfigurationIndex(node.Index);
|
||||
fNodeConfig.Expand(true);
|
||||
end;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
@ -1430,12 +1430,13 @@ begin
|
|||
topsplt := nil;
|
||||
end;
|
||||
fSymlWidg.showWidget;
|
||||
// TODO-cdocking: Put the new unified project editors and inspectors to the right once done
|
||||
// right
|
||||
DockMaster.GetAnchorSite(fProjWidg).Width := 190;
|
||||
DockMaster.GetAnchorSite(fPrjCfWidg).Width := 190;
|
||||
DockMaster.GetAnchorSite(fDubProjWidg).Width := 190;
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fProjWidg), DockMaster.GetSite(fEditWidg), alRight);
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjCfWidg), DockMaster.GetAnchorSite(fProjWidg), alBottom, fProjWidg);
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjGrpWidg), DockMaster.GetSite(fProjWidg), alBottom, fProjWidg);
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fDubProjWidg), DockMaster.GetAnchorSite(fProjWidg), alClient, fProjWidg);
|
||||
fProjWidg.showWidget;
|
||||
// close remaining and header to top
|
||||
for i := 0 to fWidgList.Count-1 do
|
||||
begin
|
||||
|
|
|
@ -5,7 +5,7 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
|||
Width = 341
|
||||
ActiveControl = Tree
|
||||
AllowDropFiles = True
|
||||
Caption = 'Native project inspector'
|
||||
Caption = 'Project inspector'
|
||||
ClientHeight = 258
|
||||
ClientWidth = 341
|
||||
OnDropFiles = FormDropFiles
|
||||
|
@ -38,18 +38,14 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
|||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnClick = TreeClick
|
||||
OnDeletion = TreeDeletion
|
||||
OnKeyDown = TreeKeyDown
|
||||
OnSelectionChanged = TreeSelectionChanged
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020005000000000000000000000000000000FFFFFFFF000000000000
|
||||
F9FFFFFF020002000000000000000000000000000000FFFFFFFF000000000000
|
||||
0000000C000000536F757263652066696C6573010000000100000001000000FF
|
||||
FFFFFF0000000000000000000E000000436F6E66696775726174696F6E730400
|
||||
00000400000004000000FFFFFFFF00000000000000000013000000496D706F72
|
||||
7420737472696E67207061746873060000000600000006000000FFFFFFFF0000
|
||||
0000000000000013000000496D706F7274206D6F64756C652070617468730000
|
||||
00000000000000000000FFFFFFFF0000000000000000000D0000004578747261
|
||||
20736F7572636573
|
||||
FFFFFF0000000000000000000E000000436F6E66696775726174696F6E73
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,6 +27,7 @@ type
|
|||
procedure btnRemFoldClick(Sender: TObject);
|
||||
procedure FormDropFiles(Sender: TObject; const fnames: array of String);
|
||||
procedure TreeClick(Sender: TObject);
|
||||
procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure TreeSelectionChanged(Sender: TObject);
|
||||
protected
|
||||
|
@ -38,10 +39,8 @@ type
|
|||
fActOpenFile: TAction;
|
||||
fActSelConf: TAction;
|
||||
fActBuildConf: TAction;
|
||||
fProject: TCENativeProject;
|
||||
fProject: ICECommonProject;
|
||||
fFileNode, fConfNode: TTreeNode;
|
||||
fImpsNode, fInclNode: TTreeNode;
|
||||
fXtraNode: TTreeNode;
|
||||
fLastFileOrFolder: string;
|
||||
fSymStringExpander: ICESymStringExpander;
|
||||
procedure actUpdate(sender: TObject);
|
||||
|
@ -55,6 +54,7 @@ type
|
|||
procedure projChanged(project: ICECommonProject);
|
||||
procedure projCompiling(project: ICECommonProject);
|
||||
procedure projCompiled(project: ICECommonProject; success: boolean);
|
||||
procedure updateButtons;
|
||||
protected
|
||||
function contextName: string; override;
|
||||
function contextActionCount: integer; override;
|
||||
|
@ -89,9 +89,6 @@ begin
|
|||
Tree.OnDblClick := @TreeDblClick;
|
||||
fFileNode := Tree.Items[0];
|
||||
fConfNode := Tree.Items[1];
|
||||
fImpsNode := Tree.Items[2];
|
||||
fInclNode := Tree.Items[3];
|
||||
fXtraNode := Tree.Items[4];
|
||||
//
|
||||
Tree.PopupMenu := contextMenu;
|
||||
//
|
||||
|
@ -133,7 +130,6 @@ begin
|
|||
case index of
|
||||
0: exit(fActOpenFile);
|
||||
1: exit(fActSelConf);
|
||||
2: exit(fActBuildConf);
|
||||
else exit(nil);
|
||||
end;
|
||||
end;
|
||||
|
@ -145,7 +141,7 @@ end;
|
|||
|
||||
procedure TCEProjectInspectWidget.actBuildExecute(sender: TObject);
|
||||
begin
|
||||
if fProject.isNotNil then
|
||||
if fProject <> nil then
|
||||
begin
|
||||
actOpenFileExecute(sender);
|
||||
fProject.compile;
|
||||
|
@ -156,50 +152,41 @@ end;
|
|||
{$REGION ICEProjectMonitor -----------------------------------------------------}
|
||||
procedure TCEProjectInspectWidget.projNew(project: ICECommonProject);
|
||||
begin
|
||||
fProject := nil;
|
||||
enabled := false;
|
||||
fLastFileOrFolder := '';
|
||||
if project.getFormat <> pfNative then
|
||||
exit;
|
||||
enabled := true;
|
||||
//
|
||||
fProject := TCENativeProject(project.getProject);
|
||||
if Visible then updateImperative;
|
||||
fProject := project;
|
||||
if Visible then
|
||||
updateImperative;
|
||||
updateButtons;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.projClosing(project: ICECommonProject);
|
||||
begin
|
||||
if fProject.isNil then exit;
|
||||
if fProject <> project.getProject then
|
||||
if not assigned(fProject) then
|
||||
exit;
|
||||
if project <> fProject then
|
||||
exit;
|
||||
fProject := nil;
|
||||
fLastFileOrFolder := '';
|
||||
enabled := false;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.projFocused(project: ICECommonProject);
|
||||
begin
|
||||
fProject := nil;
|
||||
enabled := false;
|
||||
fLastFileOrFolder := '';
|
||||
if project.getFormat <> pfNative then
|
||||
begin
|
||||
updateImperative;
|
||||
exit;
|
||||
end;
|
||||
enabled := true;
|
||||
//
|
||||
fProject := TCENativeProject(project.getProject);
|
||||
if Visible then beginDelayedUpdate;
|
||||
fProject := project;
|
||||
updateButtons;
|
||||
if Visible then
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.projChanged(project: ICECommonProject);
|
||||
begin
|
||||
if fProject.isNil then exit;
|
||||
if fProject <> project.getProject then
|
||||
if not assigned(fProject) then
|
||||
exit;
|
||||
if Visible then beginDelayedUpdate;
|
||||
if fProject <> project then
|
||||
exit;
|
||||
if Visible then
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.projCompiling(project: ICECommonProject);
|
||||
|
@ -209,6 +196,18 @@ end;
|
|||
procedure TCEProjectInspectWidget.projCompiled(project: ICECommonProject; success: boolean);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.updateButtons;
|
||||
var
|
||||
ce: boolean;
|
||||
begin
|
||||
ce := fProject.getFormat = pfNative;
|
||||
btnRemFile.Enabled:= ce;
|
||||
btnRemFold.Enabled:= ce;
|
||||
btnAddFile.Enabled:= ce;
|
||||
btnAddFold.Enabled:= ce;
|
||||
end;
|
||||
|
||||
{$ENDREGION}
|
||||
|
||||
{$REGION Inspector things -------------------------------------------------------}
|
||||
|
@ -237,10 +236,17 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.TreeDeletion(Sender: TObject; Node: TTreeNode
|
||||
);
|
||||
begin
|
||||
if Node.isNotNil and Node.Data.isNotNil then
|
||||
dispose(PString(Node.Data));
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.TreeSelectionChanged(Sender: TObject);
|
||||
begin
|
||||
actUpdate(sender);
|
||||
if fProject.isNil or Tree.Selected.isNil then
|
||||
if not assigned(fProject) or Tree.Selected.isNil then
|
||||
exit;
|
||||
if (Tree.Selected.Parent = fFileNode) then
|
||||
fLastFileOrFolder := expandFilenameEx(fProject.basePath,tree.Selected.Text)
|
||||
|
@ -251,19 +257,16 @@ end;
|
|||
procedure TCEProjectInspectWidget.TreeDblClick(sender: TObject);
|
||||
var
|
||||
fname: string;
|
||||
i, j: integer;
|
||||
i: integer;
|
||||
begin
|
||||
if fProject.isNil or Tree.Selected.isNil then
|
||||
if not assigned(fProject) or Tree.Selected.isNil then
|
||||
exit;
|
||||
//
|
||||
if (Tree.Selected.Parent = fFileNode) or (Tree.Selected.Parent = fXtraNode) then
|
||||
|
||||
if Tree.Selected.Parent = fFileNode then
|
||||
begin
|
||||
for j:= 0 to Tree.SelectionCount-1 do
|
||||
if Tree.Selected.Data.isNotNil then
|
||||
begin
|
||||
fname := Tree.Selections[j].Text;
|
||||
i := fProject.Sources.IndexOf(fname);
|
||||
if i > -1 then
|
||||
fname := fProject.sourceAbsolute(i);
|
||||
fname := PString(Tree.Selected.Data)^;
|
||||
if isEditable(fname.extractFileExt) and fname.fileExists then
|
||||
getMultiDocHandler.openDocument(fname);
|
||||
end;
|
||||
|
@ -271,7 +274,7 @@ begin
|
|||
else if Tree.Selected.Parent = fConfNode then
|
||||
begin
|
||||
i := Tree.Selected.Index;
|
||||
fProject.ConfigurationIndex := i;
|
||||
fProject.setActiveConfigurationIndex(i);
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
end;
|
||||
|
@ -281,7 +284,8 @@ begin
|
|||
fActSelConf.Enabled := false;
|
||||
fActOpenFile.Enabled := false;
|
||||
fActBuildConf.Enabled:= false;
|
||||
if Tree.Selected.isNil then exit;
|
||||
if Tree.Selected.isNil then
|
||||
exit;
|
||||
fActSelConf.Enabled := Tree.Selected.Parent = fConfNode;
|
||||
fActBuildConf.Enabled := Tree.Selected.Parent = fConfNode;
|
||||
fActOpenFile.Enabled := Tree.Selected.Parent = fFileNode;
|
||||
|
@ -290,9 +294,12 @@ end;
|
|||
procedure TCEProjectInspectWidget.btnAddFileClick(Sender: TObject);
|
||||
var
|
||||
fname: string;
|
||||
proj: TCENativeProject;
|
||||
begin
|
||||
if fProject.isNil then exit;
|
||||
//
|
||||
if not assigned(fProject) or (fProject.getFormat = pfDub) then
|
||||
exit;
|
||||
|
||||
proj := TCENativeProject(fProject.getProject);
|
||||
with TOpenDialog.Create(nil) do
|
||||
try
|
||||
options := options + [ofAllowMultiSelect];
|
||||
|
@ -303,10 +310,10 @@ begin
|
|||
filter := DdiagFilter;
|
||||
if execute then
|
||||
begin
|
||||
fProject.beginUpdate;
|
||||
proj.beginUpdate;
|
||||
for fname in Files do
|
||||
fProject.addSource(fname);
|
||||
fProject.endUpdate;
|
||||
proj.addSource(fname);
|
||||
proj.endUpdate;
|
||||
end;
|
||||
finally
|
||||
free;
|
||||
|
@ -317,11 +324,14 @@ procedure TCEProjectInspectWidget.btnAddFoldClick(Sender: TObject);
|
|||
var
|
||||
dir, fname: string;
|
||||
lst: TStringList;
|
||||
i: NativeInt;
|
||||
proj: TCENativeProject;
|
||||
i: integer;
|
||||
begin
|
||||
if fProject.isNil then exit;
|
||||
//
|
||||
if not assigned(fProject) or (fProject.getFormat = pfDub) then
|
||||
exit;
|
||||
|
||||
dir := '';
|
||||
proj := TCENativeProject(fProject.getProject);
|
||||
if fLastFileOrFolder.fileExists then
|
||||
dir := fLastFileOrFolder.extractFilePath
|
||||
else if fLastFileOrFolder.dirExists then
|
||||
|
@ -330,7 +340,7 @@ begin
|
|||
dir := fProject.fileName.extractFilePath;
|
||||
if selectDirectory('sources', dir, dir, true, 0) then
|
||||
begin
|
||||
fProject.beginUpdate;
|
||||
proj.beginUpdate;
|
||||
lst := TStringList.Create;
|
||||
try
|
||||
listFiles(lst, dir, true);
|
||||
|
@ -338,11 +348,11 @@ begin
|
|||
begin
|
||||
fname := lst[i];
|
||||
if isDlangCompilable(fname.extractFileExt) then
|
||||
fProject.addSource(fname);
|
||||
proj.addSource(fname);
|
||||
end;
|
||||
finally
|
||||
lst.Free;
|
||||
fProject.endUpdate;
|
||||
proj.endUpdate;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -350,49 +360,57 @@ end;
|
|||
procedure TCEProjectInspectWidget.btnRemFoldClick(Sender: TObject);
|
||||
var
|
||||
dir, fname: string;
|
||||
proj: TCENativeProject;
|
||||
i: Integer;
|
||||
begin
|
||||
if fProject.isNil or Tree.Selected.isNil then
|
||||
if not assigned(fProject) or (fProject.getFormat = pfDub)
|
||||
or Tree.Selected.isNil or (Tree.Selected.Parent <> fFileNode) then
|
||||
exit;
|
||||
if Tree.Selected.Parent <> fFileNode then exit;
|
||||
//
|
||||
|
||||
proj := TCENativeProject(fProject.getProject);
|
||||
fname := Tree.Selected.Text;
|
||||
i := fProject.Sources.IndexOf(fname);
|
||||
if i = -1 then exit;
|
||||
i := proj.Sources.IndexOf(fname);
|
||||
if i = -1 then
|
||||
exit;
|
||||
fname := fProject.sourceAbsolute(i);
|
||||
dir := fname.extractFilePath;
|
||||
if not dir.dirExists then exit;
|
||||
//
|
||||
fProject.beginUpdate;
|
||||
for i:= fProject.Sources.Count-1 downto 0 do
|
||||
if fProject.sourceAbsolute(i).extractFilePath = dir then
|
||||
fProject.Sources.Delete(i);
|
||||
fProject.endUpdate;
|
||||
if not dir.dirExists then
|
||||
exit;
|
||||
|
||||
proj.beginUpdate;
|
||||
for i:= proj.Sources.Count-1 downto 0 do
|
||||
if proj.sourceAbsolute(i).extractFilePath = dir then
|
||||
proj.Sources.Delete(i);
|
||||
proj.endUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.btnRemFileClick(Sender: TObject);
|
||||
var
|
||||
fname: string;
|
||||
proj: TCENativeProject;
|
||||
i, j: integer;
|
||||
begin
|
||||
if fProject.isNil or Tree.Selected.isNil then
|
||||
if not assigned(fProject) or (fProject.getFormat = pfDub)
|
||||
or Tree.Selected.isNil or (Tree.Selected.Parent = fFileNode) then
|
||||
exit;
|
||||
//
|
||||
if Tree.Selected.Parent = fFileNode then
|
||||
|
||||
proj := TCENativeProject(fProject.getProject);
|
||||
proj.beginUpdate;
|
||||
for j:= 0 to Tree.SelectionCount-1 do
|
||||
begin
|
||||
fProject.beginUpdate;
|
||||
for j:= 0 to Tree.SelectionCount-1 do
|
||||
begin
|
||||
fname := Tree.Selections[j].Text;
|
||||
i := fProject.Sources.IndexOf(fname);
|
||||
if i <> -1 then
|
||||
fProject.Sources.Delete(i);
|
||||
end;
|
||||
fProject.endUpdate;
|
||||
fname := Tree.Selections[j].Text;
|
||||
i := proj.Sources.IndexOf(fname);
|
||||
if i <> -1 then
|
||||
proj.Sources.Delete(i);
|
||||
end;
|
||||
proj.endUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectInspectWidget.FormDropFiles(Sender: TObject; const fnames: array of String);
|
||||
var
|
||||
fname, direntry: string;
|
||||
lst: TStringList;
|
||||
proj: TCENativeProject;
|
||||
procedure addFile(const value: string);
|
||||
var
|
||||
ext: string;
|
||||
|
@ -400,17 +418,17 @@ begin
|
|||
ext := value.extractFileExt;
|
||||
if not isDlangCompilable(ext) then
|
||||
exit;
|
||||
fProject.addSource(value);
|
||||
proj.addSource(value);
|
||||
if isEditable(ext) then
|
||||
getMultiDocHandler.openDocument(value);
|
||||
end;
|
||||
var
|
||||
fname, direntry: string;
|
||||
lst: TStringList;
|
||||
begin
|
||||
if fProject.isNil then exit;
|
||||
if not assigned(fProject) or (fProject.getFormat = pfDub) then
|
||||
exit;
|
||||
|
||||
proj := TCENativeProject(fProject.getProject);
|
||||
lst := TStringList.Create;
|
||||
fProject.beginUpdate;
|
||||
proj.beginUpdate;
|
||||
try for fname in fnames do
|
||||
if fname.fileExists then
|
||||
addFile(fname)
|
||||
|
@ -422,7 +440,7 @@ begin
|
|||
addFile(dirEntry);
|
||||
end;
|
||||
finally
|
||||
fProject.endUpdate;
|
||||
proj.endUpdate;
|
||||
lst.Free;
|
||||
end;
|
||||
end;
|
||||
|
@ -434,35 +452,32 @@ end;
|
|||
|
||||
procedure TCEProjectInspectWidget.updateImperative;
|
||||
var
|
||||
src, fold, conf, str: string;
|
||||
lst: TStringList;
|
||||
src, conf: string;
|
||||
itm: TTreeNode;
|
||||
i: NativeInt;
|
||||
i,j: integer;
|
||||
begin
|
||||
fConfNode.DeleteChildren;
|
||||
fFileNode.DeleteChildren;
|
||||
fImpsNode.DeleteChildren;
|
||||
fInclNode.DeleteChildren;
|
||||
fXtraNode.DeleteChildren;
|
||||
//
|
||||
if fProject.isNil then
|
||||
|
||||
if not assigned(fProject) then
|
||||
exit;
|
||||
//
|
||||
|
||||
Tree.BeginUpdate;
|
||||
// display main sources
|
||||
for src in fProject.Sources do
|
||||
for i := 0 to fProject.sourcesCount-1 do
|
||||
begin
|
||||
itm := Tree.Items.AddChild(fFileNode, src);
|
||||
itm := Tree.Items.AddChild(fFileNode, fProject.sourceRelative(i));
|
||||
itm.Data:= NewStr(fProject.sourceAbsolute(i));
|
||||
itm.ImageIndex := 2;
|
||||
itm.SelectedIndex := 2;
|
||||
end;
|
||||
// display configurations
|
||||
for i := 0 to fProject.OptionsCollection.Count-1 do
|
||||
j := fProject.getActiveConfigurationIndex;
|
||||
for i := 0 to fProject.configurationCount-1 do
|
||||
begin
|
||||
conf := fProject.configuration[i].name;
|
||||
if i = fProject.ConfigurationIndex then conf += ' (active)';
|
||||
conf := fProject.configurationName(i);
|
||||
if i = j then
|
||||
conf += ' (active)';
|
||||
itm := Tree.Items.AddChild(fConfNode, conf);
|
||||
if i = fProject.ConfigurationIndex then
|
||||
if i = j then
|
||||
begin
|
||||
itm.ImageIndex := 7;
|
||||
itm.SelectedIndex:= 7;
|
||||
|
@ -473,55 +488,6 @@ begin
|
|||
itm.SelectedIndex:= 3;
|
||||
end;
|
||||
end;
|
||||
// display Imports (-J)
|
||||
for str in FProject.currentConfiguration.pathsOptions.importStringPaths do
|
||||
begin
|
||||
if str.isEmpty then
|
||||
continue;
|
||||
fold := expandFilenameEx(fProject.basePath, str);
|
||||
fold := fSymStringExpander.expand(fold);
|
||||
itm := Tree.Items.AddChild(fImpsNode, fold);
|
||||
itm.ImageIndex := 5;
|
||||
itm.SelectedIndex := 5;
|
||||
end;
|
||||
fImpsNode.Collapse(false);
|
||||
// display Includes (-I)
|
||||
for str in FProject.currentConfiguration.pathsOptions.importModulePaths do
|
||||
begin
|
||||
if str.isEmpty then
|
||||
continue;
|
||||
fold := expandFilenameEx(fProject.basePath, str);
|
||||
fold := fSymStringExpander.expand(fold);
|
||||
itm := Tree.Items.AddChild(fInclNode, fold);
|
||||
itm.ImageIndex := 5;
|
||||
itm.SelectedIndex := 5;
|
||||
end;
|
||||
fInclNode.Collapse(false);
|
||||
// display extra sources (external .lib, *.a, *.d)
|
||||
for str in FProject.currentConfiguration.pathsOptions.extraSources do
|
||||
begin
|
||||
if str.isEmpty then
|
||||
continue;
|
||||
src := expandFilenameEx(fProject.basePath, str);
|
||||
src := fSymStringExpander.expand(src);
|
||||
lst := TStringList.Create;
|
||||
try
|
||||
if listAsteriskPath(src, lst) then for src in lst do
|
||||
begin
|
||||
itm := Tree.Items.AddChild(fXtraNode, src);
|
||||
itm.ImageIndex := 2;
|
||||
itm.SelectedIndex := 2;
|
||||
end else
|
||||
begin
|
||||
itm := Tree.Items.AddChild(fXtraNode, src);
|
||||
itm.ImageIndex := 2;
|
||||
itm.SelectedIndex := 2;
|
||||
end;
|
||||
finally
|
||||
lst.Free;
|
||||
end;
|
||||
end;
|
||||
fXtraNode.Collapse(false);
|
||||
Tree.EndUpdate;
|
||||
end;
|
||||
{$ENDREGION --------------------------------------------------------------------}
|
||||
|
|
Loading…
Reference in New Issue