mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 01:28:19 +02:00
lazcontrols: TTreeFilterEdit: restore scroll position
This commit is contained in:
parent
ee218d1fa0
commit
99810467be
@ -72,6 +72,7 @@ type
|
|||||||
private
|
private
|
||||||
fFilteredTreeview: TCustomTreeview; // A control showing the (filtered) data.
|
fFilteredTreeview: TCustomTreeview; // A control showing the (filtered) data.
|
||||||
fImageIndexDirectory: integer; // Needed if directory structure is shown.
|
fImageIndexDirectory: integer; // Needed if directory structure is shown.
|
||||||
|
FScrolledPos: TPoint;
|
||||||
fSelectionList: TStringList; // Store/restore the old selections here.
|
fSelectionList: TStringList; // Store/restore the old selections here.
|
||||||
fShowDirHierarchy: Boolean; // Show directories / files as a tree structure.
|
fShowDirHierarchy: Boolean; // Show directories / files as a tree structure.
|
||||||
fBranches: TBranchList; // Items under these nodes can be sorted.
|
fBranches: TBranchList; // Items under these nodes can be sorted.
|
||||||
@ -108,6 +109,7 @@ type
|
|||||||
function DeleteBranch(ARootNode: TTreeNode): Boolean;
|
function DeleteBranch(ARootNode: TTreeNode): Boolean;
|
||||||
public
|
public
|
||||||
property ImageIndexDirectory: integer read fImageIndexDirectory write fImageIndexDirectory;
|
property ImageIndexDirectory: integer read fImageIndexDirectory write fImageIndexDirectory;
|
||||||
|
property ScrolledPos: TPoint read FScrolledPos; // only valid if positive
|
||||||
property SelectionList: TStringList read fSelectionList;
|
property SelectionList: TStringList read fSelectionList;
|
||||||
property ShowDirHierarchy: Boolean read fShowDirHierarchy write SetShowDirHierarchy;
|
property ShowDirHierarchy: Boolean read fShowDirHierarchy write SetShowDirHierarchy;
|
||||||
published
|
published
|
||||||
@ -555,6 +557,15 @@ begin
|
|||||||
fFirstPassedNode:=Nil;
|
fFirstPassedNode:=Nil;
|
||||||
ANode:=fFilteredTreeview.Selected;
|
ANode:=fFilteredTreeview.Selected;
|
||||||
if (ANode=nil) then Exit;
|
if (ANode=nil) then Exit;
|
||||||
|
if (not ANode.IsVisible) and (fFilteredTreeview is TTreeView) then
|
||||||
|
begin
|
||||||
|
// selected node is not in scrolled view -> store scroll position
|
||||||
|
FScrolledPos.X:=TTreeView(fFilteredTreeview).ScrolledLeft;
|
||||||
|
FScrolledPos.Y:=TTreeView(fFilteredTreeview).ScrolledTop;
|
||||||
|
end else begin
|
||||||
|
FScrolledPos.X:=-1;
|
||||||
|
FScrolledPos.Y:=-1;
|
||||||
|
end;
|
||||||
if ANode=fFilteredTreeview.Items.GetFirstVisibleNode then Exit;
|
if ANode=fFilteredTreeview.Items.GetFirstVisibleNode then Exit;
|
||||||
fSelectionList.Clear; // Clear old selection only if there is new one.
|
fSelectionList.Clear; // Clear old selection only if there is new one.
|
||||||
fSelectionList.Add(ANode.Text);
|
fSelectionList.Add(ANode.Text);
|
||||||
@ -590,6 +601,13 @@ begin
|
|||||||
else
|
else
|
||||||
ANode:=fFilteredTreeview.Items.GetFirstVisibleNode; // Otherwise first node
|
ANode:=fFilteredTreeview.Items.GetFirstVisibleNode; // Otherwise first node
|
||||||
fFilteredTreeview.Selected:=ANode;
|
fFilteredTreeview.Selected:=ANode;
|
||||||
|
if fFilteredTreeview is TTreeView then
|
||||||
|
begin
|
||||||
|
if FScrolledPos.Y>=0 then
|
||||||
|
TTreeView(fFilteredTreeview).ScrolledTop:=FScrolledPos.Y;
|
||||||
|
if FScrolledPos.X>=0 then
|
||||||
|
TTreeView(fFilteredTreeview).ScrolledLeft:=FScrolledPos.X;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TTreeFilterEdit.GetExistingBranch(ARootNode: TTreeNode): TTreeFilterBranch;
|
function TTreeFilterEdit.GetExistingBranch(ARootNode: TTreeNode): TTreeFilterBranch;
|
||||||
|
Loading…
Reference in New Issue
Block a user