mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-27 02:48:30 +02:00
implemented showing treenode completely on single selection
git-svn-id: trunk@5488 -
This commit is contained in:
parent
1f15c0c1c7
commit
490a8db07d
@ -312,6 +312,7 @@ begin
|
|||||||
// restore old expanded state
|
// restore old expanded state
|
||||||
OldExpanded.Apply(Self);
|
OldExpanded.Apply(Self);
|
||||||
OldExpanded.Free;
|
OldExpanded.Free;
|
||||||
|
MakeSelectionVisible;
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1549,6 +1549,7 @@ type
|
|||||||
procedure InternalMove(ANode: TTreeNode; AddMode: TAddMode);
|
procedure InternalMove(ANode: TTreeNode; AddMode: TAddMode);
|
||||||
function IsEqual(Node: TTreeNode): Boolean;
|
function IsEqual(Node: TTreeNode): Boolean;
|
||||||
function IsNodeVisible: Boolean;
|
function IsNodeVisible: Boolean;
|
||||||
|
function IsNodeHeightFullVisible: Boolean;
|
||||||
procedure ReadData(Stream: TStream; StreamVersion: integer;
|
procedure ReadData(Stream: TStream; StreamVersion: integer;
|
||||||
Info: PTreeNodeInfo);
|
Info: PTreeNodeInfo);
|
||||||
procedure ReadDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
|
procedure ReadDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
|
||||||
@ -1635,6 +1636,7 @@ type
|
|||||||
property ImageIndex: integer read FImageIndex write SetImageIndex;
|
property ImageIndex: integer read FImageIndex write SetImageIndex;
|
||||||
property Index: Integer read GetIndex;
|
property Index: Integer read GetIndex;
|
||||||
property IsVisible: Boolean read IsNodeVisible;
|
property IsVisible: Boolean read IsNodeVisible;
|
||||||
|
property IsFullHeightVisible: Boolean read IsNodeHeightFullVisible;
|
||||||
property Items[ItemIndex: Integer]: TTreeNode read GetItems write SetItems; default;
|
property Items[ItemIndex: Integer]: TTreeNode read GetItems write SetItems; default;
|
||||||
property Level: Integer read GetLevel;
|
property Level: Integer read GetLevel;
|
||||||
property MultiSelected: Boolean read GetMultiSelected write SetMultiSelected;
|
property MultiSelected: Boolean read GetMultiSelected write SetMultiSelected;
|
||||||
@ -1940,6 +1942,7 @@ type
|
|||||||
function IsCustomDrawn(Target: TCustomDrawTarget;
|
function IsCustomDrawn(Target: TCustomDrawTarget;
|
||||||
Stage: TCustomDrawStage): Boolean;
|
Stage: TCustomDrawStage): Boolean;
|
||||||
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
||||||
|
function IsNodeHeightFullVisible(ANode: TTreeNode): Boolean;
|
||||||
function IsInsertMarkVisible: boolean; virtual;
|
function IsInsertMarkVisible: boolean; virtual;
|
||||||
procedure Change(Node: TTreeNode); dynamic;
|
procedure Change(Node: TTreeNode); dynamic;
|
||||||
procedure Collapse(Node: TTreeNode); dynamic;
|
procedure Collapse(Node: TTreeNode); dynamic;
|
||||||
@ -2255,6 +2258,9 @@ end.
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.125 2004/05/20 14:45:47 mattias
|
||||||
|
implemented showing treenode completely on single selection
|
||||||
|
|
||||||
Revision 1.124 2004/05/19 18:41:19 micha
|
Revision 1.124 2004/05/19 18:41:19 micha
|
||||||
disable custom drawn border by default for treeview (already has borderstyle=bsSingle
|
disable custom drawn border by default for treeview (already has borderstyle=bsSingle
|
||||||
|
|
||||||
|
@ -1339,13 +1339,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TTreeNode.IsNodeVisible: Boolean;
|
function TTreeNode.IsNodeVisible: Boolean;
|
||||||
//var Rect: TRect;
|
|
||||||
begin
|
begin
|
||||||
if TreeView<>nil then
|
if TreeView<>nil then
|
||||||
Result:=TreeView.IsNodeVisible(Self)
|
Result:=TreeView.IsNodeVisible(Self)
|
||||||
else
|
else
|
||||||
Result:=AreParentsExpanded;
|
Result:=AreParentsExpanded;
|
||||||
//Result := TreeView_GetItemRect(Handle, ItemId, Rect, True);
|
end;
|
||||||
|
|
||||||
|
function TTreeNode.IsNodeHeightFullVisible: Boolean;
|
||||||
|
begin
|
||||||
|
if TreeView<>nil then
|
||||||
|
Result:=TreeView.IsNodeHeightFullVisible(Self)
|
||||||
|
else
|
||||||
|
Result:=AreParentsExpanded;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTreeNode.Update;
|
procedure TTreeNode.Update;
|
||||||
@ -3384,6 +3390,24 @@ begin
|
|||||||
//' Node.Text=',ANode.Text,' Visible=',Result);
|
//' Node.Text=',ANode.Text,' Visible=',Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomTreeView.IsNodeHeightFullVisible(ANode: TTreeNode): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=(ANode<>nil) and (ANode.AreParentsExpanded);
|
||||||
|
//DebugLn('[TCustomTreeView.IsNodeVisible] A Node=',HexStr(Cardinal(ANode),8),
|
||||||
|
//' ANode.AreParentsExpanded=',ANode.AreParentsExpanded);
|
||||||
|
if Result then begin
|
||||||
|
//DebugLn('[TCustomTreeView.IsNodeVisible] B Node=',HexStr(Cardinal(ANode),8),
|
||||||
|
//' ',FScrolledTop,'>=',ANode.Top,'+',ANode.Height,' or ',FScrolledTop,'+',ClientHeight,'<',ANode.Top);
|
||||||
|
if (FScrolledTop>ANode.Top)
|
||||||
|
or (FScrolledTop+(ClientHeight-ScrollBarWidth)-2*BorderWidth
|
||||||
|
<ANode.Top+ANode.Height)
|
||||||
|
then
|
||||||
|
Result:=false;
|
||||||
|
end;
|
||||||
|
//DebugLn('[TCustomTreeView.IsNodeVisible] END Node=',HexStr(Cardinal(ANode),8),
|
||||||
|
//' Node.Text=',ANode.Text,' Visible=',Result);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.KeyDown(var Key: Word; Shift: TShiftState);
|
procedure TCustomTreeView.KeyDown(var Key: Word; Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
inherited KeyDown(Key, Shift);
|
inherited KeyDown(Key, Shift);
|
||||||
@ -4490,6 +4514,9 @@ begin
|
|||||||
ScrolledTop:=ANode.Top
|
ScrolledTop:=ANode.Top
|
||||||
else begin
|
else begin
|
||||||
b:=ANode.Top+ANode.Height-GetNodeDrawAreaHeight;
|
b:=ANode.Top+ANode.Height-GetNodeDrawAreaHeight;
|
||||||
|
//writeln('TCustomTreeView.EnsureNodeIsVisible b=',b,
|
||||||
|
//' ANode.Top=',ANode.Top,' ANode.Height=',ANode.Height,
|
||||||
|
//' GetNodeDrawAreaHeight=',GetNodeDrawAreaHeight,' ClientHeight=',ClientHeight);
|
||||||
if ScrolledTop<b then ScrolledTop:=b;
|
if ScrolledTop<b then ScrolledTop:=b;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -5033,6 +5060,9 @@ var
|
|||||||
ANode: TTreeNode;
|
ANode: TTreeNode;
|
||||||
begin
|
begin
|
||||||
ANode:=GetFirstMultiSelected;
|
ANode:=GetFirstMultiSelected;
|
||||||
|
if (ANode<>nil) and (ANode.GetNextMultiSelected<>nil) then begin
|
||||||
|
// 2 or more elements => a real multi selection =>
|
||||||
|
// is visible if even one of its nodes is partly visible
|
||||||
while (ANode<>nil) do begin
|
while (ANode<>nil) do begin
|
||||||
if ANode.IsVisible then begin
|
if ANode.IsVisible then begin
|
||||||
Result:=true;
|
Result:=true;
|
||||||
@ -5040,8 +5070,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
ANode:=ANode.GetNextMultiSelected;
|
ANode:=ANode.GetNextMultiSelected;
|
||||||
end;
|
end;
|
||||||
|
Result:=false;
|
||||||
|
end else begin
|
||||||
|
if ANode=nil then
|
||||||
ANode:=Selected;
|
ANode:=Selected;
|
||||||
Result:=(ANode<>nil) and (ANode.IsVisible);
|
Result:=(ANode<>nil) and (ANode.IsFullHeightVisible);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.MakeSelectionVisible;
|
procedure TCustomTreeView.MakeSelectionVisible;
|
||||||
|
Loading…
Reference in New Issue
Block a user