fixed unregistering imageslink

git-svn-id: trunk@4784 -
This commit is contained in:
mattias 2003-11-08 23:42:24 +00:00
parent 711c426a9c
commit 1b40fbe743
3 changed files with 70 additions and 40 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;