{ ***************************************************************************** * Gtk3WSStdCtrls.pp * * ------------- * * * * * ***************************************************************************** ***************************************************************************** This file is part of the Lazarus Component Library (LCL) See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the license. ***************************************************************************** } unit Gtk3WSStdCtrls; {$mode objfpc}{$H+} {$I gtk3defines.inc} interface //////////////////////////////////////////////////// // I M P O R T A N T //////////////////////////////////////////////////// // 1) Only class methods allowed // 2) Class methods have to be published and virtual // 3) To get as little as posible circles, the uses // clause should contain only those LCL units // needed for registration. WSxxx units are OK // 4) To improve speed, register only classes in the // initialization section which actually // implement something // 5) To enable your XXX widgetset units, look at // the uses clause of the XXXintf.pp //////////////////////////////////////////////////// uses //////////////////////////////////////////////////// // To get as little as posible circles, // uncomment only when needed for registration //////////////////////////////////////////////////// Graphics, Controls, StdCtrls, LCLType, LCLProc, //////////////////////////////////////////////////// WSLCLClasses, WSControls, WSStdCtrls, WSProc, Classes, WSFactory, Clipbrd, gtk3widgets, gtk3procs, LazGdk3; type { TGtk3WSScrollBar } TGtk3WSScrollBar = class(TWSScrollBar) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure SetParams(const AScrollBar: TCustomScrollBar); override; class procedure SetKind(const AScrollBar: TCustomScrollBar; const AIsHorizontal: Boolean); override; end; TGtk3WSScrollBarClass = class of TGtk3WSScrollBar; { TGtk3WSCustomGroupBox } TGtk3WSCustomGroupBox = class(TWSCustomGroupBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; end; { TGtk3WSGroupBox } TGtk3WSGroupBox = class(TGtk3WSCustomGroupBox) published end; { TGtk3WSCustomComboBox } TGtk3WSCustomComboBox = class(TWSCustomComboBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class function GetDroppedDown(const ACustomComboBox: TCustomComboBox): Boolean; override; class function GetSelStart(const ACustomComboBox: TCustomComboBox): integer; override; class function GetSelLength(const ACustomComboBox: TCustomComboBox): integer; override; class function GetItemIndex(const ACustomComboBox: TCustomComboBox): integer; override; class function GetMaxLength(const ACustomComboBox: TCustomComboBox): integer; override; class procedure SetArrowKeysTraverseList(const ACustomComboBox: TCustomComboBox; NewTraverseList: boolean); override; class procedure SetDropDownCount(const ACustomComboBox: TCustomComboBox; NewCount: Integer); override; class procedure SetDroppedDown(const ACustomComboBox: TCustomComboBox; ADroppedDown: Boolean); override; class procedure SetSelStart(const ACustomComboBox: TCustomComboBox; NewStart: integer); override; class procedure SetSelLength(const ACustomComboBox: TCustomComboBox; NewLength: integer); override; class procedure SetItemIndex(const ACustomComboBox: TCustomComboBox; NewIndex: integer); override; class procedure SetMaxLength(const ACustomComboBox: TCustomComboBox; NewLength: integer); override; class procedure SetStyle(const ACustomComboBox: TCustomComboBox; NewStyle: TComboBoxStyle); override; class function GetItems(const ACustomComboBox: TCustomComboBox): TStrings; override; class procedure Sort(const ACustomComboBox: TCustomComboBox; AList: TStrings; IsSorted: boolean); override; class function GetItemHeight(const ACustomComboBox: TCustomComboBox): Integer; override; class procedure SetItemHeight(const ACustomComboBox: TCustomComboBox; const AItemHeight: Integer); override; end; TGtk3WSCustomComboBoxClass = class of TGtk3WSCustomComboBox; { TGtk3WSComboBox } TGtk3WSComboBox = class(TGtk3WSCustomComboBox) published end; { TGtk3WSCustomListBox } TGtk3WSCustomListBox = class(TWSCustomListBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class function GetIndexAtXY(const ACustomListBox: TCustomListBox; X, Y: integer): integer; override; class function GetItemIndex(const ACustomListBox: TCustomListBox): integer; override; class function GetItemRect(const ACustomListBox: TCustomListBox; Index: integer; var ARect: TRect): boolean; override; class function GetScrollWidth(const ACustomListBox: TCustomListBox): Integer; override; class function GetSelCount(const ACustomListBox: TCustomListBox): integer; override; class function GetSelected(const ACustomListBox: TCustomListBox; const AIndex: integer): boolean; override; class function GetStrings(const ACustomListBox: TCustomListBox): TStrings; override; class procedure FreeStrings(var AStrings: TStrings); override; class function GetTopIndex(const ACustomListBox: TCustomListBox): integer; override; class procedure SelectItem(const ACustomListBox: TCustomListBox; AIndex: integer; ASelected: boolean); override; class procedure SetBorder(const ACustomListBox: TCustomListBox); override; class procedure SetColumnCount(const ACustomListBox: TCustomListBox; ACount: Integer); override; class procedure SetItemIndex(const ACustomListBox: TCustomListBox; const AIndex: integer); override; class procedure SetScrollWidth(const ACustomListBox: TCustomListBox; const AScrollWidth: Integer); override; class procedure SetSelectionMode(const ACustomListBox: TCustomListBox; const AExtendedSelect, AMultiSelect: boolean); override; class procedure SetStyle(const ACustomListBox: TCustomListBox); override; class procedure SetSorted(const ACustomListBox: TCustomListBox; AList: TStrings; ASorted: boolean); override; class procedure SetTopIndex(const ACustomListBox: TCustomListBox; const NewTopIndex: integer); override; end; TGtk3WSCustomListBoxClass = class of TGtk3WSCustomListBox; { TWSListBox } TGtk3WSListBox = class(TGtk3WSCustomListBox) published end; { TGtk3WSCustomEdit } TGtk3WSCustomEdit = class(TWSCustomEdit) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class function GetCanUndo(const ACustomEdit: TCustomEdit): Boolean; override; class function GetCaretPos(const ACustomEdit: TCustomEdit): TPoint; override; class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override; class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override; class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override; class procedure SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); override; class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); override; class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override; class procedure SetHideSelection(const ACustomEdit: TCustomEdit; NewHideSelection: Boolean); override; class procedure SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; class procedure SetPasswordChar(const ACustomEdit: TCustomEdit; NewChar: char); override; class procedure SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); override; class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; class procedure Cut(const ACustomEdit: TCustomEdit); override; class procedure Copy(const ACustomEdit: TCustomEdit); override; class procedure Paste(const ACustomEdit: TCustomEdit); override; class procedure Undo(const ACustomEdit: TCustomEdit); override; end; TGtk3WSCustomEditClass = class of TGtk3WSCustomEdit; { TGtk3WSCustomMemo } TGtk3WSCustomMemo = class(TWSCustomMemo) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override; class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override; class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override; class procedure SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); override; class procedure SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); override; class function GetCanUndo(const ACustomEdit: TCustomEdit): Boolean; override; class function GetCaretPos(const ACustomEdit: TCustomEdit): TPoint; override; class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override; class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override; class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override; class procedure SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); override; class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); override; class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override; class procedure SetHideSelection(const ACustomEdit: TCustomEdit; NewHideSelection: Boolean); override; class procedure SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; class procedure SetPasswordChar(const ACustomEdit: TCustomEdit; NewChar: char); override; class procedure SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); override; class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; end; TGtk3WSCustomMemoClass = class of TGtk3WSCustomMemo; { TGtk3WSEdit } TGtk3WSEdit = class(TGtk3WSCustomEdit) published end; { TGtk3WSMemo } TGtk3WSMemo = class(TGtk3WSCustomMemo) published end; { TGtk3WSCustomStaticText } TGtk3WSCustomStaticText = class(TWSCustomStaticText) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class procedure SetAlignment(const ACustomStaticText: TCustomStaticText; const NewAlignment: TAlignment); override; class procedure SetStaticBorderStyle(const ACustomStaticText: TCustomStaticText; const NewBorderStyle: TStaticBorderStyle); override; end; TGtk3WSCustomStaticTextClass = class of TGtk3WSCustomStaticText; { TGtk3WSStaticText } TGtk3WSStaticText = class(TGtk3WSCustomStaticText) published end; { TGtk3WSButtonControl } TGtk3WSButtonControl = class(TWSButtonControl) published class function GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; override; end; { TGtk3WSButton } TGtk3WSButton = class(TWSButton) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class procedure SetDefault(const AButton: TCustomButton; ADefault: Boolean); override; class procedure SetShortCut(const AButton: TCustomButton; const ShortCutK1, ShortCutK2: TShortCut); override; end; TGtk3WSButtonClass = class of TGtk3WSButton; { TGtk3WSCustomCheckBox } TGtk3WSCustomCheckBox = class(TWSCustomCheckBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; class function RetrieveState(const ACustomCheckBox: TCustomCheckBox): TCheckBoxState; override; class procedure SetShortCut(const ACustomCheckBox: TCustomCheckBox; const ShortCutK1, ShortCutK2: TShortCut); override; class procedure SetState(const ACustomCheckBox: TCustomCheckBox; const NewState: TCheckBoxState); override; end; TGtk3WSCustomCheckBoxClass = class of TGtk3WSCustomCheckBox; { TGtk3WSCheckBox } TGtk3WSCheckBox = class(TGtk3WSCustomCheckBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; end; { TWSToggleBox } { TGtk3WSToggleBox } TGtk3WSToggleBox = class(TGtk3WSCustomCheckBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; end; { TGtk3WSRadioButton } TGtk3WSRadioButton = class(TGtk3WSCustomCheckBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; end; implementation uses LResources, gtk3private, LazGObject2; { TGtk3WSCustomGroupBox } class function TGtk3WSCustomGroupBox.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AGroupBox: TGtk3GroupBox; begin AGroupBox := TGtk3GroupBox.Create(AWinControl, AParams); Result := TLCLIntfHandle(AGroupBox); end; class procedure TGtk3WSCustomGroupBox.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3GroupBox(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; { TGtk3WSRadioButton } class function TGtk3WSRadioButton.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var ARadioButton: TGtk3RadioButton; begin ARadioButton := TGtk3RadioButton.Create(AWinControl, AParams); Result := TLCLIntfHandle(ARadioButton); end; { TGtk3WSToggleBox } class function TGtk3WSToggleBox.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AToggleBox: TGtk3ToggleButton; begin AToggleBox := TGtk3ToggleButton.Create(AWinControl, AParams); Result := TLCLIntfHandle(AToggleBox); end; { TGtk3WSCheckBox } class function TGtk3WSCheckBox.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var ACheckBox: TGtk3CheckBox; begin ACheckBox := TGtk3CheckBox.Create(AWinControl, AParams); Result := TLCLIntfHandle(ACheckBox); end; { TGtk3WSScrollBar } class function TGtk3WSScrollBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AGtkScrollbar: TGtk3ScrollBar; begin AGtkScrollBar := TGtk3ScrollBar.Create(AWinControl, AParams); Result:= TLCLIntfHandle(AGtkScrollBar); end; class procedure TGtk3WSScrollBar.SetParams(const AScrollBar: TCustomScrollBar); begin if not WSCheckHandleAllocated(AScrollBar, 'SetParams') then Exit; TGtk3ScrollBar(AScrollBar.Handle).BeginUpdate; TGtk3ScrollBar(AScrollBar.Handle).SetParams; TGtk3ScrollBar(AScrollBar.Handle).EndUpdate; end; class procedure TGtk3WSScrollBar.SetKind(const AScrollBar: TCustomScrollBar; const AIsHorizontal: Boolean); begin if not WSCheckHandleAllocated(AScrollBar, 'SetKind') then Exit; RecreateWnd(AScrollBar); end; { TGtk3WSCustomListBox } class function TGtk3WSCustomListBox.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AListBox: TGtk3ListBox; begin AListBox := TGtk3ListBox.Create(AWinControl, AParams); AListBox.BorderStyle := TCustomListBox(AWinControl).BorderStyle; Result := TLCLIntfHandle(AListBox); end; class function TGtk3WSCustomListBox.GetIndexAtXY( const ACustomListBox: TCustomListBox; X, Y: integer): integer; begin Result := -1; end; class function TGtk3WSCustomListBox.GetItemIndex(const ACustomListBox: TCustomListBox): integer; begin Result := 0; if not WSCheckHandleAllocated(ACustomListBox, 'GetItemIndex') then Exit; Result := TGtk3ListBox(ACustomListBox.Handle).ItemIndex; end; class function TGtk3WSCustomListBox.GetItemRect( const ACustomListBox: TCustomListBox; Index: integer; var ARect: TRect ): boolean; begin FillChar(ARect,SizeOf(ARect),0); Result:=false; end; class function TGtk3WSCustomListBox.GetScrollWidth( const ACustomListBox: TCustomListBox): Integer; begin Result := 0; end; class function TGtk3WSCustomListBox.GetSelCount(const ACustomListBox: TCustomListBox): integer; begin Result := 0; if not WSCheckHandleAllocated(ACustomListBox, 'GetSelCount') then Exit; Result := TGtk3ListBox(ACustomListBox.Handle).GetSelCount; end; class function TGtk3WSCustomListBox.GetSelected(const ACustomListBox: TCustomListBox; const AIndex: integer): boolean; begin if not WSCheckHandleAllocated(ACustomListBox, 'GetSelected') then Exit(False); //DebugLn('WARNING: TGtk3WSCustomListBox.GetSelected is not implemented.'); Result := TGtk3ListBox(ACustomListBox.Handle).GetItemSelected(AIndex); end; class function TGtk3WSCustomListBox.GetStrings(const ACustomListBox: TCustomListBox): TStrings; begin if not WSCheckHandleAllocated(ACustomListBox, 'GetStrings') then Exit; //DebugLn('TGtk3WSCustomListBox.GetStrings creating TGtkListStoreStringList ...'); Result := TGtkListStoreStringList(g_object_get_data(PGObject(TGtk3ListBox(ACustomListBox.Handle).GetContainerWidget), GtkListItemLCLListTag)); TGtkListStoreStringList(Result).Sorted := ACustomListBox.Sorted; end; class procedure TGtk3WSCustomListBox.FreeStrings(var AStrings: TStrings); begin AStrings.Free; AStrings := nil; end; class function TGtk3WSCustomListBox.GetTopIndex(const ACustomListBox: TCustomListBox): integer; begin Result := 0; end; class procedure TGtk3WSCustomListBox.SelectItem(const ACustomListBox: TCustomListBox; AIndex: integer; ASelected: boolean); begin if not WSCheckHandleAllocated(ACustomListBox, 'SelectItem') then Exit; TGtk3ListBox(ACustomListBox.Handle).BeginUpdate; TGtk3ListBox(ACustomListBox.Handle).SelectItem(AIndex, ASelected); TGtk3ListBox(ACustomListBox.Handle).EndUpdate; end; class procedure TGtk3WSCustomListBox.SetBorder(const ACustomListBox: TCustomListBox); begin end; class procedure TGtk3WSCustomListBox.SetColumnCount(const ACustomListBox: TCustomListBox; ACount: Integer); begin end; class procedure TGtk3WSCustomListBox.SetItemIndex(const ACustomListBox: TCustomListBox; const AIndex: integer); begin if not WSCheckHandleAllocated(ACustomListBox, 'SetItemIndex') then Exit; TGtk3ListBox(ACustomListBox.Handle).BeginUpdate; TGtk3ListBox(ACustomListBox.Handle).ItemIndex := AIndex; TGtk3ListBox(ACustomListBox.Handle).EndUpdate; end; class procedure TGtk3WSCustomListBox.SetScrollWidth( const ACustomListBox: TCustomListBox; const AScrollWidth: Integer); begin end; class procedure TGtk3WSCustomListBox.SetSelectionMode(const ACustomListBox: TCustomListBox; const AExtendedSelect, AMultiSelect: boolean); begin if not WSCheckHandleAllocated(ACustomListBox, 'SetSelectionMode') then Exit; TGtk3ListBox(ACustomListBox.Handle).MultiSelect := AMultiSelect; end; class procedure TGtk3WSCustomListBox.SetStyle(const ACustomListBox: TCustomListBox); begin if not WSCheckHandleAllocated(ACustomListBox, 'SetStyle') then Exit; if TGtk3ListBox(ACustomListBox.Handle).ListBoxStyle <> ACustomListBox.Style then RecreateWnd(ACustomListBox); end; class procedure TGtk3WSCustomListBox.SetSorted(const ACustomListBox: TCustomListBox; AList: TStrings; ASorted: boolean); begin end; class procedure TGtk3WSCustomListBox.SetTopIndex(const ACustomListBox: TCustomListBox; const NewTopIndex: integer); begin if not WSCheckHandleAllocated(ACustomListBox, 'SetTopIndex') then Exit; TGtk3ListBox(ACustomListBox.Handle).SetTopIndex(NewTopIndex); end; { TGtk3WSCustomComboBox } class function TGtk3WSCustomComboBox.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AGtkCombo: TGtk3ComboBox; begin {$IFDEF GTK3DEBUGCORE} DebugLn('TGtk3WSCustomComboBox.CreateHandle'); {$ENDIF} AGtkCombo := TGtk3ComboBox.Create(AWinControl, AParams); Result := TLCLIntfHandle(AGtkCombo); {$IFDEF GTK3DEBUGCORE} DebugLn('TGtk3WSCustomComboBox.CreateHandle Handle=',dbgs(Result)); {$ENDIF} end; class procedure TGtk3WSCustomComboBox.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3ComboBox(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class function TGtk3WSCustomComboBox.GetDroppedDown( const ACustomComboBox: TCustomComboBox): Boolean; begin Result := False; if not WSCheckHandleAllocated(ACustomComboBox, 'GetDroppedDown') then Exit; Result := TGtk3ComboBox(ACustomComboBox.Handle).DroppedDown; end; class function TGtk3WSCustomComboBox.GetSelStart(const ACustomComboBox: TCustomComboBox ): integer; begin Result := -1; end; class function TGtk3WSCustomComboBox.GetSelLength(const ACustomComboBox: TCustomComboBox ): integer; begin Result := 0; end; class function TGtk3WSCustomComboBox.GetItemIndex(const ACustomComboBox: TCustomComboBox ): integer; begin Result := -1; if not WSCheckHandleAllocated(ACustomComboBox, 'GetItemIndex') then Exit; Result := TGtk3ComboBox(ACustomComboBox.Handle).ItemIndex; end; class function TGtk3WSCustomComboBox.GetMaxLength(const ACustomComboBox: TCustomComboBox ): integer; begin Result := 0; end; class procedure TGtk3WSCustomComboBox.SetArrowKeysTraverseList( const ACustomComboBox: TCustomComboBox; NewTraverseList: boolean); begin end; class procedure TGtk3WSCustomComboBox.SetDropDownCount( const ACustomComboBox: TCustomComboBox; NewCount: Integer); begin end; class procedure TGtk3WSCustomComboBox.SetDroppedDown( const ACustomComboBox: TCustomComboBox; ADroppedDown: Boolean); begin if not WSCheckHandleAllocated(ACustomComboBox, 'SetDroppedDown') then Exit; TGtk3ComboBox(ACustomComboBox.Handle).DroppedDown := ADroppedDown; end; class procedure TGtk3WSCustomComboBox.SetMaxLength(const ACustomComboBox: TCustomComboBox; NewLength: integer); begin end; class procedure TGtk3WSCustomComboBox.SetSelStart(const ACustomComboBox: TCustomComboBox; NewStart: integer); begin end; class procedure TGtk3WSCustomComboBox.SetSelLength(const ACustomComboBox: TCustomComboBox; NewLength: integer); begin end; class procedure TGtk3WSCustomComboBox.SetItemIndex(const ACustomComboBox: TCustomComboBox; NewIndex: integer); begin if not WSCheckHandleAllocated(ACustomComboBox, 'SetItemIndex') then Exit; // DebugLn('TGtk3WSCustomComboBox.SetItemIndex ',dbgs(NewIndex)); TGtk3ComboBox(ACustomComboBox.Handle).BeginUpdate; TGtk3ComboBox(ACustomComboBox.Handle).ItemIndex := NewIndex; TGtk3ComboBox(ACustomComboBox.Handle).EndUpdate; end; class procedure TGtk3WSCustomComboBox.SetStyle(const ACustomComboBox: TCustomComboBox; NewStyle: TComboBoxStyle); begin end; class function TGtk3WSCustomComboBox.GetItems(const ACustomComboBox: TCustomComboBox ): TStrings; begin Result := nil; if not WSCheckHandleAllocated(ACustomComboBox, 'GetItems') then begin Exit; end; // DebugLn('TGtk3WSCustomComboBox.GetItems creating TGtkListStoreStringList ...'); Result := TGtkListStoreStringList(g_object_get_data(PGObject(TGtk3ComboBox(ACustomComboBox.Handle).GetContainerWidget), GtkListItemLCLListTag)); end; class procedure TGtk3WSCustomComboBox.Sort(const ACustomComboBox: TCustomComboBox; AList: TStrings; IsSorted: boolean); begin end; class function TGtk3WSCustomComboBox.GetItemHeight(const ACustomComboBox: TCustomComboBox): Integer; begin Result := 0; end; class procedure TGtk3WSCustomComboBox.SetItemHeight(const ACustomComboBox: TCustomComboBox; const AItemHeight: Integer); begin end; { TGtk3WSCustomEdit } class function TGtk3WSCustomEdit.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AGtkEntry: TGtk3Entry; begin AGtkEntry := TGtk3Entry.Create(AWinControl, AParams); Result := TLCLIntfHandle(AGtkEntry); end; class procedure TGtk3WSCustomEdit.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3Entry(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class function TGtk3WSCustomEdit.GetCanUndo(const ACustomEdit: TCustomEdit ): Boolean; begin Result := False; end; class function TGtk3WSCustomEdit.GetCaretPos(const ACustomEdit: TCustomEdit): TPoint; begin Result := Point(0, 0); if not WSCheckHandleAllocated(ACustomEdit, 'GetCaretPos') then Exit; Result := TGtk3Editable(ACustomEdit.Handle).CaretPos; end; class function TGtk3WSCustomEdit.GetSelStart(const ACustomEdit: TCustomEdit): integer; begin result := -1; if not WSCheckHandleAllocated(ACustomEdit, 'GetSelStart') then Exit; Result := TGtk3Editable(ACustomEdit.Handle).getSelStart; end; class function TGtk3WSCustomEdit.GetSelLength(const ACustomEdit: TCustomEdit): integer; begin result := 0; if not WSCheckHandleAllocated(ACustomEdit, 'GetSelLength') then Exit; Result := TGtk3Editable(ACustomEdit.Handle).getSelLength; end; class procedure TGtk3WSCustomEdit.SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetAlignment') then Exit; TGtk3Editable(ACustomEdit.Handle).BeginUpdate; TGtk3Entry(ACustomEdit.Handle).Alignment := AAlignment; TGtk3Editable(ACustomEdit.Handle).EndUpdate; end; class procedure TGtk3WSCustomEdit.SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); begin if not WSCheckHandleAllocated(ACustomEdit, 'GetCaretPos') then Exit; TGtk3Editable(ACustomEdit.Handle).BeginUpdate; TGtk3Editable(ACustomEdit.Handle).CaretPos := NewPos; TGtk3Editable(ACustomEdit.Handle).EndUpdate; end; class procedure TGtk3WSCustomEdit.SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetCharCase') then Exit; end; class procedure TGtk3WSCustomEdit.SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetEchoMode') then Exit; if NewMode in [emNone,emPassword] then begin TGtk3Entry(ACustomEdit.Handle).SetEchoMode(False); SetPasswordChar(ACustomEdit, ACustomEdit.PasswordChar); end else begin TGtk3Entry(ACustomEdit.Handle).SetEchoMode(True); end; end; class procedure TGtk3WSCustomEdit.SetHideSelection(const ACustomEdit: TCustomEdit; NewHideSelection: Boolean); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetHideSelection') then Exit; end; class procedure TGtk3WSCustomEdit.SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetMaxLength') then Exit; TGtk3Entry(ACustomEdit.Handle).SetMaxLength(NewLength); end; class procedure TGtk3WSCustomEdit.SetPasswordChar(const ACustomEdit: TCustomEdit; NewChar: char); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetPasswordChar') then Exit; TGtk3Entry(ACustomEdit.Handle).SetPasswordChar(NewChar); end; class procedure TGtk3WSCustomEdit.SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetReadOnly') then Exit; TGtk3Editable(ACustomEdit.Handle).ReadOnly := NewReadOnly; end; class procedure TGtk3WSCustomEdit.SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetSelStart') then Exit; TGtk3Editable(ACustomEdit.Handle).BeginUpdate; TGtk3Editable(ACustomEdit.Handle).SetSelStart(NewStart); TGtk3Editable(ACustomEdit.Handle).EndUpdate; end; class procedure TGtk3WSCustomEdit.SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetSelLength') then Exit; TGtk3Editable(ACustomEdit.Handle).BeginUpdate; TGtk3Editable(ACustomEdit.Handle).SetSelLength(NewLength); TGtk3Editable(ACustomEdit.Handle).EndUpdate; end; class procedure TGtk3WSCustomEdit.Cut(const ACustomEdit: TCustomEdit); begin ACustomEdit.CopyToClipboard; ACustomEdit.ClearSelection; end; class procedure TGtk3WSCustomEdit.Copy(const ACustomEdit: TCustomEdit); begin if (ACustomEdit.EchoMode = emNormal) and (ACustomEdit.SelLength > 0) then Clipboard.AsText := ACustomEdit.SelText; end; class procedure TGtk3WSCustomEdit.Paste(const ACustomEdit: TCustomEdit); begin if Clipboard.HasFormat(CF_TEXT) then ACustomEdit.SelText := Clipboard.AsText; end; class procedure TGtk3WSCustomEdit.Undo(const ACustomEdit: TCustomEdit); begin // nothing end; { TGtk3WSCustomMemo } class function TGtk3WSCustomMemo.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AGtkMemo: TGtk3Memo; begin AGtkMemo := TGtk3Memo.Create(AWinControl, AParams); AGtkMemo.BorderStyle := TCustomMemo(AWinControl).BorderStyle; Result := TLCLIntfHandle(AGtkMemo); end; class procedure TGtk3WSCustomMemo.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3Memo(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class function TGtk3WSCustomMemo.GetStrings(const ACustomMemo: TCustomMemo ): TStrings; begin Result := TGtk3MemoStrings.Create(ACustomMemo); end; class procedure TGtk3WSCustomMemo.SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); var AScrollStyle: TPoint; begin if not WSCheckHandleAllocated(ACustomMemo, 'SetScrollBars') then Exit; AScrollStyle := Gtk3TranslateScrollStyle(ACustomMemo.ScrollBars); TGtk3Memo(ACustomMemo.Handle).BeginUpdate; TGtk3Memo(ACustomMemo.Handle).HScrollBarPolicy := AScrollStyle.X; TGtk3Memo(ACustomMemo.Handle).VScrollBarPolicy := AScrollStyle.Y; TGtk3Memo(ACustomMemo.Handle).EndUpdate; end; class procedure TGtk3WSCustomMemo.SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); begin if not WSCheckHandleAllocated(ACustomMemo, 'SetWantTabs') then Exit; TGtk3Memo(ACustomMemo.Handle).WantTabs := NewWantTabs; end; class procedure TGtk3WSCustomMemo.SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); begin // no way end; class procedure TGtk3WSCustomMemo.SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); begin if not WSCheckHandleAllocated(ACustomMemo, 'SetWordWrap') then Exit; TGtk3Memo(ACustomMemo.Handle).WordWrap := NewWordWrap; end; class function TGtk3WSCustomMemo.GetCanUndo(const ACustomEdit: TCustomEdit ): Boolean; begin Result := False; end; class function TGtk3WSCustomMemo.GetCaretPos(const ACustomEdit: TCustomEdit ): TPoint; begin Result := Point(0, 0); end; class function TGtk3WSCustomMemo.GetSelStart(const ACustomEdit: TCustomEdit ): integer; begin Result := 0; end; class function TGtk3WSCustomMemo.GetSelLength(const ACustomEdit: TCustomEdit ): integer; begin Result := 0; end; class procedure TGtk3WSCustomMemo.SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetAlignment') then Exit; TGtk3Memo(ACustomEdit.Handle).Alignment := AAlignment; end; class procedure TGtk3WSCustomMemo.SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); begin // inherited SetCaretPos(ACustomEdit, NewPos); end; class procedure TGtk3WSCustomMemo.SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); begin // inherited SetCharCase(ACustomEdit, NewCase); end; class procedure TGtk3WSCustomMemo.SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); begin // inherited SetEchoMode(ACustomEdit, NewMode); end; class procedure TGtk3WSCustomMemo.SetHideSelection( const ACustomEdit: TCustomEdit; NewHideSelection: Boolean); begin // inherited SetHideSelection(ACustomEdit, NewHideSelection); end; class procedure TGtk3WSCustomMemo.SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); begin // inherited SetMaxLength(ACustomEdit, NewLength); end; class procedure TGtk3WSCustomMemo.SetPasswordChar( const ACustomEdit: TCustomEdit; NewChar: char); begin // inherited SetPasswordChar(ACustomEdit, NewChar); end; class procedure TGtk3WSCustomMemo.SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); begin if not WSCheckHandleAllocated(ACustomEdit, 'SetReadOnly') then Exit; TGtk3Memo(ACustomEdit.Handle).ReadOnly := NewReadOnly; end; class procedure TGtk3WSCustomMemo.SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); begin // inherited SetSelStart(ACustomEdit, NewStart); end; class procedure TGtk3WSCustomMemo.SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); begin // inherited SetSelLength(ACustomEdit, NewLength); end; { TGtk3WSCustomStaticText } class function TGtk3WSCustomStaticText.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AStaticText: TGtk3StaticText; begin AStaticText := TGtk3StaticText.Create(AWinControl, AParams); Result := TLCLIntfHandle(AStaticText); end; class procedure TGtk3WSCustomStaticText.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3StaticText(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class procedure TGtk3WSCustomStaticText.SetAlignment(const ACustomStaticText: TCustomStaticText; const NewAlignment: TAlignment); begin if not WSCheckHandleAllocated(ACustomStaticText, 'SetAlignment') then Exit; TGtk3StaticText(ACustomStaticText.Handle).Alignment := NewAlignment; end; class procedure TGtk3WSCustomStaticText.SetStaticBorderStyle( const ACustomStaticText: TCustomStaticText; const NewBorderStyle: TStaticBorderStyle); begin if not WSCheckHandleAllocated(ACustomStaticText, 'SetStaticBorderStyle') then Exit; TGtk3StaticText(ACustomStaticText.Handle).StaticBorderStyle := NewBorderStyle; end; { TGtk3WSButton } class function TGtk3WSButton.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var AButton: TGtk3Button; begin {$IFDEF GTK3DEBUGCORE} DebugLn('TGtk3WSButton.CreateHandle'); {$ENDIF} AButton := TGtk3Button.Create(AWinControl, AParams); Result := TLCLIntfHandle(AButton); {$IFDEF GTK3DEBUGCORE} DebugLn('TGtk3WSButton.CreateHandle Handle=',dbgs(Result)); {$ENDIF} end; class procedure TGtk3WSButton.GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3Button(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class procedure TGtk3WSButton.SetDefault(const AButton: TCustomButton; ADefault: Boolean); begin if not WSCheckHandleAllocated(AButton, 'SetDefault') then Exit; TGtk3Button(AButton.Handle).SetDefault(ADefault); end; class procedure TGtk3WSButton.SetShortCut(const AButton: TCustomButton; const ShortCutK1, ShortCutK2: TShortCut); begin; //TODO: end; { TGtk3WSCustomCheckBox } class function TGtk3WSCustomCheckBox.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; var ACheckBox: TGtk3CheckBox; begin ACheckBox := TGtk3CheckBox.Create(AWinControl, AParams); Result := TLCLIntfHandle(ACheckBox); end; class procedure TGtk3WSCustomCheckBox.GetPreferredSize( const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then Exit; TGtk3CheckBox(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); end; class function TGtk3WSCustomCheckBox.RetrieveState(const ACustomCheckBox: TCustomCheckBox): TCheckBoxState; begin Result := cbUnchecked; if not WSCheckHandleAllocated(ACustomCheckBox, 'RetrieveState') then Exit; Result := TGtk3CheckBox(ACustomCheckBox.Handle).State; end; class procedure TGtk3WSCustomCheckBox.SetShortCut(const ACustomCheckBox: TCustomCheckBox; const ShortCutK1, ShortCutK2: TShortCut); begin //TODO: end; class procedure TGtk3WSCustomCheckBox.SetState(const ACustomCheckBox: TCustomCheckBox; const NewState: TCheckBoxState); begin if not WSCheckHandleAllocated(ACustomCheckBox, 'SetState') then Exit; TGtk3CheckBox(ACustomCheckBox.Handle).State := NewState; end; { TGtk3WSButtonControl } class function TGtk3WSButtonControl.GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; begin Result := DefBtnColors[ADefaultColorType]; end; end.