LCL/TreeView: Rename HideSelectionMode options from (hsmLaz, hsmDelphi) to (hsmGray, hsmHide) and deprecate them. Update the customdrawing demo.

This commit is contained in:
wp_xyz 2025-02-22 19:27:36 +01:00
parent 20d22eae2a
commit b8d68ac49e
4 changed files with 25 additions and 20 deletions

View File

@ -188,33 +188,33 @@ object MainForm: TMainForm
TabOrder = 0 TabOrder = 0
OnChange = cbHideSelectionChange OnChange = cbHideSelectionChange
end end
object rbHideSelModeLaz: TRadioButton object rbHideSelModeGray: TRadioButton
AnchorSideLeft.Control = cbHideSelection AnchorSideLeft.Control = cbHideSelection
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbHideSelection AnchorSideTop.Control = cbHideSelection
Left = 113 Left = 113
Height = 19 Height = 19
Top = 0 Top = 0
Width = 56 Width = 91
BorderSpacing.Left = 20 BorderSpacing.Left = 20
Caption = 'like Laz' Caption = 'gray selection'
Checked = True Checked = True
TabOrder = 7 TabOrder = 7
TabStop = True TabStop = True
OnChange = rbHideSelModeLazChange OnChange = rbHideSelModeGrayChange
end end
object rbHideSelModeDelphi: TRadioButton object rbHideSelModeHide: TRadioButton
AnchorSideLeft.Control = rbHideSelModeLaz AnchorSideLeft.Control = rbHideSelModeGray
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbHideSelection AnchorSideTop.Control = cbHideSelection
Left = 179 Left = 214
Height = 19 Height = 19
Top = 0 Top = 0
Width = 73 Width = 41
BorderSpacing.Left = 10 BorderSpacing.Left = 10
Caption = 'like Delphi' Caption = 'hide'
TabOrder = 6 TabOrder = 6
OnChange = rbHideSelModeLazChange OnChange = rbHideSelModeGrayChange
end end
end end
end end

View File

@ -24,8 +24,8 @@ type
lbTask: TListBox; lbTask: TListBox;
Panel1: TPanel; Panel1: TPanel;
Panel2: TPanel; Panel2: TPanel;
rbHideSelModeLaz: TRadioButton; rbHideSelModeGray: TRadioButton;
rbHideSelModeDelphi: TRadioButton; rbHideSelModeHide: TRadioButton;
Splitter1: TSplitter; Splitter1: TSplitter;
TreeView: TTreeView; TreeView: TTreeView;
procedure btnToggleEnabledDisabledClick(Sender: TObject); procedure btnToggleEnabledDisabledClick(Sender: TObject);
@ -57,7 +57,7 @@ type
// The top-level nodes are painted with bold font // The top-level nodes are painted with bold font
procedure BoldTopLevel_CustomDrawItem(Sender: TCustomTreeView; procedure BoldTopLevel_CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure rbHideSelModeLazChange(Sender: TObject); procedure rbHideSelModeGrayChange(Sender: TObject);
// Nodes as rounded rectangles // Nodes as rounded rectangles
procedure RoundedRectNodes_AdvancedCustomDrawItem(Sender: TCustomTreeView; procedure RoundedRectNodes_AdvancedCustomDrawItem(Sender: TCustomTreeView;
@ -332,6 +332,8 @@ begin
// PrePaint stage would force us to paint everything by ourselves. // PrePaint stage would force us to paint everything by ourselves.
end; end;
// Note that this handler ignores the settings of the rbHideSelMode* radiobuttons
// See BackgroundImage_AdvancedCustomDrawItem how this could be handled.
procedure TMainForm.BackgroundGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; procedure TMainForm.BackgroundGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean); var PaintImages, DefaultDraw: Boolean);
@ -426,13 +428,13 @@ begin
Sender.Canvas.Font.Style := []; Sender.Canvas.Font.Style := [];
end; end;
procedure TMainForm.rbHideSelModeLazChange(Sender: TObject); procedure TMainForm.rbHideSelModeGrayChange(Sender: TObject);
begin begin
{$IF LCL_FullVersion >= 4990000} {$IF LCL_FullVersion >= 4990000}
if rbHideSelModeLaz.Checked then if rbHideSelModeGray.Checked then
TreeView.HideSelectionMode := hsmLaz TreeView.HideSelectionMode := hsmGray
else else
TreeView.HideSelectionMode := hsmDelphi; TreeView.HideSelectionMode := hsmHide;
TreeView.Invalidate; TreeView.Invalidate;
{$IFEND} {$IFEND}
end; end;
@ -473,7 +475,9 @@ begin
Sender.Canvas.Brush.Color := clBtnFace; Sender.Canvas.Brush.Color := clBtnFace;
Sender.Canvas.Pen.Color := clSilver; Sender.Canvas.Pen.Color := clSilver;
end; end;
Sender.Canvas.RoundRect(R, 12, 12); // Draw the node background as rounded rectangle, but only if node is enabled.
if not (cdsDisabled in State) then
Sender.Canvas.RoundRect(R, 12, 12);
// Avoid default drawing of the node background // Avoid default drawing of the node background
Sender.Canvas.Brush.Style := bsClear; Sender.Canvas.Brush.Style := bsClear;

View File

@ -3422,7 +3422,7 @@ type
tvimAsPrevSibling tvimAsPrevSibling
); );
THideSelectionMode = (hsmLaz, hsmDelphi); THideSelectionMode = (hsmGray, hsmHide);
TCustomTreeView = class(TCustomControl) TCustomTreeView = class(TCustomControl)
private private
@ -3836,6 +3836,7 @@ type
property TreeLinePenStyle: TPenStyle read FTreeLinePenStyle write FTreeLinePenStyle default psPattern; property TreeLinePenStyle: TPenStyle read FTreeLinePenStyle write FTreeLinePenStyle default psPattern;
// When HideSelection is false, switches between Lazarus (sel nodes gray) and Delphi mode (sel nodes hidden) // When HideSelection is false, switches between Lazarus (sel nodes gray) and Delphi mode (sel nodes hidden)
property HideSelectionMode: THideSelectionMode read FHideSelectionMode write FHideSelectionMode; property HideSelectionMode: THideSelectionMode read FHideSelectionMode write FHideSelectionMode;
deprecated 'Use HideSelection=false to show selection for the non-focused treeview'; // To be removed in v5.99
published published
property TabStop default true; property TabStop default true;
end; end;

View File

@ -6892,7 +6892,7 @@ end;
setting. } setting. }
function TCustomTreeView.SelectionIsHidden: Boolean; function TCustomTreeView.SelectionIsHidden: Boolean;
begin begin
Result := (not Focused) and HideSelection and (FHideSelectionMode = hsmDelphi); Result := (not Focused) and HideSelection and (FHideSelectionMode = hsmHide);
end; end;
procedure TCustomTreeView.MoveToNextNode(ASelect: Boolean); procedure TCustomTreeView.MoveToNextNode(ASelect: Boolean);