diff --git a/components/codetools/h2pastool.pas b/components/codetools/h2pastool.pas index 572e5259c7..a0185cb659 100644 --- a/components/codetools/h2pastool.pas +++ b/components/codetools/h2pastool.pas @@ -141,6 +141,7 @@ type property NodeCount: integer read FNodeCount; procedure DeleteNode(ANode: TH2PBaseNode); procedure AddNodeAsLastChild(ParentNode, ANode: TH2PBaseNode); + procedure AddNodeAsPreLastChild(ParentNode, ANode: TH2PBaseNode); procedure AddNodeInFrontOf(NextBrotherNode, ANode: TH2PBaseNode); procedure MoveChildsInFront(ANode: TH2PBaseNode); function ContainsNode(ANode: TH2PBaseNode): boolean; @@ -257,7 +258,8 @@ type function CreateH2PNode(const PascalName, CName: string; CNode: TCodeTreeNode; PascalDesc: TCodeTreeNodeDesc; const PascalCode: string; - ParentNode: TH2PNode = nil; IsGlobal: boolean = true): TH2PNode; + ParentNode: TH2PNode = nil; IsGlobal: boolean = true; + InsertAsPreLast: boolean = false): TH2PNode; function CreateAutoGeneratedH2PNode(var PascalName: string; CNode: TCodeTreeNode; PascalDesc: TCodeTreeNodeDesc; const PascalCode: string; ParentNode: TH2PNode = nil; IsGlobal: boolean = true): TH2PNode; @@ -2151,7 +2153,7 @@ end; function TH2PasTool.CreateH2PNode(const PascalName, CName: string; CNode: TCodeTreeNode; PascalDesc: TCodeTreeNodeDesc; const PascalCode: string; - ParentNode: TH2PNode; IsGlobal: boolean): TH2PNode; + ParentNode: TH2PNode; IsGlobal: boolean; InsertAsPreLast: boolean): TH2PNode; begin Result:=TH2PNode.Create; Result.PascalName:=PascalName; @@ -2159,7 +2161,10 @@ begin Result.CNode:=CNode; Result.PascalDesc:=PascalDesc; Result.PascalCode:=PascalCode; - Tree.AddNodeAsLastChild(ParentNode,Result); + if InsertAsPreLast then + Tree.AddNodeAsPreLastChild(ParentNode,Result) + else + Tree.AddNodeAsLastChild(ParentNode,Result); if IsGlobal then begin if PascalName<>'' then FPascalNames.Add(Result); @@ -2178,7 +2183,7 @@ function TH2PasTool.CreateAutoGeneratedH2PNode(var PascalName: string; begin Node:=FindH2PNodeWithPascalName(TestName); if (Node=nil) then begin - Node:=CreateH2PNode(TestName,'',CNode,PascalDesc,PascalCode); + Node:=CreateH2PNode(TestName,'',CNode,PascalDesc,PascalCode,nil,true,true); Result:=true; end else if ((Node.CNode=CNode) and (Node.PascalDesc=PascalDesc) and (Node.PascalCode=PascalCode) @@ -2749,6 +2754,16 @@ begin inc(FNodeCount); end; +procedure TH2PTree.AddNodeAsPreLastChild(ParentNode, ANode: TH2PBaseNode); +begin + if (ParentNode=nil) and (LastRoot<>nil) then + AddNodeInFrontOf(LastRoot,ANode) + else if (ParentNode<>nil) and (ParentNode.FirstChild<>nil) then + AddNodeInFrontOf(ParentNode.LastChild,ANode) + else + AddNodeAsLastChild(ParentNode,ANode); +end; + procedure TH2PTree.AddNodeInFrontOf(NextBrotherNode, ANode: TH2PBaseNode); begin ANode.Parent:=NextBrotherNode.Parent;