From 371075ffd8789a2bd00c6aee0b1cdc3bf05ad1fd Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 16 Apr 2008 02:02:27 +0000 Subject: [PATCH] qt: add bidimode support git-svn-id: trunk@14846 - --- lcl/interfaces/qt/qtwidgets.pas | 6 ++++++ lcl/interfaces/qt/qtwscontrols.pp | 24 ++++++++++++++++++++---- lcl/interfaces/qt/qtwsmenus.pp | 9 ++++++++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index d0e32e296d..b00a6dd3ca 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -186,6 +186,7 @@ type procedure setFocusProxy(const AWidget: QWidgetH); procedure setFont(AFont: QFontH); procedure setGeometry(ARect: TRect); overload; + procedure setLayoutDirection(ADirection: QtLayoutDirection); procedure setMaximumSize(AWidth, AHeight: Integer); procedure setMask(AMask: QBitmapH); procedure setMinimumSize(AWidth, AHeight: Integer); @@ -2624,6 +2625,11 @@ begin QWidget_setGeometry(Widget, @ARect); end; +procedure TQtWidget.setLayoutDirection(ADirection: QtLayoutDirection); +begin + QWidget_setLayoutDirection(Widget, ADirection); +end; + procedure TQtWidget.setMaximumSize(AWidth, AHeight: Integer); begin QWidget_setMaximumSize(Widget, AWidth, AHeight); diff --git a/lcl/interfaces/qt/qtwscontrols.pp b/lcl/interfaces/qt/qtwscontrols.pp index dc66af8c49..32515ce60c 100644 --- a/lcl/interfaces/qt/qtwscontrols.pp +++ b/lcl/interfaces/qt/qtwscontrols.pp @@ -78,6 +78,8 @@ type class procedure AddControl(const AControl: TControl); override; class function GetClientBounds(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override; class function GetClientRect(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override; + + class procedure SetBiDiMode(const AWinControl: TWinControl; const ABiDiMode: TBiDiMode); override; class procedure SetBounds(const AWinControl: TWinControl; const ALeft, ATop, AWidth, AHeight: Integer); override; class procedure SetBorderStyle(const AWinControl: TWinControl; const ABorderStyle: TBorderStyle); override; class procedure SetPos(const AWinControl: TWinControl; const ALeft, ATop: Integer); override; @@ -129,14 +131,20 @@ type public end; - -implementation const TBorderStyleToQtFrameShapeMap: array[TBorderStyle] of QFrameShape = ( - {bsNone} QFrameNoFrame, - {bsSingle} QFrameStyledPanel + { bsNone } QFrameNoFrame, + { bsSingle } QFrameStyledPanel ); + TBidiModeToDirectionMap: array[TBiDiMode] of QtLayoutDirection = + ( + { bdLeftToRight } QtLeftToRight, + { bdRightToLeft } QtRightToLeft, + { bdRightToLeftNoAlign } QtRightToLeft, // ? + { bdRightToLeftReadingOnly } QtRightToLeft // ? + ); +implementation {------------------------------------------------------------------------------ Method: TQtWSCustomControl.CreateHandle @@ -311,6 +319,14 @@ begin Result := True; end; +class procedure TQtWSWinControl.SetBiDiMode(const AWinControl: TWinControl; + const ABiDiMode: TBiDiMode); +begin + if not WSCheckHandleAllocated(AWinControl, 'SetBiDiMode') then + Exit; + TQtWidget(AWinControl.Handle).setLayoutDirection(TBidiModeToDirectionMap[ABiDiMode]); +end; + class procedure TQtWSWinControl.GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin diff --git a/lcl/interfaces/qt/qtwsmenus.pp b/lcl/interfaces/qt/qtwsmenus.pp index 9af022300c..d9357a1de1 100644 --- a/lcl/interfaces/qt/qtwsmenus.pp +++ b/lcl/interfaces/qt/qtwsmenus.pp @@ -31,7 +31,7 @@ interface uses // Bindings qt4, - qtwidgets, qtobjects, qtproc, + qtwidgets, qtobjects, qtproc, QtWsControls, // LCL SysUtils, Classes, LCLType, LCLProc, Graphics, Controls, Forms, Menus, // Widgetset @@ -66,6 +66,7 @@ type protected public class function CreateHandle(const AMenu: TMenu): HMENU; override; + class procedure SetBiDiMode(const AMenu: TMenu; const ABiDiMode: TBiDiMode); override; end; { TQtWSMainMenu } @@ -386,6 +387,12 @@ begin {$endif} end; +class procedure TQtWSMenu.SetBiDiMode(const AMenu: TMenu; + const ABiDiMode: TBiDiMode); +begin + TQtWidget(AMenu.Handle).setLayoutDirection(TBidiModeToDirectionMap[ABidiMode]); +end; + { TQtWSPopupMenu } {------------------------------------------------------------------------------