diff --git a/ide/codeexplorer.pas b/ide/codeexplorer.pas index a1faa2c679..3ba4bcf7d8 100644 --- a/ide/codeexplorer.pas +++ b/ide/codeexplorer.pas @@ -12,6 +12,8 @@ uses Menus; type + TCodeExplorerView = class; + TOnGetCodeTree = procedure(Sender: TObject; var ACodeTool: TCodeTool) of object; TOnJumpToCode = procedure(Sender: TObject; const Filename: string; @@ -281,42 +283,60 @@ var NodeText: String; ViewNode: TTreeNode; NodeImageIndex: Integer; + ShowNode: Boolean; + ShowChilds: Boolean; begin if CodeNode=nil then exit; - // don't show statements, parameter lists - if (CodeNode.Desc in AllPascalStatements) - or (CodeNode.Desc in [ctnProcedureHead,ctnParameterList]) then exit; - - if CodeNode.FirstChild=CodeNode.LastChild then begin - // node has no childs or one child - // don't show boring details - if CodeNode.Desc in [ctnIdentifier,ctnRangedArrayType, - ctnOpenArrayType,ctnOfConstType,ctnRangeType,ctnTypeType,ctnFileType, - ctnVariantType] - then begin - CreateNodes(ACodeTool,CodeNode.FirstChild,ParentViewNode,InFrontViewNode, - true); - exit; - end; + ShowNode:=true; + ShowChilds:=true; + + // don't show statements + if (CodeNode.Desc in AllPascalStatements+[ctnParameterList]) then exit; + // don't show parameter lists + if (CodeNode.Desc in [ctnProcedureHead]) then begin + ShowNode:=false; + ShowChilds:=false; + end; + // don't show forward class definitions + if (CodeNode.Desc=ctnTypeDefinition) + and (CodeNode.FirstChild<>nil) and (CodeNode.FirstChild.Desc=ctnClass) + and ((CodeNode.FirstChild.SubDesc and ctnsForwardDeclaration)>0) then begin + ShowNode:=false; + ShowChilds:=false; end; - NodeData:=TViewNodeData.Create(CodeNode); - NodeText:=GetNodeDescription(ACodeTool,CodeNode); - NodeImageIndex:=GetNodeImage(CodeNode); - if InFrontViewNode<>nil then - ViewNode:=CodeTreeview.Items.InsertObjectBehind( + // don't show keyword nodes + if CodeNode.Desc in [ctnIdentifier,ctnRangedArrayType, + ctnOpenArrayType,ctnOfConstType,ctnRangeType,ctnTypeType,ctnFileType, + ctnVariantType] + then + ShowNode:=false; + + if ShowNode then begin + NodeData:=TViewNodeData.Create(CodeNode); + NodeText:=GetNodeDescription(ACodeTool,CodeNode); + NodeImageIndex:=GetNodeImage(CodeNode); + if InFrontViewNode<>nil then + ViewNode:=CodeTreeview.Items.InsertObjectBehind( InFrontViewNode,NodeText,NodeData) - else if ParentViewNode<>nil then - ViewNode:=CodeTreeview.Items.AddChildObject( + else if ParentViewNode<>nil then + ViewNode:=CodeTreeview.Items.AddChildObject( ParentViewNode,NodeText,NodeData) - else - ViewNode:=CodeTreeview.Items.AddObject(nil,NodeText,NodeData); - ViewNode.ImageIndex:=NodeImageIndex; - ViewNode.SelectedIndex:=NodeImageIndex; - CreateNodes(ACodeTool,CodeNode.FirstChild,ViewNode,nil,true); - if CreateSiblings then begin - CreateNodes(ACodeTool,CodeNode.NextBrother,ParentViewNode,ViewNode,true); + else + ViewNode:=CodeTreeview.Items.AddObject(nil,NodeText,NodeData); + ViewNode.ImageIndex:=NodeImageIndex; + ViewNode.SelectedIndex:=NodeImageIndex; + if ShowChilds then + CreateNodes(ACodeTool,CodeNode.FirstChild,ViewNode,nil,true); + if CreateSiblings then + CreateNodes(ACodeTool,CodeNode.NextBrother,ParentViewNode,ViewNode,true); + end else begin + if ShowChilds then + CreateNodes(ACodeTool,CodeNode.FirstChild,ParentViewNode,nil,true); + if CreateSiblings then + CreateNodes(ACodeTool,CodeNode.NextBrother,ParentViewNode,InFrontViewNode, + true); end; end; diff --git a/lcl/include/imglist.inc b/lcl/include/imglist.inc index 3c157c3c3a..bacb4460f6 100644 --- a/lcl/include/imglist.inc +++ b/lcl/include/imglist.inc @@ -273,14 +273,19 @@ end; Destructor for the class. ------------------------------------------------------------------------------} destructor TCustomImageList.Destroy; -var i: integer; +var + i: integer; begin FBitmap.Free; + FBitmap:=nil; FMaskBitmap.Free; - FChangeLinkList.Free; + FMaskBitmap:=nil; for i:=0 to FImageList.Count-1 do TObject(FImageList[i]).Free; FImageList.Free; //shane + FImageList:=nil; inherited Destroy; + FChangeLinkList.Free; + FChangeLinkList:=nil; end; {------------------------------------------------------------------------------ @@ -940,7 +945,9 @@ end; ------------------------------------------------------------------------------} procedure TCustomImageList.UnRegisterChanges(Value: TChangeLink); begin - FChangeLinkList.Remove(Value); + if (FChangeLinkList<>nil) and (Value.Sender=Self) then + FChangeLinkList.Remove(Value); + Value.Sender:=nil; end; {****************************************************************************** @@ -978,6 +985,9 @@ end; { $Log$ + Revision 1.18 2003/11/08 23:42:24 mattias + fixed unregistering imageslink + Revision 1.17 2003/03/11 07:46:43 mattias more localization for gtk- and win32-interface and lcl diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index 637c7895dd..3f8d20e982 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -2613,16 +2613,16 @@ end; destructor TCustomTreeView.Destroy; begin - FTreeNodes.Free; - FTreeNodes:=nil; - FChangeTimer.Free; - FSaveItems.Free; - FDragImage.Free; + Images:=nil; + FreeThenNil(FTreeNodes); + FreeThenNil(FChangeTimer); + FreeThenNil(FSaveItems); + FreeThenNil(FDragImage); //FMemStream.Free; //FreeObjectInstance(FEditInstance); - FImageChangeLink.Free; - FStateChangeLink.Free; - FCanvas.Free; + FreeThenNil(FImageChangeLink); + FreeThenNil(FStateChangeLink); + FreeThenNil(FCanvas); inherited Destroy; end;