From 1b2b4bb4f3ecc034a6e9364d8768e50b167a9680 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 24 Dec 2024 12:41:48 +0100 Subject: Rough GTK3 port --- libgtk_kylix/GTKClasses.pas | 40 ++++- libgtk_kylix/GTKConsts.pas | 215 +----------------------- libgtk_kylix/GTKControls.pas | 388 +++++++++++++++++-------------------------- libgtk_kylix/GTKDialogs.pas | 171 ++++++------------- libgtk_kylix/GTKExtCtrls.pas | 238 +++++++++++--------------- libgtk_kylix/GTKForms.pas | 50 ++---- libgtk_kylix/GTKMenus.pas | 127 ++++---------- libgtk_kylix/GTKPixbuf.pas | 47 +++--- libgtk_kylix/GTKStdCtrls.pas | 262 ++++------------------------- libgtk_kylix/GTKText.pas | 5 +- libgtk_kylix/GTKUtils.pas | 41 ++++- libgtk_kylix/GTKView.pas | 53 +++--- 12 files changed, 503 insertions(+), 1134 deletions(-) (limited to 'libgtk_kylix') diff --git a/libgtk_kylix/GTKClasses.pas b/libgtk_kylix/GTKClasses.pas index 6071d74..aab76a2 100644 --- a/libgtk_kylix/GTKClasses.pas +++ b/libgtk_kylix/GTKClasses.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKClasses - Non-visual objects - Version 0.6.4 (last updated 2003-04-03) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,13 +23,40 @@ unit GTKClasses; interface -uses gtk2, lazglib2, Classes, SysUtils; - +uses lazglib2, lazgobject2, lazgtk3, Classes, SysUtils; + +const +{ Basic Type Macros } + G_TYPE_FUNDAMENTAL_SHIFT = 2; + G_TYPE_FUNDAMENTAL_MAX = 255 shl G_TYPE_FUNDAMENTAL_SHIFT; + +{ Constant fundamental types, + introduced by g_type_init(). } + G_TYPE_INVALID = TGType(0 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_NONE = TGType(1 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_INTERFACE = TGType(2 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_CHAR = TGType(3 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_UCHAR = TGType(4 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_BOOLEAN = TGType(5 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_INT = TGType(6 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_UINT = TGType(7 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_LONG = TGType(8 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_ULONG = TGType(9 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_INT64 = TGType(10 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_UINT64 = TGType(11 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_ENUM = TGType(12 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_FLAGS = TGType(13 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_FLOAT = TGType(14 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_DOUBLE = TGType(15 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_STRING = TGType(16 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_POINTER = TGType(17 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_BOXED = TGType(18 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_PARAM = TGType(19 shl G_TYPE_FUNDAMENTAL_SHIFT); + G_TYPE_OBJECT = TGType(20 shl G_TYPE_FUNDAMENTAL_SHIFT); type TGDKColor = record - pixel: Cardinal; - red, green, blue: Word; + red, green, blue, alpha: gdouble; end; (****************************************** TGLIST ******************************************************************************) @@ -154,12 +180,12 @@ end; procedure TGTKTimer.Start; begin if FHandlerID > 0 then Stop; - if FEnabled then FHandlerID := gtk_timeout_add(FInterval, @TGTKTimer_Timeout, Self); + if FEnabled then FHandlerID := g_timeout_add(FInterval, @TGTKTimer_Timeout, Self); end; procedure TGTKTimer.Stop; begin - if FHandlerID > 0 then gtk_timeout_remove(FHandlerID); + if FHandlerID > 0 then g_source_remove(FHandlerID); FHandlerID := 0; end; diff --git a/libgtk_kylix/GTKConsts.pas b/libgtk_kylix/GTKConsts.pas index 0b18b1c..965548b 100644 --- a/libgtk_kylix/GTKConsts.pas +++ b/libgtk_kylix/GTKConsts.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKConsts - Various constants, mainly key codes - Version 0.5.20 (last updated 2003-01-25) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,219 +23,9 @@ unit GTKConsts; interface -uses lazglib2, gtk2; - -const // copied from gdkkeysyms - GDK_BackSpace = $FF08; - GDK_Tab = $FF09; - GDK_Linefeed = $FF0A; - GDK_Clear_Key = $FF0B; - GDK_Return = $FF0D; - GDK_Pause = $FF13; - GDK_Scroll_Lock = $FF14; - GDK_Sys_Req = $FF15; - GDK_Escape = $FF1B; - GDK_Delete_Key = $FFFF; - GDK_Home = $FF50; - GDK_Left = $FF51; - GDK_Up = $FF52; - GDK_Right = $FF53; - GDK_Down = $FF54; - GDK_Prior = $FF55; - GDK_Page_Up = $FF55; - GDK_Next = $FF56; - GDK_Page_Down = $FF56; - GDK_End = $FF57; - GDK_Insert = $FF63; - GDK_Num_Lock = $FF7F; - GDK_KP_Space = $FF80; - GDK_KP_Tab = $FF89; - GDK_KP_Enter = $FF8D; - GDK_KP_F1 = $FF91; - GDK_KP_F2 = $FF92; - GDK_KP_F3 = $FF93; - GDK_KP_F4 = $FF94; - GDK_KP_Home = $FF95; - GDK_KP_Left = $FF96; - GDK_KP_Up = $FF97; - GDK_KP_Right = $FF98; - GDK_KP_Down = $FF99; - GDK_KP_Prior = $FF9A; - GDK_KP_Page_Up = $FF9A; - GDK_KP_Next = $FF9B; - GDK_KP_Page_Down = $FF9B; - GDK_KP_End = $FF9C; - GDK_KP_PLUS = 65451; - GDK_KP_MINUS = 65453; - GDK_KP_ASTERISK = 65450; - GDK_KP_SLASH = 65455; - GDK_KP_0 = $FFB0; - GDK_KP_1 = $FFB1; - GDK_KP_2 = $FFB2; - GDK_KP_3 = $FFB3; - GDK_KP_4 = $FFB4; - GDK_KP_5 = $FFB5; - GDK_KP_6 = $FFB6; - GDK_KP_7 = $FFB7; - GDK_KP_8 = $FFB8; - GDK_KP_9 = $FFB9; - GDK_F1 = $FFBE; - GDK_F2 = $FFBF; - GDK_F3 = $FFC0; - GDK_F4 = $FFC1; - GDK_F5 = $FFC2; - GDK_F6 = $FFC3; - GDK_F7 = $FFC4; - GDK_F8 = $FFC5; - GDK_F9 = $FFC6; - GDK_F10 = $FFC7; - GDK_F11 = $FFC8; - GDK_L1 = $FFC8; - GDK_F12 = $FFC9; - GDK_L2 = $FFC9; - GDK_F13 = $FFCA; - GDK_L3 = $FFCA; - GDK_F14 = $FFCB; - GDK_L4 = $FFCB; - GDK_F15 = $FFCC; - GDK_L5 = $FFCC; - GDK_F16 = $FFCD; - GDK_L6 = $FFCD; - GDK_F17 = $FFCE; - GDK_L7 = $FFCE; - GDK_F18 = $FFCF; - GDK_L8 = $FFCF; - GDK_F19 = $FFD0; - GDK_L9 = $FFD0; - GDK_F20 = $FFD1; - GDK_L10 = $FFD1; - GDK_F21 = $FFD2; - GDK_R1 = $FFD2; - GDK_F22 = $FFD3; - GDK_R2 = $FFD3; - GDK_F23 = $FFD4; - GDK_R3 = $FFD4; - GDK_F24 = $FFD5; - GDK_R4 = $FFD5; - GDK_F25 = $FFD6; - GDK_R5 = $FFD6; - GDK_F26 = $FFD7; - GDK_R6 = $FFD7; - GDK_F27 = $FFD8; - GDK_R7 = $FFD8; - GDK_F28 = $FFD9; - GDK_R8 = $FFD9; - GDK_F29 = $FFDA; - GDK_R9 = $FFDA; - GDK_F30 = $FFDB; - GDK_R10 = $FFDB; - GDK_F31 = $FFDC; - GDK_R11 = $FFDC; - GDK_F32 = $FFDD; - GDK_R12 = $FFDD; - GDK_F33 = $FFDE; - GDK_R13 = $FFDE; - GDK_F34 = $FFDF; - GDK_R14 = $FFDF; - GDK_F35 = $FFE0; - GDK_R15 = $FFE0; - GDK_space = $020; - GDK_exclam = $021; - GDK_quotedbl = $022; - GDK_numbersign = $023; - GDK_dollar = $024; - GDK_percent = $025; - GDK_ampersand = $026; - GDK_apostrophe = $027; - GDK_quoteright = $027; - GDK_parenleft = $028; - GDK_parenright = $029; - GDK_asterisk = $02a; - GDK_plus_key = $02b; - GDK_comma = $02c; - GDK_minus = $02d; - GDK_period = $02e; - GDK_slash = $02f; - GDK_0 = $030; - GDK_1 = $031; - GDK_2 = $032; - GDK_3 = $033; - GDK_4 = $034; - GDK_5 = $035; - GDK_6 = $036; - GDK_7 = $037; - GDK_8 = $038; - GDK_9 = $039; - GDK_colon = $03a; - GDK_semicolon = $03b; - GDK_less = $03c; - GDK_equal = $03d; - GDK_greater = $03e; - GDK_question = $03f; - GDK_at = $040; - GDK_Capital_A = $041; - GDK_Capital_B = $042; - GDK_Capital_C = $043; - GDK_Capital_D = $044; - GDK_Capital_E = $045; - GDK_Capital_F = $046; - GDK_Capital_G = $047; - GDK_Capital_H = $048; - GDK_Capital_I = $049; - GDK_Capital_J = $04a; - GDK_Capital_K = $04b; - GDK_Capital_L = $04c; - GDK_Capital_M = $04d; - GDK_Capital_N = $04e; - GDK_Capital_O = $04f; - GDK_Capital_P = $050; - GDK_Capital_Q = $051; - GDK_Capital_R = $052; - GDK_Capital_S = $053; - GDK_Capital_T = $054; - GDK_Capital_U = $055; - GDK_Capital_V = $056; - GDK_Capital_W = $057; - GDK_Capital_X = $058; - GDK_Capital_Y = $059; - GDK_Capital_Z = $05a; - GDK_bracketleft = $05b; - GDK_backslash = $05c; - GDK_bracketright = $05d; - GDK_quoteleft = $060; - GDK_a = $061; - GDK_b = $062; - GDK_c = $063; - GDK_d = $064; - GDK_e = $065; - GDK_f = $066; - GDK_g = $067; - GDK_h = $068; - GDK_i = $069; - GDK_j = $06a; - GDK_k = $06b; - GDK_l = $06c; - GDK_m = $06d; - GDK_n = $06e; - GDK_o = $06f; - GDK_p = $070; - GDK_q = $071; - GDK_r = $072; - GDK_s = $073; - GDK_t = $074; - GDK_u = $075; - GDK_v = $076; - GDK_w = $077; - GDK_x = $078; - GDK_y = $079; - GDK_z = $07a; - GDK_aacute = $0e1; - GDK_leftarrow = $8fb; - GDK_uparrow = $8fc; - GDK_rightarrow = $8fd; - GDK_downarrow = $8fe; - GDK_WIN_POPUP = $FF67; +uses lazglib2, lazgtk3; +const NumMessageButtons = 12; MessageButtonID : array[1..NumMessageButtons] of Pgchar = (GTK_STOCK_YES, GTK_STOCK_NO, GTK_STOCK_OK, GTK_STOCK_CANCEL, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, GTK_STOCK_HELP, diff --git a/libgtk_kylix/GTKControls.pas b/libgtk_kylix/GTKControls.pas index 82de154..4729266 100644 --- a/libgtk_kylix/GTKControls.pas +++ b/libgtk_kylix/GTKControls.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKControls - Basic objects - Version 0.6.23 (last updated 2008-11-11) Copyright (C) 2007 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKControls; interface -uses gtk2, gdk2, lazglib2, lazgobject2, Classes; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, Classes; const @@ -58,14 +57,15 @@ type type TGTKShadowType = (stNone, stShadowIn, stShadowOut, stEtchedIn, stEtchedOut); TGTKPosition = (poLeft, poRight, poTop, poBottom); - + TGTKAlignment = (taLeftJustify, taRightJustify, taCenter, taFill); + (****************************************** TGTKCONTROL *************************************************************************) TGDKMouseButton = (mbLeft, mbMiddle, mbRight, mbNoButton); TGDKKeyEvent = procedure (Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean) of object; TGDKMouseEvent = procedure (Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean) of object; TGDKFocusEvent = procedure (Sender: TObject; var Accept: boolean) of object; TGDKExposeEvent = procedure (Sender: TObject; const Rect: PGdkRectangle; var Accept: boolean) of object; - TGTKControlState = (csNormal, csActive, csPrelight, csSelected, csInsensitive); + TGTKControlState = (csNormal, csActive, csPrelight, csSelected, csInsensitive, csInconsistent, csFocused, csBackdrop, csDirLTR, cdDirRTL, csLink, csVisited, csChecked, csDropActive); TGTKControl = class(TComponent64) private FVisible: Boolean; @@ -92,6 +92,12 @@ type function GetFocused: boolean; function GetDefault: boolean; function GetControlState: TGTKControlState; + function GetHAlign: TGTKAlignment; + function GetVAlign: TGTKAlignment; + function GetMarginStart: Integer; + function GetMarginEnd: Integer; + function GetMarginTop: Integer; + function GetMarginBottom: Integer; procedure SetHeight(const Value: Integer); procedure SetVisible(const Value: Boolean); procedure SetWidth(const Value: Integer); @@ -111,6 +117,12 @@ type procedure SetOnExpose(Value: TGDKExposeEvent); procedure SetControlState(Value: TGTKControlState); procedure SetOnMouseMove(Value: TGDKMouseEvent); + procedure SetHAlign(Value: TGTKAlignment); + procedure SetVAlign(Value: TGTKAlignment); + procedure SetMarginStart(Value: Integer); + procedure SetMarginEnd(Value: Integer); + procedure SetMarginTop(Value: Integer); + procedure SetMarginBottom(Value: Integer); protected procedure SetParent(const Value: TGTKControl); virtual; public @@ -118,7 +130,6 @@ type constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Hide; - procedure HideAll; procedure Show; procedure ShowAll; procedure SetSizeRequest(const Width, Height: Integer); @@ -127,21 +138,7 @@ type property Enabled: Boolean read GetEnabled write SetEnabled default True; property PopupMenu: TGTKControl read FPopupMenu write SetPopupMenu; procedure SetFocus; - procedure SetForegroundColor(Red, Green, Blue: word); overload; - procedure SetForegroundColor(State: integer; Red, Green, Blue: word); overload; - procedure SetForegroundColor(State: integer; Color: PGdkColor); overload; - procedure SetForegroundColor(Color: PGdkColor); overload; - procedure SetBackgroundColor(Red, Green, Blue: word); overload; - procedure SetBackgroundColor(State: integer; Red, Green, Blue: word); overload; - procedure SetBackgroundColor(State: integer; Color: PGdkColor); overload; - procedure SetBackgroundColor(Color: PGdkColor); overload; - procedure SetTextColor(Red, Green, Blue: word); overload; - procedure SetTextColor(State: integer; Red, Green, Blue: word); overload; - procedure SetBaseColor(Red, Green, Blue: word); overload; - procedure SetBaseColor(State: integer; Red, Green, Blue: word); overload; procedure Invalidate; - procedure SetAlignment(XAlign, YAlign: Double); - procedure SetPadding(XPad, YPad: integer); function GetData(Key: string): Pointer; procedure SetData(Key: string; Value: Pointer); published @@ -164,6 +161,12 @@ type property OnExpose: TGDKExposeEvent read FOnExpose write SetOnExpose; property ComponentState; property ControlState: TGTKControlState read GetControlState write SetControlState; + property HAlign: TGTKAlignment read GetHAlign write SetHAlign; + property VAlign: TGTKAlignment read GetVAlign write SetHAlign; + property MarginStart: Integer read GetMarginStart write SetMarginStart; + property MarginEnd: Integer read GetMarginEnd write SetMarginEnd; + property MarginTop: Integer read GetMarginTop write SetMarginTop; + property MarginBottom: Integer read GetMarginBottom write SetMarginBottom; end; (****************************************** TGTKCONTAINER ***********************************************************************) @@ -234,46 +237,27 @@ type destructor Destroy; override; end; -(****************************************** TGTKTOOLTIPS ************************************************************************) - TGTKTooltips = class(TComponent) - private - function GetEnabled: boolean; - procedure SetEnabled(Value: boolean); - public - FObject: PGtkTooltips; - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property Enabled: boolean read GetEnabled write SetEnabled; - end; - -(****************************************** TGTKTABLE ***************************************************************************) - TGTKTableAttachOptions = set of (taoExpand, taoShrink, taoFill); - TGTKTable = class(TGTKContainer) +(****************************************** TGTKGRID ****************************************************************************) + TGTKGridAttachOptions = set of (taoExpand, taoShrink, taoFill); + TGTKGrid = class(TGTKContainer) private - function GetRowCount: integer; - procedure SetRowCount(Value: integer); - function GetColCount: integer; - procedure SetColCount(Value: integer); function GetRowSpacing: integer; procedure SetRowSpacing(Value: integer); function GetColSpacing: integer; procedure SetColSpacing(Value: integer); - function GetHomogeneous: boolean; - procedure SetHomogeneous(Value: boolean); + function GetRowHomogeneous: boolean; + function GetColHomogeneous: boolean; + procedure SetRowHomogeneous(Value: boolean); + procedure SetColHomogeneous(Value: boolean); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure SetRowColCount(Rows, Cols: integer); - procedure AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XPadding, YPadding: integer); - procedure AddControlEx(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XAttachOptions, - YAttachOptions: TGTKTableAttachOptions; XPadding, YPadding: integer); + procedure AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl); published - property RowCount: integer read GetRowCount write SetRowCount; - property ColCount: integer read GetColCount write SetColCount; property RowSpacing: integer read GetRowSpacing write SetRowSpacing; property ColSpacing: integer read GetColSpacing write SetColSpacing; - property Homogeneous: boolean read GetHomogeneous write SetHomogeneous; + property RowHomogeneous: boolean read GetRowHomogeneous write SetRowHomogeneous; + property ColHomogeneous: boolean read GetColHomogeneous write SetColHomogeneous; end; @@ -289,7 +273,7 @@ uses GTKMenus, GTKForms, GTKUtils; procedure Beep; begin - gdk_beep; + gdk_beep(); end; @@ -334,13 +318,6 @@ begin gtk_widget_hide(FWidget); end; -procedure TGTKControl.HideAll; -begin - if Parent <> nil then Parent.HideAll; - FVisible := False; - gtk_widget_hide_all(FWidget); -end; - procedure TGTKControl.Show; begin FVisible := True; @@ -362,7 +339,7 @@ begin raise EInvalidOperation.Create('Invalid Operation'); FParent := Value; try - if Assigned(FWidget) and GTK_IS_WIDGET(FWidget) then + if Assigned(FWidget) then if Assigned(Value) then gtk_widget_set_parent(FWidget, Value.FWidget) else gtk_widget_unparent(FWidget); @@ -378,12 +355,12 @@ end; function TGTKControl.GetWidth: Integer; begin - Result := FWidget^.allocation.width; + Result := gtk_widget_get_allocated_width(FWidget); end; function TGTKControl.GetHeight: Integer; begin - Result := FWidget^.allocation.height; + Result := gtk_widget_get_allocated_height(FWidget); end; procedure TGTKControl.SetWidth(const Value: Integer); @@ -402,13 +379,17 @@ begin end; function TGTKControl.GetLeft: Integer; +var A: TGtkAllocation; begin - Result := FWidget^.allocation.x; + gtk_widget_get_allocation(FWidget, @A); + Result := A.x; end; function TGTKControl.GetTop: Integer; +var A: TGtkAllocation; begin - Result := FWidget^.allocation.y; + gtk_widget_get_allocation(FWidget, @A); + Result := A.y; end; function TGTKControl.GetEnabled: boolean; @@ -429,13 +410,13 @@ var Shift: TShiftState; Accept: boolean; begin Shift := []; - if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift); - if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl); - if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt); + if GDK_SHIFT_MASK in event^.state then Include(Shift, ssShift); + if GDK_CONTROL_MASK in event^.state then Include(Shift, ssCtrl); + if GDK_MOD1_MASK in event^.state then Include(Shift, ssAlt); Accept := True; - if Assigned(TGTKControl(user_data).FOnMouseDown) and (event^._type = GDK_BUTTON_PRESS) + if Assigned(TGTKControl(user_data).FOnMouseDown) and (event^.type_ = GDK_BUTTON_PRESS) then TGTKControl(user_data).FOnMouseDown(TGTKControl(user_data), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept); - if Assigned(TGTKControl(user_data).FOnDblClick) and (event^._type = GDK_2BUTTON_PRESS) + if Assigned(TGTKControl(user_data).FOnDblClick) and (event^.type_ = GDK_2BUTTON_PRESS) then TGTKControl(user_data).FOnDblClick(TGTKControl(user_data), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept); Result := not Accept; if Accept then @@ -463,17 +444,13 @@ begin end; function TGTKControl.GetTooltip: string; -var text: PChar; begin - text := nil; - Result := ''; - g_object_get(PGObject(FWidget), 'tooltip-text', [@text, nil]); - if text <> nil then Result := string(text); + Result := gtk_widget_get_tooltip_text(FWidget); end; procedure TGTKControl.SetTooltip(Value: string); begin - g_object_set(PGObject(FWidget), 'tooltip-text', [PChar(Value), nil]) + gtk_widget_set_tooltip_text(FWidget, PChar(Value)); end; procedure TGTKControl.SetFocus; @@ -520,9 +497,9 @@ var Shift: TShiftState; begin Accept := True; Shift := []; - if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift); - if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl); - if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt); + if GDK_SHIFT_MASK in event^.state then Include(Shift, ssShift); + if GDK_CONTROL_MASK in event^.state then Include(Shift, ssCtrl); + if GDK_MOD1_MASK in event^.state then Include(Shift, ssAlt); if KeyDown then begin if Assigned(TGTKControl(user_data).FOnKeyDown) then TGTKControl(user_data).FOnKeyDown(TGTKControl(user_data), event^.keyval, Shift, Accept); @@ -597,66 +574,6 @@ begin end; end; -procedure TGTKControl.SetForegroundColor(Red, Green, Blue: word); -begin - gtk_widget_modify_fg(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetForegroundColor(State: integer; Red, Green, Blue: word); -begin - gtk_widget_modify_fg(FWidget, State, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetForegroundColor(State: integer; Color: PGdkColor); -begin - gtk_widget_modify_fg(FWidget, State, Color); -end; - -procedure TGTKControl.SetForegroundColor(Color: PGdkColor); -begin - gtk_widget_modify_fg(FWidget, 0, Color); -end; - -procedure TGTKControl.SetBackgroundColor(Red, Green, Blue: word); -begin - gtk_widget_modify_bg(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetBackgroundColor(State: integer; Red, Green, Blue: word); -begin - gtk_widget_modify_bg(FWidget, State, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetBackgroundColor(State: integer; Color: PGdkColor); -begin - gtk_widget_modify_bg(FWidget, State, Color); -end; - -procedure TGTKControl.SetBackgroundColor(Color: PGdkColor); -begin - gtk_widget_modify_bg(FWidget, 0, Color); -end; - -procedure TGTKControl.SetTextColor(Red, Green, Blue: word); -begin - gtk_widget_modify_text(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetTextColor(State: integer; Red, Green, Blue: word); -begin - gtk_widget_modify_text(FWidget, State, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetBaseColor(Red, Green, Blue: word); -begin - gtk_widget_modify_base(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue)); -end; - -procedure TGTKControl.SetBaseColor(State: integer; Red, Green, Blue: word); -begin - gtk_widget_modify_base(FWidget, State, AllocateColor(FWidget, Red, Green, Blue)); -end; - procedure TGTKControl.SetOnMouseDown(Value: TGDKMouseEvent); begin if @FOnMouseDown <> @Value then begin @@ -692,9 +609,9 @@ var Shift: TShiftState; Accept: boolean; begin Shift := []; - if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift); - if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl); - if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt); + if GDK_SHIFT_MASK in event^.state then Include(Shift, ssShift); + if GDK_CONTROL_MASK in event^.state then Include(Shift, ssCtrl); + if GDK_MOD1_MASK in event^.state then Include(Shift, ssAlt); Accept := True; if Assigned(TGTKControl(user_data).FOnMouseUp) then TGTKControl(user_data).FOnMouseUp(TGTKControl(user_data), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept); @@ -719,12 +636,12 @@ begin Result := False; if event^.is_hint <> 0 then Exit; Shift := []; - if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift); - if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl); - if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt); - if event^.state and GDK_BUTTON1_MASK = GDK_BUTTON1_MASK then Button := mbLeft else - if event^.state and GDK_BUTTON2_MASK = GDK_BUTTON2_MASK then Button := mbMiddle else - if event^.state and GDK_BUTTON3_MASK = GDK_BUTTON3_MASK then Button := mbRight else + if GDK_SHIFT_MASK in event^.state then Include(Shift, ssShift); + if GDK_CONTROL_MASK in event^.state then Include(Shift, ssCtrl); + if GDK_MOD1_MASK in event^.state then Include(Shift, ssAlt); + if GDK_BUTTON1_MASK in event^.state then Button := mbLeft else + if GDK_BUTTON2_MASK in event^.state then Button := mbMiddle else + if GDK_BUTTON3_MASK in event^.state then Button := mbRight else Button := mbNoButton; if Assigned(TGTKControl(user_data).FOnMouseMove) then TGTKControl(user_data).FOnMouseMove(TGTKControl(user_data), Button, Shift, Trunc(event^.x), Trunc(event^.y), Accept); @@ -760,16 +677,6 @@ begin gtk_widget_queue_draw(FWidget); end; -procedure TGTKControl.SetAlignment(XAlign, YAlign: Double); -begin - gtk_misc_set_alignment(PGtkMisc(FWidget), XAlign, YAlign); -end; - -procedure TGTKControl.SetPadding(XPad, YPad: integer); -begin - gtk_misc_set_padding(PGtkMisc(FWidget), XPad, YPad); -end; - function TGTKControl_expose_event(widget: PGtkWidget; event: PGdkEventExpose; user_data: gpointer):gboolean; cdecl; var Accept: boolean; begin @@ -791,12 +698,12 @@ end; function TGTKControl.GetControlState: TGTKControlState; begin - Result := TGTKControlState(FWidget^.state); + Result := TGTKControlState(gtk_widget_get_state_flags(FWidget)); end; procedure TGTKControl.SetControlState(Value: TGTKControlState); begin - gtk_widget_set_state(FWidget, integer(Value)); + gtk_widget_set_state_flags(FWidget, TGtkStateFlags(Value), True); end; function TGTKControl.GetData(Key: string): Pointer; @@ -809,6 +716,67 @@ begin g_object_set_data(PGObject(FWidget), PChar(Key), Value); end; +function TGTKControl.GetHAlign: TGTKAlignment; +begin + Result := TGTKAlignment(gtk_widget_get_halign(FWidget)); +end; + +function TGTKControl.GetVAlign: TGTKAlignment; +begin + Result := TGTKAlignment(gtk_widget_get_valign(FWidget)); +end; + +procedure TGTKControl.SetHAlign(Value: TGTKAlignment); +begin + gtk_widget_set_halign(FWidget, TGtkAlign(Value)); +end; + +procedure TGTKControl.SetVAlign(Value: TGTKAlignment); +begin + gtk_widget_set_valign(FWidget, TGtkAlign(Value)); +end; + +function TGTKControl.GetMarginStart: Integer; +begin + Result := gtk_widget_get_margin_start(FWidget); +end; + +function TGTKControl.GetMarginEnd: Integer; +begin + Result := gtk_widget_get_margin_end(FWidget); +end; + +function TGTKControl.GetMarginTop: Integer; +begin + Result := gtk_widget_get_margin_top(FWidget); +end; + +function TGTKControl.GetMarginBottom: Integer; +begin + Result := gtk_widget_get_margin_bottom(FWidget); +end; + +procedure TGTKControl.SetMarginStart(Value: Integer); +begin + gtk_widget_set_margin_start(FWidget, Value); +end; + +procedure TGTKControl.SetMarginEnd(Value: Integer); +begin + gtk_widget_set_margin_end(FWidget, Value); +end; + +procedure TGTKControl.SetMarginTop(Value: Integer); +begin + gtk_widget_set_margin_top(FWidget, Value); +end; + +procedure TGTKControl.SetMarginBottom(Value: Integer); +begin + gtk_widget_set_margin_bottom(FWidget, Value); +end; + + (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKContainer.Create(AOwner: TComponent); @@ -889,12 +857,12 @@ end; procedure TGTKBox.AddControl(Control: TGTKControl); begin - gtk_box_pack_start_defaults(PGtkBox(FWidget), Control.FWidget); + gtk_box_pack_start(PGtkBox(FWidget), Control.FWidget, True, True, 0); end; procedure TGTKBox.AddControlEnd(Control: TGTKControl); begin - gtk_box_pack_end_defaults(PGtkBox(FWidget), Control.FWidget); + gtk_box_pack_end(PGtkBox(FWidget), Control.FWidget, True, True, 0); end; procedure TGTKBox.AddControlEx(Control: TGTKControl; Expand, Fill: boolean; Padding: integer); @@ -933,7 +901,7 @@ constructor TGTKHBox.Create(AOwner: TComponent); begin inherited Create(AOwner); if ClassName = 'TGTKHBox' then begin - FWidget := gtk_hbox_new(True, 0); + FWidget := gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); Show; end; end; @@ -949,7 +917,7 @@ constructor TGTKVBox.Create(AOwner: TComponent); begin inherited Create(AOwner); if ClassName = 'TGTKVBox' then begin - FWidget := gtk_vbox_new(False, 0); + FWidget := gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); Show; end; end; @@ -959,32 +927,6 @@ begin inherited Destroy; end; -(********************************************************************************************************************************) -(********************************************************************************************************************************) -constructor TGTKTooltips.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FObject := gtk_tooltips_new; -end; - -destructor TGTKTooltips.Destroy; -begin - inherited Destroy; -end; - -function TGTKTooltips.GetEnabled: boolean; -begin - // FIXME: This is horrible expression - Result := Boolean(gtk2.enabled(FObject^)); -end; - -procedure TGTKTooltips.SetEnabled(Value: boolean); -begin - if Value then gtk_tooltips_enable(FObject) - else gtk_tooltips_disable(FObject); -end; - - (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKEventBox.Create(AOwner: TComponent); @@ -1001,95 +943,63 @@ end; (********************************************************************************************************************************) (********************************************************************************************************************************) -constructor TGTKTable.Create(AOwner: TComponent); +constructor TGTKGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_table_new(0, 0, False); + FWidget := gtk_grid_new(); Show; end; -destructor TGTKTable.Destroy; +destructor TGTKGrid.Destroy; begin inherited Destroy; end; -function TGTKTable.GetRowCount: integer; -var nrows: guint; -begin - nrows := 1; - g_object_get(PGObject(FWidget), 'n-rows', [@nrows, nil]); - Result := nrows; -end; - -procedure TGTKTable.SetRowCount(Value: integer); -begin - SetRowColCount(Value, ColCount); -end; - -function TGTKTable.GetColCount: integer; -var ncols: guint; +function TGTKGrid.GetRowSpacing: integer; begin - ncols := 1; - g_object_get(PGObject(FWidget), 'n-columns', [@ncols, nil]); - Result := ncols; + Result := gtk_grid_get_row_spacing(PGtkGrid(FWidget)); end; -procedure TGTKTable.SetColCount(Value: integer); +procedure TGTKGrid.SetRowSpacing(Value: integer); begin - SetRowColCount(RowCount, Value); + gtk_grid_set_row_spacing(PGtkGrid(FWidget), Value); end; -procedure TGTKTable.SetRowColCount(Rows, Cols: integer); +function TGTKGrid.GetColSpacing: integer; begin - gtk_table_resize(PGtkTable(FWidget), Rows, Cols); + Result := gtk_grid_get_column_spacing(PGtkGrid(FWidget)); end; -function TGTKTable.GetRowSpacing: integer; +procedure TGTKGrid.SetColSpacing(Value: integer); begin - Result := gtk_table_get_default_row_spacing(PGtkTable(FWidget)); + gtk_grid_set_column_spacing(PGtkGrid(FWidget), Value); end; -procedure TGTKTable.SetRowSpacing(Value: integer); +function TGTKGrid.GetRowHomogeneous: boolean; begin - gtk_table_set_row_spacings(PGtkTable(FWidget), Value); + Result := gtk_grid_get_row_homogeneous(PGtkGrid(FWidget)); end; -function TGTKTable.GetColSpacing: integer; +function TGTKGrid.GetColHomogeneous: boolean; begin - Result := gtk_table_get_default_col_spacing(PGtkTable(FWidget)); + Result := gtk_grid_get_column_homogeneous(PGtkGrid(FWidget)); end; -procedure TGTKTable.SetColSpacing(Value: integer); +procedure TGTKGrid.SetRowHomogeneous(Value: boolean); begin - gtk_table_set_col_spacings(PGtkTable(FWidget), Value); + gtk_grid_set_row_homogeneous(PGtkGrid(FWidget), Value); end; -function TGTKTable.GetHomogeneous: boolean; +procedure TGTKGrid.SetColHomogeneous(Value: boolean); begin - Result := gtk_table_get_homogeneous(PGtkTable(FWidget)); + gtk_grid_set_column_homogeneous(PGtkGrid(FWidget), Value); end; -procedure TGTKTable.SetHomogeneous(Value: boolean); +procedure TGTKGrid.AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl); begin - gtk_table_set_homogeneous(PGtkTable(FWidget), Value); + gtk_grid_attach(PGtkGrid(FWidget), Control.FWidget, Column, Row, NumCols, NumRows); end; -procedure TGTKTable.AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XPadding, YPadding: integer); -begin - gtk_table_attach(PGtkTable(FWidget), Control.FWidget, Column, Column + NumCols, Row, Row + NumRows, - GTK_EXPAND or GTK_SHRINK or GTK_FILL, GTK_EXPAND or GTK_SHRINK or GTK_FILL, XPadding, YPadding); -end; - -procedure TGTKTable.AddControlEx(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XAttachOptions, - YAttachOptions: TGTKTableAttachOptions; XPadding, YPadding: integer); -begin - gtk_table_attach(PGtkTable(FWidget), Control.FWidget, Column, Column + NumCols, Row, Row + NumRows, - (GTK_EXPAND*Ord(taoExpand in XAttachOptions)) or (GTK_SHRINK*Ord(taoShrink in XAttachOptions)) or (GTK_FILL*Ord(taoFill in XAttachOptions)), - (GTK_EXPAND*Ord(taoExpand in YAttachOptions)) or (GTK_SHRINK*Ord(taoShrink in YAttachOptions)) or (GTK_FILL*Ord(taoFill in YAttachOptions)), - XPadding, YPadding); -end; - - (********************************************************************************************************************************) (********************************************************************************************************************************) diff --git a/libgtk_kylix/GTKDialogs.pas b/libgtk_kylix/GTKDialogs.pas index 17b32d0..dfbe1b2 100644 --- a/libgtk_kylix/GTKDialogs.pas +++ b/libgtk_kylix/GTKDialogs.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKDialogs - Special purpose dialogs - Version 0.7.0 (last updated 2006-02-05) Copyright (C) 2006 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,20 +23,15 @@ unit GTKDialogs; interface -uses gtk2, gdk2, lazglib2, lazgobject2, Classes, GTKControls, GTKUtils, GTKClasses, GTKForms; - +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, Classes, GTKControls, GTKStdCtrls, GTKForms; type -(****************************************** TGTKFILESELECTIONDIALOG *************************************************************) - TGTKFileSelectionDialog = class(TGTKDialog) +(****************************************** TGTKFILECHOOSERDIALOG *************************************************************) + TGTKFileChooserDialog = class(TGTKDialog) private function GetFileName: string; - function GetShowFileOpButtons: boolean; - function GetMultiSelect: boolean; procedure SetFileName(Value: string); - procedure SetShowFileOpButtons(Value: boolean); - procedure SetMultiSelect(Value: boolean); protected public constructor Create(AOwner: TComponent); override; @@ -45,45 +39,37 @@ type destructor Destroy; override; published property FileName: string read GetFileName write SetFileName; - property ShowFileOpButtons: boolean read GetShowFileOpButtons write SetShowFileOpButtons; - property MultiSelect: boolean read GetMultiSelect write SetMultiSelect; end; -(****************************************** TGTKCOLORSELECTIONDIALOG ************************************************************) - TGTKColorSelectionDialog = class(TGTKDialog) +(****************************************** TGTKCOLORBUTTON *******************************************************************) + TGTKColorButton = class(TGTKButton) private - function GetShowOpacity: boolean; - procedure SetShowOpacity(Value: boolean); - function GetShowPalette: boolean; - procedure SetShowPalette(Value: boolean); - function GetColor: TGDKColor; - procedure SetColor(Value: TGDKColor); + FColorChanged: TNotifyEvent; + function GetColor: string; + procedure SetColor(Value: string); protected public constructor Create(AOwner: TComponent); override; - constructor CreateWithTitle(AOwner: TComponent; const Title: string); destructor Destroy; override; - property Color: TGDKColor read GetColor write SetColor; + procedure SetDefaultColor; published - property ShowOpacity: boolean read GetShowOpacity write SetShowOpacity; - property ShowPalette: boolean read GetShowPalette write SetShowPalette; + property Color: string read GetColor write SetColor; + property OnColorChanged: TNotifyEvent read FColorChanged write FColorChanged; end; -(****************************************** TGTKFONTSELECTIONDIALOG *************************************************************) - TGTKFontSelectionDialog = class(TGTKDialog) +(****************************************** TGTKFontButton *************************************************************) + TGTKFontButton = class(TGTKButton) private + FFontNameChanged: TNotifyEvent; function GetFontName: string; procedure SetFontName(Value: string); - function GetPreviewText: string; - procedure SetPreviewText(Value: string); protected public constructor Create(AOwner: TComponent); override; - constructor CreateWithTitle(AOwner: TComponent; const Title: string); destructor Destroy; override; published property FontName: string read GetFontName write SetFontName; - property PreviewText: string read GetPreviewText write SetPreviewText; + property OnFontNameChanged: TNotifyEvent read FFontNameChanged write FFontNameChanged; end; (********************************************************************************************************************************) @@ -95,154 +81,107 @@ uses SysUtils, DateUtils; (********************************************************************************************************************************) (********************************************************************************************************************************) -constructor TGTKFileSelectionDialog.Create(AOwner: TComponent); +constructor TGTKFileChooserDialog.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_file_selection_new(nil); + FWidget := gtk_file_chooser_dialog_new(nil, PGtkWindow((AOwner as TCustomGTKForm).FWidget), GTK_FILE_CHOOSER_ACTION_OPEN, nil, [nil]); Show; end; -constructor TGTKFileSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string); +constructor TGTKFileChooserDialog.CreateWithTitle(AOwner: TComponent; const Title: string); begin inherited Create(AOwner); - FWidget := gtk_file_selection_new(PChar(Title)); + FWidget := gtk_file_chooser_dialog_new(PChar(Title), PGtkWindow((AOwner as TCustomGTKForm).FWidget), GTK_FILE_CHOOSER_ACTION_OPEN, nil, [nil]); Show; end; -destructor TGTKFileSelectionDialog.Destroy; +destructor TGTKFileChooserDialog.Destroy; begin inherited Destroy; end; -function TGTKFileSelectionDialog.GetFileName: string; -begin - Result := string(gtk_file_selection_get_filename(PGtkFileSelection(FWidget))); -end; - -procedure TGTKFileSelectionDialog.SetFileName(Value: string); -begin - gtk_file_selection_set_filename(PGtkFileSelection(FWidget), PChar(Value)); -end; - -function TGTKFileSelectionDialog.GetShowFileOpButtons: boolean; -var b: Boolean; +function TGTKFileChooserDialog.GetFileName: string; begin - b := False; - g_object_get(PGObject(FWidget), 'show-fileops', [@b, nil]); - Result := b; + Result := String(gtk_file_chooser_get_filename(PGtkFileChooser(FWidget))); end; -procedure TGTKFileSelectionDialog.SetShowFileOpButtons(Value: boolean); +procedure TGTKFileChooserDialog.SetFileName(Value: string); begin - if Value then gtk_file_selection_show_fileop_buttons(PGtkFileSelection(FWidget)) - else gtk_file_selection_hide_fileop_buttons(PGtkFileSelection(FWidget)); -end; - -function TGTKFileSelectionDialog.GetMultiSelect: boolean; -begin - Result := gtk_file_selection_get_select_multiple(PGtkFileSelection(FWidget)); -end; - -procedure TGTKFileSelectionDialog.SetMultiSelect(Value: boolean); -begin - gtk_file_selection_set_select_multiple(PGtkFileSelection(FWidget), Value); + gtk_file_chooser_set_filename(PGtkFileChooser(FWidget), PChar(Value)); end; (********************************************************************************************************************************) (********************************************************************************************************************************) -constructor TGTKColorSelectionDialog.Create(AOwner: TComponent); +procedure GtkColorButton_color_set(widget: PGtkColorButton; user_data: gpointer); cdecl; begin - inherited Create(AOwner); - FWidget := gtk_color_selection_dialog_new(nil); - Show; + if Assigned(user_data) and Assigned(TGTKColorButton(user_data).FColorChanged) then + TGTKColorButton(user_data).FColorChanged(TGTKColorButton(user_data)); end; -constructor TGTKColorSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string); +constructor TGTKColorButton.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_color_selection_dialog_new(PChar(Title)); + FWidget := gtk_color_button_new(); + g_signal_connect_data(PGObject(FWidget), 'color-set', TGCallback(@GtkColorButton_color_set), Self, nil, G_CONNECT_DEFAULT); Show; + FColorChanged := nil; end; -destructor TGTKColorSelectionDialog.Destroy; +destructor TGTKColorButton.Destroy; begin inherited Destroy; end; -function TGTKColorSelectionDialog.GetShowOpacity: boolean; +function TGTKColorButton.GetColor: string; +var c: TGdkRGBA; begin - Result := gtk_color_selection_get_has_opacity_control(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel)); + FillChar(c, sizeof(TGdkRGBA), 0); + gtk_color_chooser_get_rgba(PGtkColorChooser(FWidget), @c); + Result := string(gdk_rgba_to_string(@c)); end; -procedure TGTKColorSelectionDialog.SetShowOpacity(Value: boolean); +procedure TGTKColorButton.SetColor(Value: string); +var c: TGdkRGBA; begin - gtk_color_selection_set_has_opacity_control(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Value); + if gdk_rgba_parse(@c, PChar(Value)) then + gtk_color_chooser_set_rgba(PGtkColorChooser(FWidget), @c); end; -function TGTKColorSelectionDialog.GetShowPalette: boolean; +procedure TGTKColorButton.SetDefaultColor; begin - Result := gtk_color_selection_get_has_palette(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel)); -end; - -procedure TGTKColorSelectionDialog.SetShowPalette(Value: boolean); -begin - gtk_color_selection_set_has_palette(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Value); -end; - -function TGTKColorSelectionDialog.GetColor: TGDKColor; -var Col: gdk2.TGDkColor; -begin - FillChar(Col, sizeof(gdk2.TGDkColor), 0); - gtk_color_selection_get_current_color(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), @Col); - Result := PGdkColorToGDKColor(@Col); -end; - -procedure TGTKColorSelectionDialog.SetColor(Value: TGDKColor); -var Col: PGDkColor; -begin - Col := GDKColorToPGdkColor(Value); - gtk_color_selection_set_current_color(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Col); + gtk_color_chooser_set_rgba(PGtkColorChooser(FWidget), nil); end; (********************************************************************************************************************************) (********************************************************************************************************************************) -constructor TGTKFontSelectionDialog.Create(AOwner: TComponent); +procedure GtkFontButton_font_set(widget: PGtkFontButton; user_data: gpointer); cdecl; begin - inherited Create(AOwner); - FWidget := gtk_font_selection_dialog_new(nil); - Show; + if Assigned(user_data) and Assigned(TGTKFontButton(user_data).FFontNameChanged) then + TGTKFontButton(user_data).FFontNameChanged(TGTKFontButton(user_data)); end; -constructor TGTKFontSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string); +constructor TGTKFontButton.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_font_selection_dialog_new(PChar(Title)); + FWidget := gtk_font_button_new(); + g_signal_connect_data(PGObject(FWidget), 'font-set', TGCallback(@GtkFontButton_font_set), Self, nil, G_CONNECT_DEFAULT); Show; + FFontNameChanged := nil; end; -destructor TGTKFontSelectionDialog.Destroy; +destructor TGTKFontButton.Destroy; begin inherited Destroy; end; -function TGTKFontSelectionDialog.GetFontName: string; -begin - Result := String(gtk_font_selection_dialog_get_font_name(PGtkFontSelectionDialog(FWidget))); -end; - -procedure TGTKFontSelectionDialog.SetFontName(Value: string); -begin - gtk_font_selection_dialog_set_font_name(PGtkFontSelectionDialog(FWidget), PChar(Value)); -end; - -function TGTKFontSelectionDialog.GetPreviewText: string; +function TGTKFontButton.GetFontName: string; begin - Result := String(gtk_font_selection_dialog_get_preview_text(PGtkFontSelectionDialog(FWidget))); + Result := String(gtk_font_chooser_get_font(PGtkFontChooser(FWidget))); end; -procedure TGTKFontSelectionDialog.SetPreviewText(Value: string); +procedure TGTKFontButton.SetFontName(Value: string); begin - gtk_font_selection_dialog_set_preview_text(PGtkFontSelectionDialog(FWidget), PChar(Value)); + gtk_font_chooser_set_font(PGtkFontChooser(FWidget), PChar(Value)); end; (********************************************************************************************************************************) diff --git a/libgtk_kylix/GTKExtCtrls.pas b/libgtk_kylix/GTKExtCtrls.pas index 777f8ed..4cb925e 100644 --- a/libgtk_kylix/GTKExtCtrls.pas +++ b/libgtk_kylix/GTKExtCtrls.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKExtCtrls - Extended visual controls - Version 0.6.23 (last updated 2008-08-23) Copyright (C) 2004 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKExtCtrls; interface -uses gtk2, lazglib2, lazgobject2, Classes, GTKControls, GTKStdCtrls, GTKMenus; +uses lazglib2, lazgobject2, lazgtk3, Classes, GTKControls, GTKStdCtrls, GTKMenus; type @@ -47,24 +46,6 @@ type constructor Create(AOwner: TComponent); override; end; -(****************************************** TGTKHANDLEBOX ***********************************************************************) - TGTKHandleBox = class(TGTKBin) - private - function GetShadowType: TGTKShadowType; - function GetHandlePosition: TGTKPosition; - function GetSnapEdge: TGTKPosition; - procedure SetShadowType(Value: TGTKShadowType); - procedure SetHandlePosition(Value: TGTKPosition); - procedure SetSnapEdge(Value: TGTKPosition); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property ShadowType: TGTKShadowType read GetShadowType write SetShadowType; - property HandlePosition: TGTKPosition read GetHandlePosition write SetHandlePosition; - property SnapEdge: TGTKPosition read GetSnapEdge write SetSnapEdge; - end; - (****************************************** TGTKPROGRESSBAR *********************************************************************) TGTKProgressBarOrientation = (poLeftToRight, poRightToLeft, poBottomToTop, poTopToBottom); TGTKProgressBar = class(TGTKControl) @@ -73,12 +54,10 @@ type function GetText: string; function GetFraction: Double; function GetPulseStep: Double; - function GetOrientation: TGTKProgressBarOrientation; function GetValue: Int64; procedure SetText(Value: string); procedure SetFraction(Value: Double); procedure SetPulseStep(Value: Double); - procedure SetOrientation(Value: TGTKProgressBarOrientation); procedure SetValue(Value: Int64); public constructor Create(AOwner: TComponent); override; @@ -88,7 +67,6 @@ type property Text: string read GetText write SetText; property Fraction: Double read GetFraction write SetFraction; property PulseStep: Double read GetPulseStep write SetPulseStep; - property Orientation: TGTKProgressBarOrientation read GetOrientation write SetOrientation; property Max: Int64 read FMax write FMax; property Value: Int64 read GetValue write SetValue; end; @@ -147,10 +125,6 @@ type procedure SetCaption(PageNo: integer; Caption: string); procedure NextPage; procedure PrevPage; - function GetExpandTab(PageNo: integer): boolean; - procedure SetExpandTab(PageNo: integer; Value: boolean); - function GetFillTab(PageNo: integer): boolean; - procedure SetFillTab(PageNo: integer; Value: boolean); function GetTabLabel(PageNo: integer): TGTKLabel; published property PageIndex: integer read GetPageIndex write SetPageIndex; @@ -161,23 +135,45 @@ type property OnSwitchPage: TNotifyEvent read FOnSwitchPage write FOnSwitchPage; end; -(****************************************** TGTKOPTIONMENU **********************************************************************) - TGTKOptionMenu = class(TGTKButton) +(****************************************** TGTKCOMBOBOX ***********************************************************************) + TGTKComboBox = class(TGTKBin) private - FItems: TGTKMenuItem; FOnChanged: TNotifyEvent; - procedure ItemsChanged(Sender: TObject); function GetItemIndex: integer; + function GetItemID: string; procedure SetItemIndex(Value: integer); + procedure SetItemID(Value: string); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; + procedure AppendItem(const Text: string); + procedure AppendItemID(const ID: string; const Text: string); + procedure ClearItems(); published - property Items: TGTKMenuItem read FItems; property ItemIndex: integer read GetItemIndex write SetItemIndex; + property ItemID: string read GetItemID write SetItemID; property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; end; +(****************************************** TGTKCOMBOBOXTEXT *******************************************************************) + TGTKComboBoxText = class(TGTKComboBox) + private + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + end; + +(****************************************** TGTKCOMBOBOXENTRY *******************************************************************) + TGTKComboBoxEntry = class(TGTKComboBox) + private + public + Entry: TGTKEntry; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + end; + (****************************************** TGTKSCROLLEDWINDOW ******************************************************************) TGTKScrollBarPolicy = (sbAlways, sbAutomatic, sbNever); TGTKScrolledWindow = class(TGTKBin) @@ -199,7 +195,7 @@ type end; (****************************************** TGTKBUTTONBOX ***********************************************************************) - TGTKButtonBoxLayout = (blDefault, blSpread, blEdge, blStart, blEnd); + TGTKButtonBoxLayout = (blDefault, blSpread, blEdge, blStart, blEnd, blCenter, blExpand); TGTKButtonBox = class(TGTKBox) private function GetLayout: TGTKButtonBoxLayout; @@ -245,7 +241,7 @@ end; constructor TGTKHSeparator.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_hseparator_new; + FWidget := gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); Show; end; @@ -254,54 +250,10 @@ end; constructor TGTKVSeparator.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_vseparator_new; + FWidget := gtk_separator_new(GTK_ORIENTATION_VERTICAL); Show; end; -(********************************************************************************************************************************) -(********************************************************************************************************************************) -constructor TGTKHandleBox.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FWidget := gtk_handle_box_new; - Show; -end; - -destructor TGTKHandleBox.Destroy; -begin - inherited Destroy; -end; - -function TGTKHandleBox.GetShadowType: TGTKShadowType; -begin - Result := TGTKShadowType(gtk_handle_box_get_shadow_type(PGtkHandleBox(FWidget))); -end; - -procedure TGTKHandleBox.SetShadowType(Value: TGTKShadowType); -begin - gtk_handle_box_set_shadow_type(PGtkHandleBox(FWidget), gtk2.TGtkShadowType(Value)); -end; - -function TGTKHandleBox.GetHandlePosition: TGTKPosition; -begin - Result := TGTKPosition(gtk_handle_box_get_handle_position(PGtkHandleBox(FWidget))); -end; - -procedure TGTKHandleBox.SetHandlePosition(Value: TGTKPosition); -begin - gtk_handle_box_set_handle_position(PGtkHandleBox(FWidget), Integer(Value)); -end; - -function TGTKHandleBox.GetSnapEdge: TGTKPosition; -begin - Result := TGTKPosition(gtk_handle_box_get_snap_edge(PGtkHandleBox(FWidget))); -end; - -procedure TGTKHandleBox.SetSnapEdge(Value: TGTKPosition); -begin - gtk_handle_box_set_snap_edge(PGtkHandleBox(FWidget), Integer(Value)); -end; - (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKProgressBar.Create(AOwner: TComponent); @@ -352,16 +304,6 @@ begin gtk_progress_bar_set_pulse_step(PGtkProgressbar(FWidget), Value); end; -function TGTKProgressBar.GetOrientation: TGTKProgressBarOrientation; -begin - Result := TGTKProgressBarOrientation(gtk_progress_bar_get_orientation(PGtkProgressBar(FWidget))); -end; - -procedure TGTKProgressBar.SetOrientation(Value: TGTKProgressBarOrientation); -begin - gtk_progress_bar_set_orientation(PGtkProgressbar(FWidget), gtk2.TGtkProgressBarOrientation(Value)); -end; - function TGTKProgressBar.GetValue: Int64; begin Result := Round(Fraction * Max); @@ -419,7 +361,7 @@ end; constructor TGTKHPaned.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_hpaned_new; + FWidget := gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); Show; end; @@ -428,14 +370,14 @@ end; constructor TGTKVPaned.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_vpaned_new; + FWidget := gtk_paned_new(GTK_ORIENTATION_VERTICAL); Show; end; (********************************************************************************************************************************) (********************************************************************************************************************************) -procedure TGTKNotebook_switch_page(notebook: PGtkNotebook; page: PGtkNotebookPage; page_num: guint; user_data: gpointer); cdecl; +procedure TGTKNotebook_switch_page(notebook: PGtkNotebook; page: PGtkWidget; page_num: guint; user_data: gpointer); cdecl; begin if Assigned(user_data) and Assigned(TGTKNotebook(user_data).FOnSwitchPage) then TGTKNotebook(user_data).FOnSwitchPage(TObject(user_data)); end; @@ -454,11 +396,9 @@ begin inherited Destroy; end; -function _gtk_notebook_append_page(notebook:PGtkNotebook; child:PGtkWidget; tab_label:PGtkWidget): gint; cdecl; external gtklib name 'gtk_notebook_append_page'; - function TGTKNotebook.AppendPage(Child: TGTKControl; Caption: string): integer; begin - Result := _gtk_notebook_append_page(PGtkNotebook(FWidget), Child.FWidget, nil); + Result := gtk_notebook_append_page(PGtkNotebook(FWidget), Child.FWidget, nil); gtk_notebook_set_tab_label_text(PGtkNotebook(FWidget), Child.FWidget, PChar(Caption)); end; @@ -484,7 +424,7 @@ end; procedure TGTKNotebook.SetPageIndex(Value: integer); begin - gtk_notebook_set_page(PGtkNotebook(FWidget), Value); + gtk_notebook_set_current_page(PGtkNotebook(FWidget), Value); end; procedure TGTKNotebook.NextPage; @@ -504,7 +444,7 @@ end; procedure TGTKNotebook.SetTabPosition(Value: TGTKPosition); begin - gtk_notebook_set_tab_pos(PGtkNotebook(FWidget), Integer(Value)); + gtk_notebook_set_tab_pos(PGtkNotebook(FWidget), TGtkPositionType(Value)); end; function TGTKNotebook.GetShowTabs: boolean; @@ -537,79 +477,91 @@ begin gtk_notebook_set_scrollable(PGtkNotebook(FWidget), Value); end; -procedure _gtk_notebook_query_tab_label_packing(notebook:PGtkNotebook;child:PGtkWidget;expand:Pgboolean;fill:Pgboolean;pack_type:PGtkPackType); cdecl; external gtklib name 'gtk_notebook_query_tab_label_packing'; +function TGTKNotebook.GetTabLabel(PageNo: integer): TGTKLabel; +begin + Result := TGTKLabel.CreateFromWidget(Self, gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo))); +end; -function TGTKNotebook.GetExpandTab(PageNo: integer): boolean; -var expand: gboolean; +(********************************************************************************************************************************) +(********************************************************************************************************************************) +procedure TGTKComboBox_changed(widget: PGtkComboBox; user_data: pgpointer); cdecl; begin - expand := False; - _gtk_notebook_query_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), @expand, nil, nil); - Result := expand; + if Assigned(TGTKComboBox(user_data).FOnChanged) then TGTKComboBox(user_data).FOnChanged(TGTKComboBox(user_data)); end; -procedure TGTKNotebook.SetExpandTab(PageNo: integer; Value: boolean); +constructor TGTKComboBox.Create(AOwner: TComponent); begin - gtk_notebook_set_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), Value, GetFillTab(PageNo), GTK_PACK_START); + inherited Create(AOwner); + FOnChanged := nil; end; -function TGTKNotebook.GetFillTab(PageNo: integer): boolean; -var fill: gboolean; +destructor TGTKComboBox.Destroy; begin - fill := False; - _gtk_notebook_query_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), nil, @fill, nil); - Result := fill; + inherited Destroy; end; -procedure TGTKNotebook.SetFillTab(PageNo: integer; Value: boolean); +function TGTKComboBox.GetItemIndex: integer; begin - gtk_notebook_set_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), GetExpandTab(PageNo), Value, GTK_PACK_START); + Result := gtk_combo_box_get_active(PGtkComboBox(FWidget)); end; -function TGTKNotebook.GetTabLabel(PageNo: integer): TGTKLabel; +function TGTKComboBox.GetItemID: string; begin - Result := TGTKLabel.CreateFromWidget(Self, gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo))); + Result := string(gtk_combo_box_get_active_id(PGtkComboBox(FWidget))); end; -(********************************************************************************************************************************) -(********************************************************************************************************************************) -procedure TGTKOptionMenu_changed(optionmenu: PGtkOptionMenu; user_data: pgpointer); cdecl; +procedure TGTKComboBox.SetItemIndex(Value: integer); begin - if Assigned(TGTKOptionMenu(user_data).FOnChanged) then TGTKOptionMenu(user_data).FOnChanged(TGTKOptionMenu(user_data)); + gtk_combo_box_set_active(PGtkComboBox(FWidget), Value); end; -constructor TGTKOptionMenu.Create(AOwner: TComponent); +procedure TGTKComboBox.SetItemID(Value: string); begin - inherited Create(AOwner); - FOnChanged := nil; - FWidget := gtk_option_menu_new; - g_signal_connect_data(PGObject(FWidget), 'changed', TGCallback(@TGTKOptionMenu_changed), Self, nil, G_CONNECT_DEFAULT); - Show; - FItems := TGTKMenuItem.Create(Self); - FItems.FParentMenu := Self; - FItems.Notify := @ItemsChanged; + gtk_combo_box_set_active_id(PGtkComboBox(FWidget), PChar(Value)); end; -destructor TGTKOptionMenu.Destroy; +procedure TGTKComboBox.AppendItem(const Text: string); begin - FItems.Notify := nil; - FItems.Free; - inherited Destroy; + gtk_combo_box_text_append_text(PGtkComboBoxText(FWidget), PChar(Text)); end; -procedure TGTKOptionMenu.ItemsChanged(Sender: TObject); +procedure TGTKComboBox.AppendItemID(const ID: string; const Text: string); begin - if Assigned(FItems.FMenu) and (gtk_option_menu_get_menu(PGtkOptionMenu(FWidget)) <> FItems.FMenu) - then gtk_option_menu_set_menu(PGtkOptionMenu(FWidget), FItems.FMenu); + gtk_combo_box_text_append(PGtkComboBoxText(FWidget), PChar(ID), PChar(Text)); end; -function TGTKOptionMenu.GetItemIndex: integer; +procedure TGTKComboBox.ClearItems(); begin - Result := gtk_option_menu_get_history(PGtkOptionMenu(FWidget)); + gtk_combo_box_text_remove_all(PGtkComboBoxText(FWidget)); end; -procedure TGTKOptionMenu.SetItemIndex(Value: integer); +(********************************************************************************************************************************) +(********************************************************************************************************************************) +constructor TGTKComboBoxText.Create(AOwner: TComponent); begin - gtk_option_menu_set_history(PGtkOptionMenu(FWidget), Value); + inherited Create(AOwner); + FWidget := gtk_combo_box_text_new(); + g_signal_connect_data(PGObject(FWidget), 'changed', TGCallback(@TGTKComboBox_changed), Self, nil, G_CONNECT_DEFAULT); + Show; +end; + +destructor TGTKComboBoxText.Destroy; +begin + inherited Destroy; +end; + +constructor TGTKComboBoxEntry.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FWidget := gtk_combo_box_text_new_with_entry(); + Entry := TGTKEntry.CreateFromWidget(Self, gtk_bin_get_child(PGtkBin(FWidget))); + g_signal_connect_data(PGObject(FWidget), 'changed', TGCallback(@TGTKComboBox_changed), Self, nil, G_CONNECT_DEFAULT); + Show; +end; + +destructor TGTKComboBoxEntry.Destroy; +begin + inherited Destroy; end; (********************************************************************************************************************************) @@ -657,12 +609,12 @@ end; procedure TGTKScrolledWindow.SetShadowType(Value: TGTKShadowType); begin - gtk_scrolled_window_set_shadow_type(PGtkScrolledWindow(FWidget), gtk2.TGtkShadowType(Value)); + gtk_scrolled_window_set_shadow_type(PGtkScrolledWindow(FWidget), lazgtk3.TGtkShadowType(Value)); end; procedure TGTKScrolledWindow.AddWithViewPort(Control: TGTKControl); begin - gtk_scrolled_window_add_with_viewport(PGtkScrolledWindow(FWidget), Control.FWidget); + gtk_container_add(PGtkContainer(FWidget), Control.FWidget); end; (********************************************************************************************************************************) @@ -679,7 +631,7 @@ end; procedure TGTKButtonBox.SetLayout(Value: TGTKButtonBoxLayout); begin - gtk_button_box_set_layout(PGtkButtonBox(FWidget), Integer(Value)); + gtk_button_box_set_layout(PGtkButtonBox(FWidget), TGtkButtonBoxStyle(Value)); end; (********************************************************************************************************************************) @@ -687,7 +639,7 @@ end; constructor TGTKHButtonBox.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_hbutton_box_new; + FWidget := gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); Show; end; @@ -696,7 +648,7 @@ end; constructor TGTKVButtonBox.Create(AOwner: TComponent); begin inherited Create(AOwner); - FWidget := gtk_vbutton_box_new; + FWidget := gtk_button_box_new(GTK_ORIENTATION_VERTICAL); Show; end; diff --git a/libgtk_kylix/GTKForms.pas b/libgtk_kylix/GTKForms.pas index a3572b6..b1467db 100644 --- a/libgtk_kylix/GTKForms.pas +++ b/libgtk_kylix/GTKForms.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKForms - Basic windows (TGTKForm, TGTKDialog), TGTKApplication, TGDKScreen - Version 0.6.28 (last updated 2008-10-12) Copyright (C) 2007 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKForms; interface -uses gtk2, gdk2, lazglib2, lazgobject2, Classes, SysUtils, GTKControls, GTKConsts; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, Classes, SysUtils, GTKControls, GTKConsts; type // Some basic types PCharArray = array[0..0] of PChar; @@ -109,7 +108,6 @@ type // Some basic types property Default: TGTKControl write SetDefault; public FAccelGroup: PGtkAccelGroup; - Tooltips: TGTKTooltips; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Release; @@ -144,9 +142,7 @@ type // Some basic types private FButtons: TMessageButtons; FOnResponse: TGTKDialogResponseEvent; - function GetShowSeparator: boolean; procedure SetButtons(Value: TMessageButtons); - procedure SetShowSeparator(Value: boolean); procedure SetModalResult(Value: TMessageButton); procedure SetDefaultButton(Value: TMessageButton); procedure SetParentForm(Value: TCustomGTKForm); @@ -159,7 +155,6 @@ type // Some basic types procedure SetResponseSensitive(ButtonID: integer; Sensitive: boolean); published property Buttons: TMessageButtons read FButtons write SetButtons default []; - property ShowSeparator: boolean read GetShowSeparator write SetShowSeparator; property ModalResult: TMessageButton write SetModalResult; property DefaultButton: TMessageButton write SetDefaultButton; property Caption; @@ -275,7 +270,7 @@ begin Result := not TCustomGTKForm(user_data).Close; end; -procedure TCustomGTKForm_show(anobject : PGtkObject; user_data: pgpointer); cdecl; +procedure TCustomGTKForm_show(widget: PGtkWidget; user_data: gpointer); cdecl; begin if Assigned(TCustomGTKForm(user_data).FOnShow) then TCustomGTKForm(user_data).FOnShow(TCustomGTKForm(user_data)); end; @@ -288,7 +283,6 @@ end; constructor TCustomGTKForm.Create(AOwner: TComponent); begin inherited Create(AOwner); - Tooltips := TGTKTooltips.Create(Self); FOnClose := nil; FOnCloseQuery := nil; FOnDestroy := nil; @@ -304,7 +298,6 @@ begin if Assigned(FOnDestroy) then FOnDestroy(Self); except end; - Tooltips.Free; if not Application.Terminated then gtk_widget_destroy(FWidget); inherited Destroy; end; @@ -409,7 +402,7 @@ end; procedure TCustomGTKForm.SetWindowTypeHint(Value: TGDKWindowTypeHint); begin - gtk_window_set_type_hint(PGtkWindow(FWidget), gdk2.TGdkWindowTypeHint(Value)); + gtk_window_set_type_hint(PGtkWindow(FWidget), lazgdk3.TGdkWindowTypeHint(Value)); end; function TCustomGTKForm.GetWindowState: TGDKWindowState; @@ -689,9 +682,8 @@ end; function TGTKApplication_MessageBox_key_press_event(widget: PGtkWidget; event: PGdkEventKey; user_data : gpointer): gboolean; cdecl; begin Result := False; - if event^.keyval = GDK_ESCAPE then begin - gtk_dialog_response(PGtkDialog(widget), integer(user_data)); -// Beep; + if event^.keyval = GDK_KEY_Escape then begin + gtk_dialog_response(PGtkDialog(widget), TGtkResponseType(guint(user_data))); Result := True; end; end; @@ -717,14 +709,14 @@ begin Result := Escape; Exit; end; - Dialog := gtk_message_dialog_new(ParentWindow, GTK_DIALOG_MODAL or GTK_DIALOG_DESTROY_WITH_PARENT, TMessageStyleID[Integer(Style)], - GTK_BUTTONS_NONE, '%s', PChar(Text)); + Dialog := gtk_message_dialog_new(ParentWindow, [GTK_DIALOG_MODAL, GTK_DIALOG_DESTROY_WITH_PARENT], TMessageStyleID[Integer(Style)], + GTK_BUTTONS_NONE, '%s', [PChar(Text)]); for i := 1 to NumMessageButtons do if TMessageButton(i - 1) in Buttons - then gtk_dialog_add_button(PGtkDialog(Dialog), MessageButtonID[i], i); + then gtk_dialog_add_button(PGtkDialog(Dialog), MessageButtonID[i], TGtkResponseType(i)); if Escape <> mbNone then g_signal_connect_data(PGObject(Dialog), 'key-press-event', TGCallback(@TGTKApplication_MessageBox_key_press_event), Pointer(Ord(Escape) + 1{MessageButtonID[Ord(Escape)]}), nil, G_CONNECT_DEFAULT); - if Default <> mbNone then gtk_dialog_set_default_response(PGtkDialog(Dialog), Ord(Default)); + if Default <> mbNone then gtk_dialog_set_default_response(PGtkDialog(Dialog), TGtkResponseType(Ord(Default))); Result := TMessageButton(gtk_dialog_run(PGtkDialog(Dialog)) - 1); gtk_widget_destroy(Dialog); end; @@ -795,8 +787,8 @@ begin g_signal_connect_data(PGObject(FWidget), 'delete-event', TGCallback(@TCustomGTKForm_delete_event), Self, nil, G_CONNECT_DEFAULT); g_signal_connect_data(PGObject(FWidget), 'show', TGCallback(@TCustomGTKForm_show), Self, nil, G_CONNECT_DEFAULT); g_signal_connect_data(PGObject(FWidget), 'response', TGCallback(@TGTKDialog_response_event), Self, nil, G_CONNECT_DEFAULT); - ClientArea := TGTKVBox.CreateLinked(Self, PGtkDialog(FWidget)^.vbox); - ActionArea := TGTKHBox.CreateLinked(Self, PGtkDialog(FWidget)^.action_area); + ClientArea := TGTKVBox.CreateLinked(Self, gtk_dialog_get_content_area(PGtkDialog(FWidget))); + ActionArea := TGTKHBox.CreateLinked(Self, gtk_dialog_get_action_area(PGtkDialog(FWidget))); FButtons := []; Visible := False; SetResizeable(True); @@ -815,37 +807,27 @@ var i: integer; begin for i := 1 to NumMessageButtons do if TMessageButton(i - 1) in Value - then gtk_dialog_add_button(PGtkDialog(FWidget), MessageButtonID[i], i - 1); -end; - -function TGTKDialog.GetShowSeparator: boolean; -begin - Result := gtk_dialog_get_has_separator(PGtkDialog(FWidget)); -end; - -procedure TGTKDialog.SetShowSeparator(Value: boolean); -begin - gtk_dialog_set_has_separator(PGtkDialog(FWidget), Value); + then gtk_dialog_add_button(PGtkDialog(FWidget), MessageButtonID[i], TGtkResponseType(i - 1)); end; procedure TGTKDialog.SetModalResult(Value: TMessageButton); begin - gtk_dialog_response(PGtkDialog(FWidget), Integer(Value)); + gtk_dialog_response(PGtkDialog(FWidget), TGtkResponseType(Integer(Value))); end; procedure TGTKDialog.SetDefaultButton(Value: TMessageButton); begin - gtk_dialog_set_default_response(PGtkDialog(FWidget), Integer(Value)); + gtk_dialog_set_default_response(PGtkDialog(FWidget), TGtkResponseType(Integer(Value))); end; procedure TGTKDialog.AddButton(ButtonCaption: string; ButtonID: integer); begin - gtk_dialog_add_button(PGtkDialog(FWidget), PChar(ButtonCaption), ButtonID); + gtk_dialog_add_button(PGtkDialog(FWidget), PChar(ButtonCaption), TGtkResponseType(ButtonID)); end; procedure TGTKDialog.SetResponseSensitive(ButtonID: integer; Sensitive: boolean); begin - gtk_dialog_set_response_sensitive(PGtkDialog(FWidget), ButtonID, Sensitive); + gtk_dialog_set_response_sensitive(PGtkDialog(FWidget), TGtkResponseType(ButtonID), Sensitive); end; procedure TGTKDialog.SetParentForm(Value: TCustomGTKForm); diff --git a/libgtk_kylix/GTKMenus.pas b/libgtk_kylix/GTKMenus.pas index ed2bfba..5819d5c 100644 --- a/libgtk_kylix/GTKMenus.pas +++ b/libgtk_kylix/GTKMenus.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKMenus - Menu handling and related routines - Version 0.6.13 (last updated 2003-07-10) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKMenus; interface -uses gtk2, gdk2, glib2, lazglib2, lazgobject2, Classes, GTKControls, GTKConsts, GTKPixbuf; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, Classes, GTKControls, GTKConsts, GTKPixbuf; type (****************************************** TGDKSHORTCUTS ***********************************************************************) @@ -55,12 +54,11 @@ type end; (****************************************** TGTKMENUITEM ************************************************************************) - TGTKMenuItemType = (itLabel, itSeparator, itTearOff, itCheck, itImageText, itRadio); + TGTKMenuItemType = (itLabel, itSeparator, itCheck, itImageText, itRadio); TGTKMenuItemGroup = PGSList; TGTKMenuItem = class(TGTKBin) private FItems: TList; - FTearOffTitle: string; FOnClick: TNotifyEvent; FUKey: guint; FItemType: TGTKMenuItemType; @@ -71,17 +69,12 @@ type function GetCount: Integer; function GetItem(Index: Integer): TGTKMenuItem; function GetCaption: string; - function GetRightJustified: boolean; - function GetTornOff: boolean; function GetChecked: boolean; function GetGroup: TGTKMenuItemGroup; procedure SetCaption(Value: string); - procedure SetTearOffTitle(Value: string); - procedure SetRightJustified(Value: boolean); procedure SetItemType(Value: TGTKMenuItemType); - procedure SetTornOff(Value: boolean); procedure SetChecked(Value: boolean); - procedure SetStockIcon(Value: string); + procedure SetIconName(Value: string); procedure SetIcon(Value: TGDKPixbuf); procedure SetGroup(Value: TGTKMenuItemGroup); protected @@ -97,22 +90,17 @@ type procedure Clear; procedure Delete(Index: Integer); procedure Insert(Index: Integer; Item: TGTKMenuItem); - procedure TearOff; - procedure UnTearOff; procedure PopUp; procedure PopDown; procedure SetCaptionPlain(Value: string); property Count: Integer read GetCount; property Items[Index: Integer]: TGTKMenuItem read GetItem; default; property Caption: string read GetCaption write SetCaption; - property TearOffTitle: string read FTearOffTitle write SetTearOffTitle; - property RightJustified: boolean read GetRightJustified write SetRightJustified default False; property OnClick: TNotifyEvent read FOnClick write FOnClick; property ItemType: TGTKMenuItemType read FItemType write SetItemType default itLabel; - property TornOff: boolean read GetTornOff write SetTornOff; property Checked: boolean read GetChecked write SetChecked; property Notify: TNotifyEvent read FNotify write FNotify; - property StockIcon: string write SetStockIcon; + property IconName: string write SetIconName; property Icon: TGDKPixbuf write SetIcon; property Data: Pointer read FData write FData; property OnPopup: TNotifyEvent read FOnPopup write FOnPopup; @@ -131,7 +119,7 @@ type property Items: TGTKMenuItem read FItems; end; - + function MakeGDKShortCut(Key: word; Locked, ModAlt, ModShift, ModCtrl : boolean): TGDKShortCut; (********************************************************************************************************************************) @@ -142,6 +130,9 @@ implementation uses GTKForms; +function gtk_image_menu_item_new_with_mnemonic(const L: Pgchar): PGtkImageMenuItem; cdecl; external LazGtk3_library; + + (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKMenuBar.Create(AOwner: TComponent); @@ -180,7 +171,6 @@ begin FData := nil; FOnPopup := nil; ShortCuts := TGDKShortCuts.Create(Self); - FTearOffTitle := ''; FUKey := 0; Recreate; end; @@ -198,7 +188,6 @@ begin FNotify := nil; FData := nil; ShortCuts := TGDKShortCuts.Create(Self); - FTearOffTitle := ''; FUKey := 0; Recreate(AGroup); end; @@ -225,8 +214,7 @@ begin end; case FItemType of itLabel: FWidget := gtk_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption)); - itSeparator: FWidget := gtk_menu_item_new; - itTearOff: FWidget := gtk_tearoff_menu_item_new; + itSeparator: FWidget := gtk_separator_menu_item_new(); itCheck: FWidget := gtk_check_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption)); itImageText: begin FWidget := gtk_image_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption)); @@ -234,7 +222,7 @@ begin gtk_widget_show(FImageWidget); gtk_image_menu_item_set_image(PGtkImageMenuItem(FWidget), FImageWidget); end; - itRadio: FWidget := gtk_radio_menu_item_new_with_mnemonic(GLIB2.PGSList(AGroup), Pgchar(SCDefaultMenuItemCaption)); + itRadio: FWidget := gtk_radio_menu_item_new_with_mnemonic(PGSList(AGroup), Pgchar(SCDefaultMenuItemCaption)); end; g_signal_connect_data(PGObject(FWidget), 'activate', TGCallback(@TGTKMenuItem_activate), Self, nil, G_CONNECT_DEFAULT); Show; @@ -277,7 +265,7 @@ begin if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar) then begin if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar) - then gtk_menu_item_remove_submenu(PGtkMenuItem(FWidget)); + then gtk_menu_item_set_submenu(PGtkMenuItem(FWidget), nil); gtk_widget_destroy(FMenu); FMenu := nil; end; @@ -289,13 +277,12 @@ end; procedure TGTKMenuItem.Insert(Index: Integer; Item: TGTKMenuItem); begin - if (Item = Self) or (FItemType in [itSeparator, itTearOff]) then Exit; + if (Item = Self) or (FItemType in [itSeparator]) then Exit; if FItems = nil then begin FItems := TList.Create; if FMenu = nil then FMenu := gtk_menu_new; if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar) - then gtk_menu_item_set_submenu(PGtkMenuItem(FWidget), FMenu); - SetTearOffTitle(FTearOffTitle); + then gtk_menu_item_set_submenu(PGtkMenuItem(FWidget), PGtkMenu(FMenu)); end; Item.FParentMenu := Self; FItems.Insert(Index, Item); @@ -308,44 +295,20 @@ end; function TGTKMenuItem.GetCaption: string; begin Result := ''; - if FItemType in [itSeparator, itTearOff] then Exit; + if FItemType in [itSeparator] then Exit; if Assigned(ChildControl) then Result := String(gtk_label_get_text(PGtkLabel(ChildControl))); end; procedure TGTKMenuItem.SetCaption(Value: string); begin - if FItemType in [itSeparator, itTearOff] then Exit; + if FItemType in [itSeparator] then Exit; gtk_label_set_markup_with_mnemonic(PGtkLabel(ChildControl), PChar(Value)); - if FTearOffTitle = '' then SetTearOffTitle(Value); end; procedure TGTKMenuItem.SetCaptionPlain(Value: string); begin - if FItemType in [itSeparator, itTearOff] then Exit; + if FItemType in [itSeparator] then Exit; gtk_label_set_markup(PGtkLabel(ChildControl), PChar(Value)); - if FTearOffTitle = '' then SetTearOffTitle(Value); -end; - -procedure TGTKMenuItem.SetTearOffTitle(Value: string); -begin - FTearOffTitle := Value; - if FItemType = itTearOff then begin - if Assigned(FParentMenu) and (FParentMenu is TGTKMenuItem) and Assigned((FParentMenu as TGTKMenuItem).FMenu) - then gtk_menu_set_title(PGtkMenu((FParentMenu as TGTKMenuItem).FMenu), PChar(FTearOffTitle)) - end else if Assigned(FMenu) then gtk_menu_set_title(PGtkMenu(FMenu), PChar(FTearOffTitle)); -end; - -function TGTKMenuItem.GetRightJustified: boolean; -begin - Result := False; - if FItemType in [itSeparator, itTearOff] then Exit; - Result := gtk_menu_item_get_right_justified(PGtkMenuItem(FWidget)); -end; - -procedure TGTKMenuItem.SetRightJustified(Value: boolean); -begin - if FItemType in [itSeparator, itTearOff] then Exit; - gtk_menu_item_set_right_justified(PGtkMenuItem(FWidget), Value); end; procedure TGTKMenuItem.SetItemType(Value: TGTKMenuItemType); @@ -356,33 +319,6 @@ begin end; end; -function TGTKMenuItem.GetTornOff: boolean; -var b: gboolean; -begin - b := False; - if FItemType = itTearOff then g_object_get(PGObject(FWidget), 'tearoff-state', [@b, nil]) else - if Assigned(FMenu) and (Count > 0) then g_object_get(PGObject(FMenu), 'tearoff-state', [@b, nil]); - Result := b; -end; - -procedure TGTKMenuItem.SetTornOff(Value: boolean); -begin - if FItemType = itTearOff then begin - if Assigned(FParentMenu) and (FParentMenu is TGTKMenuItem) and Assigned((FParentMenu as TGTKMenuItem).FMenu) - then gtk_menu_set_tearoff_state(PGtkMenu((FParentMenu as TGTKMenuItem).FMenu), Value); - end else if Assigned(FMenu) then gtk_menu_set_tearoff_state(PGtkMenu(FMenu), Value); -end; - -procedure TGTKMenuItem.TearOff; -begin - SetTornOff(True); -end; - -procedure TGTKMenuItem.UnTearOff; -begin - SetTornOff(False); -end; - function TGTKMenuItem.GetChecked: boolean; begin Result := False; @@ -407,9 +343,9 @@ begin if (FItems <> nil) and (FItems.Count > 0) then gtk_menu_popdown(PGtkMenu(FMenu)); end; -procedure TGTKMenuItem.SetStockIcon(Value: string); +procedure TGTKMenuItem.SetIconName(Value: string); begin - gtk_image_set_from_stock(PGtkImage(FImageWidget), PChar(Value), GTK_ICON_SIZE_MENU); + gtk_image_set_from_icon_name(PGtkImage(FImageWidget), PChar(Value), GTK_ICON_SIZE_MENU); end; procedure TGTKMenuItem.SetIcon(Value: TGDKPixbuf); @@ -419,12 +355,12 @@ end; function TGTKMenuItem.GetGroup: TGTKMenuItemGroup; begin - Result := LAZGLIB2.PGSList(gtk_radio_menu_item_get_group(PGtkRadioMenuItem(FWidget))); + Result := PGSList(gtk_radio_menu_item_get_group(PGtkRadioMenuItem(FWidget))); end; procedure TGTKMenuItem.SetGroup(Value: TGTKMenuItemGroup); begin - gtk_radio_menu_item_set_group(PGtkRadioMenuItem(FWidget), GLIB2.PGSList(Value) ); + gtk_radio_menu_item_set_group(PGtkRadioMenuItem(FWidget), PGSList(Value)); end; (********************************************************************************************************************************) @@ -453,10 +389,13 @@ begin end; procedure TGDKShortCuts.AddName(Item: string); -var Key, Modifiers: guint; +var accelerator_key: guint; + accelerator_mods: TGdkModifierType; begin - gtk_accelerator_parse(PChar(Item), @Key, @Modifiers); - if Key <> 0 then Add(MakeGDKShortCut(Key, False, Modifiers and GDK_MOD1_MASK = GDK_MOD1_MASK, Modifiers and GDK_SHIFT_MASK = GDK_SHIFT_MASK, Modifiers and GDK_CONTROL_MASK = GDK_CONTROL_MASK)); + accelerator_key := 0; + accelerator_mods := []; + gtk_accelerator_parse(PChar(Item), @accelerator_key, @accelerator_mods); + if accelerator_key <> 0 then Add(MakeGDKShortCut(accelerator_key, False, GDK_MOD1_MASK in accelerator_mods, GDK_SHIFT_MASK in accelerator_mods, GDK_CONTROL_MASK in accelerator_mods)); end; procedure TGDKShortCuts.Clear; @@ -465,18 +404,18 @@ begin for i := Count - 1 downto 0 do Delete(i); end; -function GetAccelMods(SC: TGDKShortCut): guint; +function GetAccelMods(SC: TGDKShortCut): TGdkModifierType; begin - Result := 0; - if SC.ModShift then Inc(Result, GDK_SHIFT_MASK); - if SC.ModCtrl then Inc(Result, GDK_CONTROL_MASK); - if SC.ModAlt then Inc(Result, GDK_MOD1_MASK); + Result := []; + if SC.ModShift then Result += [GDK_SHIFT_MASK]; + if SC.ModCtrl then Result += [GDK_CONTROL_MASK]; + if SC.ModAlt then Result += [GDK_MOD1_MASK]; end; function GetAccelFlags(SC: TGDKShortCut): TGtkAccelFlags; begin - Result := GTK_ACCEL_VISIBLE; - if SC.Locked then Result := GTK_ACCEL_LOCKED; + Result := [GTK_ACCEL_VISIBLE]; + if SC.Locked then Result := [GTK_ACCEL_LOCKED]; end; procedure TGDKShortCuts.Delete(Index: Integer); diff --git a/libgtk_kylix/GTKPixbuf.pas b/libgtk_kylix/GTKPixbuf.pas index c296add..c199ac4 100644 --- a/libgtk_kylix/GTKPixbuf.pas +++ b/libgtk_kylix/GTKPixbuf.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKPixbuf - Image handling routines - Version 0.6.2 (last updated 2003-03-30) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKPixbuf; interface -uses lazglib2, gdk2pixbuf, gtk2, Classes, GTKControls, GTKStdCtrls; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, lazgdkpixbuf2, Classes, GTKControls; type TGTKIconSize = (isInvalid, isMenu, isSmallToolbar, isLargeToolbar, isButton, isDND, isDialog); @@ -39,16 +38,14 @@ type public FPixbuf: PGdkPixbuf; constructor Create(AOwner: TComponent); override; - constructor CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean); destructor Destroy; override; function LoadFromFile(const FileName: string): boolean; - function LoadFromXPM(const Data: PPChar): boolean; - function LoadFromInline(Data: Pointer): boolean; + function LoadFromResource(ResourcePath: string): boolean; + function LoadFromIconTheme(IconName: string; IconSize: Integer): boolean; procedure Fill(const Pixel: Cardinal); procedure ScaleSimple(const DestWidth, DestHeight: integer); function Copy: PGdkPixbuf; procedure CopyArea(Source: TGDKPixbuf; SourceX, SourceY, SourceWidth, SourceHeight, DestX, DestY: integer); - procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); published property Width: integer read GetWidth; property Height: integer read GetHeight; @@ -56,7 +53,7 @@ type end; (****************************************** TGTKIMAGE ***************************************************************************) - TGTKImage = class(TGTKMisc) + TGTKImage = class(TGTKControl) private protected public @@ -66,7 +63,7 @@ type procedure SetFromPixbuf(Pixbuf: TGDKPixbuf); function GetPixbuf: PGdkPixbuf; procedure CopyFromPixbuf(Pixbuf: TGDKPixbuf); - procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); + procedure SetFromIconName(IconName: string; IconSize: TGTKIconSize); end; (********************************************************************************************************************************) @@ -84,15 +81,9 @@ begin FPixbuf := nil; end; -constructor TGDKPixbuf.CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean); -begin - inherited Create(AOwner); - FPixbuf := gdk_pixbuf_new(GDK_COLORSPACE_RGB, HasAlpha, BPP, Width, Height); -end; - destructor TGDKPixbuf.Destroy; begin - if FPixbuf <> nil then gdk_pixbuf_unref(FPixbuf); + if FPixbuf <> nil then g_object_unref(FPixbuf); inherited Destroy; end; @@ -121,23 +112,29 @@ begin if P <> nil then FPixbuf := P; end; -function TGDKPixbuf.LoadFromXPM(const Data: PPChar): boolean; +function TGDKPixbuf.LoadFromResource(ResourcePath: string): boolean; var P: Pointer; + Error: PGError; begin - P := gdk_pixbuf_new_from_xpm_data(Data); + Error := nil; + P := gdk_pixbuf_new_from_resource(PChar(ResourcePath), @Error); Result := P <> nil; + if Error <> nil then begin + WriteLn('TGDKPixbuf.LoadFromResource error: ', Error^.message); + g_error_free(Error); + end; if P <> nil then FPixbuf := P; end; -function TGDKPixbuf.LoadFromInline(Data: Pointer): boolean; +function TGDKPixbuf.LoadFromIconTheme(IconName: string; IconSize: Integer): boolean; var P: Pointer; Error: PGError; begin Error := nil; - P := gdk_pixbuf_new_from_inline(-1, Pguint8(Data)^, True, @Error); + P := gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), PChar(IconName), IconSize, [], @Error); Result := P <> nil; if Error <> nil then begin - WriteLn('TGDKPixbuf.LoadFromInline error: ', Error^.message); + WriteLn('TGDKPixbuf.LoadFromIconTheme error: ', Error^.message); g_error_free(Error); end; if P <> nil then FPixbuf := P; @@ -163,12 +160,6 @@ begin gdk_pixbuf_copy_area(Source.FPixbuf, SourceX, SourceY, SourceWidth, SourceHeight, FPixbuf, DestX, DestY); end; -procedure TGDKPixbuf.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); -begin - FPixbuf := gtk_widget_render_icon(gtk_label_new(nil), PChar(Stock_ID), Ord(IconSize), nil); -end; - - (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKImage.Create(AOwner: TComponent); @@ -203,9 +194,9 @@ begin gtk_image_set_from_pixbuf(PGtkImage(FWidget), Pixbuf.Copy); end; -procedure TGTKImage.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); +procedure TGTKImage.SetFromIconName(IconName: string; IconSize: TGTKIconSize); begin - gtk_image_set_from_stock(PGtkImage(FWidget), PChar(Stock_ID), Ord(IconSize)); + gtk_image_set_from_icon_name(PGtkImage(FWidget), PChar(IconName), lazgtk3.TGtkIconSize(IconSize)); end; (********************************************************************************************************************************) diff --git a/libgtk_kylix/GTKStdCtrls.pas b/libgtk_kylix/GTKStdCtrls.pas index 33ca7a6..2bca3bb 100644 --- a/libgtk_kylix/GTKStdCtrls.pas +++ b/libgtk_kylix/GTKStdCtrls.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKStdCtrls - Standard visual controls (such as buttons, labels, entry) - Version 0.6.24 (last updated 2008-11-17) Copyright (C) 2007 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKStdCtrls; interface -uses gtk2, glib2, lazglib2, lazgobject2, Classes, GTKControls, GTKConsts, GTKClasses; +uses lazglib2, lazgobject2, lazgtk3, Classes, GTKControls, GTKConsts; type @@ -34,51 +33,24 @@ type private FOnClick: TNotifyEvent; function GetCaption: string; - function GetUseStock: boolean; function GetUseUnderline: boolean; function GetBorderStyle: TGTKBorderStyle; procedure SetCaption(Value: string); - procedure SetUseStock(Value: boolean); procedure SetUseUnderline(Value: boolean); procedure SetBorderStyle(Value: TGTKBorderStyle); public constructor Create(AOwner: TComponent); override; - constructor CreateFromStock(AOwner: TComponent; const StockID: PChar); + constructor CreateFromIconName(AOwner: TComponent; const IconName: string); destructor Destroy; override; published property Caption: string read GetCaption write SetCaption; property OnClick: TNotifyEvent read FOnClick write FOnClick; - property UseStock: boolean read GetUseStock write SetUseStock; property UseUnderline: boolean read GetUseUnderline write SetUseUnderline; property BorderStyle: TGTKBorderStyle read GetBorderStyle write SetBorderStyle; end; -(****************************************** TGTKMISC ****************************************************************************) - TGTKMisc = class(TGTKControl) - private - function GetXAlign: Single; - function GetYAlign: Single; - function GetXPadding: integer; - function GetYPadding: integer; - procedure SetXAlign(Value: Single); - procedure SetYAlign(Value: Single); - procedure SetXPadding(Value: integer); - procedure SetYPadding(Value: integer); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure SetAlignment(XAlign, YAlign : Single); - procedure SetPadding(XPadding, YPadding : integer); - published - property XAlign: Single read GetXAlign write SetXAlign; - property YAlign: Single read GetYAlign write SetYAlign; - property XPadding: integer read GetXPadding write SetXPadding; - property YPadding: integer read GetYPadding write SetYPadding; - end; - (****************************************** TGTKLABEL **************************************************************************) - TGTKAlignment = (taLeftJustify, taRightJustify, taCenter, taFill); - TGTKLabel = class(TGTKMisc) + TGTKLabel = class(TGTKControl) private FLinked: boolean; function GetCaption: string; @@ -87,6 +59,8 @@ type function GetLineWrap: boolean; function GetUseUnderline: boolean; function GetSelectable: boolean; + function GetXAlign: Single; + function GetYAlign: Single; procedure SetCaption(Value: string); procedure SetAlignment(Value: TGTKAlignment); procedure SetUseMarkup(Value: boolean); @@ -94,6 +68,8 @@ type procedure SetUseUnderline(Value: boolean); procedure SetFocusControl(Value: TGTKControl); procedure SetSelectable(Value: boolean); + procedure SetXAlign(Value: Single); + procedure SetYAlign(Value: Single); public constructor Create(AOwner: TComponent); override; constructor CreateFromWidget(AOwner: TComponent; Widget: PGtkWidget); @@ -107,6 +83,8 @@ type property UseUnderline: boolean read GetUseUnderline write SetUseUnderline; property FocusControl: TGTKControl write SetFocusControl; property Selectable: boolean read GetSelectable write SetSelectable; + property XAlign: Single read GetXAlign write SetXAlign; + property YAlign: Single read GetYAlign write SetYAlign; end; (****************************************** TGTKTOGGLEBUTTON ********************************************************************) @@ -223,30 +201,6 @@ type property Visibility: boolean read GetVisibility write SetVisibility; end; -(****************************************** TGTKCOMBO **************************************************************************) - TGTKCombo = class(TGTKHBox) - private - procedure ItemsChanged(Sender: TObject); - function GetAllowEmpty: boolean; - function GetMatchValue: boolean; - function GetCaseSensitive: boolean; - procedure SetAllowEmpty(Value: boolean); - procedure SetMatchValue(Value: boolean); - procedure SetCaseSensitive(Value: boolean); - public - Items: TGList; - Entry: TGTKEntry; - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure UpdateItems; - procedure SetPolicy(MatchValue, AllowEmpty: boolean); - procedure DisableActivate; - published - property AllowEmpty: boolean read GetAllowEmpty write SetAllowEmpty; - property MatchValue: boolean read GetMatchValue write SetMatchValue; - property CaseSensitive: boolean read GetCaseSensitive write SetCaseSensitive; - end; - (****************************************** TGTKSPINEDIT ************************************************************************) TGTKSpinEdit = class(TGTKEntry) private @@ -302,12 +256,12 @@ begin end; end; -constructor TGTKButton.CreateFromStock(AOwner: TComponent; const StockID: PChar); +constructor TGTKButton.CreateFromIconName(AOwner: TComponent; const IconName: string); begin inherited Create(AOwner); FOnClick := nil; if ClassName = 'TGTKButton' then begin - FWidget := gtk_button_new_from_stock(StockID); + FWidget := gtk_button_new_from_icon_name(PChar(IconName), GTK_ICON_SIZE_BUTTON); g_signal_connect_data(PGObject(FWidget), 'clicked', TGCallback(@TGTKButton_OnClick), Self, nil, G_CONNECT_DEFAULT); Show; end; @@ -320,22 +274,12 @@ end; function TGTKButton.GetCaption: string; begin - Result := String(gtk_label_get_text(PGtkLabel(ChildControl))); + Result := String(gtk_button_get_label(PGtkButton(FWidget))); end; procedure TGTKButton.SetCaption(Value: string); begin - gtk_label_set_text_with_mnemonic(PGtkLabel(ChildControl), PChar(Value)); -end; - -function TGTKButton.GetUseStock: boolean; -begin - Result := gtk_button_get_use_stock(PGtkButton(FWidget)); -end; - -procedure TGTKButton.SetUseStock(Value: boolean); -begin - gtk_button_set_use_stock(PGtkButton(FWidget), Value); + gtk_button_set_label(PGtkButton(FWidget), PChar(Value)); end; function TGTKButton.GetUseUnderline: boolean; @@ -355,84 +299,7 @@ end; procedure TGTKButton.SetBorderStyle(Value: TGTKBorderStyle); begin - gtk_button_set_relief(PGtkButton(FWidget), integer(Value)); -end; - -(********************************************************************************************************************************) -(********************************************************************************************************************************) -constructor TGTKMisc.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -end; - -destructor TGTKMisc.Destroy; -begin - inherited Destroy; -end; - -procedure TGTKMisc.SetAlignment(XAlign, YAlign : Single); -begin - gtk_misc_set_alignment(PGtkMisc(FWidget), XAlign, YAlign); -end; - -procedure _gtk_misc_get_alignment(misc:PGtkMisc; xalign:Pgfloat; yalign:Pgfloat); cdecl; external gtklib name 'gtk_misc_get_alignment'; -procedure _gtk_misc_get_padding(misc:PGtkMisc; xpad:Pgint; ypad:Pgint); cdecl; external gtklib name 'gtk_misc_get_padding'; - -function TGTKMisc.GetXAlign: Single; -var axalign: gfloat; -begin - axalign := 0.0; - _gtk_misc_get_alignment(PGtkMisc(FWidget), @axalign, nil); - Result := axalign; -end; - -procedure TGTKMisc.SetXAlign(Value: Single); -begin - SetAlignment(Value, YAlign); -end; - -function TGTKMisc.GetYAlign: Single; -var ayalign: gfloat; -begin - ayalign := 0.0; - _gtk_misc_get_alignment(PGtkMisc(FWidget), nil, @ayalign); - Result := ayalign; -end; - -procedure TGTKMisc.SetYAlign(Value: Single); -begin - SetAlignment(XAlign, Value); -end; - -procedure TGTKMisc.SetPadding(XPadding, YPadding : integer); -begin - gtk_misc_set_padding(PGtkMisc(FWidget), XPadding, YPadding); -end; - -function TGTKMisc.GetXPadding: integer; -var xpad: gint; -begin - xpad := 0; - _gtk_misc_get_padding(PGtkMisc(FWidget), @xpad, nil); - Result := xpad; -end; - -procedure TGTKMisc.SetXPadding(Value: integer); -begin - SetPadding(Value, YPadding); -end; - -function TGTKMisc.GetYPadding: integer; -var ypad: gint; -begin - ypad := 0; - _gtk_misc_get_padding(PGtkMisc(FWidget), nil, @ypad); - Result := ypad; -end; - -procedure TGTKMisc.SetYPadding(Value: integer); -begin - SetPadding(XPadding, Value); + gtk_button_set_relief(PGtkButton(FWidget), TGtkReliefStyle(Value)); end; (********************************************************************************************************************************) @@ -528,6 +395,26 @@ begin gtk_label_set_selectable(PGtkLabel(FWidget), Value); end; +function TGTKLabel.GetXAlign: Single; +begin + Result := gtk_label_get_xalign(PGtkLabel(FWidget)); +end; + +procedure TGTKLabel.SetXAlign(Value: Single); +begin + gtk_label_set_xalign(PGtkLabel(FWidget), Value); +end; + +function TGTKLabel.GetYAlign: Single; +begin + Result := gtk_label_get_yalign(PGtkLabel(FWidget)); +end; + +procedure TGTKLabel.SetYAlign(Value: Single); +begin + gtk_label_set_yalign(PGtkLabel(FWidget), Value); +end; + (********************************************************************************************************************************) (********************************************************************************************************************************) procedure TGTKToggleButton_OnToggled(ToggleButton: PGtkToggleButton; user_data: Pgpointer); cdecl; @@ -689,7 +576,7 @@ end; procedure TGTKFrame.SetShadowType(Value: TGTKShadowType); begin - gtk_frame_set_shadow_type(PGtkFrame(FWidget), gtk2.TGtkShadowType(Value)); + gtk_frame_set_shadow_type(PGtkFrame(FWidget), lazgtk3.TGtkShadowType(Value)); end; (********************************************************************************************************************************) @@ -717,7 +604,7 @@ end; procedure TGTKEditable.SetEditable(Value: boolean); begin - gtk_entry_set_editable(PGtkEntry(FWidget), Value); + gtk_editable_set_editable(PGtkEditable(FWidget), Value); end; procedure TGTKEditable.CutClipboard; @@ -831,83 +718,6 @@ begin SelectRegion(0, Length(Text)); end; -(********************************************************************************************************************************) -(********************************************************************************************************************************) -constructor TGTKCombo.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FWidget := gtk_combo_new; - Items := TGList.Create(Self); - Items.Notify := @ItemsChanged; - Entry := TGTKEntry.CreateFromWidget(Self, PGtkCombo(FWidget)^.entry); - Show; -end; - -destructor TGTKCombo.Destroy; -begin - Items.Free; - inherited Destroy; -end; - -procedure TGTKCombo.UpdateItems; -begin - gtk_combo_set_popdown_strings(PGtkCombo(FWidget), GLIB2.PGList(Items.FList)); -end; - -function TGTKCombo.GetAllowEmpty: boolean; -var b: gboolean; -begin - b := False; - g_object_get(PGObject(FWidget), 'allow-empty', [@b, nil]); - Result := b; -end; - -procedure TGTKCombo.SetAllowEmpty(Value: boolean); -begin - g_object_set(PGObject(FWidget), 'allow-empty', [Ord(Value), nil]); -end; - -function TGTKCombo.GetMatchValue: boolean; -var b: gboolean; -begin - b := False; - g_object_get(PGObject(FWidget), 'value-in-list', [@b, nil]); - Result := b; -end; - -procedure TGTKCombo.SetMatchValue(Value: boolean); -begin - g_object_set(PGObject(FWidget), 'value-in-list', [Ord(Value), nil]); -end; - -procedure TGTKCombo.SetPolicy(MatchValue, AllowEmpty: boolean); -begin - gtk_combo_set_value_in_list(PGtkCombo(FWidget), MatchValue, AllowEmpty); -end; - -function TGTKCombo.GetCaseSensitive: boolean; -var b: gboolean; -begin - b := False; - g_object_get(PGObject(FWidget), 'case-sensitive', [@b, nil]); - Result := b; -end; - -procedure TGTKCombo.SetCaseSensitive(Value: boolean); -begin - gtk_combo_set_case_sensitive(PGtkCombo(FWidget), Value); -end; - -procedure TGTKCombo.DisableActivate; -begin - gtk_combo_disable_activate(PGtkCombo(FWidget)); -end; - -procedure TGTKCombo.ItemsChanged(Sender: TObject); -begin - UpdateItems; -end; - (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKSpinEdit.Create(AOwner: TComponent); diff --git a/libgtk_kylix/GTKText.pas b/libgtk_kylix/GTKText.pas index d3152b1..31423d7 100644 --- a/libgtk_kylix/GTKText.pas +++ b/libgtk_kylix/GTKText.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKText - Multiline Text Editor (GtkTextView) - Version 0.5.16 (last updated 2003-01-21) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKText; interface -uses gtk2, lazgobject2, Classes, GTKControls, GTKForms; +uses lazgobject2, lazgtk3, Classes, GTKControls, GTKForms; type @@ -103,7 +102,7 @@ end; procedure TGTKTextView.SetWrapMode(Value: TGTKTextViewWrapMode); begin - gtk_text_view_set_wrap_mode(PGtkTextView(FWidget), integer(Value)); + gtk_text_view_set_wrap_mode(PGtkTextView(FWidget), TGtkWrapMode(Value)); end; function TGTKTextView.GetReadOnly: boolean; diff --git a/libgtk_kylix/GTKUtils.pas b/libgtk_kylix/GTKUtils.pas index f893858..c1b662e 100644 --- a/libgtk_kylix/GTKUtils.pas +++ b/libgtk_kylix/GTKUtils.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKUtils - Various utilities - Version 0.6.17 (last updated 2003-10-07) Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,13 +23,16 @@ unit GTKUtils; interface -uses gtk2, gdk2, lazglib2, SysUtils, GTKControls, GTKClasses; +uses lazglib2, lazgdk3, lazgtk3, SysUtils, GTKControls, GTKClasses; (********************************************************************************************************************************) +(* function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; overload; function AllocateColor(R, G, B: Word): TGDKColor; overload; +*) function KeyValToUnicode(const Key: word): guint32; function UnicodeToKeyVal(const UnicodeVal: guint32): word; +(* function GetDefaultForegroundColor(State: integer): PGdkColor; overload; function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor; overload; function GetDefaultBackgroundColor(State: integer): PGdkColor; overload; @@ -39,15 +41,20 @@ function GetDefaultBaseColor(State: integer): PGdkColor; overload; function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor; overload; function GetDefaultTextColor(State: integer): PGdkColor; overload; function GetDefaultTextColor(Widget: TGTKControl; State: integer): PGdkColor; overload; -function GDKColorToPGdkColor(Color: TGDKColor): PGdkColor; -function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor; + +function GDKColorToPGdkRGBA(Color: TGDKColor): PGdkRGBA; +function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor; function GDKColorToString(Color: TGDKColor): string; function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; +*) +function ValidateColorString(const Color: string): boolean; + (********************************************************************************************************************************) implementation (********************************************************************************************************************************) +(* function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; begin New(Result); @@ -66,6 +73,7 @@ begin Result.green := G; Result.blue := B; end; +*) (********************************************************************************************************************************) function KeyValToUnicode(const Key: word): guint32; @@ -80,6 +88,7 @@ begin end; (********************************************************************************************************************************) +(* function GetDefaultForegroundColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; @@ -96,8 +105,10 @@ begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.fg[State]); end; +*) (********************************************************************************************************************************) +(* function GetDefaultBackgroundColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; @@ -114,8 +125,10 @@ begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.bg[State]); end; +*) (********************************************************************************************************************************) +(* function GetDefaultBaseColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; @@ -132,8 +145,10 @@ begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.base[State]); end; +*) (********************************************************************************************************************************) +(* function GetDefaultTextColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; @@ -150,9 +165,11 @@ begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.text[State]); end; +*) (********************************************************************************************************************************) -function GDKColorToPGdkColor(Color: TGDKColor): PGdkColor; +(* +function GDKColorToPGdkRGBA(Color: TGDKColor): PGdkRGBA; begin New(Result); Result^.pixel := Color.pixel; @@ -160,8 +177,11 @@ begin Result^.green := Color.green; Result^.blue := Color.blue; end; +*) (********************************************************************************************************************************) +(* +function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor; function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor; begin Result.pixel := Color^.pixel; @@ -169,14 +189,18 @@ begin Result.green := Color^.green; Result.blue := Color^.blue; end; +*) (********************************************************************************************************************************) +(* function GDKColorToString(Color: TGDKColor): string; begin Result := Format('#%.2x%.2x%.2xFF', [Color.red div 256, Color.green div 256, Color.blue div 256]); end; +*) (********************************************************************************************************************************) +(* function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; var AColor: PGdkColor; begin @@ -191,7 +215,14 @@ begin Dispose(AColor); except end; end; +*) (********************************************************************************************************************************) +function ValidateColorString(const Color: string): boolean; +var rgba: TGdkRGBA; +begin + Result := gdk_rgba_parse(@rgba, PChar(Color)); +end; + end. diff --git a/libgtk_kylix/GTKView.pas b/libgtk_kylix/GTKView.pas index 3cd00dc..b971e7d 100644 --- a/libgtk_kylix/GTKView.pas +++ b/libgtk_kylix/GTKView.pas @@ -1,6 +1,5 @@ (* GTK-Kylix Library: GTKView - GtkTreeView and its modifications - Version 0.6.21 (last updated 2006-05-06) Copyright (C) 2006 Tomas Bzatek This library is free software; you can redistribute it and/or @@ -24,7 +23,7 @@ unit GTKView; interface -uses gtk2, gdk2, gdk2pixbuf, glib2, lazglib2, lazgobject2, Classes, GTKControls, GTKForms; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, lazgdkpixbuf2, Classes, GTKClasses, GTKControls, GTKForms; type TGTKListItem = class; @@ -307,7 +306,7 @@ end; procedure TGTKView.SetSelectionMode(Value: TGTKSelectionMode); begin - gtk_tree_selection_set_mode(FSelection, Integer(Value)); + gtk_tree_selection_set_mode(FSelection, lazgtk3.TGtkSelectionMode(Value)); end; procedure TGTKView.SelectAll; @@ -331,13 +330,16 @@ begin end; function TGTKView.GetRulesHint: boolean; +var b: boolean; begin - Result := gtk_tree_view_get_rules_hint(PGtkTreeView(FWidget)); + b := False; + g_object_get(PGObject(FWidget), 'rules-hint', [@b, nil]); + Result := b; end; procedure TGTKView.SetRulesHint(Value: boolean); begin - gtk_tree_view_set_rules_hint(PGtkTreeView(FWidget), Value); + g_object_set(PGObject(FWidget), 'rules-hint', [gboolean(Value), nil]); end; function TGTKView.GetReorderable: boolean; @@ -417,7 +419,7 @@ var sort_column_id: gint; order: TGtkSortType; begin Result := soNone; - order := 0; + order := GTK_SORT_ASCENDING; if (FTreeModelSort <> nil) and gtk_tree_sortable_get_sort_column_id(PGtkTreeSortable(FTreeModelSort), @sort_column_id, @order) then Result := TGTKTreeViewSortOrder(order); end; @@ -511,8 +513,8 @@ begin FTreeModelSort := nil; if not FSortable then FWidget := gtk_tree_view_new_with_model(PGtkTreeModel(FListItems.FStore)) else begin - FTreeModelSort := gtk_tree_model_sort_new_with_model(FListItems.FStore); - FWidget := gtk_tree_view_new_with_model(FTreeModelSort); + FTreeModelSort := gtk_tree_model_sort_new_with_model(PGtkTreeModel(FListItems.FStore)); + FWidget := gtk_tree_view_new_with_model(PGtkTreeModel(FTreeModelSort)); end; FSelection := gtk_tree_view_get_selection(PGtkTreeView(FWidget)); g_signal_connect_data(PGObject(FSelection), 'changed', TGCallback(@TGTKListView_changed), Self, nil, G_CONNECT_DEFAULT); @@ -592,7 +594,7 @@ begin Result := nil; Path := nil; Column := nil; - if gtk_tree_view_get_path_at_pos(PGtkTreeView(FWidget), X, Y, Path, Column, nil, nil) then begin + if gtk_tree_view_get_path_at_pos(PGtkTreeView(FWidget), X, Y, @Path, @Column, nil, nil) then begin if not Assigned(Path) then Exit; ConvertPathToChild(Path); AIndex := gtk_tree_path_get_indices(Path)^; @@ -606,11 +608,10 @@ end; (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKListItems.Create(AOwner: TComponent); -const Types : GType = G_TYPE_STRING; begin inherited Create(AOwner); FOwner := AOwner; - FStore := gtk_list_store_newv(1, @Types); + FStore := gtk_list_store_new(1, [G_TYPE_STRING]); FList := TList.Create; end; @@ -619,14 +620,14 @@ begin if not (csDestroying in ComponentState) then begin Clear; FList.Free; - gtk_object_destroy(PGtkObject(FStore)); + g_object_unref(PGObject(FStore)); end; inherited Destroy; end; constructor TGTKListItems.CreateTyped(AOwner: TComponent; ColumnTypes: array of TGTKListColumnType); var i: integer; - Cols : array[0..255] of GType; + Cols: array[0..255] of TGType; begin inherited Create(AOwner); FOwner := AOwner; @@ -636,7 +637,7 @@ begin lcText : Cols[i] := G_TYPE_STRING; lcNumber : Cols[i] := G_TYPE_LONG; lcPointer : Cols[i] := G_TYPE_POINTER; - lcPixbuf : Cols[i] := GDK_TYPE_PIXBUF; + lcPixbuf : Cols[i] := gdk_pixbuf_get_type(); lcBoolean : Cols[i] := G_TYPE_BOOLEAN; end; FStore := gtk_list_store_newv(Length(ColumnTypes), @Cols); @@ -644,14 +645,14 @@ end; procedure TGTKListItems.SetColumnTypes(Types: array of TGTKListColumnType); var i: integer; - Cols : array[0..255] of GType; + Cols : array[0..255] of TGType; begin for i := Low(Types) to High(Types) do case Types[i] of lcText : Cols[i] := G_TYPE_STRING; lcNumber : Cols[i] := G_TYPE_LONG; lcPointer : Cols[i] := G_TYPE_POINTER; - lcPixbuf : Cols[i] := GDK_TYPE_PIXBUF; + lcPixbuf : Cols[i] := gdk_pixbuf_get_type(); lcBoolean : Cols[i] := G_TYPE_BOOLEAN; end; g_object_unref(PGObject(FStore)); @@ -827,8 +828,8 @@ end; destructor TGTKTreeViewColumn.Destroy; begin if not (csDestroying in ComponentState) then begin - gtk_object_destroy(PGtkObject(FRenderer)); - if GTK_IS_OBJECT(FColumn) then gtk_object_destroy(PGtkObject(FColumn)); + if Assigned(FRenderer) then g_object_unref(PGObject(FRenderer)); + if Assigned(FColumn) then g_object_unref(PGObject(FColumn)); end; inherited Destroy; end; @@ -1011,7 +1012,7 @@ begin FColumnType := Value; if Assigned(FRenderer) then begin gtk_tree_view_column_clear(FColumn); - gtk_object_destroy(PGtkObject(FRenderer)); + g_object_unref(PGObject(FRenderer)); end; case Value of ctText : FRenderer := gtk_cell_renderer_text_new; @@ -1177,28 +1178,28 @@ procedure TGTKListItem.SetValue(Index: longint; Value: string); var Iter: TGtkTreeIter; begin if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, PChar(IntToStr(FIndex))) - then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, PChar(Value), -1); + then gtk_list_store_set((FOwner as TGTKListItems).FStore, @Iter, [Index, PChar(Value), -1]); end; procedure TGTKListItem.SetValue(Index: longint; Value: integer); var Iter: TGtkTreeIter; begin if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, PChar(IntToStr(FIndex))) - then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1); + then gtk_list_store_set((FOwner as TGTKListItems).FStore, @Iter, [Index, Value, -1]); end; procedure TGTKListItem.SetValue(Index: longint; Value: pointer); var Iter: TGtkTreeIter; begin if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, PChar(IntToStr(FIndex))) - then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1); + then gtk_list_store_set((FOwner as TGTKListItems).FStore, @Iter, [Index, Value, -1]); end; procedure TGTKListItem.SetValue(Index: longint; Value: boolean); var Iter: TGtkTreeIter; begin if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, PChar(IntToStr(FIndex))) - then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1); + then gtk_list_store_set((FOwner as TGTKListItems).FStore, @Iter, [Index, Value, -1]); end; function TGTKListItem.GetSelected: boolean; @@ -1266,8 +1267,8 @@ begin gtk_tree_view_column_focus_cell(Column, ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[ColumnNo].FRenderer); CellEditable := gtk_cell_renderer_start_editing(((FOwner as TGTKListItems).FOwner as TGTKView).Columns[ColumnNo].FRenderer, nil, ((FOwner as TGTKListItems).FOwner as TGTKView).FWidget, PChar(PChar(IntToStr(FIndex))), - @BackgroundRect, @CellRect, {GTK_CELL_RENDERER_SELECTED or GTK_CELL_RENDERER_SORTED} 0); - gtk_widget_show(CellEditable); + @BackgroundRect, @CellRect, []); + gtk_widget_show(PGtkWidget(CellEditable)); // gtk_cell_editable_start_editing(CellEditable, nil); @@ -1287,7 +1288,7 @@ begin gtk_tree_view_get_background_area(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, @BackgroundRect); Rect.x := 0; - Rect.width := ((FOwner as TGTKListItems).FOwner as TGTKView).FWidget^.allocation.width; + Rect.width := gtk_widget_get_allocated_width(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget); Rect.y := BackgroundRect.y; Rect.height := BackgroundRect.height; gdk_window_invalidate_rect(gtk_tree_view_get_bin_window(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget)), @Rect, True); -- cgit v1.2.3