From b293ec66bf942d961e998568d89b47aac5fde0c4 Mon Sep 17 00:00:00 2001 From: mattias Date: Mon, 17 Jun 2013 12:09:50 +0000 Subject: [PATCH] lcl: TTreeNodes.FreeAllNodeData git-svn-id: trunk@41740 - --- lcl/comctrls.pp | 90 ++++++++++++++++++++-------------------- lcl/include/treeview.inc | 21 +++++++++- 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index ffddaf9d3a..004551abfa 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -2657,14 +2657,12 @@ type function GetOwner: TPersistent; override; public constructor Create(AnOwner: TTreeNodes); + destructor Destroy; override; function AlphaSort: Boolean; - procedure Assign(Source: TPersistent); override; - procedure Collapse(Recurse: Boolean); + function Bottom: integer; + function BottomExpanded: integer; function CustomSort(SortProc: TTreeNodeCompare): Boolean; function DefaultTreeViewSort(Node1, Node2: TTreeNode): Integer; - procedure Delete; - procedure DeleteChildren; - destructor Destroy; override; function DisplayExpandSignLeft: integer; function DisplayExpandSignRect: TRect; function DisplayExpandSignRight: integer; @@ -2674,27 +2672,23 @@ type function DisplayTextLeft: integer; function DisplayTextRight: integer; function EditText: Boolean; - procedure EndEdit(Cancel: Boolean); - procedure Expand(Recurse: Boolean); - procedure ExpandParents; - function Bottom: integer; - function BottomExpanded: integer; - function GetParentNodeOfAbsoluteLevel(TheAbsoluteLevel: integer): TTreeNode; + function FindNode(const NodeText: string): TTreeNode; function GetFirstChild: TTreeNode; function GetFirstVisibleChild: TTreeNode; function GetHandle: THandle; - function GetLastSibling: TTreeNode; function GetLastChild: TTreeNode; - function GetLastVisibleChild: TTreeNode; + function GetLastSibling: TTreeNode; function GetLastSubChild: TTreeNode; + function GetLastVisibleChild: TTreeNode; function GetNext: TTreeNode; - function GetNextSkipChildren: TTreeNode; function GetNextChild(AValue: TTreeNode): TTreeNode; function GetNextExpanded: TTreeNode; function GetNextMultiSelected: TTreeNode; function GetNextSibling: TTreeNode; + function GetNextSkipChildren: TTreeNode; function GetNextVisible: TTreeNode; function GetNextVisibleSibling: TTreeNode; + function GetParentNodeOfAbsoluteLevel(TheAbsoluteLevel: integer): TTreeNode; function GetPrev: TTreeNode; function GetPrevChild(AValue: TTreeNode): TTreeNode; function GetPrevExpanded: TTreeNode; @@ -2702,47 +2696,54 @@ type function GetPrevSibling: TTreeNode; function GetPrevVisible: TTreeNode; function GetPrevVisibleSibling: TTreeNode; + function GetTextPath: string; function HasAsParent(AValue: TTreeNode): Boolean; function IndexOf(AValue: TTreeNode): Integer; function IndexOfText(const NodeText: string): Integer; - function FindNode(const NodeText: string): TTreeNode; - function GetTextPath: string; + procedure Assign(Source: TPersistent); override; + procedure Collapse(Recurse: Boolean); + procedure ConsistencyCheck; + procedure Delete; + procedure DeleteChildren; + procedure EndEdit(Cancel: Boolean); + procedure Expand(Recurse: Boolean); + procedure ExpandParents; + procedure FreeAllNodeData; procedure MakeVisible; procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual; procedure MultiSelectGroup; procedure Update; - procedure ConsistencyCheck; procedure WriteDebugReport(const Prefix: string; Recurse: boolean); property AbsoluteIndex: Integer read GetAbsoluteIndex; property Count: Integer read GetCount; property Cut: Boolean read GetCut write SetCut; property Data: Pointer read FData write SetData; property Deleting: Boolean read GetDeleting; - property Focused: Boolean read GetFocused write SetFocused; property DropTarget: Boolean read GetDropTarget write SetDropTarget; property Expanded: Boolean read GetExpanded write SetExpanded; + property Focused: Boolean read GetFocused write SetFocused; property Handle: THandle read GetHandle; property HasChildren: Boolean read GetHasChildren write SetHasChildren; property Height: integer read GetHeight write SetHeight; - property NodeEffect: TGraphicsDrawEffect read FNodeEffect write SetImageEffect; property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1; property Index: Integer read GetIndex write SetIndex; - property IsVisible: Boolean read IsNodeVisible; property IsFullHeightVisible: Boolean read IsNodeHeightFullVisible; + property IsVisible: Boolean read IsNodeVisible; property Items[ItemIndex: Integer]: TTreeNode read GetItems write SetItems; default; property Level: Integer read GetLevel; property MultiSelected: Boolean read GetMultiSelected write SetMultiSelected; + property NodeEffect: TGraphicsDrawEffect read FNodeEffect write SetImageEffect; property OverlayIndex: Integer read FOverlayIndex write SetOverlayIndex default -1; property Owner: TTreeNodes read FOwner; property Parent: TTreeNode read FParent; property Selected: Boolean read GetSelected write SetSelected; property SelectedIndex: Integer read FSelectedIndex write SetSelectedIndex default -1; - property SubTreeCount: integer read FSubTreeCount; property StateIndex: Integer read FStateIndex write SetStateIndex default -1; + property SubTreeCount: integer read FSubTreeCount; property Text: string read FText write SetText; + property Top: integer read GetTop; property TreeNodes: TTreeNodes read GetTreeNodes; property TreeView: TCustomTreeView read GetTreeView; - property Top: integer read GetTop; property Visible: Boolean read FVisible write SetVisible default True; end; @@ -2818,40 +2819,41 @@ type function AddChildObjectFirst(ParentNode: TTreeNode; const S: string; Data: Pointer): TTreeNode; function AddFirst(SiblingNode: TTreeNode; const S: string): TTreeNode; + function AddNode(Node: TTreeNode; Relative: TTreeNode; const S: string; + Ptr: Pointer; Method: TNodeAttachMode): TTreeNode; function AddObject(SiblingNode: TTreeNode; const S: string; Data: Pointer): TTreeNode; function AddObjectFirst(SiblingNode: TTreeNode; const S: string; Data: Pointer): TTreeNode; - function AddNode(Node: TTreeNode; Relative: TTreeNode; const S: string; - Ptr: Pointer; Method: TNodeAttachMode): TTreeNode; + function FindNodeWithData(const NodeData: Pointer): TTreeNode; + function FindNodeWithText(const NodeText: string): TTreeNode; + function FindTopLvlNode(const NodeText: string): TTreeNode; + function GetEnumerator: TTreeNodesEnumerator; + function GetFirstNode: TTreeNode; + function GetFirstVisibleNode: TTreeNode; + function GetLastExpandedSubNode: TTreeNode; // absolute last node + function GetLastNode: TTreeNode; // last top level node + function GetLastSubNode: TTreeNode; // absolute last node + function GetLastVisibleNode: TTreeNode; + function GetSelections(const AIndex: Integer): TTreeNode; + function Insert(NextNode: TTreeNode; const S: string): TTreeNode; + function InsertBehind(PrevNode: TTreeNode; const S: string): TTreeNode; + function InsertObject(NextNode: TTreeNode; const S: string; + Data: Pointer): TTreeNode; + function InsertObjectBehind(PrevNode: TTreeNode; const S: string; + Data: Pointer): TTreeNode; + function IsMultiSelection: boolean; procedure Assign(Source: TPersistent); override; procedure BeginUpdate; procedure Clear; procedure ClearMultiSelection(ClearSelected: boolean = false); - procedure SelectOnlyThis(Node: TTreeNode); - function IsMultiSelection: boolean; + procedure ConsistencyCheck; procedure Delete(Node: TTreeNode); procedure EndUpdate; - function GetEnumerator: TTreeNodesEnumerator; - function GetFirstNode: TTreeNode; - function GetFirstVisibleNode: TTreeNode; - function GetLastNode: TTreeNode; // last top level node - function GetLastVisibleNode: TTreeNode; - function GetLastSubNode: TTreeNode; // absolute last node - function GetLastExpandedSubNode: TTreeNode; // absolute last node - function GetSelections(const AIndex: Integer): TTreeNode; - function FindTopLvlNode(const NodeText: string): TTreeNode; - function FindNodeWithText(const NodeText: string): TTreeNode; - function FindNodeWithData(const NodeData: Pointer): TTreeNode; - function Insert(NextNode: TTreeNode; const S: string): TTreeNode; - function InsertObject(NextNode: TTreeNode; const S: string; - Data: Pointer): TTreeNode; - function InsertBehind(PrevNode: TTreeNode; const S: string): TTreeNode; - function InsertObjectBehind(PrevNode: TTreeNode; const S: string; - Data: Pointer): TTreeNode; + procedure FreeAllNodeData; procedure SelectionsChanged(ANode: TTreeNode; const AIsSelected: Boolean); + procedure SelectOnlyThis(Node: TTreeNode); procedure SortTopLevelNodes(SortProc: TTreeNodeCompare); - procedure ConsistencyCheck; procedure WriteDebugReport(const Prefix: string; AllNodes: boolean); property Count: Integer read GetCount; property Item[Index: Integer]: TTreeNode read GetNodeFromIndex; default; diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index b9f5a81bfa..011b6d5a67 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -699,6 +699,15 @@ begin end; end; +procedure TTreeNode.FreeAllNodeData; +var + i: Integer; +begin + FreeAndNil(FData); + for i:=0 to Count-1 do + Items[i].FreeAllNodeData; +end; + procedure TTreeNode.Collapse(Recurse: Boolean); begin ExpandItem(False, Recurse); @@ -772,7 +781,7 @@ begin Update; end; -function TTreeNode.GetCut: Boolean; +function TTreeNode.GetCut: boolean; begin Result := GetState(nsCut); end; @@ -2497,6 +2506,16 @@ begin if FUpdateCount = 0 then SetUpdateState(False); end; +procedure TTreeNodes.FreeAllNodeData; +var + i: Integer; +begin + BeginUpdate; + for i:=0 to TopLvlCount-1 do + TopLvlItems[i].FreeAllNodeData; + EndUpdate; +end; + function TTreeNodes.GetEnumerator: TTreeNodesEnumerator; begin Result := TTreeNodesEnumerator.Create(Self);