mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 15:59:13 +02:00
gtk: split gtk1 and gtk2 groupbox code
git-svn-id: trunk@20288 -
This commit is contained in:
parent
6cb0aa7f54
commit
50ad4d8937
@ -632,23 +632,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
csGroupBox:
|
|
||||||
{$IFDEF Gtk1}
|
|
||||||
if AText <> '' then
|
|
||||||
gtk_frame_set_label(pgtkFrame(P), pLabel)
|
|
||||||
else
|
|
||||||
gtk_frame_set_label(pgtkFrame(P), nil);
|
|
||||||
{$ELSE}
|
|
||||||
begin
|
|
||||||
aLabel := Ampersands2Underscore(pLabel);
|
|
||||||
try
|
|
||||||
gtk_label_set_text_with_mnemonic(PGtkLabel(gtk_frame_get_label_widget(pgtkFrame(P))), aLabel);
|
|
||||||
finally
|
|
||||||
StrDispose(aLabel);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
csEdit : begin
|
csEdit : begin
|
||||||
LockOnChange(PGtkObject(p),+1);
|
LockOnChange(PGtkObject(p),+1);
|
||||||
gtk_entry_set_text(pGtkEntry(P), pLabel);
|
gtk_entry_set_text(pGtkEntry(P), pLabel);
|
||||||
|
@ -60,10 +60,13 @@ type
|
|||||||
protected
|
protected
|
||||||
class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual;
|
class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual;
|
||||||
published
|
published
|
||||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
{$ifdef gtk1}
|
||||||
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||||
class procedure GetPreferredSize(const AWinControl: TWinControl;
|
class procedure GetPreferredSize(const AWinControl: TWinControl;
|
||||||
var PreferredWidth, PreferredHeight: integer;
|
var PreferredWidth, PreferredHeight: integer;
|
||||||
WithThemeSpace: Boolean); override;
|
WithThemeSpace: Boolean); override;
|
||||||
|
class procedure SetText(const AWinControl: TWinControl; const AText: string); override;
|
||||||
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TGtkWSGroupBox }
|
{ TGtkWSGroupBox }
|
||||||
@ -1911,50 +1914,25 @@ begin
|
|||||||
TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject));
|
TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$ifdef gtk1}
|
||||||
class function TGtkWSCustomGroupBox.CreateHandle(
|
class function TGtkWSCustomGroupBox.CreateHandle(
|
||||||
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
||||||
var
|
var
|
||||||
{$if not defined(gtk1) and not defined(GtkFixedWithWindow)}
|
|
||||||
EventBox: PGtkWidget;
|
|
||||||
{$endif}
|
|
||||||
TempWidget: PGTKWidget; // pointer to gtk-widget (local use when neccessary)
|
TempWidget: PGTKWidget; // pointer to gtk-widget (local use when neccessary)
|
||||||
p : pointer; // ptr to the newly created GtkWidget
|
p : pointer; // ptr to the newly created GtkWidget
|
||||||
{$IFDEF Gtk2}
|
|
||||||
L : PGTKWidget;
|
|
||||||
{$ENDIF}
|
|
||||||
Allocation: TGTKAllocation;
|
Allocation: TGTKAllocation;
|
||||||
WidgetInfo: PWidgetInfo;
|
WidgetInfo: PWidgetInfo;
|
||||||
begin
|
begin
|
||||||
{$IFDEF Gtk1}
|
|
||||||
if AParams.Caption <> '' then
|
if AParams.Caption <> '' then
|
||||||
P := gtk_frame_new(AParams.Caption)
|
P := gtk_frame_new(AParams.Caption)
|
||||||
else
|
else
|
||||||
P := gtk_frame_new(nil);
|
P := gtk_frame_new(nil);
|
||||||
{$ELSE}
|
|
||||||
L := gtk_label_new(AParams.Caption);
|
|
||||||
gtk_widget_show(L);
|
|
||||||
P := gtk_frame_new(nil);
|
|
||||||
gtk_frame_set_label_widget(GTK_FRAME(P), GTK_WIDGET(L));
|
|
||||||
{$ENDIF}
|
|
||||||
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
|
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
|
||||||
{$if defined(gtk1) or defined(GtkFixedWithWindow)}
|
|
||||||
TempWidget := CreateFixedClientWidget;
|
TempWidget := CreateFixedClientWidget;
|
||||||
gtk_container_add(GTK_CONTAINER(p), TempWidget);
|
gtk_container_add(GTK_CONTAINER(p), TempWidget);
|
||||||
WidgetInfo^.ClientWidget := TempWidget;
|
WidgetInfo^.ClientWidget := TempWidget;
|
||||||
WidgetInfo^.CoreWidget := TempWidget;
|
WidgetInfo^.CoreWidget := TempWidget;
|
||||||
gtk_object_set_data(PGtkObject(TempWidget), 'widgetinfo', WidgetInfo);
|
gtk_object_set_data(PGtkObject(TempWidget), 'widgetinfo', WidgetInfo);
|
||||||
{$else}
|
|
||||||
EventBox := gtk_event_box_new;
|
|
||||||
gtk_event_box_set_visible_window(PGtkEventBox(EventBox), False);
|
|
||||||
TempWidget := CreateFixedClientWidget(False);
|
|
||||||
gtk_container_add(GTK_CONTAINER(EventBox), TempWidget);
|
|
||||||
gtk_container_add(GTK_CONTAINER(p), EventBox);
|
|
||||||
gtk_widget_show(EventBox);
|
|
||||||
WidgetInfo^.ClientWidget := TempWidget;
|
|
||||||
WidgetInfo^.CoreWidget := EventBox;
|
|
||||||
gtk_object_set_data(PGtkObject(TempWidget), 'widgetinfo', WidgetInfo);
|
|
||||||
gtk_object_set_data(PGtkObject(EventBox), 'widgetinfo', WidgetInfo);
|
|
||||||
{$endif}
|
|
||||||
gtk_widget_show(TempWidget);
|
gtk_widget_show(TempWidget);
|
||||||
gtk_widget_show(P);
|
gtk_widget_show(P);
|
||||||
|
|
||||||
@ -1979,17 +1957,9 @@ begin
|
|||||||
Widget := PGtkWidget(AWinControl.Handle);
|
Widget := PGtkWidget(AWinControl.Handle);
|
||||||
|
|
||||||
PreferredWidth := (gtk_widget_get_xthickness(Widget)) * 2
|
PreferredWidth := (gtk_widget_get_xthickness(Widget)) * 2
|
||||||
{$ifdef gtk1}
|
|
||||||
+PGtkFrame(Widget)^.label_width;
|
+PGtkFrame(Widget)^.label_width;
|
||||||
{$else}
|
|
||||||
+gtk_widget_get_xthickness(PGtkFrame(Widget)^.label_widget);
|
|
||||||
{$endif}
|
|
||||||
PreferredHeight := Max(gtk_widget_get_ythickness(Widget),
|
PreferredHeight := Max(gtk_widget_get_ythickness(Widget),
|
||||||
{$ifdef gtk1}
|
|
||||||
PGtkFrame(Widget)^.label_height)
|
PGtkFrame(Widget)^.label_height)
|
||||||
{$else}
|
|
||||||
gtk_widget_get_ythickness(PGtkFrame(Widget)^.label_widget))
|
|
||||||
{$endif}
|
|
||||||
+ gtk_widget_get_ythickness(Widget);
|
+ gtk_widget_get_ythickness(Widget);
|
||||||
|
|
||||||
if WithThemeSpace then begin
|
if WithThemeSpace then begin
|
||||||
@ -1998,9 +1968,19 @@ begin
|
|||||||
inc(PreferredWidth, border_width);
|
inc(PreferredWidth, border_width);
|
||||||
inc(PreferredHeight,2*border_width);
|
inc(PreferredHeight,2*border_width);
|
||||||
end;
|
end;
|
||||||
//debugln('TGtkWSCustomGroupBox.GetPreferredSize ',DbgSName(AWinControl),' PreferredWidth=',dbgs(PreferredWidth),' PreferredHeight=',dbgs(PreferredHeight));
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TGtkWSCustomGroupBox.SetText(const AWinControl: TWinControl;
|
||||||
|
const AText: string);
|
||||||
|
begin
|
||||||
|
if not WSCheckHandleAllocated(AWinControl, 'SetText') then Exit;
|
||||||
|
if AText <> '' then
|
||||||
|
gtk_frame_set_label(PGtkFrame(AWinControl.Handle), PChar(AText))
|
||||||
|
else
|
||||||
|
gtk_frame_set_label(PGtkFrame(AWinControl.Handle), nil);
|
||||||
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{ TGtkWSRadioButton }
|
{ TGtkWSRadioButton }
|
||||||
|
|
||||||
class function TGtkWSRadioButton.CreateHandle(const AWinControl: TWinControl;
|
class function TGtkWSRadioButton.CreateHandle(const AWinControl: TWinControl;
|
||||||
|
@ -80,10 +80,15 @@ type
|
|||||||
|
|
||||||
TGtk2WSCustomGroupBox = class(TGtkWSCustomGroupBox)
|
TGtk2WSCustomGroupBox = class(TGtkWSCustomGroupBox)
|
||||||
published
|
published
|
||||||
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||||
class function GetDefaultClientRect(const AWinControl: TWinControl;
|
class function GetDefaultClientRect(const AWinControl: TWinControl;
|
||||||
const aLeft, aTop, aWidth, aHeight: integer; var aClientRect: TRect
|
const aLeft, aTop, aWidth, aHeight: integer; var aClientRect: TRect
|
||||||
): boolean; override;
|
): boolean; override;
|
||||||
|
class procedure GetPreferredSize(const AWinControl: TWinControl;
|
||||||
|
var PreferredWidth, PreferredHeight: integer;
|
||||||
|
WithThemeSpace: Boolean); override;
|
||||||
class procedure SetFont(const AWinControl: TWinControl; const AFont: TFont); override;
|
class procedure SetFont(const AWinControl: TWinControl; const AFont: TFont); override;
|
||||||
|
class procedure SetText(const AWinControl: TWinControl; const AText: string); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TGtk2WSGroupBox }
|
{ TGtk2WSGroupBox }
|
||||||
@ -1673,6 +1678,57 @@ end;
|
|||||||
|
|
||||||
{ TGtk2WSCustomGroupBox }
|
{ TGtk2WSCustomGroupBox }
|
||||||
|
|
||||||
|
class function TGtk2WSCustomGroupBox.CreateHandle(
|
||||||
|
const AWinControl: TWinControl; const AParams: TCreateParams
|
||||||
|
): TLCLIntfHandle;
|
||||||
|
var
|
||||||
|
{$if not defined(GtkFixedWithWindow)}
|
||||||
|
EventBox: PGtkWidget;
|
||||||
|
{$endif}
|
||||||
|
TempWidget: PGTKWidget; // pointer to gtk-widget (local use when neccessary)
|
||||||
|
p : pointer; // ptr to the newly created GtkWidget
|
||||||
|
L : PGTKWidget;
|
||||||
|
Allocation: TGTKAllocation;
|
||||||
|
WidgetInfo: PWidgetInfo;
|
||||||
|
begin
|
||||||
|
L := gtk_label_new(AParams.Caption);
|
||||||
|
gtk_widget_show(L);
|
||||||
|
P := gtk_frame_new(nil);
|
||||||
|
gtk_frame_set_label_widget(GTK_FRAME(P), GTK_WIDGET(L));
|
||||||
|
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
|
||||||
|
{$if defined(GtkFixedWithWindow)}
|
||||||
|
TempWidget := CreateFixedClientWidget;
|
||||||
|
gtk_container_add(GTK_CONTAINER(p), TempWidget);
|
||||||
|
WidgetInfo^.ClientWidget := TempWidget;
|
||||||
|
WidgetInfo^.CoreWidget := TempWidget;
|
||||||
|
gtk_object_set_data(PGtkObject(TempWidget), 'widgetinfo', WidgetInfo);
|
||||||
|
{$else}
|
||||||
|
EventBox := gtk_event_box_new;
|
||||||
|
gtk_event_box_set_visible_window(PGtkEventBox(EventBox), False);
|
||||||
|
TempWidget := CreateFixedClientWidget(False);
|
||||||
|
gtk_container_add(GTK_CONTAINER(EventBox), TempWidget);
|
||||||
|
gtk_container_add(GTK_CONTAINER(p), EventBox);
|
||||||
|
gtk_widget_show(EventBox);
|
||||||
|
WidgetInfo^.ClientWidget := TempWidget;
|
||||||
|
WidgetInfo^.CoreWidget := EventBox;
|
||||||
|
gtk_object_set_data(PGtkObject(TempWidget), 'widgetinfo', WidgetInfo);
|
||||||
|
gtk_object_set_data(PGtkObject(EventBox), 'widgetinfo', WidgetInfo);
|
||||||
|
{$endif}
|
||||||
|
gtk_widget_show(TempWidget);
|
||||||
|
gtk_widget_show(P);
|
||||||
|
|
||||||
|
Result := TLCLIntfHandle(PtrUInt(P));
|
||||||
|
|
||||||
|
Allocation.X := AParams.X;
|
||||||
|
Allocation.Y := AParams.Y;
|
||||||
|
Allocation.Width := AParams.Width;
|
||||||
|
Allocation.Height := AParams.Height;
|
||||||
|
gtk_widget_size_allocate(P, @Allocation);
|
||||||
|
|
||||||
|
Set_RC_Name(AWinControl, P);
|
||||||
|
SetCallbacks(P, WidgetInfo);
|
||||||
|
end;
|
||||||
|
|
||||||
class function TGtk2WSCustomGroupBox.GetDefaultClientRect(
|
class function TGtk2WSCustomGroupBox.GetDefaultClientRect(
|
||||||
const AWinControl: TWinControl; const aLeft, aTop, aWidth, aHeight: integer;
|
const AWinControl: TWinControl; const aLeft, aTop, aWidth, aHeight: integer;
|
||||||
var aClientRect: TRect): boolean;
|
var aClientRect: TRect): boolean;
|
||||||
@ -1693,6 +1749,30 @@ begin
|
|||||||
//if Result then DebugLn(['TGtk2WSCustomGroupBox.GetDefaultClientRect END FrameBorders=',dbgs(FrameBorders),' aClientRect=',dbgs(aClientRect)]);
|
//if Result then DebugLn(['TGtk2WSCustomGroupBox.GetDefaultClientRect END FrameBorders=',dbgs(FrameBorders),' aClientRect=',dbgs(aClientRect)]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TGtk2WSCustomGroupBox.GetPreferredSize(
|
||||||
|
const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer;
|
||||||
|
WithThemeSpace: Boolean);
|
||||||
|
var
|
||||||
|
Widget: PGtkWidget;
|
||||||
|
border_width: Integer;
|
||||||
|
begin
|
||||||
|
Widget := PGtkWidget(AWinControl.Handle);
|
||||||
|
|
||||||
|
PreferredWidth := gtk_widget_get_xthickness(Widget) * 2 +
|
||||||
|
gtk_widget_get_xthickness(PGtkFrame(Widget)^.label_widget);
|
||||||
|
PreferredHeight := Max(gtk_widget_get_ythickness(Widget),
|
||||||
|
gtk_widget_get_ythickness(PGtkFrame(Widget)^.label_widget)) +
|
||||||
|
gtk_widget_get_ythickness(Widget);
|
||||||
|
|
||||||
|
if WithThemeSpace then
|
||||||
|
begin
|
||||||
|
border_width := (PGtkContainer(Widget)^.flag0 and bm_TGtkContainer_border_width) shr
|
||||||
|
bp_TGtkContainer_border_width;
|
||||||
|
inc(PreferredWidth, border_width);
|
||||||
|
inc(PreferredHeight, 2 * border_width);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
class procedure TGtk2WSCustomGroupBox.SetFont(const AWinControl: TWinControl;
|
class procedure TGtk2WSCustomGroupBox.SetFont(const AWinControl: TWinControl;
|
||||||
const AFont: TFont);
|
const AFont: TFont);
|
||||||
var
|
var
|
||||||
@ -1711,6 +1791,16 @@ begin
|
|||||||
inherited SetFont(AWinControl, AFont);
|
inherited SetFont(AWinControl, AFont);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TGtk2WSCustomGroupBox.SetText(const AWinControl: TWinControl;
|
||||||
|
const AText: string);
|
||||||
|
var
|
||||||
|
AFrame: PGtkFrame;
|
||||||
|
begin
|
||||||
|
if not WSCheckHandleAllocated(AWinControl, 'SetText') then Exit;
|
||||||
|
AFrame := PGtkFrame(AWinControl.Handle);
|
||||||
|
Gtk2Widgetset.SetLabelCaption(PGtkLabel(gtk_frame_get_label_widget(AFrame)), ATExt);
|
||||||
|
end;
|
||||||
|
|
||||||
function Gtk2WSButton_Clicked(AWidget: PGtkWidget; AInfo: PWidgetInfo): GBoolean; cdecl;
|
function Gtk2WSButton_Clicked(AWidget: PGtkWidget; AInfo: PWidgetInfo): GBoolean; cdecl;
|
||||||
var
|
var
|
||||||
Msg: TLMessage;
|
Msg: TLMessage;
|
||||||
|
Loading…
Reference in New Issue
Block a user