From b8d68ac49e77276a1bc0019a06f95f10e1fde008 Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Sat, 22 Feb 2025 19:27:36 +0100 Subject: [PATCH] LCL/TreeView: Rename HideSelectionMode options from (hsmLaz, hsmDelphi) to (hsmGray, hsmHide) and deprecate them. Update the customdrawing demo. --- examples/treeview/customdrawing/main.lfm | 20 ++++++++++---------- examples/treeview/customdrawing/main.pas | 20 ++++++++++++-------- lcl/comctrls.pp | 3 ++- lcl/include/treeview.inc | 2 +- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/examples/treeview/customdrawing/main.lfm b/examples/treeview/customdrawing/main.lfm index 8e61e577ff..cddd06dec6 100644 --- a/examples/treeview/customdrawing/main.lfm +++ b/examples/treeview/customdrawing/main.lfm @@ -188,33 +188,33 @@ object MainForm: TMainForm TabOrder = 0 OnChange = cbHideSelectionChange end - object rbHideSelModeLaz: TRadioButton + object rbHideSelModeGray: TRadioButton AnchorSideLeft.Control = cbHideSelection AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbHideSelection Left = 113 Height = 19 Top = 0 - Width = 56 + Width = 91 BorderSpacing.Left = 20 - Caption = 'like Laz' + Caption = 'gray selection' Checked = True TabOrder = 7 TabStop = True - OnChange = rbHideSelModeLazChange + OnChange = rbHideSelModeGrayChange end - object rbHideSelModeDelphi: TRadioButton - AnchorSideLeft.Control = rbHideSelModeLaz + object rbHideSelModeHide: TRadioButton + AnchorSideLeft.Control = rbHideSelModeGray AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbHideSelection - Left = 179 + Left = 214 Height = 19 Top = 0 - Width = 73 + Width = 41 BorderSpacing.Left = 10 - Caption = 'like Delphi' + Caption = 'hide' TabOrder = 6 - OnChange = rbHideSelModeLazChange + OnChange = rbHideSelModeGrayChange end end end diff --git a/examples/treeview/customdrawing/main.pas b/examples/treeview/customdrawing/main.pas index c7acb81939..a925f3ee2a 100644 --- a/examples/treeview/customdrawing/main.pas +++ b/examples/treeview/customdrawing/main.pas @@ -24,8 +24,8 @@ type lbTask: TListBox; Panel1: TPanel; Panel2: TPanel; - rbHideSelModeLaz: TRadioButton; - rbHideSelModeDelphi: TRadioButton; + rbHideSelModeGray: TRadioButton; + rbHideSelModeHide: TRadioButton; Splitter1: TSplitter; TreeView: TTreeView; procedure btnToggleEnabledDisabledClick(Sender: TObject); @@ -57,7 +57,7 @@ type // The top-level nodes are painted with bold font procedure BoldTopLevel_CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); - procedure rbHideSelModeLazChange(Sender: TObject); + procedure rbHideSelModeGrayChange(Sender: TObject); // Nodes as rounded rectangles procedure RoundedRectNodes_AdvancedCustomDrawItem(Sender: TCustomTreeView; @@ -332,6 +332,8 @@ begin // PrePaint stage would force us to paint everything by ourselves. 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; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); @@ -426,13 +428,13 @@ begin Sender.Canvas.Font.Style := []; end; -procedure TMainForm.rbHideSelModeLazChange(Sender: TObject); +procedure TMainForm.rbHideSelModeGrayChange(Sender: TObject); begin {$IF LCL_FullVersion >= 4990000} - if rbHideSelModeLaz.Checked then - TreeView.HideSelectionMode := hsmLaz + if rbHideSelModeGray.Checked then + TreeView.HideSelectionMode := hsmGray else - TreeView.HideSelectionMode := hsmDelphi; + TreeView.HideSelectionMode := hsmHide; TreeView.Invalidate; {$IFEND} end; @@ -473,7 +475,9 @@ begin Sender.Canvas.Brush.Color := clBtnFace; Sender.Canvas.Pen.Color := clSilver; 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 Sender.Canvas.Brush.Style := bsClear; diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index a52b3e7744..5c76a75d3f 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -3422,7 +3422,7 @@ type tvimAsPrevSibling ); - THideSelectionMode = (hsmLaz, hsmDelphi); + THideSelectionMode = (hsmGray, hsmHide); TCustomTreeView = class(TCustomControl) private @@ -3836,6 +3836,7 @@ type 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) 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 property TabStop default true; end; diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index 1e9ae944d0..5d2cb49982 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -6892,7 +6892,7 @@ end; setting. } function TCustomTreeView.SelectionIsHidden: Boolean; begin - Result := (not Focused) and HideSelection and (FHideSelectionMode = hsmDelphi); + Result := (not Focused) and HideSelection and (FHideSelectionMode = hsmHide); end; procedure TCustomTreeView.MoveToNextNode(ASelect: Boolean);