mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-31 01:47:43 +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
|
||||
OldExpanded.Apply(Self);
|
||||
OldExpanded.Free;
|
||||
MakeSelectionVisible;
|
||||
EndUpdate;
|
||||
end;
|
||||
|
||||
|
@ -1549,6 +1549,7 @@ type
|
||||
procedure InternalMove(ANode: TTreeNode; AddMode: TAddMode);
|
||||
function IsEqual(Node: TTreeNode): Boolean;
|
||||
function IsNodeVisible: Boolean;
|
||||
function IsNodeHeightFullVisible: Boolean;
|
||||
procedure ReadData(Stream: TStream; StreamVersion: integer;
|
||||
Info: PTreeNodeInfo);
|
||||
procedure ReadDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
|
||||
@ -1635,6 +1636,7 @@ type
|
||||
property ImageIndex: integer read FImageIndex write SetImageIndex;
|
||||
property Index: Integer read GetIndex;
|
||||
property IsVisible: Boolean read IsNodeVisible;
|
||||
property IsFullHeightVisible: Boolean read IsNodeHeightFullVisible;
|
||||
property Items[ItemIndex: Integer]: TTreeNode read GetItems write SetItems; default;
|
||||
property Level: Integer read GetLevel;
|
||||
property MultiSelected: Boolean read GetMultiSelected write SetMultiSelected;
|
||||
@ -1940,6 +1942,7 @@ type
|
||||
function IsCustomDrawn(Target: TCustomDrawTarget;
|
||||
Stage: TCustomDrawStage): Boolean;
|
||||
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
||||
function IsNodeHeightFullVisible(ANode: TTreeNode): Boolean;
|
||||
function IsInsertMarkVisible: boolean; virtual;
|
||||
procedure Change(Node: TTreeNode); dynamic;
|
||||
procedure Collapse(Node: TTreeNode); dynamic;
|
||||
@ -2255,6 +2258,9 @@ end.
|
||||
{ =============================================================================
|
||||
|
||||
$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
|
||||
disable custom drawn border by default for treeview (already has borderstyle=bsSingle
|
||||
|
||||
|
@ -1339,13 +1339,19 @@ begin
|
||||
end;
|
||||
|
||||
function TTreeNode.IsNodeVisible: Boolean;
|
||||
//var Rect: TRect;
|
||||
begin
|
||||
if TreeView<>nil then
|
||||
Result:=TreeView.IsNodeVisible(Self)
|
||||
else
|
||||
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;
|
||||
|
||||
procedure TTreeNode.Update;
|
||||
@ -3384,6 +3390,24 @@ begin
|
||||
//' Node.Text=',ANode.Text,' Visible=',Result);
|
||||
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);
|
||||
begin
|
||||
inherited KeyDown(Key, Shift);
|
||||
@ -4490,6 +4514,9 @@ begin
|
||||
ScrolledTop:=ANode.Top
|
||||
else begin
|
||||
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;
|
||||
end;
|
||||
end;
|
||||
@ -5033,15 +5060,22 @@ var
|
||||
ANode: TTreeNode;
|
||||
begin
|
||||
ANode:=GetFirstMultiSelected;
|
||||
while (ANode<>nil) do begin
|
||||
if ANode.IsVisible then begin
|
||||
Result:=true;
|
||||
exit;
|
||||
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
|
||||
if ANode.IsVisible then begin
|
||||
Result:=true;
|
||||
exit;
|
||||
end;
|
||||
ANode:=ANode.GetNextMultiSelected;
|
||||
end;
|
||||
ANode:=ANode.GetNextMultiSelected;
|
||||
Result:=false;
|
||||
end else begin
|
||||
if ANode=nil then
|
||||
ANode:=Selected;
|
||||
Result:=(ANode<>nil) and (ANode.IsFullHeightVisible);
|
||||
end;
|
||||
ANode:=Selected;
|
||||
Result:=(ANode<>nil) and (ANode.IsVisible);
|
||||
end;
|
||||
|
||||
procedure TCustomTreeView.MakeSelectionVisible;
|
||||
|
Loading…
Reference in New Issue
Block a user