implemented showing treenode completely on single selection

git-svn-id: trunk@5488 -
This commit is contained in:
mattias 2004-05-20 14:45:47 +00:00
parent 1f15c0c1c7
commit 490a8db07d
3 changed files with 50 additions and 9 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;