diff --git a/src/ce_dubprojeditor.lfm b/src/ce_dubprojeditor.lfm index 4a555873..f0286181 100644 --- a/src/ce_dubprojeditor.lfm +++ b/src/ce_dubprojeditor.lfm @@ -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 diff --git a/src/ce_dubprojeditor.pas b/src/ce_dubprojeditor.pas index b94bb859..144ea8fe 100644 --- a/src/ce_dubprojeditor.pas +++ b/src/ce_dubprojeditor.pas @@ -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. diff --git a/src/ce_main.pas b/src/ce_main.pas index 1a77afe1..022b5885 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -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 diff --git a/src/ce_projinspect.lfm b/src/ce_projinspect.lfm index a82f527f..7bae4ce5 100644 --- a/src/ce_projinspect.lfm +++ b/src/ce_projinspect.lfm @@ -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 diff --git a/src/ce_projinspect.pas b/src/ce_projinspect.pas index ccc82214..7e2c81ed 100644 --- a/src/ce_projinspect.pas +++ b/src/ce_projinspect.pas @@ -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 --------------------------------------------------------------------}