From c369d3321e318cacc40369826e03cf1396d4c50e Mon Sep 17 00:00:00 2001 From: skalogryz Date: Sun, 20 Sep 2009 12:30:09 +0000 Subject: [PATCH] richmemo: added gtk2richmemo. No rich-text functionallity. Just to be compilable git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@962 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/richmemo/gtk2/gtk2richmemo.pas | 107 ++++++++++++++++++++++ components/richmemo/richmemofactory.pas | 2 + components/richmemo/richmemopackage.lpk | 8 +- components/richmemo/richmemopackage.pas | 2 +- 4 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 components/richmemo/gtk2/gtk2richmemo.pas diff --git a/components/richmemo/gtk2/gtk2richmemo.pas b/components/richmemo/gtk2/gtk2richmemo.pas new file mode 100644 index 000000000..c95a08865 --- /dev/null +++ b/components/richmemo/gtk2/gtk2richmemo.pas @@ -0,0 +1,107 @@ +{ + gtk2richmemo.pas + + Author: Dmitry 'skalogryz' Boyarintsev + + ***************************************************************************** + * * + * This file is part of the Lazarus Component Library (LCL) * + * * + * See the file COPYING.modifiedLGPL.txt, included in this distribution, * + * for details about the copyright. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * * + ***************************************************************************** +} + +unit Gtk2RichMemo; + +{$mode objfpc}{$H+} + +interface + +uses + // Bindings + gtk2, + // FCL + Classes, SysUtils, + // LCL + LCLType, Controls, + // Gtk2 widget + GtkDef, + GTKWinApiWindow, GtkGlobals, GtkProc, InterfaceBase, + GtkWSControls, + // RichMemo + WSRichMemo; + + { TGtk2WSCustomRichMemo } +type + TGtk2WSCustomRichMemo = class(TWSCustomRichMemo) + protected + class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); + published + class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; + end; + +implementation + +class procedure TGtk2WSCustomRichMemo.SetCallbacks( + const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); +begin + TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject)); +end; + +class function TGtk2WSCustomRichMemo.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; +var + Widget, + TempWidget: PGtkWidget; + WidgetInfo: PWidgetInfo; +begin + Widget := gtk_scrolled_window_new(nil, nil); + Result := TLCLIntfHandle(PtrUInt(Widget)); + if Result = 0 then Exit; + {$IFDEF DebugLCLComponents} + DebugGtkWidgets.MarkCreated(Widget,dbgsName(AWinControl)); + {$ENDIF} + + WidgetInfo := CreateWidgetInfo(Pointer(Result), AWinControl, AParams); + + TempWidget := gtk_text_view_new(); + gtk_container_add(PGtkContainer(Widget), TempWidget); + + GTK_WIDGET_UNSET_FLAGS(PGtkScrolledWindow(Widget)^.hscrollbar, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS(PGtkScrolledWindow(Widget)^.vscrollbar, GTK_CAN_FOCUS); + gtk_scrolled_window_set_policy(PGtkScrolledWindow(Widget), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + // add border for memo + gtk_scrolled_window_set_shadow_type(PGtkScrolledWindow(Widget), + BorderStyleShadowMap[TCustomControl(AWinControl).BorderStyle]); + + SetMainWidget(Widget, TempWidget); + GetWidgetInfo(Widget, True)^.CoreWidget := TempWidget; + + // gtk_text_buffer_set_text(gtk_text_view_get_buffer(PGtkTextView(TempWidget)), PChar(TCustomMemo(AWinControl).Text), -1); + gtk_text_view_set_editable(PGtkTextView(TempWidget), True); +{ //gtk_text_view_set_editable(PGtkTextView(TempWidget), not TCustomMemo(AWinControl).ReadOnly); + //gtk_text_view_set_justification(PGtkTextView(TempWidget), aGtkJustification[TCustomMemo(AWinControl).Alignment]); + if TCustomMemo(AWinControl).WordWrap then + gtk_text_view_set_wrap_mode(PGtkTextView(TempWidget), GTK_WRAP_WORD) + else + gtk_text_view_set_wrap_mode(PGtkTextView(TempWidget), GTK_WRAP_NONE);} + gtk_text_view_set_wrap_mode(PGtkTextView(TempWidget), GTK_WRAP_WORD); + + //gtk_text_view_set_accepts_tab(PGtkTextView(TempWidget), TCustomMemo(AWinControl).WantTabs); + gtk_text_view_set_accepts_tab(PGtkTextView(TempWidget), True); + + gtk_widget_show_all(Widget); + + Set_RC_Name(AWinControl, Widget); + SetCallbacks(Widget, WidgetInfo); +end; + +end. + diff --git a/components/richmemo/richmemofactory.pas b/components/richmemo/richmemofactory.pas index 0611f7ad2..56ab557f4 100644 --- a/components/richmemo/richmemofactory.pas +++ b/components/richmemo/richmemofactory.pas @@ -10,6 +10,7 @@ uses RichMemo {$ifdef LCLWin32},Win32RichMemo{$endif} {$ifdef LCLCarbon},CarbonRichMemo{$endif} + {$ifdef LCLGtk2},Gtk2RichMemo{$endif} ; function RegisterCustomRichMemo: Boolean; @@ -20,6 +21,7 @@ function RegisterCustomRichMemo: Boolean; alias : 'WSRegisterCustomRichMemo'; begin {$ifdef LCLWin32}RegisterWSComponent(TCustomRichMemo, TWin32WSCustomRichMemo);{$endif} {$ifdef LCLCarbon}RegisterWSComponent(TCustomRichMemo, TCarbonWSCustomRichMemo);{$endif} + {$ifdef LCLGtk2}RegisterWSComponent(TCustomRichMemo, TGtk2WSCustomRichMemo);{$endif} Result := False; end; diff --git a/components/richmemo/richmemopackage.lpk b/components/richmemo/richmemopackage.lpk index ea0dfa7c7..df49a62ae 100644 --- a/components/richmemo/richmemopackage.lpk +++ b/components/richmemo/richmemopackage.lpk @@ -8,7 +8,7 @@ - + @@ -22,7 +22,7 @@ "/> - + @@ -61,6 +61,10 @@ + + + + diff --git a/components/richmemo/richmemopackage.pas b/components/richmemo/richmemopackage.pas index 06c65b2af..9a77da231 100644 --- a/components/richmemo/richmemopackage.pas +++ b/components/richmemo/richmemopackage.pas @@ -7,7 +7,7 @@ unit richmemopackage; interface uses - RichMemoFactory, richmemoregister, LazarusPackageIntf; + RichMemoFactory, richmemoregister, Gtk2RichMemo, LazarusPackageIntf; implementation