From 747db959f4f1d973823d2c0554e9a58e32086914 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 3 Nov 2009 16:07:56 +0000 Subject: [PATCH] lcl: add enumerators for TListItems, TTreeNodes, TToolBar git-svn-id: trunk@22409 - --- lcl/comctrls.pp | 116 +++++++++++++++++++++++++++++++++++--- lcl/include/listitems.inc | 5 ++ lcl/include/toolbar.inc | 5 ++ lcl/include/treeview.inc | 5 ++ 4 files changed, 122 insertions(+), 9 deletions(-) diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index 1d3f1b707a..8a704d6075 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -782,6 +782,19 @@ type public procedure SetDataIndex(ADataIndex: Integer); end; + + { TListItemsEnumerator } + + TListItemsEnumerator = class + private + FItems: TListItems; + FPosition: Integer; + function GetCurrent: TListItem; + public + constructor Create(AItems: TListItems); + function MoveNext: Boolean; + property Current: TListItem read GetCurrent; + end; { TListItems } { @@ -825,6 +838,7 @@ type Partial, Inclusive, Wrap: Boolean; PartStart: Boolean = True): TListItem; function FindData(const AData: Pointer): TListItem; + function GetEnumerator: TListItemsEnumerator; function IndexOf(const AItem: TListItem): Integer; function Insert(const AIndex: Integer) : TListItem; procedure InsertItem(AItem: TListItem; const AIndex: Integer); @@ -1589,6 +1603,18 @@ type property OnStartDrag; end; + { TToolBarEnumerator } + + TToolBarEnumerator = class + private + FToolBar: TToolBar; + FPosition: Integer; + function GetCurrent: TToolButton; + public + constructor Create(AToolBar: TToolBar); + function MoveNext: Boolean; + property Current: TToolButton read GetCurrent; + end; { TToolBar } @@ -1679,6 +1705,7 @@ type procedure FlipChildren(AllLevels: Boolean); override; procedure BeginUpdate; virtual; procedure EndUpdate; virtual; + function GetEnumerator: TToolBarEnumerator; procedure Paint; override; procedure SetButtonSize(NewButtonWidth, NewButtonHeight: integer); function CanFocus: Boolean; override; @@ -2118,6 +2145,18 @@ type property Top: integer read GetTop; end; + { TTreeNodesEnumerator } + + TTreeNodesEnumerator = class + private + FNodes: TTreeNodes; + FPosition: Integer; + function GetCurrent: TTreeNode; + public + constructor Create(ANodes: TTreeNodes); + function MoveNext: Boolean; + property Current: TTreeNode read GetCurrent; + end; { TTreeNodes } @@ -2187,6 +2226,7 @@ type function IsMultiSelection: boolean; procedure Delete(Node: TTreeNode); procedure EndUpdate; + function GetEnumerator: TTreeNodesEnumerator; function GetFirstNode: TTreeNode; function GetLastNode: TTreeNode; // last top level node function GetLastSubNode: TTreeNode; // absolute last node @@ -2904,15 +2944,6 @@ const ScrollBarWidth = 0; AllPanelsParts = [Low(TPanelPart)..High(TPanelPart)]; -{ Toolbar menu support } - -procedure Register; -begin - RegisterComponents('Common Controls',[TTrackbar,TProgressBar,TTreeView, - TListView,TStatusBar,TToolBar,TUpDown,TPageControl,TTabControl, THeaderControl]); - RegisterNoIcon([TToolButton,TTabSheet]); -end; - {$I statusbar.inc} {$I statuspanel.inc} {$I statuspanels.inc} @@ -2932,4 +2963,71 @@ end; {$I treeview.inc} {$I headercontrol.inc} +{ TTreeNodesEnumerator } + +function TTreeNodesEnumerator.GetCurrent: TTreeNode; +begin + Result := FNodes[FPosition]; +end; + +constructor TTreeNodesEnumerator.Create(ANodes: TTreeNodes); +begin + inherited Create; + FNodes := ANodes; + FPosition := -1; +end; + +function TTreeNodesEnumerator.MoveNext: Boolean; +begin + inc(FPosition); + Result := FPosition < FNodes.Count; +end; + +{ TListItemsEnumerator } + +function TListItemsEnumerator.GetCurrent: TListItem; +begin + Result := FItems[FPosition]; +end; + +constructor TListItemsEnumerator.Create(AItems: TListItems); +begin + inherited Create; + FItems := AItems; + FPosition := -1; +end; + +function TListItemsEnumerator.MoveNext: Boolean; +begin + inc(FPosition); + Result := FPosition < FItems.Count; +end; + +{ TToolBarEnumerator } + +function TToolBarEnumerator.GetCurrent: TToolButton; +begin + Result := FToolBar.Buttons[FPosition]; +end; + +constructor TToolBarEnumerator.Create(AToolBar: TToolBar); +begin + inherited Create; + FToolBar := AToolBar; + FPosition := -1; +end; + +function TToolBarEnumerator.MoveNext: Boolean; +begin + inc(FPosition); + Result := FPosition < FToolBar.ButtonCount; +end; + +procedure Register; +begin + RegisterComponents('Common Controls',[TTrackbar,TProgressBar,TTreeView, + TListView,TStatusBar,TToolBar,TUpDown,TPageControl,TTabControl, THeaderControl]); + RegisterNoIcon([TToolButton,TTabSheet]); +end; + end. diff --git a/lcl/include/listitems.inc b/lcl/include/listitems.inc index 0e8d12668c..07ae180ad6 100644 --- a/lcl/include/listitems.inc +++ b/lcl/include/listitems.inc @@ -387,6 +387,11 @@ begin Result := nil; end; +function TListItems.GetEnumerator: TListItemsEnumerator; +begin + Result := TListItemsEnumerator.Create(Self); +end; + {------------------------------------------------------------------------------} { TListItems DefineProperties } {------------------------------------------------------------------------------} diff --git a/lcl/include/toolbar.inc b/lcl/include/toolbar.inc index aa4ae2239a..155e2de486 100644 --- a/lcl/include/toolbar.inc +++ b/lcl/include/toolbar.inc @@ -370,6 +370,11 @@ begin end; end; +function TToolBar.GetEnumerator: TToolBarEnumerator; +begin + Result := TToolBarEnumerator.Create(Self); +end; + procedure TToolBar.Paint; begin if csDesigning in ComponentState then diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index 94016f2883..e49b571416 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -2236,6 +2236,11 @@ begin if FUpdateCount = 0 then SetUpdateState(False); end; +function TTreeNodes.GetEnumerator: TTreeNodesEnumerator; +begin + Result := TTreeNodesEnumerator.Create(Self); +end; + procedure TTreeNodes.GrowTopLvlItems; begin if FTopLvlItems<>nil then begin