diff --git a/components/richmemo/qt/qtrichmemo.pas b/components/richmemo/qt/qtrichmemo.pas new file mode 100644 index 000000000..aa519e318 --- /dev/null +++ b/components/richmemo/qt/qtrichmemo.pas @@ -0,0 +1,109 @@ +unit QtRichMemo; + +interface + +uses + LCLType, Controls, StdCtrls, + qt4, qtwidgets, qtprivate, + WSProc, + RichMemo, WSRichMemo; + +type + { TQtWSCustomRichMemo } + + TQtWSCustomRichMemo = class(TWSCustomRichMemo) + published + class function CreateHandle(const AWinControl: TWinControl; + const AParams: TCreateParams): HWND; override; + class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer; + var AAlign: TIntParaAlignment): Boolean; override; + class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer; + const AAlign: TIntParaAlignment); override; + end; + +implementation + +const + WordWrapMap: array[Boolean] of QTextEditLineWrapMode = + ( + QTextEditNoWrap, + QTextEditWidgetWidth + ); + + AlignmentMap: array[TIntParaAlignment] of QtAlignment = + ( + QtAlignLeft, + QtAlignRight, + QtAlignHCenter, + QtAlignJustify + ); + +{ TQtWSCustomRichMemo } + +class function TQtWSCustomRichMemo.CreateHandle(const AWinControl: TWinControl; + const AParams: TCreateParams): HWND; +var + QtTextEdit: TQtTextEdit; +begin + QtTextEdit := TQtTextEdit.Create(AWinControl, AParams); + QtTextEdit.AcceptRichText := True; + QtTextEdit.ClearText; + QtTextEdit.setBorder(TCustomMemo(AWinControl).BorderStyle = bsSingle); + QtTextEdit.setReadOnly(TCustomMemo(AWinControl).ReadOnly); + QtTextEdit.setLineWrapMode(WordWrapMap[TCustomMemo(AWinControl).WordWrap]); + // create our FList helper + QtTextEdit.FList := TQtMemoStrings.Create(TCustomMemo(AWinControl)); + QtTextEdit.setScrollStyle(TCustomMemo(AWinControl).ScrollBars); + QtTextEdit.setTabChangesFocus(not TCustomMemo(AWinControl).WantTabs); + + QtTextEdit.AttachEvents; + + Result := TLCLIntfHandle(QtTextEdit); +end; + +class procedure TQtWSCustomRichMemo.SetParaAlignment( + const AWinControl: TWinControl; TextStart, TextLen: Integer; + const AAlign: TIntParaAlignment); +var + w : QTextEditH; + te : TQtTextEdit; + ss, sl : Integer; +begin + if not WSCheckHandleAllocated(AWinControl, 'SetParaAlignment') then + Exit; + te:=TQtTextEdit(AWinControl.Handle); + w:=QTextEditH(te.Widget); + + ss:=te.getSelectionStart; + sl:=te.getSelectionLength; + + te.setSelection(TextStart, TextLen); + + // alignment + QTextEdit_setAlignment(w, AlignmentMap[AAlign]); + + te.setSelection(ss, sl); +end; + +class function TQtWSCustomRichMemo.GetParaAlignment( + const AWinControl: TWinControl; TextStart: Integer; + var AAlign: TIntParaAlignment): Boolean; +var + te : TQtTextEdit; + al : QtAlignment; +begin + if not WSCheckHandleAllocated(AWinControl, 'GetParaAlignment') then begin + Result:=false; + Exit; + end; + te:=TQtTextEdit(AWinControl.Handle); + al:=QTextEdit_alignment(QTextEditH(te.Widget)); + if QtAlignLeading and al > 0 then AAlign:=paLeft + else if QtAlignTrailing and al > 0 then AAlign:=paRight + else if QtAlignCenter and al > 0 then AAlign:=paCenter + else if QtAlignJustify and al > 0 then AAlign:=paJustify + else AAlign:=paLeft; + Result:=true; +end; + +end. diff --git a/components/richmemo/richmemofactory.pas b/components/richmemo/richmemofactory.pas index 343724527..7ff8918d0 100644 --- a/components/richmemo/richmemofactory.pas +++ b/components/richmemo/richmemofactory.pas @@ -9,6 +9,7 @@ interface {$ifdef LCLCarbon}{$undef NoRichMemo}{$endif} {$ifdef LCLGtk2}{$undef NoRichMemo}{$endif} {$ifdef LCLCocoa}{$undef NoRichMemo}{$endif} +{$ifdef LCLQt}{$undef NoRichMemo}{$endif} uses WSLCLClasses, @@ -26,6 +27,7 @@ uses ,RichMemoRTF, Gtk2RichMemo {$endif} {$ifdef LCLCocoa},CocoaRichMemo{$endif} + {$ifdef LCLQt},QtRichMemo{$endif} ; function RegisterCustomRichMemo: Boolean; @@ -44,6 +46,7 @@ begin {$endif} {$endif} {$ifdef LCLCocoa}RegisterWSComponent(TCustomRichMemo, TCocoaWSCustomRichMemo);{$endif} + {$ifdef LCLQt}RegisterWSComponent(TCustomRichMemo, TQtWSCustomRichMemo);{$endif} {$ifdef NoRichMemo}RegisterWSComponent(TCustomRichMemo, TWSCustomRichMemo);{$endif} end; diff --git a/components/richmemo/richmemopackage.lpk b/components/richmemo/richmemopackage.lpk index 1dde8af4e..23eed58cb 100644 --- a/components/richmemo/richmemopackage.lpk +++ b/components/richmemo/richmemopackage.lpk @@ -9,8 +9,8 @@ - - + + @@ -28,7 +28,7 @@ "/> - + @@ -98,6 +98,10 @@ + + + +