diff --git a/ide/compoptsmodes.pas b/ide/compoptsmodes.pas index 81560ba5ed..ee27e16251 100644 --- a/ide/compoptsmodes.pas +++ b/ide/compoptsmodes.pas @@ -98,6 +98,7 @@ type property Evaluator: TExpressionEvaluator read FEvaluator write SetEvaluator; property ChangeStamp: integer read FChangeStamp; procedure IncreaseChangeStamp; inline; + procedure WriteDebugReport; property ErrorNode: TCompOptCondNode read FErrorNode write FErrorNode; property ErrorMsg: string read FErrorMsg write FErrorMsg; end; @@ -362,6 +363,22 @@ begin FChangeStamp:=Low(Integer); end; +procedure TCompOptConditionals.WriteDebugReport; + + procedure WriteNode(Prefix: string; Node: TCompOptCondNode); + var + i: Integer; + begin + DebugLn([Prefix,'Type=',COCNodeTypeNames[Node.NodeType],' Value=',Node.Value]); + for i:=0 to Node.Count-1 do + WriteNode(Prefix+' ',Node.Childs[i]); + end; + +begin + DebugLn(['TCompOptConditionals.WriteDebugReport ']); + WriteNode(' ',Root); +end; + { TCompilerDiffTool } procedure TCompilerDiffTool.SetDiff(const AValue: TStrings); diff --git a/ide/frames/options_compiler_conditionals.pas b/ide/frames/options_compiler_conditionals.pas index d02a1174de..76d4c7b137 100644 --- a/ide/frames/options_compiler_conditionals.pas +++ b/ide/frames/options_compiler_conditionals.pas @@ -27,7 +27,7 @@ uses Classes, SysUtils, LCLProc, FileProcs, Controls, LResources, Forms, ComCtrls, Menus, Dialogs, ProjectIntf, IDEImagesIntf, - CompOptsModes; + LazarusIDEStrConsts, CompOptsModes; type @@ -231,13 +231,17 @@ procedure TCompOptsConditionalsFrame.ConsistencyCheck; RaiseCatchableException(''); if TVNode=nil then RaiseCatchableException(''); - if COCNode<>TCompOptCondNode(TVNode.Data) then + if TVNode.Data=nil then RaiseCatchableException(''); + if COCNode<>TCompOptCondNode(TVNode.Data) then + RaiseCatchableException(TCompOptCondNode(TObject(TVNode.Data)).Value+'<>'+COCNode.Value+' TVNode='+TVNode.Text); ChildTVNode:=TVNode.GetFirstChild; for i:=0 to COCNode.Count-1 do begin CheckNode(COCNode.Childs[i],ChildTVNode); ChildTVNode:=ChildTVNode.GetNextSibling; end; + if ChildTVNode<>nil then + RaiseCatchableException(''); end; begin @@ -310,10 +314,19 @@ begin if not GetSelectedNode(COCNode,TVNode,true) then exit; NewCOCNode:=TCompOptCondNode.Create(COCNode.Owner); s:=NodeToCaption(COCNode); - NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,COCNode); - NewTVNode.MoveTo(TVNode,naAddChildFirst); + NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,NewCOCNode); + NewTVNode.MoveTo(TVNode,AttachMode); NewTVNode.ImageIndex:=FNodeTypeImageIDs[NewCOCNode.NodeType]; NewTVNode.StateIndex:=NewTVNode.ImageIndex; + case AttachMode of + naAdd: NewCOCNode.Move(COCNode.Parent,COCNode.Parent.Count); + naAddFirst: NewCOCNode.Move(COCNode.Parent,0); + naAddChild: NewCOCNode.Move(COCNode,COCNode.Count); + naAddChildFirst: NewCOCNode.Move(COCNode,0); + naInsert: NewCOCNode.Move(COCNode.Parent,COCNode.Index); + naInsertBehind: NewCOCNode.Move(COCNode.Parent,COCNode.Index+1); + end; + TVNode.Expanded:=true; ConsistencyCheck; end; @@ -335,6 +348,16 @@ begin FNodeTypeImageIDs[cocntElseIf]:=IDEImages.LoadImage(24,'da_elseif'); FNodeTypeImageIDs[cocntElse]:=IDEImages.LoadImage(24,'da_else'); FNodeTypeImageIDs[cocntAddValue]:=IDEImages.LoadImage(24,'da_define'); + + InsertAboveMenuItem.Caption:=dlgCOCreateNodeAbove; + InsertBelowMenuItem.Caption:=dlgCOCreateNodeBelow; + InsertChildMenuItem.Caption:=dlgCOCreateChildNode; + DeleteMenuItem.Caption:=lisCodeToolsDefsDeleteNode; + PropertiesMenuItem.Caption:=lisCEProperties; + MoveLvlDownMenuItem.Caption:=dlgCOMoveLevelDown; + MoveLvlUpMenuItem.Caption:=dlgCOMoveLevelUp; + MoveDownMenuItem.Caption:=dlgCOMoveDown; + MoveUpMenuItem.Caption:=dlgCOMoveUp; end; initialization diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 811303cef5..5ab974341b 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -3611,6 +3611,10 @@ resourcestring lisCEConstants = 'Constants'; lisCEProcedures = 'Procedures'; lisCEProperties = 'Properties'; + dlgCOMoveLevelDown = 'Move level down'; + dlgCOMoveLevelUp = 'Move level up'; + dlgCOMoveDown = 'Move down'; + dlgCOMoveUp = 'Move up'; lisCEOMode = 'Preferred Exhibition Mode'; lisCEOModeCategory = 'Category'; lisCEOModeSource = 'Source'; @@ -3999,6 +4003,9 @@ resourcestring rsCreatingSymLinkFailed = 'Creating symbolic link "%s" failed!'; rsCreatingSymLinkNotSupported = 'Creating symbolic link is not supported on this platform!'; lisPutLrsFilesInOutputDirectory = 'Save .lrs files in the output directory'; + dlgCOCreateNodeAbove = 'Create node above'; + dlgCOCreateNodeBelow = 'Create node below'; + dlgCOCreateChildNode = 'Create child node'; implementation diff --git a/ideintf/projectintf.pas b/ideintf/projectintf.pas index d79a49127c..e512052ca7 100644 --- a/ideintf/projectintf.pas +++ b/ideintf/projectintf.pas @@ -128,7 +128,7 @@ type property Owner: TLazCompOptConditionals read FOwner; property Parent: TCompOptCondNode read FParent; property Count: integer read GetCount; - property Childs[Index: integer]: TCompOptCondNode read GetChilds; + property Childs[Index: integer]: TCompOptCondNode read GetChilds; default; property Index: integer read GetIndex write SetIndex; end; @@ -1052,6 +1052,7 @@ begin if (NewIndex<0) or (NewIndex>FParent.Count) then NewIndex:=FParent.Count; FParent.fChilds.Insert(NewIndex,Self); + FParent.Changed; end; end; diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index ade01aa2cb..535a6334ef 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -4152,7 +4152,7 @@ var var CurMid: integer; begin - if (CurNode <> nil) and (tvoShowRoot in Options) or (CurNode.Parent<>nil) + if (CurNode <> nil) and ((tvoShowRoot in Options) or (CurNode.Parent<>nil)) then begin Result := DrawTreeLines(CurNode.Parent); if ShowLines then