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

View File

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

View File

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

View File

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