From 9dc50e13f7c1e213b20ee1bba05d9faaae9ba840 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Thu, 12 Oct 2023 21:43:33 +0000 Subject: [PATCH] SpkToolbar: Prepare for RTL git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8953 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/spktoolbar/SpkToolbar/SpkToolbar.pas | 13 +++++++++++++ components/spktoolbar/SpkToolbar/spkt_Buttons.pas | 6 ++++++ components/spktoolbar/SpkToolbar/spkt_Items.pas | 9 +++++++++ components/spktoolbar/SpkToolbar/spkt_Pane.pas | 13 +++++++++++++ components/spktoolbar/SpkToolbar/spkt_Tab.pas | 13 +++++++++++++ 5 files changed, 54 insertions(+) diff --git a/components/spktoolbar/SpkToolbar/SpkToolbar.pas b/components/spktoolbar/SpkToolbar/SpkToolbar.pas index d02d5c790..7b6621978 100644 --- a/components/spktoolbar/SpkToolbar/SpkToolbar.pas +++ b/components/spktoolbar/SpkToolbar/SpkToolbar.pas @@ -385,6 +385,9 @@ type { Setter for visibility of Menu Button } procedure SetShowMenuButton(Value: Boolean); + { Setter for BiDiMode (left-to-right or right-to-left writing direction) } + procedure SetBiDiMode(Value: TBiDiMode); override; + { Calculates the height of the entire toolbar } function CalcToolbarHeight: Integer; @@ -2683,4 +2686,14 @@ begin end; end; +procedure TSpkToolbar.SetBiDiMode(Value: TBiDiMode); +begin + if BiDiMode = Value then exit; + inherited SetBiDiMode(Value); + FTabs.IsRightToLeft := IsRightToLeft; + SetMetricsInvalid; + if not (FInternalUpdating or FUpdating) then + Repaint; +end; + end. diff --git a/components/spktoolbar/SpkToolbar/spkt_Buttons.pas b/components/spktoolbar/SpkToolbar/spkt_Buttons.pas index 67f5974ad..a84dab4fc 100644 --- a/components/spktoolbar/SpkToolbar/spkt_Buttons.pas +++ b/components/spktoolbar/SpkToolbar/spkt_Buttons.pas @@ -126,6 +126,7 @@ type {%H-}X, {%H-}Y: Integer); override; function GetRootComponent: TComponent; + function IsRightToLeft: Boolean; property ActionLink: TSpkButtonActionLink read FActionLink; property Checked: Boolean read GetChecked write SetChecked default false; @@ -522,6 +523,11 @@ begin result := tab.Collection.RootComponent; end; +function TSpkBaseButton.IsRightToLeft: Boolean; +begin + Result := (GetRootComponent as TControl).IsRightToLeft; +end; + procedure TSpkBaseButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin diff --git a/components/spktoolbar/SpkToolbar/spkt_Items.pas b/components/spktoolbar/SpkToolbar/spkt_Items.pas index 1a51271d7..4dfe65b7f 100644 --- a/components/spktoolbar/SpkToolbar/spkt_Items.pas +++ b/components/spktoolbar/SpkToolbar/spkt_Items.pas @@ -31,6 +31,7 @@ type FDisabledLargeImages: TImageList; FImagesWidth: Integer; FLargeImagesWidth: Integer; + FIsRightToLeft: Boolean; // *** Getters and setters *** procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch); @@ -42,6 +43,7 @@ type procedure SetDisabledLargeImages(const Value: TImageList); procedure SetImagesWidth(const Value: Integer); procedure SetLargeImagesWidth(const Value: Integer); + procedure SetIsRightToLeft(const Value: Boolean); public function AddLargeButton: TSpkLargeButton; @@ -62,6 +64,7 @@ type property DisabledLargeImages: TImageList read FDisabledLargeImages write SetDisabledLargeImages; property ImagesWidth: Integer read FImagesWidth write SetImagesWidth; property LargeImagesWidth: Integer read FLargeImagesWidth write SetLargeImagesWidth; + property IsRightToLeft: Boolean read FIsRightToLeft write SetIsRightToLeft; end; implementation @@ -181,6 +184,12 @@ begin Items[i].ImagesWidth := Value; end; +procedure TSpkItems.SetIsRightToLeft(const Value: Boolean); +begin + if FIsRightToLeft = Value then exit; + FIsRightToLeft := Value; +end; + procedure TSpkItems.SetLargeImages(const Value: TImageList); var i: Integer; diff --git a/components/spktoolbar/SpkToolbar/spkt_Pane.pas b/components/spktoolbar/SpkToolbar/spkt_Pane.pas index 1f86cc7e7..75c471adc 100644 --- a/components/spktoolbar/SpkToolbar/spkt_Pane.pas +++ b/components/spktoolbar/SpkToolbar/spkt_Pane.pas @@ -144,6 +144,7 @@ type TSpkPanes = class(TSpkCollection) private + FIsRightToLeft: Boolean; protected FToolbarDispatch: TSpkBaseToolbarDispatch; FAppearance: TSpkToolbarAppearance; @@ -164,6 +165,7 @@ type procedure SetDisabledLargeImages(const Value: TImageList); procedure SetImagesWidth(const Value: Integer); procedure SetLargeImagesWidth(const Value: Integer); + procedure SetIsRightToLeft(const Value: Boolean); public // *** Adding and inserting elements *** @@ -182,6 +184,7 @@ type property LargeImages: TImageList read FLargeImages write SetLargeImages; property DisabledLargeImages: TImageList read FDisabledLargeImages write SetDisabledLargeImages; property ImagesWidth: Integer read FImagesWidth write SetImagesWidth; + property IsRightToLeft: Boolean read FIsRightToLeft write SetIsRightToLeft; property LargeImagesWidth: Integer read FLargeImagesWidth write SetLargeImagesWidth; end; @@ -1299,6 +1302,16 @@ begin Items[i].ImagesWidth := Value; end; +procedure TSpkPanes.SetIsRightToLeft(const Value: Boolean); +var + i: Integer; +begin + if FIsRightToLeft = Value then exit; + FIsRightToLeft := Value; + for i := 0 to Count-1 do + Items[i].Items.IsRightToLeft := Value; +end; + procedure TSpkPanes.SetLargeImages(const Value: TImageList); var I: Integer; diff --git a/components/spktoolbar/SpkToolbar/spkt_Tab.pas b/components/spktoolbar/SpkToolbar/spkt_Tab.pas index 37b03a1cc..36ef7ddb9 100644 --- a/components/spktoolbar/SpkToolbar/spkt_Tab.pas +++ b/components/spktoolbar/SpkToolbar/spkt_Tab.pas @@ -148,6 +148,7 @@ type FDisabledLargeImages: TImageList; FImagesWidth: Integer; FLargeImagesWidth: Integer; + FIsRightToLeft: Boolean; procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch); function GetItems(AIndex: integer): TSpkTab; reintroduce; procedure SetAppearance(const Value: TSpkToolbarAppearance); @@ -156,6 +157,7 @@ type procedure SetLargeImages(const Value: TImageList); procedure SetDisabledLargeImages(const Value: TImageList); procedure SetImagesWidth(const Value: Integer); + procedure SetIsRightToLeft(const Value: Boolean); procedure SetLargeImagesWidth(const Value: Integer); public function Add: TSpkTab; @@ -172,6 +174,7 @@ type property DisabledLargeImages: TImageList read FDisabledLargeImages write SetDisabledLargeImages; property ImagesWidth: Integer read FImagesWidth write SetImagesWidth; property LargeImagesWidth: Integer read FLargeImagesWidth write SetLargeImagesWidth; + property IsRightToLeft: boolean read FIsRightToLeft write SetIsRightToLeft; end; @@ -736,6 +739,16 @@ begin Items[i].ImagesWidth := Value; end; +procedure TSpkTabs.SetIsRightToLeft(const Value: Boolean); +var + i: Integer; +begin + if FIsRightToLeft = Value then exit; + FIsRightToLeft := Value; + for i := 0 to Count-1 do + Items[i].Panes.IsRightToLeft := Value; +end; + procedure TSpkTabs.SetLargeImages(const Value: TImageList); var i: Integer;