{$mode objfpc}{$h+} {$ifdef win32}{$define gtkwin}{$endif}
UNIT FPgtk;

// Generated with GtkWrite by Luk Vandelaer (version 1.08)

INTERFACE

USES classes, sysutils, gtk, gdk, glib, FPglib;

TYPE

  TFPgtkObject = class;
  TFPgtkData = class;
  TFPgtkAdjustment = class;
  TFPgtkToolTips = class;
  TFPgtkWidget = class;
  TFPgtkGroup = class;
  TFPgtkWidgetGroup = class;
  TFPgtkMisc = class;
  TFPgtkLabel = class;
  TFPgtkAccelLabel = class;
  TFPgtkTipsQuery = class;
  TFPgtkArrow = class;
  TFPgtkImage = class;
  TFPgtkPixmap = class;
  TFPgtkContainer = class;
  TFPgtkBin = class;
  TFPgtkAlignment = class;
  TFPgtkFrame = class;
  TFPgtkAspectFrame = class;
  TFPgtkButton = class;
  TFPgtkToggleButton = class;
  TFPgtkCheckButton = class;
  TFPgtkRadioButton = class;
  TFPgtkRadioButtonGroup = class;
  TFPgtkOptionMenu = class;
  TFPgtkItem = class;
  TFPgtkItemGroup = class;
  TFPgtkMenuItem = class;
  TFPgtkCheckMenuItem = class;
  TFPgtkRadioMenuItem = class;
  TFPgtkRadioMenuGroup = class;
  TFPgtkTearOffMenuItem = class;
  TFPgtkListItem = class;
  TFPgtkListItemGroup = class;
  TFPgtkTreeItem = class;
  TFPgtkWindow = class;
  TFPgtkColorSelectionDialog = class;
  TFPgtkDialog = class;
  TFPgtkInputDialog = class;
  TFPgtkFileSelection = class;
  TFPgtkFontSelectionDialog = class;
  TFPgtkEventBox = class;
  TFPgtkHandleBox = class;
  TFPgtkScrolledWindow = class;
  TFPgtkViewport = class;
  TFPgtkBox = class;
  TFPgtkButtonBox = class;
  TFPgtkHButtonBox = class;
  TFPgtkVButtonBox = class;
  TFPgtkVBox = class;
  TFPgtkColorSelection = class;
  TFPgtkGammaCurve = class;
  TFPgtkHBox = class;
  TFPgtkCombo = class;
  TFPgtkStatusbar = class;
  TFPgtkCList = class;
  TFPgtkCTree = class;
  TFPgtkFixed = class;
  TFPgtkNotebook = class;
  TFPgtkFontSelection = class;
  TFPgtkPaned = class;
  TFPgtkHPaned = class;
  TFPgtkVPaned = class;
  TFPgtkLayout = class;
  TFPgtkList = class;
  TFPgtkMenuShell = class;
  TFPgtkMenuBar = class;
  TFPgtkMenu = class;
  TFPgtkPacker = class;
  TFPgtkTable = class;
  TFPgtkToolbar = class;
  TFPgtkTree = class;
  TFPgtkCalendar = class;
  TFPgtkDrawingArea = class;
  TFPgtkCurve = class;
  TFPgtkEditable = class;
  TFPgtkEntry = class;
  TFPgtkSpinButton = class;
  TFPgtkText = class;
  TFPgtkRuler = class;
  TFPgtkHRuler = class;
  TFPgtkVRuler = class;
  TFPgtkRange = class;
  TFPgtkScale = class;
  TFPgtkHScale = class;
  TFPgtkVScale = class;
  TFPgtkScrollbar = class;
  TFPgtkHScrollbar = class;
  TFPgtkVScrollbar = class;
  TFPgtkSeparator = class;
  TFPgtkHSeparator = class;
  TFPgtkVSeparator = class;
  TFPgtkPreview = class;
  TFPgtkProgress = class;
  TFPgtkProgressBar = class;
  TFPgtkItemFactory = class;

  TFPgtkSignalFunction = procedure (Sender:TFPgtkObject; Data:pointer) of Object;
  TFPgtkBooleanSignalFunction = procedure (Sender:TFPgtkObject; Bool:boolean; data:pointer) of Object;
  FPgtkException = class (Exception) end;
  PPascalClassData = ^TPascalClassData;
  TPascalClassData = record
    TheInstance : TFPgtkObject;
  end;
  PSignalData = ^TSignalData;
  TSignalData = record
    TheData : pointer;
    TheWidget : TFPgtkObject;
    TheSignalProc : TFPgtkSignalFunction;
  end;
  TDestroyState = (dsAlive, dsWaiting, dsDestroying);
  TFPgtkObjectClass = Class of TFPgtkObject;

  PFPgtkObject = ^TFPgtkObject;
  TFPgtkObject = class
  Private
    FDestroying : TDestroyState;
    PascalInstance:TPascalClassData;
    ConvertDatas:TStringList;
    SignalDatas:TList;
    NotifyList:TList;
    function ConvertSignalData (proc:TFPgtkSignalFunction; data:pointer; FreeIt:boolean) : PSignalData;
    procedure FreeClass (Sender:TFPgtkObject; Data:pointer);
    procedure CheckConvertDatas;
    procedure CheckNotifyList;
    procedure InitCreate;
    procedure FinalCreate;
    function GetUserData : pointer;
    procedure SetUserData (TheValue : pointer);
  Protected
    FGtkObject:PGtkObject;
    procedure CreateGtkObject; Virtual; Abstract;
    procedure NotifyDestroy (AnObject:TFPgtkObject); Virtual;
  Public
    function TheGtkObject : PGtkObject;
    function SignalConnect (Signal:string; Proc:TFPgtkSignalFunction; data:pointer) : guint;
    function SignalConnectAfter (Signal:string; Proc:TFPgtkSignalFunction; data:pointer) : guint;
    function BooleanSignalConnect (Signal:string; Proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
    function BooleanSignalConnectAfter (Signal:string; Proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
    constructor Create;
    constructor CreateFromObject (GtkObject:PGtkObject);
    property Destroying : TDestroyState read FDestroying;
    procedure AskNotification (AnObject:TFPgtkObject);
    destructor Destroy; Override;
    function ConnectDestroy (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDestroy (proc:TFPgtkSignalFunction; data:pointer) : guint;
    procedure SignalDisconnect (SignalHandler:guint);
    procedure SignalBlockHandler (SignalHandler:guint);
    procedure SignalUnblockHandler (SignalHandler:guint);
    procedure SignalEmit (aName:string; Args:array of const);
    function SignalNEmissions (aName:string) : guint;
    procedure SignalEmitStop (aName:string);
    procedure SetData (Key:string; Data:pointer);
    property UserData : pointer read GetUserData write SetUserData;
    procedure SetDataFull (Key:string; Data:pointer; Destroyer:TFPgtkSignalFunction);
    procedure RemoveData (Key:string);
    function GetData (Key:string) : pointer;
    function GtkDestroyed : boolean;
    procedure Constructed;
    procedure ConstructedDefault;
    procedure Sink;
    procedure Ref;
    procedure Unref;
    procedure WeakRef (Notify:TFPgtkSignalFunction; data:pointer);
    procedure WeakUnref (notify:TFPgtkSignalFunction; data:pointer);
  end;


  TFPgtkData = class (TFPgtkObject)
  Public
    function TheGtkObject : PGtkData;
    function ConnectDisconnect (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDisconnect (proc:TFPgtkSignalFunction; data:pointer) : guint;
  end;


  TFPgtkAdjustment = class (TFPgtkData)
  Private
    function GetValue : gfloat;
    procedure SetValue (TheValue : gfloat);
    function GetLower : gfloat;
    procedure SetLower (TheValue : gfloat);
    function GetUpper : gfloat;
    procedure SetUpper (TheValue : gfloat);
    function GetStepIncrement : gfloat;
    procedure SetStepIncrement (TheValue : gfloat);
    function GetPageIncrement : gfloat;
    procedure SetPageIncrement (TheValue : gfloat);
    function GetPageSize : gfloat;
    procedure SetPageSize (TheValue : gfloat);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkAdjustment;
    procedure Configure (aLower:gfloat; anUpper:gfloat; aValue:gfloat; aStepInc:gfloat; aPageInc:gfloat; aPageSize:gfloat);
    function ConnectValueChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterValueChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    procedure ValueChanged;
    procedure Changed;
    procedure ClampPage (aLower:gfloat; aUpper:gfloat);
    property Value : gfloat read GetValue write SetValue;
    property Lower : gfloat read GetLower write SetLower;
    property Upper : gfloat read GetUpper write SetUpper;
    property StepIncrement : gfloat read GetStepIncrement write SetStepIncrement;
    property PageIncrement : gfloat read GetPageIncrement write SetPageIncrement;
    property PageSize : gfloat read GetPageSize write SetPageSize;
  end;


  TFPgtkToolTips = class (TFPgtkData)
  Private
    function GetEnabled : boolean;
    procedure SetEnabled (TheValue : boolean);
    function GetDelay : integer;
    procedure SetDelay (TheValue : integer);
    function GetColorForeground : PGdkColor;
    procedure SetColorForeground (TheValue : PGdkColor);
    function GetColorBackground : PGdkColor;
    procedure SetColorBackground (TheValue : PGdkColor);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkToolTips;
    procedure SetColors (Fore:PGdkColor; Back:PGdkColor);
    procedure SetTip (Widget:TFPgtkWidget; TipText:string; TipPrivate:string);
    property Enabled : boolean read GetEnabled write SetEnabled;
    property Delay : integer read GetDelay write SetDelay;
    property ColorForeground : PGdkColor read GetColorForeground write SetColorForeground;
    property ColorBackground : PGdkColor read GetColorBackground write SetColorBackground;
    procedure ForceWindow;
  end;

  TFPgtkWidgetSignalFunction = procedure (Sender:TFPgtkObject; Widget:TFPgtkWidget; Data:pointer) of Object;
  TFPgtkEventFunction = function (Sender:TFPgtkWidget; Event:PGdkEvent; data:pointer): boolean of Object;
  TFPgtkEventButtonFunction = function (Sender:TFPgtkWidget; Event:PGdkEventButton; data:pointer): boolean of Object;
  TFPgtkEventMotionFunction = function (Sender:TFPgtkWidget; Event:PGdkEventMotion; data:pointer): boolean of Object;
  TFPgtkEventExposeFunction = function (Sender:TFPgtkWidget; Event:PGdkEventExpose; data:pointer): boolean of Object;
  TFPgtkEventKeyFunction = function (Sender:TFPgtkWidget; Event:PGdkEventKey; data:pointer): boolean of Object;
  TFPgtkEventCrossingFunction = function (Sender:TFPgtkWidget; Event:PGdkEventCrossing; data:pointer): boolean of Object;
  TFPgtkEventConfigureFunction = function (Sender:TFPgtkWidget; Event:PGdkEventConfigure; data:pointer): boolean of Object;
  TFPgtkEventFocusFunction = function (Sender:TFPgtkWidget; Event:PGdkEventFocus; data:pointer): boolean of Object;
  TFPgtkEventPropertyFunction = function (Sender:TFPgtkWidget; Event:PGdkEventProperty; data:pointer): boolean of Object;
  TFPgtkEventSelectionFunction = function (Sender:TFPgtkWidget; Event:PGdkEventSelection; data:pointer): boolean of Object;
  TFPgtkEventProximityFunction = function (Sender:TFPgtkWidget; Event:PGdkEventProximity; data:pointer): boolean of Object;
  TFPgtkEventClientFunction = function (Sender:TFPgtkWidget; Event:PGdkEventClient; data:pointer): boolean of Object;
  TFPgtkEventNoExposeFunction = function (Sender:TFPgtkWidget; Event:PGdkEventNoExpose; data:pointer): boolean of Object;

  TFPgtkWidget = class (TFPgtkObject)
  Private
    function GetTheGtkWidget : PGtkWidget;
    procedure SetTheGtkWidget (TheValue : PGtkWidget);
    function GetAllocation : TGtkAllocation;
    function GetName : string;
    procedure SetName (TheValue : string);
    function GetPropFlags : longint;
    procedure SetPropFlags (TheValue : longint);
    function GetState : longint;
    function GetSavedState : longint;
    function GetParent : TFPgtkWidget;
    procedure SetParent (TheValue : TFPgtkWidget);
    function GetParentWindow : PGdkWindow;
    procedure SetParentWindow (TheValue : PGdkWindow);
    procedure Reparent (NewParent:TFPgtkWidget);
    function GetVisible : boolean;
    procedure SetVisible (TheValue : boolean);
    function GetNoWindow : boolean;
    procedure SetNoWindow (TheValue : boolean);
    function GetRealized : boolean;
    procedure SetRealized (TheValue : boolean);
    function GetMapped : boolean;
    procedure SetMapped (TheValue : boolean);
    function GetDrawable : boolean;
    function GetIsSensitive : boolean;
    function GetSensitive : boolean;
    procedure SetSensitive (TheValue : boolean);
    function GetParentSensitive : boolean;
    procedure SetParentSensitive (TheValue : boolean);
    function GetAppPaintable : boolean;
    function GetCanFocus : boolean;
    procedure SetCanFocus (TheValue : boolean);
    function GetHasFocus : boolean;
    function GetCanDefault : boolean;
    procedure SetCanDefault (TheValue : boolean);
    function GetHasDefault : boolean;
    function GetReceivesDefault : boolean;
    function GetCompositeChild : boolean;
    function GetTooltip : string;
    procedure SetTooltip (TheValue : string);
    function GetColormap : PGdkColormap;
    procedure SetColormap (TheValue : PGdkColormap);
  Protected
    procedure SetFlags (NewFlags:longint);
    procedure UnsetFlags (NewUnsetFlags:longint);
    procedure Map;
    procedure Unmap;
    procedure QueueDraw;
    procedure QueueResize;
    procedure DrawFocus;
    procedure DrawDefault;
  Public
    function TheGtkObject : PGtkWidget;
    property TheGtkWidget : PGtkWidget read GetTheGtkWidget write SetTheGtkWidget;
    function WidgetSignalConnect (Signal:string; Proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function WidgetSignalConnectAfter (Signal:string; Proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    procedure Draw (Rectangle:PGdkRectangle); Overload;
    procedure Show;
    procedure Hide;
    procedure Realize;
    procedure Unrealize;
    procedure ShowNow;
    procedure ShowAll;
    procedure HideAll;
    procedure SetAllocation (AnAllocation:TGtkAllocation); Overload;
    procedure SetAllocation (x:integer; y:integer; width:integer; height:integer); Overload;
    property Allocation : TGtkAllocation read GetAllocation write SetAllocation;
    procedure SetUPosition (x:integer; y:integer);
    procedure SetUsize (width:integer; height:integer);
    property Name : string read GetName write SetName;
    property Flags : longint read GetPropFlags write SetPropFlags;
    property State : longint read GetState;
    property SavedState : longint read GetSavedState;
    property Parent : TFPgtkWidget read GetParent write SetParent;
    property ParentWindow : PGdkWindow read GetParentWindow write SetParentWindow;
    procedure Unparent;
    property Visible : boolean read GetVisible write SetVisible;
    property NoWindow : boolean read GetNoWindow write SetNoWindow;
    property Realized : boolean read GetRealized write SetRealized;
    property Mapped : boolean read GetMapped write SetMapped;
    property Drawable : boolean read GetDrawable;
    property IsSensitive : boolean read GetIsSensitive;
    property Sensitive : boolean read GetSensitive write SetSensitive;
    property ParentSensitive : boolean read GetParentSensitive write SetParentSensitive;
    property AppPaintable : boolean read GetAppPaintable;
    property CanFocus : boolean read GetCanFocus write SetCanFocus;
    procedure GrabFocus;
    property HasFocus : boolean read GetHasFocus;
    property CanDefault : boolean read GetCanDefault write SetCanDefault;
    procedure GrabDefault;
    property HasDefault : boolean read GetHasDefault;
    property ReceivesDefault : boolean read GetReceivesDefault;
    property CompositeChild : boolean read GetCompositeChild;
    property Tooltip : string read GetTooltip write SetTooltip;
    procedure HideOnDelete;
    property Colormap : PGdkColormap read GetColormap write SetColormap;
    function ConnectShow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterShow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function Connecthide (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterhide (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function Connectmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAftermap (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function Connectunmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterunmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function Connectrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function Connectunrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterunrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectDrawFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDrawFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectDrawDefault (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDrawDefault (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectParentSet (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterParentSet (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectGrabFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterGrabFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function EventConnect (Signal:string; Proc:TFPgtkEventFunction; data:pointer) : guint;
    function EventConnectAfter (Signal:string; Proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function EventButtonConnect (Signal:string; Proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function EventButtonConnectAfter (Signal:string; Proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function ConnectButtonPressEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function ConnectAfterButtonPressEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function ConnectButtonReleaseEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function ConnectAfterButtonReleaseEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
    function EventMotionConnect (Signal:string; Proc:TFPgtkEventMotionFunction; data:pointer) : guint;
    function EventMotionConnectAfter (Signal:string; Proc:TFPgtkEventMotionFunction; data:pointer) : guint;
    function ConnectMotionNotifyEvent (proc:TFPgtkEventMotionFunction; data:pointer) : guint;
    function ConnectAfterMotionNotifyEvent (proc:TFPgtkEventMotionFunction; data:pointer) : guint;
    function ConnectDeleteEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterDeleteEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectDestroyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterDestroyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function EventExposeConnect (Signal:string; Proc:TFPgtkEventExposeFunction; data:pointer) : guint;
    function EventExposeConnectAfter (Signal:string; Proc:TFPgtkEventExposeFunction; data:pointer) : guint;
    function ConnectExposeEvent (proc:TFPgtkEventExposeFunction; data:pointer) : guint;
    function ConnectAfterExposeEvent (proc:TFPgtkEventExposeFunction; data:pointer) : guint;
    function EventKeyConnect (Signal:string; Proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function EventKeyConnectAfter (Signal:string; Proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function ConnectKeyPressEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function ConnectAfterKeyPressEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function ConnectKeyReleaseEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function ConnectAfterKeyReleaseEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
    function EventCrossingConnect (Signal:string; Proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function EventCrossingConnectAfter (Signal:string; Proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function ConnectEnterNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function ConnectAfterEnterNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function ConnectLeaveNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function ConnectAfterLeaveNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
    function EventConfigureConnect (Signal:string; Proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
    function EventConfigureConnectAfter (Signal:string; Proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
    function ConnectConfigureEvent (proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
    function ConnectAfterConfigureEvent (proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
    function EventFocusConnect (Signal:string; Proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function EventFocusConnectAfter (Signal:string; Proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function ConnectFocusInEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function ConnectAfterFocusInEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function ConnectFocusOutEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function ConnectAfterFocusOutEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
    function ConnectMapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterMapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectUnmapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterUnmapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function EventPropertyConnect (Signal:string; Proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
    function EventPropertyConnectAfter (Signal:string; Proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
    function ConnectPropertyNotifyEvent (proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
    function ConnectAfterPropertyNotifyEvent (proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
    function EventSelectionConnect (Signal:string; Proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function EventSelectionConnectAfter (Signal:string; Proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectSelectionClearEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectAfterSelectionClearEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectSelectionRequestEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectAfterSelectionRequestEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectSelectionNotifyEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function ConnectAfterSelectionNotifyEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
    function EventProximityConnect (Signal:string; Proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function EventProximityConnectAfter (Signal:string; Proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function ConnectProximityInEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function ConnectAfterProximityInEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function ConnectProximityOutEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function ConnectAfterProximityOutEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
    function EventClientConnect (Signal:string; Proc:TFPgtkEventClientFunction; data:pointer) : guint;
    function EventClientConnectAfter (Signal:string; Proc:TFPgtkEventClientFunction; data:pointer) : guint;
    function ConnectClientEvent (proc:TFPgtkEventClientFunction; data:pointer) : guint;
    function ConnectAfterClientEvent (proc:TFPgtkEventClientFunction; data:pointer) : guint;
    function EventNoExposeConnect (Signal:string; Proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
    function EventNoExposeConnectAfter (Signal:string; Proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
    function ConnectNoExposeEvent (proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
    function ConnectAfterNoExposeEvent (proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
    function ConnectVisibilityNotifyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    function ConnectAfterVisibilityNotifyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
    procedure LockAccelerators;
    procedure UnlockAccelerators;
    procedure RemoveAccelerators (aSignal:string; OnlyVisible:boolean);
    procedure ActivateAccelGroups (Key:guint; Mods:TGdkModifierType);
    procedure AcceleratorAdd (AG:PGtkAccelGroup; aSignal:string; Key:guint; Mods:TGdkModifierType; acFlags:TGtkAccelFlags); Overload;
  end;

  TFPgtkForEachProcedure = procedure (item : pointer; data : pointer) of object;

  TFPgtkGroup = class (TList)
  Private
    FManageLists : boolean;
    FListChanged:boolean;
    FSListChanged:boolean;
    FClassesChanged:boolean;
    FNotUpdating:boolean;
    FGList:PGList;
    FGSList:PGSList;
    procedure FreeList;
    procedure FreeSList;
    function CreateGList : PGList;
    function CreateGSList : PGSList;
    function GetGtkListProp : PGList;
    procedure SetGtkListProp (TheValue : PGList);
    function GetGtkSListProp : PGSList;
    procedure SetGtkSListProp (TheValue : PGSList);
  Protected
    procedure BuildFromGtkList;
    procedure BuildFromGtkSList;
    procedure Notify (ptr:pointer; Action:TListNotification); Override;
    function GetData (index:integer) : pointer; Dynamic;
    function UngetData (data:pointer) : pointer; Dynamic;
  Public
    property ManageLists : boolean read FManageLists write FManageLists;
    constructor Create;
    destructor Destroy; Override;
    function GetGtkList (buffered:boolean) : PGList;
    function GetGtkSList (buffered:boolean) : PGSList;
    procedure BeginUpdate;
    procedure EndUpdate;
    procedure ForEach (Proc:TFPgtkForEachProcedure; data:pointer);
    property GtkList : PGList read GetGtkListProp write SetGtkListProp;
    property GtkSList : PGSList read GetGtkSListProp write SetGtkSListProp;
  end;


  TFPgtkWidgetGroup = class (TFPgtkGroup)
  Private
    function GetItem(Index:integer) : TFPgtkWidget;
    procedure SetItem (Index:integer; TheValue : TFPgtkWidget);
    function GetTooltips(index:integer) : string;
    procedure SetTooltips (index:integer; TheValue : string);
  Public
    function GetData (index:integer) : pointer; Override;
    function UnGetData (data:pointer) : pointer; Override;
    procedure AddToContainer (Container:TFPgtkContainer);
    procedure PackInBox (box:TFPgtkBox; AtStart:boolean; Expanding:boolean; Fill:boolean; Padding:integer);
    property Items [Index:integer]  : TFPgtkWidget read GetItem write SetItem;
    property Tooltips [index:integer]  : string read GetTooltips write SetTooltips;
  end;


  TFPgtkMisc = class (TFPgtkWidget)
  Private
    function GetXAlign : gfloat;
    procedure SetXAlign (TheValue : gfloat);
    function GetYAlign : gfloat;
    procedure SetYAlign (TheValue : gfloat);
    function GetXPad : word;
    procedure SetXPad (TheValue : word);
    function GetYPad : word;
    procedure SetYPad (TheValue : word);
  Public
    function TheGtkObject : PGtkMisc;
    procedure SetAlignment (x:gfloat; y:gfloat);
    procedure SetPadding (x:word; y:word);
    property XAlign : gfloat read GetXAlign write SetXAlign;
    property YAlign : gfloat read GetYAlign write SetYAlign;
    property XPad : word read GetXPad write SetXPad;
    property YPad : word read GetYPad write SetYPad;
  end;

  TFPgtkLabelClass = class of TFPgtkLabel;

  TFPgtkLabel = class (TFPgtkMisc)
  Private
    function GetText : string;
    procedure SetText (TheValue : string);
    function GetPattern : string;
    procedure SetPattern (TheValue : string);
    function GetJustify : TGtkJustification;
    procedure SetJustify (TheValue : TGtkJustification);
    function GetLineWrap : boolean;
    procedure SetLineWrap (TheValue : boolean);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkLabel;
    constructor Create (aText:string);
    property Text : string read GetText write SetText;
    property Pattern : string read GetPattern write SetPattern;
    property Justify : TGtkJustification read GetJustify write SetJustify;
    property LineWrap : boolean read GetLineWrap write SetLineWrap;
    function ParseUline (aText:string) : guint;
  end;


  TFPgtkAccelLabel = class (TFPgtkLabel)
  Private
    function GetAccelWidget : TFPgtkWidget;
    procedure SetAccelWidget (TheValue : TFPgtkWidget);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkAccelLabel;
    property AccelWidget : TFPgtkWidget read GetAccelWidget write SetAccelWidget;
    function AccelText : string;
    procedure Refetch;
  end;


  TFPgtkTipsQuery = class (TFPgtkLabel)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkTipsQuery;
  end;


  TFPgtkArrow = class (TFPgtkMisc)
  Private
    function GetArrowType : TGtkArrowType;
    procedure SetArrowType (TheValue : TGtkArrowType);
    function GetShadowType : TGtkShadowType;
    procedure SetShadowType (TheValue : TGtkShadowType);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkArrow;
    property ArrowType : TGtkArrowType read GetArrowType write SetArrowType;
    property ShadowType : TGtkShadowType read GetShadowType write SetShadowType;
    procedure SetTypes (AnArrowType:TGtkArrowType; AShadowtype:TGtkShadowType);
    constructor Create (AnArrowType:TGtkArrowType; AShadowType:TGtkShadowType);
  end;


  TFPgtkImage = class (TFPgtkMisc)
  Private
    function GetImageProp : PGdkImage;
    procedure SetImageProp (TheValue : PGdkImage);
    function GetMask : PGdkBitMap;
    procedure SetMask (TheValue : PGdkBitMap);
  Protected
    procedure CreateGtkObject; override;
  Public
    FMask:PGdkBitMap;
    FImage:PGdkImage;
    function TheGtkObject : PGtkImage;
    property Image : PGdkImage read GetImageProp write SetImageProp;
    property Mask : PGdkBitMap read GetMask write SetMask;
    procedure SetImage (anImage:PGdkImage; aMask:PGdkBitmap);
    constructor Create (anImage:PGdkImage; aMask:PGdkBitmap);
  end;

  TStringArray = array[0..32000] of pgchar;
  PStringArray = ^TStringArray;

  TFPgtkPixmap = class (TFPgtkMisc)
  Private
    function GetBuildInsensitive : longbool;
    procedure SetBuildInsensitive (TheValue : longbool);
    function GetPixmapProp : PGdkPixMap;
    procedure SetPixmapProp (TheValue : PGdkPixMap);
    function GetMask : PGdkBitMap;
    procedure SetMask (TheValue : PGdkBitMap);
  Protected
    procedure CreateGtkObject; override;
  Public
    FMask:PGdkBitMap;
    FPixMap:PGdkPixmap;
    function TheGtkObject : PGtkPixmap;
    property BuildInsensitive : longbool read GetBuildInsensitive write SetBuildInsensitive;
    constructor Create;
    constructor CreateFromFile (Filename:string; Window:TFPgtkWidget);
    constructor CreateFromStrings (Data:TStrings; Window:TFPgtkWidget);
    constructor CreateFromText (Data:string; Window:TFPgtkWidget);
    property PixMap : PGdkPixMap read GetPixmapProp write SetPixmapProp;
    property Mask : PGdkBitMap read GetMask write SetMask;
    procedure SetPixmap (aPixmap:PGdkPixMap; aMask:PGdkBitmap);
    procedure GetPixmap (var aPixmap:PGdkPixmap; var aMask:PGdkBitmap);
    procedure LoadFromFile (Filename:string);
    procedure LoadFromStrings (data:TStrings);
    procedure LoadFromText (data:string);
    procedure LoadFromArray (data:array of string);
  end;

  TFPgtkDirectionFunctionSignalFunction = function (Sender:TFPgtkObject; Direction:TGtkDirectionType; data:pointer): TGtkDirectionType of Object;

  TFPgtkContainer = class (TFPgtkWidget)
  Private
    function GetBorder : integer;
    procedure SetBorder (TheValue : integer);
    function GetChildren : TFPgtkWidgetGroup;
  Public
    FChildren:TFPgtkWidgetGroup;
    function TheGtkObject : PGtkContainer;
    property Border : integer read GetBorder write SetBorder;
    procedure Add (AWidget:TFPgtkWidget; IsVisible:boolean); Overload;
    procedure Add (AWidget:TFPgtkWidget); Overload;
    procedure Remove (AWidget:TFPgtkWidget);
    constructor Create;
    destructor Destroy; Override;
    property Children : TFPgtkWidgetGroup read GetChildren;
    procedure Focus (Direction:TGtkDirectionType);
    procedure FocusChild (Child:TFPgtkWidget);
    procedure RegisterToplevel;
    procedure UnregisterToplevel;
    procedure ResizeChildren;
    function DirectionFunctionSignalConnect (Signal:string; Proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
    function DirectionFunctionSignalConnectAfter (Signal:string; Proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
    function ConnectAdd (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterAdd (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectRemove (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterRemove (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectCheckResize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterCheckResize (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectFocus (proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
    function ConnectAfterFocus (proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
    function ConnectSetFocusChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterSetFocusChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
  end;


  TFPgtkBin = class (TFPgtkContainer)
  Private
    function GetChild : TFPgtkWidget;
    procedure SetChild (TheValue : TFPgtkWidget);
  Protected
    property Child : TFPgtkWidget read GetChild write SetChild;
  Public
    function TheGtkObject : PGtkBin;
  end;


  TFPgtkAlignment = class (TFPgtkBin)
  Public
    function TheGtkObject : PGtkAlignment;
    procedure Configure (anXAlign:gfloat; anYAlign:gfloat; anXScale:gfloat; anYScale:gfloat);
  end;


  TFPgtkFrame = class (TFPgtkBin)
  Private
    function GetText : string;
    procedure SetText (TheValue : string);
    function GetAlignment : gfloat;
    procedure SetAlignment (TheValue : gfloat);
    function GetShadowType : TgtkShadowType;
    procedure SetShadowType (TheValue : TgtkShadowType);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkFrame;
    property Text : string read GetText write SetText;
    property Alignment : gfloat read GetAlignment write SetAlignment;
    property ShadowType : TgtkShadowType read GetShadowType write SetShadowType;
  end;


  TFPgtkAspectFrame = class (TFPgtkFrame)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkAspectFrame;
    procedure Configure (anXAlign:gfloat; anYAlign:gfloat; Ratio:gfloat; ObeyChild:longbool);
  end;


  TFPgtkButton = class (TFPgtkBin)
  Private
    FAccelKey : guint;
    FAddContainer : TFPgtkContainer;
    FLabel : TFPgtkLabel;
    procedure CreateLabel (aText:string);
    function GetText : string;
    procedure SetText (TheValue : string);
    function GetReliefStyle : TGtkReliefStyle;
    procedure SetReliefStyle (TheValue : TGtkReliefStyle);
  Protected
    procedure CreateGtkObject; override;
    function LabelClass : TFPgtkLabelClass; Virtual;
    procedure NotifyDestroy (AnObject:TFPgtkObject); Override;
    procedure LabelCreated; Virtual;
  Public
    function TheGtkObject : PGtkButton;
    function ConnectClicked (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterClicked (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectPressed (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterPressed (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectReleased (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterReleased (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectEnter (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterEnter (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectLeave (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterLeave (proc:TFPgtkSignalFunction; data:pointer) : guint;
    procedure Clicked;
    procedure Pressed;
    procedure Released;
    procedure Enter;
    procedure Leave;
    constructor Create;
    constructor CreateWithLabel (aText:string); Overload;
    constructor CreateWithLabel (aText:string; AccelGroup:PGtkAccelGroup); Overload;
    property TheLabel : TFPgtkLabel read FLabel;
    property Text : string read GetText write SetText;
    property ReliefStyle : TGtkReliefStyle read GetReliefStyle write SetReliefStyle;
    property AddContainer : TFPgtkContainer read FAddContainer write FAddContainer;
    property AccelKey : guint read FAccelKey;
  end;


  TFPgtkToggleButton = class (TFPgtkButton)
  Private
    function GetActive : boolean;
    procedure SetActive (TheValue : boolean);
    function GetDrawIndicator : boolean;
    procedure SetDrawIndicator (TheValue : boolean);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkToggleButton;
    function ConnectToggled (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterToggled (proc:TFPgtkSignalFunction; data:pointer) : guint;
    procedure Toggled;
    property Active : boolean read GetActive write SetActive;
    property DrawIndicator : boolean read GetDrawIndicator write SetDrawIndicator;
  end;


  TFPgtkCheckButton = class (TFPgtkToggleButton)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCheckButton;
  end;


  TFPgtkRadioButton = class (TFPgtkCheckButton)
  Protected
    procedure CreateGtkObject; Override;
  Public
    FGroup:TFPgtkRadioButtonGroup;
    function TheGtkObject : PGtkRadioButton;
    constructor Create (AGroup:TFPgtkRadioButtonGroup);
    constructor CreateWithLabel (AGroup:TFPgtkRadioButtonGroup; aText:string);
  end;


  TFPgtkRadioButtonGroup = class (TFPgtkWidgetGroup)
  Private
    function GetItem(index:integer) : TFPgtkRadioButton;
    procedure SetItem (index:integer; TheValue : TFPgtkRadioButton);
  Public
    property Items [index:integer]  : TFPgtkRadioButton read GetItem write SetItem;
    function ActiveButtonText : string;
    function ActiveButtonIndex : integer;
    function ActiveButton : TFPgtkRadioButton;
  end;


  TFPgtkOptionMenu = class (TFPgtkButton)
  Private
    function GetMenu : TFPgtkMenu;
    procedure setmenu (TheValue : TFPgtkMenu);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkOptionMenu;
    property Menu : TFPgtkMenu read GetMenu write setmenu;
    procedure RemoveMenu;
    procedure SetHistory (index:integer);
    procedure Clear;
  end;

  TFPgtkItemClass = class of TFPgtkItem;

  TFPgtkItem = class (TFPgtkBin)
  Private
    FAccelKey : guint;
    FAddContainer : TFPgtkContainer;
    FLabel : TFPgtkLabel;
    procedure CreateLabel (aText:string);
    function GetText : string;
    procedure SetText (TheValue : string);
  Protected
    function LabelClass : TFPgtkLabelClass; Virtual;
    procedure NotifyDestroy (AnObject:TFPgtkObject); Override;
    procedure LabelCreated; Virtual;
  Public
    function TheGtkObject : PGtkItem;
    function ConnectSelect (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterSelect (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectDeselect (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDeselect (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectToggle (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterToggle (proc:TFPgtkSignalFunction; data:pointer) : guint;
    procedure Select;
    procedure Deselect;
    procedure Toggle;
    constructor Create;
    constructor CreateWithLabel (aText:string);
    property TheLabel : TFPgtkLabel read FLabel;
    property Text : string read GetText write SetText;
    property AddContainer : TFPgtkContainer read FAddContainer write FAddContainer;
    property AccelKey : guint read FAccelKey;
  end;


  TFPgtkItemGroup = class (TFPgtkWidgetGroup)
  Private
    FItemClass : TFPgtkItemClass;
    function GetItem(index:integer) : TFPgtkItem;
    procedure SetItem (index:integer; TheValue : TFPgtkItem);
  Public
    property Items [index:integer]  : TFPgtkItem read GetItem write SetItem;
    procedure FillFromList (aList:TStrings);
    procedure FillFromCommaText (aList:string);
    procedure FillFromArray (aList:array of string);
    property ItemClass : TFPgtkItemClass read FItemClass write FItemClass;
    procedure SignalConnect (Signal:string; proc:TFPgtkSignalFunction; data:pointer);
    constructor create (AnItemClass:TFPgtkItemClass);
    function AddTextItem (aText:string) : TFPgtkItem;
  end;


  TFPgtkMenuItem = class (TFPgtkItem)
  Private
    function GetPlacement : TGtkSubmenuPlacement;
    procedure SetPlacement (TheValue : TGtkSubmenuPlacement);
    function GetToggleIndicator : boolean;
    procedure SetToggleIndicator (TheValue : boolean);
    function GetSubMenuIndicator : boolean;
    procedure SetSubMenuIndicator (TheValue : boolean);
    function GetJustifyRight : boolean;
    procedure SetJustifyRight (TheValue : boolean);
    function GetSubMenu : TFPgtkMenuShell;
    procedure SetPropSubMenu (TheValue : TFPgtkMenuShell);
  Protected
    procedure CreateGtkObject; override;
    function LabelClass : TFPgtkLabelClass; Override;
    procedure LabelCreated; Override;
  Public
    function TheGtkObject : PGtkMenuItem;
    function ConnectActivate (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterActivate (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectActivateItem (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterActivateItem (proc:TFPgtksignalFunction; data:pointer) : guint;
    procedure Activate;
    procedure SetSubMenu (aSubMenu:TFPgtkWidget);
    procedure RemoveSubMenu;
    procedure Configure (ShowToggleIndicator:boolean; ShowSubmenuIndicator:boolean);
    procedure RightJustify;
    property Placement : TGtkSubmenuPlacement read GetPlacement write SetPlacement;
    property ToggleIndicator : boolean read GetToggleIndicator write SetToggleIndicator;
    property SubMenuIndicator : boolean read GetSubMenuIndicator write SetSubMenuIndicator;
    property JustifyRight : boolean read GetJustifyRight write SetJustifyRight;
    property SubMenu : TFPgtkMenuShell read GetSubMenu write SetPropSubMenu;
  end;


  TFPgtkCheckMenuItem = class (TFPgtkMenuItem)
  Private
    function GetActive : boolean;
    procedure SetActive (TheValue : boolean);
    function GetShowToggle : boolean;
    procedure SetShowToggle (TheValue : boolean);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCheckMenuItem;
    function ConnectToggled (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterToggled (proc:TFPgtksignalFunction; data:pointer) : guint;
    procedure Toggled;
    property Active : boolean read GetActive write SetActive;
    property ShowToggle : boolean read GetShowToggle write SetShowToggle;
  end;


  TFPgtkRadioMenuItem = class (TFPgtkCheckMenuItem)
  Private
    FGroup : TFPgtkRadioMenuGroup;
  Protected
    procedure CreateGtkObject; Override;
  Public
    function TheGtkObject : PGtkRadioMenuItem;
    constructor Create (AGroup:TFPgtkRadioMenuGroup);
    constructor CreateWithLabel (Agroup:TFPgtkRadioMenuGroup; aText:string);
    property Group : TFPgtkRadioMenuGroup read FGroup;
  end;


  TFPgtkRadioMenuGroup = class (TFPgtkItemGroup)
  Private
    function GetItem(index:integer) : TFPgtkRadioMenuItem;
    procedure SetItem (index:integer; TheValue : TFPgtkRadioMenuItem);
  Public
    property Items [index:integer]  : TFPgtkRadioMenuItem read GetItem write SetItem;
    function ActiveMenuText : string;
    function ActiveMenuIndex : integer;
    function ActiveMenu : TFPgtkRadioMenuItem;
    constructor create;
  end;


  TFPgtkTearOffMenuItem = class (TFPgtkMenuItem)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkTearOffMenuItem;
  end;

  TFPgtkScrollSignalFunction = procedure (Sender:TFPgtkObject; ScrollType:TgtkScrollType; position:gfloat; data:pointer) of Object;
  TFPgtkScrollBooleanSignalFunction = procedure (Sender:TFPgtkObject; ScrolType:TgtkScrollType; Position:gfloat; AutoStartSelection:boolean; data:pointer) of Object;

  TFPgtkListItem = class (TFPgtkItem)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkListItem;
    function ScrollSignalConnect (Signal:string; Proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    function ScrollSignalConnectAfter (Signal:string; Proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    function ScrollBooleanSignalConnect (Signal:string; Proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
    function ScrollBooleanSignalConnectAfter (Signal:string; Proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
    function ConnectToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectUnselectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterUnselectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectUndoSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterUndoSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectStartSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterStartSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectEndSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterEndSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectToggleAddMode (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterToggleAddMode (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectExtendSelection (proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
    function ConnectAfterExtendSelection (proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
    function ConnectScrollVertical (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    function ConnectAfterScrollVertical (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    function ConnectScrollHorizontal (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    function ConnectAfterScrollHorizontal (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
    procedure Select;
    procedure Deselect;
  end;


  TFPgtkListItemGroup = class (TFPgtkItemGroup)
  Public
    constructor create;
  end;


  TFPgtkTreeItem = class (TFPgtkItem)
  Private
    function GetSubTree : TFPgtkWidget;
    procedure SetSubTree (TheValue : TFPgtkWidget);
    function GetPixPlus : TFPgtkWidget;
    function GetPixMinus : TFPgtkWidget;
    function GetExpanded : boolean;
    procedure SetExpanded (TheValue : boolean);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkTreeItem;
    property SubTree : TFPgtkWidget read GetSubTree write SetSubTree;
    property PixPlus : TFPgtkWidget read GetPixPlus;
    property PixMinus : TFPgtkWidget read GetPixMinus;
    property Expanded : boolean read GetExpanded write SetExpanded;
    procedure Select;
    procedure Deselect;
    procedure Expand;
    procedure Collapse;
    function ConnectCollapse (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterCollapse (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectExpand (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterExpand (proc:TFPgtkSignalFunction; data:pointer) : guint;
  end;

  DialogResultCallback = procedure (Sender:TFPgtkWindow; DialogResult:pointer;
                                    Action:integer; initiator:TFPgtkObject) of object;
  DialogInitCallback = procedure (Sender : TFPgtkWindow; InitData : pointer) of object;
  TFPgtkWindowClass = class of TFPgtkWindow;

  TFPgtkWindow = class (TFPgtkBin)
  Private
    FAccelGroups:TList;
    FMainLevel : guint;
    FModalAction : integer;
    FOnDialogInit : DialogInitCallback;
    FOnDialogResult : DialogResultCallback;
    FDialogResult : pointer;
    TheWindowType:TGtkWindowType;
    function GetWindowType : TGtkWindowType;
    procedure SetWindowType (TheValue : TGtkWindowType);
    function GetTitle : string;
    procedure SetTitle (TheValue : string);
    function GetModal : boolean;
    procedure SetModal (TheValue : boolean);
    procedure SetModalAction (TheValue : integer);
    procedure ExecuteEnds (Sender:TFPgtkObject; data:pointer);
    function GetUserSizable : boolean;
    procedure SetUserSizable (TheValue : boolean);
    function GetPosition : TGtkWindowPosition;
    procedure SetPosition (TheValue : TGtkWindowPosition);
    function GetAccelGroups(ID:integer) : PGtkAccelGroup;
  Protected
    procedure CreateGtkObject; override;
    property DialogResult : pointer read FDialogResult write FDialogResult;
    procedure DoDialogResult (Action:integer; Sender:TFPgtkObject); Virtual;
    procedure DoDialogInit (InitData:pointer); Virtual;
  Public
    function TheGtkObject : PGtkWindow;
    constructor Create (AType:TGtkWindowType);
    destructor Destroy; Override;
    property WindowType : TGtkWindowType read GetWindowType write SetWindowType;
    property Title : string read GetTitle write SetTitle;
    property Modal : boolean read GetModal write SetModal;
    property OnDialogResult : DialogResultCallback read FOnDialogResult write FOnDialogResult;
    property OnDialogInit : DialogInitCallback read FOnDialogInit write FOnDialogInit;
    procedure Close;
    procedure CloseWindow (Sender:TFPgtkObject; data:pointer);
    procedure CloseWithResult (Sender:TFPgtkObject; data:pointer);
    property ModalAction : integer read FModalAction write SetModalAction;
    property MainLevel : guint read FMainLevel;
    function Execute (anOnDialogInit:DialogInitCallBack; anInitData:pointer; anOnDialogResult:DialogResultCallBack) : integer;
    function ConnectSetFocus (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterSetFocus (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    procedure SetTransientFor (aParent:TFPgtkWindow);
    procedure DefaultWidget (Widget:TFPgtkWidget);
    procedure FocusedWidget (NewFocus:TFPgtkWidget);
    property UserSizable : boolean read GetUserSizable write SetUserSizable;
    procedure ActivateFocus;
    procedure ActivateDefault;
    procedure SetDefaultSize (Width:gint; Height:gint);
    property Position : TGtkWindowPosition read GetPosition write SetPosition;
    property AccelGroups [ID:integer]  : PGtkAccelGroup read GetAccelGroups;
    function AccelGroupNew : integer;
    procedure AccelGroupDelete (ID:integer);
    procedure AcceleratorAdd (AG:integer; aWidget:TFPgtkWidget; aSignal:string; Key:guint; Mods:TGdkModifierType; acFlags:TGtkAccelFlags); Overload;
    procedure AcceleratorRemove (AG:integer; aWidget:TFPgtkWidget; Key:guint; Mods:TGdkModifierType); Overload;
    procedure AccelGroupLock (AG:integer);
    procedure AccelGroupUnlock (AG:integer);
    procedure AccelGroupActivate (AG:integer; Key:guint; Mods:TGdkModifierType);
  end;


  TFPgtkColorSelectionDialog = class (TFPgtkWindow)
  Private
    function GetColorSel : TFPgtkColorSelection;
    function GetButtonOK : TFPgtkButton;
    function GetButtonCancel : TFPgtkButton;
    function GetButtonHelp : TFPgtkButton;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkColorSelectionDialog;
    property ColorSel : TFPgtkColorSelection read GetColorSel;
    property ButtonOK : TFPgtkButton read GetButtonOK;
    property ButtonCancel : TFPgtkButton read GetButtonCancel;
    property ButtonHelp : TFPgtkButton read GetButtonHelp;
  end;


  TFPgtkDialog = class (TFPgtkWindow)
  Private
    function GetActionArea : TFPgtkHBox;
    function GetVBox : TFPgtkVBox;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkDialog;
    property ActionArea : TFPgtkHBox read GetActionArea;
    property VBox : TFPgtkVBox read GetVBox;
    constructor create;
  end;

  TFPgtkDeviceSignalFunction = procedure (Sender:TFPgtkInputDialog; DeviceID:integer; Data:pointer) of Object;

  TFPgtkInputDialog = class (TFPgtkDialog)
  Private
    function GetButtonClose : TFPgtkButton;
    function GetButtonSave : TFPgtkButton;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkInputDialog;
    property ButtonClose : TFPgtkButton read GetButtonClose;
    property ButtonSave : TFPgtkButton read GetButtonSave;
    function DeviceSignalConnect (Signal:string; Proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
    function DeviceSignalConnectAfter (Signal:string; Proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
    function ConnectEnableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
    function ConnectAfterEnableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
    function ConnectDisableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
    function ConnectAfterDisableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
  end;


  TFPgtkFileSelection = class (TFPgtkWindow)
  Private
    function GetFilename : string;
    procedure SetFilename (TheValue : string);
    function GetDirList : TFPgtkCList;
    function GetFileList : TFPgtkCList;
    function GetOkButton : TFPgtkButton;
    function GetCancelButton : TFPgtkButton;
    function GetHistoryPulldown : TFPgtkOptionMenu;
    function GetFileOpDialog : TFPgtkDialog;
    function GetFileOpCreateDir : TFPgtkButton;
    function GetFileOpDelFile : TFPgtkButton;
    function GetFileOpRenFile : TFPgtkButton;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkFileSelection;
    property Filename : string read GetFilename write SetFilename;
    procedure Complete (Pattern:string);
    procedure ShowFileOpButtons;
    procedure HideFileOpButtons;
    property DirList : TFPgtkCList read GetDirList;
    property FileList : TFPgtkCList read GetFileList;
    property OkButton : TFPgtkButton read GetOkButton;
    property CancelButton : TFPgtkButton read GetCancelButton;
    property HistoryPulldown : TFPgtkOptionMenu read GetHistoryPulldown;
    property FileOpDialog : TFPgtkDialog read GetFileOpDialog;
    property FileOpCreateDir : TFPgtkButton read GetFileOpCreateDir;
    property FileOpDelFile : TFPgtkButton read GetFileOpDelFile;
    property FileOpRenFile : TFPgtkButton read GetFileOpRenFile;
  end;


  TFPgtkFontSelectionDialog = class (TFPgtkWindow)
  Private
    function GetFontSel : TFPgtkFontSelection;
    function GetButtonOk : TFPgtkButton;
    function GetButtonApply : TFPgtkButton;
    function GetButtonCancel : TFPgtkButton;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkFontSelectionDialog;
    property FontSel : TFPgtkFontSelection read GetFontSel;
    property ButtonOk : TFPgtkButton read GetButtonOk;
    property ButtonApply : TFPgtkButton read GetButtonApply;
    property ButtonCancel : TFPgtkButton read GetButtonCancel;
  end;


  TFPgtkEventBox = class (TFPgtkBin)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkEventBox;
  end;


  TFPgtkHandleBox = class (TFPgtkBin)
  Private
    function GetShadowType : TGtkShadowtype;
    procedure SetShadowType (TheValue : TGtkShadowtype);
    function GetHandlePosition : TGtkPositionType;
    procedure SetHandlePosition (TheValue : TGtkPositionType);
    function GetSnapEdge : TGtkPositionType;
    procedure SetSnapEdge (TheValue : TGtkPositionType);
    function GetChildDetached : boolean;
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHandleBox;
    property ShadowType : TGtkShadowtype read GetShadowType write SetShadowType;
    property HandlePosition : TGtkPositionType read GetHandlePosition write SetHandlePosition;
    property SnapEdge : TGtkPositionType read GetSnapEdge write SetSnapEdge;
    property ChildDetached : boolean read GetChildDetached;
    function ConnectChildAttached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterChildAttached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectChildDetached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterChildDetached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
  end;


  TFPgtkScrolledWindow = class (TFPgtkBin)
  Private
    FVScroll:TFPgtkAdjustment;
    FHScroll:TFPgtkAdjustment;
    function GetHPolicy : TGtkPolicyType;
    procedure SetHPolicy (TheValue : TGtkPolicyType);
    function GetVPolicy : TGtkPolicyType;
    procedure SetVPolicy (TheValue : TGtkPolicyType);
    function GetHAdjustment : TFPgtkAdjustment;
    procedure SetHAdjustment (TheValue : TFPgtkAdjustment);
    function GetVAdjustment : TFPgtkAdjustment;
    procedure SetVAdjustment (TheValue : TFPgtkAdjustment);
    function GetPlacement : TGtkCornerType;
    procedure SetPlacement (TheValue : TGtkCornerType);
    function GetHScrollbar : TFPgtkScrollbar;
    function GetVScrollbar : TFPgtkScrollbar;
  Protected
    procedure CreateGtkObject; Override;
  Public
    function TheGtkObject : PGtkScrolledWindow;
    constructor Create (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
    property HPolicy : TGtkPolicyType read GetHPolicy write SetHPolicy;
    property VPolicy : TGtkPolicyType read GetVPolicy write SetVPolicy;
    procedure SetPolicy (aHScrollBar:TGtkPolicyType; aVScrollbar:TGtkPolicyType); Overload;
    procedure SetPolicy (aPolicy:TGtkPolicyType); Overload;
    property HAdjustment : TFPgtkAdjustment read GetHAdjustment write SetHAdjustment;
    property VAdjustment : TFPgtkAdjustment read GetVAdjustment write SetVAdjustment;
    procedure AddWithViewport (aChild:TFPgtkWidget);
    property Placement : TGtkCornerType read GetPlacement write SetPlacement;
    property HScrollbar : TFPgtkScrollbar read GetHScrollbar;
    property VScrollbar : TFPgtkScrollbar read GetVScrollbar;
    procedure UpdatePolicy (UpdPolicy:TGtkUpdateType);
  end;


  TFPgtkViewport = class (TFPgtkBin)
  Private
    FVScroll:TFPgtkAdjustment;
    FHScroll:TFPgtkAdjustment;
    function GetHAdjustment : TFPgtkAdjustment;
    procedure SetHAdjustment (TheValue : TFPgtkAdjustment);
    function GetVAdjustment : TFPgtkAdjustment;
    procedure SetVAdjustment (TheValue : TFPgtkAdjustment);
    function GetShadowType : TgtkShadowType;
    procedure SetShadowType (TheValue : TgtkShadowType);
  Protected
    procedure CreateGtkObject; Override;
  Public
    function TheGtkObject : PGtkViewport;
    constructor Create (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
    property HAdjustment : TFPgtkAdjustment read GetHAdjustment write SetHAdjustment;
    property VAdjustment : TFPgtkAdjustment read GetVAdjustment write SetVAdjustment;
    property ShadowType : TgtkShadowType read GetShadowType write SetShadowType;
  end;


  TFPgtkBox = class (TFPgtkContainer)
  Private
    function GetHomogeneous : boolean;
    procedure SetHomogeneous (TheValue : boolean);
    function GetSpacing : integer;
    procedure SetSpacing (TheValue : integer);
  Public
    function TheGtkObject : PGtkBox;
    property Homogeneous : boolean read GetHomogeneous write SetHomogeneous;
    property Spacing : integer read GetSpacing write SetSpacing;
    procedure ReorderChild (Widget:TFPgtkWidget; Position:integer);
    procedure GetChildPacking (Widget:TFPgtkWidget; var Expand:boolean; var Fill:boolean; var Padding:integer; var PackType:TGtkPackType);
    procedure SetChildPacking (Widget:TFPgtkWidget; Expand:boolean; Fill:boolean; Padding:integer; PackType:TGtkPackType);
    procedure PackStart (Widget:TFPgtkWidget); Overload;
    procedure PackStart (Widget:TFPgtkWidget; IsVisible:boolean); Overload;
    procedure PackStart (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer); Overload;
    procedure PackStart (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer; IsVisible:boolean); Overload;
    procedure PackEnd (Widget:TFPgtkWidget); Overload;
    procedure PackEnd (Widget:TFPgtkWidget; IsVisible:boolean); Overload;
    procedure PackEnd (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer); Overload;
    procedure PackEnd (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer; IsVisible:boolean); Overload;
  end;


  TFPgtkButtonBox = class (TFPgtkBox)
  Private
    function GetSpacing : integer;
    procedure SetSpacing (TheValue : integer);
    function GetLayout : TGtkButtonBoxStyle;
    procedure SetLayout (TheValue : TGtkButtonBoxStyle);
    function GetMinWidth : integer;
    procedure SetMinWidth (TheValue : integer);
    function GetMinHeight : integer;
    procedure SetMinHeight (TheValue : integer);
    function GetChildPadX : integer;
    procedure SetChildPadX (TheValue : integer);
    function GetChildPadY : integer;
    procedure SetChildPadY (TheValue : integer);
  Public
    function TheGtkObject : PGtkButtonBox;
    property Spacing : integer read GetSpacing write SetSpacing;
    property Layout : TGtkButtonBoxStyle read GetLayout write SetLayout;
    property ChildMinWidth : integer read GetMinWidth write SetMinWidth;
    property ChildMinHeight : integer read GetMinHeight write SetMinHeight;
    property ChildPadX : integer read GetChildPadX write SetChildPadX;
    property ChildPadY : integer read GetChildPadY write SetChildPadY;
  end;


  TFPgtkHButtonBox = class (TFPgtkButtonBox)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHButtonBox;
  end;


  TFPgtkVButtonBox = class (TFPgtkButtonBox)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVButtonBox;
  end;


  TFPgtkVBox = class (TFPgtkBox)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVBox;
  end;


  TFPgtkColorSelection = class (TFPgtkVBox)
  Private
    function GetUpdatePolicy : TGtkUpdateType;
    procedure SetUpdatePolicy (TheValue : TGtkUpdateType);
    function GetColor : double;
    procedure SetColor (TheValue : double);
    function GetUseOpacity : longbool;
    procedure SetUseOpacity (TheValue : longbool);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkColorSelection;
    property UpdatePolicy : TGtkUpdateType read GetUpdatePolicy write SetUpdatePolicy;
    property Color : double read GetColor write SetColor;
    property UseOpacity : longbool read GetUseOpacity write SetUseOpacity;
  end;


  TFPgtkGammaCurve = class (TFPgtkVBOX)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkGammaCurve;
  end;


  TFPgtkHBox = class (TFPgtkBox)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHBox;
  end;


  TFPgtkCombo = class (TFPgtkHBox)
  Private
    function GetEntry : TFPgtkEntry;
    function GetList : TFPgtkList;
    function GetButton : TFpGtkButton;
    function GetValueInList : longbool;
    procedure SetValueInListProp (TheValue : longbool);
    function GetOkIfEmpty : longbool;
    procedure SetOkIfEmpty (TheValue : longbool);
    function GetUseArrows : longbool;
    procedure SetUseArrows (TheValue : longbool);
    function GetUseArrowsAlways : longbool;
    procedure SetUseArrowsAlways (TheValue : longbool);
    function GetCaseSensitive : longbool;
    procedure SetCaseSensitive (TheValue : longbool);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCombo;
    property Entry : TFPgtkEntry read GetEntry;
    property List : TFPgtkList read GetList;
    property Button : TFpGtkButton read GetButton;
    property ValueInList : longbool read GetValueInList write SetValueInListProp;
    property OkIfEmpty : longbool read GetOkIfEmpty write SetOkIfEmpty;
    property UseArrows : longbool read GetUseArrows write SetUseArrows;
    property UseArrowsAlways : longbool read GetUseArrowsAlways write SetUseArrowsAlways;
    property CaseSensitive : longbool read GetCaseSensitive write SetCaseSensitive;
    procedure SetItemString (Item:TFPgtkItem; ItemValue:string);
    procedure DisableActivate;
    procedure SetValueInList (Val:longbool; IsOkIfEmpty:longbool);
  end;

  TFPgtkStatusbarSignalFunction = procedure (Sender:TFPgtkObject; contextID:integer; text:string; data:pointer) of Object;

  TFPgtkStatusbar = class (TFPgtkHBox)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkStatusbar;
    function GetContextID (ContextDescr:string) : integer;
    function Push (contextID:integer; text:string) : integer;
    procedure Pop (contextID:integer);
    procedure Remove (contextID:integer; MessageID:integer);
    function StatusbarSignalConnect (Signal:string; Proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
    function StatusbarSignalConnectAfter (Signal:string; Proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
    function ConnectTextPopped (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
    function ConnectAfterTextPopped (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
    function ConnectTextPushed (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
    function ConnectAfterTextPushed (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
  end;

  TFPgtkCListScrollSignalFunction = procedure (Sender:TFPgtkObject; ScrollType:TgtkScrollType; position:gfloat; data:pointer) of Object;
  TFPgtkCListScrollBooleanSignalFunction = procedure (Sender:TFPgtkObject; ScrollType:TgtkScrollType; Position:gfloat; AutoStartSelection:boolean; data:pointer) of Object;
  TFPgtkSelectRowSignalFunction = procedure (Sender:TFPgtkObject; row:integer; column:integer; event:PGdkEventButton; data:pointer) of Object;
  TFPgtkMoveSignalFunction = procedure (Sender:TFPgtkObject; arg1:integer; arg2:integer; data:pointer) of Object;
  TFPgtkColumnClickedSignalFunction = procedure (Sender:TFPgtkObject; column:integer; data:pointer) of Object;
  TFPgtkResizeColumnSignalFunction = procedure (Sender:TFPgtkObject; column:integer; width:integer; data:pointer) of Object;

  TFPgtkCList = class (TFPgtkContainer)
  Private
    compare : TGtkCListCompareFunc;
    FColumnCount : integer;
    function GetShadowType : TGtkShadowType;
    procedure SetShadowType (TheValue : TGtkShadowType);
    function GetSelectionMode : TGtkSelectionMode;
    procedure SetSelectionMode (TheValue : TGtkSelectionMode);
    function GetColumnTitle(column:integer) : string;
    procedure SetColumnTitle (column:integer; TheValue : string);
    function GetColumnWidget(column:integer) : TFPgtkWidget;
    procedure SetColumnWidget (column:integer; TheValue : TFPgtkWidget);
    function GetCellText(Row:integer; Column:integer) : string;
    procedure SetCellText (Row:integer; Column:integer; TheValue : string);
    function GetCellStyle(row:integer; column:integer) : PGtkStyle;
    procedure SetCellStyle (row:integer; column:integer; TheValue : PGtkStyle);
    function GetRowStyle(row:integer) : PGtkStyle;
    procedure SetRowStyle (row:integer; TheValue : PGtkStyle);
    function GetRowData(row:integer) : pointer;
    procedure SetRowData (row:integer; TheValue : pointer);
    procedure SetCompareFunc (TheValue : TGtkCListCompareFunc);
    function GetSortColumn : integer;
    procedure SetSortColumn (TheValue : integer);
    function GetSetSortType : TGtkSortType;
    procedure SetSetSortType (TheValue : TGtkSortType);
    function GetHAdjustment : TFPgtkAdjustment;
    procedure SetHAdjustment (TheValue : TFPgtkAdjustment);
    function GetVAdjustment : TFPgtkAdjustment;
    procedure SetVAdjustment (TheValue : TFPgtkAdjustment);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCList;
    constructor Create (aColumnCount:integer);
    property ColumnCount : integer read FColumnCount;
    property ShadowType : TGtkShadowType read GetShadowType write SetShadowType;
    property SelectionMode : TGtkSelectionMode read GetSelectionMode write SetSelectionMode;
    procedure Freeze;
    procedure Thaw;
    procedure ShowTitles;
    procedure HideTitles;
    procedure ActiveTitles;
    procedure PassiveTitles;
    procedure ActiveTitle (column:integer);
    procedure PassiveTitle (column:integer);
    property ColumnTitle [column:integer]  : string read GetColumnTitle write SetColumnTitle;
    property ColumnWidget [column:integer]  : TFPgtkWidget read GetColumnWidget write SetColumnWidget;
    procedure SetColumnJustification (column:integer; justification:TGtkJustification);
    procedure SetColumnVisibility (column:integer; aVisible:boolean);
    procedure SetColumnResizeable (column:integer; Resizeable:boolean);
    procedure SetColumnAutoResize (column:integer; autoResize:boolean);
    function OptimalColumnWidth (column:integer) : integer;
    procedure SetColumnWidth (column:integer; width:integer);
    procedure SetColumnMinWidth (column:integer; MinWidth:integer);
    procedure SetColumnMaxWidth (column:integer; MaxWidth:integer);
    function AutoSizeColumns : integer;
    procedure ConfigureColumnWidth (column:integer; Width:integer; MinWidth:integer; MaxWidth:integer);
    procedure ConfigureColumn (column:integer; Justification:TGtkJustification; Visibility:boolean; Resizeable:boolean; AutoSize:boolean);
    procedure SetRowHeight (height:integer);
    procedure MoveTo (row:integer; column:integer; RowAlign:gfloat; ColAlign:gfloat);
    function RowIsVisible (Row:integer) : TGtkVisibility;
    function GetCellType (Row:integer; column:integer) : TGtkCellType;
    property CellText [Row:integer; Column:integer]  : string read GetCellText write SetCellText;
    procedure SetPixmap (row:integer; column:integer; pixmap:PGdkPixmap; mask:PGdkBitmap);
    procedure GetPixmap (row:integer; column:integer; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
    procedure SetPixText (row:integer; column:integer; text:string; spacing:guint8; pixmap:PGdkPixmap; mask:PGdkBitmap);
    procedure GetPixText (row:integer; column:integer; var text:string; var aspacing:guint8; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
    procedure SetForeground (row:integer; color:PGdkColor);
    procedure SetBackground (row:integer; color:PGdkColor);
    property CellStyle [row:integer; column:integer]  : PGtkStyle read GetCellStyle write SetCellStyle;
    property RowStyle [row:integer]  : PGtkStyle read GetRowStyle write SetRowStyle;
    procedure SetShift (row:integer; column:integer; vertical:integer; horizontal:integer);
    procedure Remove (row:integer);
    procedure Prepend (Data:TStrings); Overload;
    procedure Prepend (Text:string; separator:string); Overload;
    procedure Prepend (data:array of string); Overload;
    function Append (data:TStrings) : Integer; Overload;
    function Append (Text:string; Separator:string) : Integer; Overload;
    function Append (data:array of string) : Integer; Overload;
    procedure Insert (row:integer; data:TStrings); Overload;
    procedure Insert (row:integer; Text:string; Separator:string); Overload;
    procedure Insert (row:integer; data:array of string); Overload;
    property RowData [row:integer]  : pointer read GetRowData write SetRowData;
    function FindRowFromData (data:pointer) : integer;
    procedure SelectRow (row:integer; column:integer);
    procedure UnselectRow (row:integer; column:integer);
    procedure Clear;
    procedure SelectAll;
    procedure UnselectAll;
    procedure SwapRows (row1:integer; row2:integer);
    procedure RowMove (sourceRow:integer; destRow:integer);
    procedure Sort;
    property CompareFunc : TGtkCListCompareFunc read compare write SetCompareFunc;
    property SortColumn : integer read GetSortColumn write SetSortColumn;
    property SetSortType : TGtkSortType read GetSetSortType write SetSetSortType;
    procedure SetAutoSort (autoSort:boolean);
    property HAdjustment : TFPgtkAdjustment read GetHAdjustment write SetHAdjustment;
    property VAdjustment : TFPgtkAdjustment read GetVAdjustment write SetVAdjustment;
    procedure SetReorderable (reorderable:boolean);
    function Count : integer;
    function CListScrollSignalConnect (Signal:string; Proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function CListScrollSignalConnectAfter (Signal:string; Proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function CListScrollBooleanSignalConnect (Signal:string; Proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
    function CListScrollBooleanSignalConnectAfter (Signal:string; Proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
    function SelectRowSignalConnect (Signal:string; Proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function SelectRowSignalConnectAfter (Signal:string; Proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function ConnectSelectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function ConnectUnselectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function ConnectAfterUnselectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
    function MoveSignalConnect (Signal:string; Proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
    function MoveSignalConnectAfter (Signal:string; Proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
    function ConnectRowMove (proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
    function ConnectAfterRowMove (proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
    function ConnectScrollVertical (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function ConnectAfterScrollVertical (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function ConnectScrolHorizontal (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function ConnectAfterScrolHorizontal (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
    function ConnectToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectUnselectAll (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterUnselectAll (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectUndoSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterUndoSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectStartSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterStartSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectEndSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterEndSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectToggleAddMode (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterToggleAddMode (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAbortColumnResize (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterAbortColumnResize (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectExtendSelection (proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
    function ConnectAfterExtendSelection (proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
    function ColumnClickedSignalConnect (Signal:string; Proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
    function ColumnClickedSignalConnectAfter (Signal:string; Proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
    function ConnectClickColumn (proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
    function ConnectAfterClickColumn (proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
    function ResizeColumnSignalConnect (Signal:string; Proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
    function ResizeColumnSignalConnectAfter (Signal:string; Proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
    function ConnectResizeColumn (proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
    function ConnectAfterResizeColumn (proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
  end;

  TFPgtkCTreeFunction = procedure (TheTree:TFPgtkCTree; TheNode:PGtkCTreeNode; data:pointer) of object;

  TFPgtkCTree = class (TFPgtkCList)
  Private
    FTreeColumn:integer;
    function GetLineStyle : TGtkCTreeLineStyle;
    procedure SetLineStyle (TheValue : TGtkCTreeLineStyle);
    function GetShowStub : boolean;
    procedure SetShowStub (TheValue : boolean);
    function GetExpanderStyle : TGtkCTreeExpanderStyle;
    procedure SetExpanderStyle (TheValue : TGtkCTreeExpanderStyle);
    function GetSpacing : guint;
    procedure SetSpacing (TheValue : guint);
    function GetIndent : guint;
    procedure SetIndent (TheValue : guint);
    function GetTreeColumn : integer;
    function GetNodeCellText(Node:PGtkCTreeNode; Column:integer) : string;
    procedure SetNodeCellText (Node:PGtkCTreeNode; Column:integer; TheValue : string);
    function GetNodeSelectable(Node:PGtkCTreeNode) : boolean;
    procedure SetNodeSelectable (Node:PGtkCTreeNode; TheValue : boolean);
    function GetNodeCellStyle(Node:PGtkCTreeNode; column:integer) : PGtkStyle;
    procedure SetNodeCellStyle (Node:PGtkCTreeNode; column:integer; TheValue : PGtkStyle);
    function GetNodeRowStyle(Node:PGtkCTreeNode) : PGtkStyle;
    procedure SetNodeRowStyle (Node:PGtkCTreeNode; TheValue : PGtkStyle);
    function GetNodeData(Node:PGtkCTreeNode) : pointer;
    procedure SetNodeData (Node:PGtkCTreeNode; TheValue : pointer);
    function GetCompareDragFunc : TGtkCTreeCompareDragFunc;
    procedure SetCompareDragFunc (TheValue : TGtkCTreeCompareDragFunc);
  Public
    function TheGtkObject : PGtkCTree;
    property LineStyle : TGtkCTreeLineStyle read GetLineStyle write SetLineStyle;
    property ShowStub : boolean read GetShowStub write SetShowStub;
    property ExpanderStyle : TGtkCTreeExpanderStyle read GetExpanderStyle write SetExpanderStyle;
    property Spacing : guint read GetSpacing write SetSpacing;
    property Indent : guint read GetIndent write SetIndent;
    property TreeColumn : integer read GetTreeColumn;
    constructor Create (aColumnCount:integer; aTreeColumn:integer);
    procedure RemoveNode (node:PGtkCTreeNode);
    function InsertNode (aParent:PGtkCTreeNode; Sibling:PGtkCTreeNode; data:string; aSpacing:guint8; PixmapClosed:PGdkPixmap; MaskClosed:PGdkBitmap; PixmapOpened:PGdkPixmap; MaskOpened:PGdkBitmap; IsLeaf:boolean; Expanded:boolean) : PGtkCTreeNode; Overload;
    function InsertNode (aParent:PGtkCTreeNode; Sibling:PGtkCTreeNode; data:string; aSpacing:guint8; IsLeaf:boolean; Expanded:boolean) : PGtkCTreeNode; Overload;
    procedure PostRecursive (aNode:PGtkCTreeNode; func:TFPgtkCTreeFunction; data:pointer);
    procedure PostRecursiveToDepth (aNode:PGtkCTreeNode; aDepth:integer; func:TFPgtkCTreeFunction; data:pointer);
    procedure PreRecursive (aNode:PGtkCTreeNode; func:TFPgtkCTreeFunction; data:pointer);
    procedure PreRecursiveToDepth (aNode:PGtkCTreeNode; aDepth:integer; func:TFPgtkCTreeFunction; data:pointer);
    procedure IsViewable (aNode:PGtkCTreeNode);
    procedure LastChild (aNode:PGtkCTreeNode);
    function IsChild (anAncestor:PGtkCTreeNode; aChild:PGtkCTreeNode) : boolean;
    function IsAncestor (anAncestor:PGtkCTreeNode; aChild:PGtkCTreeNode) : boolean;
    function IsHotSpot (X:integer; Y:integer) : boolean;
    procedure MoveNode (aNode:PGtkCTreeNode; NewParent:PGtkCTreeNode; NewSibling:PGtkCTreeNode);
    procedure Expand (aNode:PGtkCTreeNode);
    procedure ExpandRecursive (aNode:PGtkCTreeNode);
    procedure ExpandToDepth (aNode:PGtkCTreeNode; aDepth:integer);
    procedure Collapse (aNode:PGtkCTreeNode);
    procedure CollapseRecursive (aNode:PGtkCTreeNode);
    procedure CollapseToDepth (aNode:PGtkCTreeNode; aDepth:integer);
    procedure SelectNode (aNode:PGtkCTreeNode);
    procedure SelectRecursive (aNode:PGtkCTreeNode);
    procedure UnselectNode (aNode:PGtkCTreeNode);
    procedure UnselectRecursive (aNode:PGtkCTreeNode);
    procedure RealSelectRecursive (aNode:PGtkCTreeNode; aState:boolean);
    function NodeGetCellType (Node:PGtkCTreeNode; column:integer) : TGtkCellType;
    property NodeCellText [Node:PGtkCTreeNode; Column:integer]  : string read GetNodeCellText write SetNodeCellText;
    procedure NodeSetPixmap (Node:PGtkCTreeNode; column:integer; pixmap:PGdkPixmap; mask:PGdkBitmap);
    procedure NodeGetPixmap (Node:PGtkCTreeNode; column:integer; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
    procedure NodeSetPixText (Node:PGtkCTreeNode; column:integer; text:string; aspacing:guint8; pixmap:PGdkPixmap; mask:PGdkBitmap);
    procedure NodeGetPixText (Node:PGtkCTreeNode; column:integer; var text:string; var aspacing:guint8; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
    procedure SetNodeInfo (aNode:PGtkCTreeNode; aText:string; aSpacing:guint8; PixmapClosed:PGdkPixmap; MaskClosed:PGdkBitmap; PixmapOpened:PGdkPixmap; MaskOpened:PGdkBitmap; IsLeaf:boolean; Expanded:boolean); Overload;
    procedure GetNodeInfo (aNode:PGtkCTreeNode; var aText:string; var aSpacing:guint8; var PixmapClosed:PGdkPixmap; var MaskClosed:PGdkBitmap; var PixmapOpened:PGdkPixmap; var MaskOpened:PGdkBitmap; var IsLeaf:boolean; var Expanded:boolean); Overload;
    procedure NodeSetShift (Node:PGtkCTreeNode; column:integer; vertical:integer; horizontal:integer);
    property NodeSelectable [Node:PGtkCTreeNode]  : boolean read GetNodeSelectable write SetNodeSelectable;
    procedure NodeSetForeground (Node:PGtkCTreeNode; color:PGdkColor);
    procedure NodeSetBackground (Node:PGtkCTreeNode; color:PGdkColor);
    property NodeCellStyle [Node:PGtkCTreeNode; column:integer]  : PGtkStyle read GetNodeCellStyle write SetNodeCellStyle;
    property NodeRowStyle [Node:PGtkCTreeNode]  : PGtkStyle read GetNodeRowStyle write SetNodeRowStyle;
    property NodeData [Node:PGtkCTreeNode]  : pointer read GetNodeData write SetNodeData;
    procedure NodeMoveTo (aNode:PGtkCTreeNode; column:integer; RowAlign:gfloat; ColAlign:gfloat);
    function IsVisible (aNode:PGtkCTreeNode) : TGtkVisibility;
    property CompareDragFunc : TGtkCTreeCompareDragFunc read GetCompareDragFunc write SetCompareDragFunc;
    procedure SortNode (aNode:PGtkCTreeNode);
    procedure SortRecursive (aNode:PGtkCTreeNode);
    function NthNode (Row:integer) : PGtkCTreeNode;
  end;


  TFPgtkFixed = class (TFPgtkContainer)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkFixed;
    procedure Put (Widget:TFPgtkWidget; x:integer; y:integer);
    procedure Move (Widget:TFPgtkWidget; x:integer; y:integer);
    procedure GetPos (Widget:TFPgtkWidget; var PosX:integer; var PosY:integer);
  end;

  TFPgtkPageSwitchSignalFunction = procedure (Sender:TFPgtkObject; PageRec:PGtkNotebookPage; aPageNum:integer; data:pointer) of Object;

  TFPgtkNotebook = class (TFPgtkContainer)
  Private
    function GetPageIndex : integer;
    procedure SetPageIndex (TheValue : integer);
    function GetPage : TFPgtkWidget;
    procedure SetPage (TheValue : TFPgtkWidget);
    function GetTabPos : TGtkPositionType;
    procedure SetTabPos (TheValue : TGtkPositionType);
    function GetShowTabs : boolean;
    procedure SetShowTabs (TheValue : boolean);
    function GetShowBorder : boolean;
    procedure SetShowBorder (TheValue : boolean);
    function GetScrollable : boolean;
    procedure SetScrollable (TheValue : boolean);
    function GetHomogenous : boolean;
    procedure SetHomogenous (TheValue : boolean);
    function GetTabHBorder : word;
    procedure SetTabHBorder (TheValue : word);
    function GetTabVBorder : word;
    procedure SetTabVBorder (TheValue : word);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkNotebook;
    procedure AppendPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
    procedure AppendPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean);
    procedure PrependPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
    procedure PrependPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean);
    procedure InsertPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; Position:integer);
    procedure InsertPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean; Position:integer);
    procedure RemovePage (PageNumber:integer);
    function PageNumberOf (Child:TFPgtkWidget) : integer;
    procedure NextPage;
    procedure PrevPage;
    procedure ReorderPage (Child:TFPgtkWidget; PageNum:integer);
    property PageIndex : integer read GetPageIndex write SetPageIndex;
    property Page : TFPgtkWidget read GetPage write SetPage;
    property TabPos : TGtkPositionType read GetTabPos write SetTabPos;
    property ShowTabs : boolean read GetShowTabs write SetShowTabs;
    property ShowBorder : boolean read GetShowBorder write SetShowBorder;
    property Scrollable : boolean read GetScrollable write SetScrollable;
    property Homogenous : boolean read GetHomogenous write SetHomogenous;
    property TabHBorder : word read GetTabHBorder write SetTabHBorder;
    property TabVBorder : word read GetTabVBorder write SetTabVBorder;
    procedure SetTabBorders (BorderWidth:word);
    function GetMenuLabelOf (Child:TFPgtkWidget) : TFPgtkWidget;
    procedure SetMenuLabel (Child:TFPgtkWidget; MenuLabel:TFPgtkWidget);
    function GetTabLabelOf (Child:TFPgtkWidget) : TFPgtkWidget;
    procedure SetTabLabel (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
    function GetChildOnPage (PageNum:integer) : TFPgtkWidget;
    procedure GetTabLabelPacking (Widget:TFPgtkWidget; var Expand:boolean; var Fill:boolean; var PackType:TGtkPackType);
    procedure SetTabLabelPacking (Widget:TFPgtkWidget; Expand:boolean; Fill:boolean; PackType:TGtkPackType);
    procedure EnablePopup;
    procedure DisablePopup;
    function PageSwitchSignalConnect (Signal:string; Proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
    function PageSwitchSignalConnectAfter (Signal:string; Proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
    function ConnectSwitchPage (proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
    function ConnectAfterSwitchPage (proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
  end;


  TFPgtkFontSelection = class (TFPgtkNotebook)
  Private
    function GetFontName : string;
    procedure SetFontName (TheValue : string);
    function GetPreviewText : string;
    procedure SetPreviewText (TheValue : string);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkFontSelection;
    property FontName : string read GetFontName write SetFontName;
    function GetFont : PGdkFont;
    property PreviewText : string read GetPreviewText write SetPreviewText;
    procedure SetFilter (FilterType:TGtkFontFilterType; FontType:TGtkFontType; Foundries:array of string; Weights:array of string; Slants:array of string; SetWidths:array of string; Spacings:array of string; CharSets:array of string);
  end;


  TFPgtkPaned = class (TFPgtkContainer)
  Private
    function GetGutterSize : word;
    procedure SetGutterSize (TheValue : word);
    function GetHandleSize : word;
    procedure SetHandleSize (TheValue : word);
    function GetPosition : integer;
    procedure SetPosition (TheValue : integer);
  Public
    function TheGtkObject : PGtkPaned;
    property GutterSize : word read GetGutterSize write SetGutterSize;
    property HandleSize : word read GetHandleSize write SetHandleSize;
    property Position : integer read GetPosition write SetPosition;
    procedure ComputePosition (AnAllocation:integer; Child1Req:integer; Child2Req:integer);
    procedure Add1 (Child:TFPgtkWidget); Overload;
    procedure Pack1 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean); Overload;
    procedure Add1 (Child:TFPgtkWidget; isVisible:boolean); Overload;
    procedure Pack1 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean; IsVisible:boolean); Overload;
    procedure Add2 (Child:TFPgtkWidget); Overload;
    procedure Pack2 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean); Overload;
    procedure Add2 (Child:TFPgtkWidget; IsVisible:boolean); Overload;
    procedure Pack2 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean; IsVisible:boolean); Overload;
  end;


  TFPgtkHPaned = class (TFPgtkPaned)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHPaned;
  end;


  TFPgtkVPaned = class (TFPgtkPaned)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVPaned;
  end;


  TFPgtkLayout = class (TFPgtkContainer)
  Private
    function GetHAdj : TFPgtkAdjustment;
    procedure SetHAdj (TheValue : TFPgtkAdjustment);
    function GetVAdj : TFPgtkAdjustment;
    procedure SetVAdj (TheValue : TFPgtkAdjustment);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkLayout;
    property HAdj : TFPgtkAdjustment read GetHAdj write SetHAdj;
    property VAdj : TFPgtkAdjustment read GetVAdj write SetVAdj;
    procedure Freeze;
    procedure Thaw;
    procedure Put (aWidget:TFPgtkWidget; X:integer; Y:integer); Overload;
    procedure Put (aWidget:TFPgtkWidget; X:integer; Y:integer; aVisible:boolean); Overload;
    procedure Move (aWidget:TFPgtkWidget; X:integer; Y:integer);
    procedure SetSize (aWidth:integer; aHeight:integer);
  end;


  TFPgtkList = class (TFPgtkContainer)
  Private
    function GetSelectionMode : TGtkSelectionMode;
    procedure SetSelectionMode (TheValue : TGtkSelectionMode);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkList;
    function ConnectSelectionChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterSelectionChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    property SelectionMode : TGtkSelectionMode read GetSelectionMode write SetSelectionMode;
    procedure InsertItems (TheItems:TFPgtkListItemGroup; position:integer);
    procedure AppendItems (TheItems:TFPgtkListItemGroup);
    procedure PrependItems (TheItems:TFPgtkListItemGroup);
    procedure RemoveItems (TheItems:TFPgtkListItemGroup);
    procedure RemoveItemsNoUnref (TheItems:TFPgtkListItemGroup);
    procedure ClearItems (FromItem:integer; ToItem:integer);
    procedure ClearAll;
    procedure SelectItem (Item:integer);
    procedure UnselectItem (Item:integer);
    procedure SelectChild (Child:TFPgtkWidget);
    procedure UnselectChild (Child:TFPgtkWidget);
    function ChildPosition (Child:TFPgtkWidget) : integer;
    procedure ExtendSelection (ScrollType:TGtkScrollType; Position:gfloat; AutoStartSelection:boolean);
    procedure StartSelection;
    procedure EndSelection;
    procedure SelectAll;
    procedure UnselectAll;
    procedure ScrollHorizontal (ScrollType:TGtkScrollType; Position:gfloat);
    procedure ScrollVertical (ScrollType:TGtkScrollType; Position:gfloat);
    procedure ToggleAddMode;
    procedure ToggleFocusRow;
    procedure ToggleRow (Child:TFPgtkWidget);
    procedure UndoSelection;
    procedure EndDragSelection;
    procedure GetSelection (aGroup:TFPgtkGroup);
  end;

  TFPgtkMoveCurrentSignalFunction = procedure (Sender:TFPgtkObject; dir:TGtkMenuDirectionType; data:pointer) of Object;

  TFPgtkMenuShell = class (TFPgtkContainer)
  Protected
    procedure GtkPrepend (MenuItem:TFPgtkWidget); Virtual;
    procedure GtkInsert (MenuItem:TFPgtkWidget; position:integer); Virtual;
    procedure GtkAppend (MenuItem:TFPgtkWidget); Virtual;
  Public
    function TheGtkObject : PGtkMenuShell;
    function MoveCurrentSignalConnect (Signal:string; Proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
    function MoveCurrentSignalConnectAfter (Signal:string; Proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
    procedure ActivateItem (MenuItem:TFPgtkWidget; ForceDeactivate:boolean);
    procedure SelectItem (MenuItem:TFPgtkWidget);
    procedure DeActivate;
    procedure Prepend (MenuItem:TFPgtkWidget); Overload;
    procedure Prepend (MenuItem:TFPgtkWidget; CreateVisible:boolean); Overload;
    procedure Insert (MenuItem:TFPgtkWidget; position:integer); Overload;
    procedure Insert (MenuItem:TFPgtkWidget; position:integer; CreateVisible:boolean); Overload;
    procedure Append (MenuItem:TFPgtkWidget); Overload;
    procedure Append (MenuItem:TFPgtkWidget; CreateVisible:boolean); Overload;
    function ConnectDeActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterDeActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectSelectionDone (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectionDone (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectCancel (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterCancel (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectMoveCurrent (proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
    function ConnectAfterMoveCurrent (proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
    function ConnectActivateCurrent (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
    function ConnectAfterActivateCurrent (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
  end;


  TFPgtkMenuBar = class (TFPgtkMenuShell)
  Private
    function GetShadow : TgtkShadowType;
    procedure SetShadow (TheValue : TgtkShadowType);
  Protected
    procedure CreateGtkObject; override;
    procedure GtkPrepend (MenuItem:TFPgtkWidget); Override;
    procedure GtkInsert (MenuItem:TFPgtkWidget; position:integer); Override;
    procedure GtkAppend (MenuItem:TFPgtkWidget); Override;
  Public
    function TheGtkObject : PGtkMenuBar;
    property Shadow : TgtkShadowType read GetShadow write SetShadow;
  end;

  TFPgtkMenuDetachFunction = procedure (Widget:TFPgtkWidget; menu:TFPgtkMenu) of object;
  TFPgtkMenuPosFunction = procedure (menu:TFPgtkMenu; var x,y:integer; data:pointer) of object;

  TFPgtkMenu = class (TFPgtkMenuShell)
  Private
    procedure SetTitle (TheValue : string);
    function GetActive : TFPgtkWidget;
    procedure SetActive (TheValue : TFPgtkWidget);
    function GetActiveIndex : integer;
    procedure SetActiveIndex (TheValue : integer);
    function GetTearOffState : boolean;
    procedure SetTearOffState (TheValue : boolean);
    function GetAttachedTo : TFPgtkWidget;
    procedure SetAttachedTo (TheValue : TFPgtkWidget);
    function GetAccelGroup : PGtkAccelGroup;
    procedure SetAccelGroup (TheValue : PGtkAccelGroup);
  Protected
    procedure CreateGtkObject; override;
    procedure GtkPrepend (MenuItem:TFPgtkWidget); Override;
    procedure GtkInsert (MenuItem:TFPgtkWidget; position:integer); Override;
    procedure GtkAppend (MenuItem:TFPgtkWidget); Override;
  Public
    FDetacher:TFPgtkMenuDetachFunction;
    function TheGtkObject : PGtkMenu;
    procedure ReorderChild (MenuItem:TFPgtkWidget; position:integer);
    procedure Popup (button:guint); Overload;
    procedure Popup (ParentShell:TFPgtkWidget; ParentItem:TFPgtkWidget; func:TFPgtkMenuPosFunction; data:pointer; button:guint; ActivateTime:guint32); Overload;
    procedure PopDown;
    procedure Reposition;
    procedure AttachToWidget (Widget:TFPgtkWidget; detacher:TFPgtkMenuDetachFunction);
    procedure Detach;
    property Title : string write SetTitle;
    property Active : TFPgtkWidget read GetActive write SetActive;
    property ActiveIndex : integer read GetActiveIndex write SetActiveIndex;
    property TearOffState : boolean read GetTearOffState write SetTearOffState;
    property AttachedTo : TFPgtkWidget read GetAttachedTo write SetAttachedTo;
    property AccelGroup : PGtkAccelGroup read GetAccelGroup write SetAccelGroup;
  end;


  TFPgtkPacker = class (TFPgtkContainer)
  Private
    function GetSpacing : guint;
    procedure SetSpacing (TheValue : guint);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkPacker;
    procedure Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions); Overload;
    procedure Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aVisible:boolean); Overload;
    procedure Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint); Overload;
    procedure Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint; aVisible:boolean); Overload;
    procedure ReorderChild (aChild:TFPgtkWidget; position:integer);
    property Spacing : guint read GetSpacing write SetSpacing;
    procedure DefaultBorder (aBorder:guint);
    procedure DefaultPad (PadX:guint; PadY:guint);
    procedure DefaultIPad (IPadX:guint; IPadY:guint);
    procedure Configure (aChild:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint); Overload;
  end;


  TFPgtkTable = class (TFPgtkContainer)
  Private
    function GetRowCount : integer;
    function GetColCount : integer;
    function GetHomogeneous : boolean;
    procedure SetHomogeneous (TheValue : boolean);
    function GetRowSpacings : integer;
    procedure SetRowSpacings (TheValue : integer);
    function GetColSpacings : integer;
    procedure SetColSpacings (TheValue : integer);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkTable;
    constructor Create (AColumns:integer; ARows:integer);
    procedure Resize (AColumns:integer; ARows:integer);
    procedure Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; XOptions:integer; YOptions:integer; XPadding:integer; YPadding:integer; IsVisible:boolean);
    procedure Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; XOptions:integer; YOptions:integer; XPadding:integer; YPadding:integer);
    procedure Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; IsVisible:boolean);
    procedure Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer);
    property RowCount : integer read GetRowCount;
    property ColCount : integer read GetColCount;
    property Homogeneous : boolean read GetHomogeneous write SetHomogeneous;
    property RowSpacings : integer read GetRowSpacings write SetRowSpacings;
    property ColSpacings : integer read GetColSpacings write SetColSpacings;
    procedure SetOneRowSpacing (row:integer; TheValue:integer);
    procedure SetOneColSpacing (Column:integer; TheValue:integer);
  end;


  TFPgtkToolbar = class (TFPgtkContainer)
  Private
    function GetButtonRelief : TGtkReliefStyle;
    procedure SetButtonRelief (TheValue : TGtkReliefStyle);
    function GetTooltips : TFPgtkTooltips;
    function GetEnableTooltips : longbool;
    procedure SetEnableTooltips (TheValue : longbool);
    function GetSpaceStyle : TGtkToolbarSpaceStyle;
    procedure SetSpaceStyle (TheValue : TGtkToolbarSpaceStyle);
    function GetSpaceSize : integer;
    procedure SetSpaceSize (TheValue : integer);
    function GetStyle : TGtkToolbarStyle;
    procedure SetStyle (TheValue : TGtkToolbarStyle);
    function GetOrientation : tGtkOrientation;
    procedure SetOrientation (TheValue : tGtkOrientation);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkToolbar;
    property ButtonRelief : TGtkReliefStyle read GetButtonRelief write SetButtonRelief;
    property Tooltips : TFPgtkTooltips read GetTooltips;
    property EnableTooltips : longbool read GetEnableTooltips write SetEnableTooltips;
    property SpaceStyle : TGtkToolbarSpaceStyle read GetSpaceStyle write SetSpaceStyle;
    property SpaceSize : integer read GetSpaceSize write SetSpaceSize;
    property Style : TGtkToolbarStyle read GetStyle write SetStyle;
    property Orientation : tGtkOrientation read GetOrientation write SetOrientation;
    procedure InsertWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string; Position:integer);
    procedure PrependWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string);
    procedure AppendWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string);
    function InsertElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget;
    function AppendElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget;
    function PrependElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget;
    function InsertItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget; Overload;
    function AppendItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
    function PrependItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
    function InsertItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget; Overload;
    function AppendItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
    function PrependItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
    procedure InsertSpace (position:integer);
    procedure AppendSpace;
    procedure PrependSpace;
  end;


  TFPgtkTree = class (TFPgtkContainer)
  Private
    function GetSelectionMode : TGtkSelectionMode;
    procedure SetSelectionMode (TheValue : TGtkSelectionMode);
    function GetViewLines : boolean;
    procedure SetViewLines (TheValue : boolean);
    function GetViewMode : TGtkTreeViewMode;
    procedure SetViewMode (TheValue : TGtkTreeViewMode);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkTree;
    function ConnectSelectionChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectionChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    function ConnectAfterUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
    property SelectionMode : TGtkSelectionMode read GetSelectionMode write SetSelectionMode;
    property ViewLines : boolean read GetViewLines write SetViewLines;
    property ViewMode : TGtkTreeViewMode read GetViewMode write SetViewMode;
    procedure Append (TreeItem:TFPgtkWidget);
    procedure Prepend (TreeItem:TFPgtkWidget);
    procedure Insert (TreeItem:TFPgtkWidget; position:integer);
    procedure Remove (TreeItem:TFPgtkWidget);
    procedure ClearItems (StartPos:integer; EndPos:integer);
    procedure SelectItem (Item:integer);
    procedure UnselectItem (Item:integer);
    procedure SelectChild (TreeItem:TFPgtkWidget);
    procedure UnselectChild (TreeItem:TFPgtkWidget);
    function ChildPosition (TreeItem:TFPgtkWidget) : integer;
    function RootTree : TFPgtkTree;
    function IsRootTree : boolean;
    procedure GetSelection (aGroup:TFPgtkGroup);
    function Level : integer;
  end;


  TFPgtkCalendar = class (TFPgtkWidget)
  Private
    function GetDisplayOptions : TGtkCalendarDisplayOptions;
    procedure SetDisplayOptions (TheValue : TGtkCalendarDisplayOptions);
    function GetDate : TDatetime;
    procedure SetDate (TheValue : TDatetime);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCalendar;
    function SelectMonth (aMonth:guint; aYear:guint) : integer;
    procedure SelectDay (aDay:guint);
    function MarkDay (aDay:guint) : integer;
    function UnmarkDay (aDay:guint) : integer;
    procedure ClearMarks;
    property DisplayOptions : TGtkCalendarDisplayOptions read GetDisplayOptions write SetDisplayOptions;
    property Date : TDatetime read GetDate write SetDate;
    procedure Freeze;
    procedure Thaw;
    function ConnectMonthChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterMonthChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectDaySelected (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterDaySelected (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectDaySelectedDoubleClick (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterDaySelectedDoubleClick (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectPrevMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterPrevMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectNextMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterNextMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectPrevYear (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterPrevYear (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectNextYear (proc:TFPgtksignalFunction; data:pointer) : guint;
    function ConnectAfterNextYear (proc:TFPgtksignalFunction; data:pointer) : guint;
  end;


  TFPgtkDrawingArea = class (TFPgtkWidget)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkDrawingArea;
    procedure SetSize (Width:integer; Height:integer);
  end;


  TFPgtkCurve = class (TFPgtkDrawingArea)
  Private
    function GetCurveType : TGtkCurveType;
    procedure SetCurveType (TheValue : TGtkCurveType);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkCurve;
    procedure SetRange (MinX:float; MaxX:float; MinY:float; MaxY:float);
    procedure Reset;
    procedure SetGamma (GammaValue:float);
    property CurveType : TGtkCurveType read GetCurveType write SetCurveType;
  end;

  TFPgtkInsertSignalFunction = procedure (Sender:TFPgtkObject; NewText:string; TextLength:integer; var Position:integer; data:pointer) of Object;
  TFPgtkDeleteSignalFunction = procedure (Sender:TFPgtkObject; StartPos:integer; EndPos:integer; data:pointer) of Object;
  TFPgtkXYSignalFunction = procedure (Sender:TFPgtkObject; x:integer; y:integer; data:pointer) of Object;
  TFPgtkDirectionSignalFunction = procedure (Sender:TFPgtkObject; Direction:integer; data:pointer) of Object;
  TFPgtkMoveWordSignalFunction = procedure (Sender:TFPgtkObject; NumWords:integer; data:pointer) of Object;
  TFPgtkMovetoSignalFunction = procedure (Sender:TFPgtkObject; MoveTo:integer; data:pointer) of Object;

  TFPgtkEditable = class (TFPgtkWidget)
  Private
    function GetEditable : boolean;
    procedure SetEditable (TheValue : boolean);
    function GetVisible : boolean;
    procedure SetVisible (TheValue : boolean);
    function GetPosition : integer;
    procedure SetPosition (TheValue : integer);
    function GetSelectionStart : integer;
    procedure SetSelectionStart (TheValue : integer);
    function GetSelectionEnd : integer;
    procedure SetSelectionEnd (TheValue : integer);
    function GetSelection : string;
  Protected
    function GetHasSelection : boolean; Dynamic;
    procedure SetSelection (TheValue:string); Dynamic;
    function GetText : string; Dynamic;
    procedure SetText (TheValue:string); Dynamic; Abstract;
  Public
    function TheGtkObject : PGtkEditable;
    property HasSelection : boolean read GetHasSelection;
    property Editable : boolean read GetEditable write SetEditable;
    property Visible : boolean read GetVisible write SetVisible;
    property Position : integer read GetPosition write SetPosition;
    property SelectionStart : integer read GetSelectionStart write SetSelectionStart;
    property SelectionEnd : integer read GetSelectionEnd write SetSelectionEnd;
    property Selection : string read GetSelection write SetSelection;
    property Text : string read GetText write SetText;
    procedure Changed;
    procedure InsertText (NewText:string; AtPosition:integer);
    procedure DeleteText (StartPos:integer; EndPos:integer);
    procedure GetChars (StartPos:integer; EndPos:integer);
    procedure CutClipboard;
    procedure CopyClipboard;
    procedure PasteClipboard;
    procedure SelectRegion (StartPos:integer; EndPos:integer);
    procedure ClaimSelection (claim:boolean; time:guint32);
    procedure DeleteSelection;
    procedure Clear;
    function InsertSignalConnect (Signal:string; Proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
    function InsertSignalConnectAfter (Signal:string; Proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
    function DeleteSignalConnect (Signal:string; Proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
    function DeleteSignalConnectAfter (Signal:string; Proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
    function XYSignalConnect (Signal:string; Proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function XYSignalConnectAfter (Signal:string; Proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function DirectionSignalConnect (Signal:string; Proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function DirectionSignalConnectAfter (Signal:string; Proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function MoveWordSignalConnect (Signal:string; Proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
    function MoveWordSignalConnectAfter (Signal:string; Proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
    function MovetoSignalConnect (Signal:string; Proc:TFPgtkMovetoSignalFunction; data:pointer) : guint;
    function MovetoSignalConnectAfter (Signal:string; Proc:TFPgtkMovetoSignalFunction; data:pointer) : guint;
    function ConnectChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectInsertText (proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
    function ConnectAfterInsertText (proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
    function ConnectDeleteText (proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
    function ConnectAfterDeleteText (proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
    function ConnectSetEditable (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
    function ConnectAfterSetEditable (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
    function ConnectMoveCursor (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function ConnectAfterMoveCursor (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function ConnectMoveWord (proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
    function ConnectAfterMoveWord (proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
    function ConnectMovePage (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function ConnectAfterMovePage (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
    function ConnectMoveToRow (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
    function ConnectAfterMoveToRow (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
    function ConnectMoveToCol (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
    function ConnectAfterMoveToCol (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
    function ConnectKillChar (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectAfterKillChar (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectKillWord (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectAfterKillWord (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectKillLine (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectAfterKillLine (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
    function ConnectCutClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterCutClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectCopyClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterCopyClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectPasteClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
    function ConnectAfterPasteClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
  end;


  TFPgtkEntry = class (TFPgtkEditable)
  Private
    function GetVisibility : boolean;
    procedure SetVisibility (TheValue : boolean);
    function GetMaxLength : word;
    procedure SetMaxLength (TheValue : word);
  Protected
    procedure CreateGtkObject; override;
    procedure SetText (TheValue:string); Override;
  Public
    function TheGtkObject : PGtkEntry;
    procedure AppendText (aText:string);
    procedure PrependText (aText:string);
    property Visibility : boolean read GetVisibility write SetVisibility;
    property MaxLength : word read GetMaxLength write SetMaxLength;
  end;


  TFPgtkSpinButton = class (TFPgtkEntry)
  Private
    function GetAdjustment : TFPgtkAdjustment;
    procedure SetAdjustment (TheValue : TFPgtkAdjustment);
    function GetClimbRate : gfloat;
    procedure SetClimbRate (TheValue : gfloat);
    function GetDigits : integer;
    procedure SetDigits (TheValue : integer);
    function GetAsInteger : integer;
    procedure SetAsInteger (TheValue : integer);
    function GetAsFloat : gfloat;
    procedure SetAsFloat (TheValue : gfloat);
    function GetUpdatePolicy : TGtkSpinButtonUpdatePolicy;
    procedure SetUpdatePolicy (TheValue : TGtkSpinButtonUpdatePolicy);
    function GetNumeric : boolean;
    procedure SetNumeric (TheValue : boolean);
    function GetWrap : boolean;
    procedure SetWrap (TheValue : boolean);
    function GetShadowType : TGtkShadowType;
    procedure SetShadowType (TheValue : TGtkShadowType);
    function GetSnapToTicks : boolean;
    procedure SetSnapToTicks (TheValue : boolean);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkSpinButton;
    procedure Configure (Adj:TFPgtkAdjustment; aClimbRate:gfloat; aDigits:integer);
    property Adjustment : TFPgtkAdjustment read GetAdjustment write SetAdjustment;
    property ClimbRate : gfloat read GetClimbRate write SetClimbRate;
    property Digits : integer read GetDigits write SetDigits;
    property AsInteger : integer read GetAsInteger write SetAsInteger;
    property AsFloat : gfloat read GetAsFloat write SetAsFloat;
    property UpdatePolicy : TGtkSpinButtonUpdatePolicy read GetUpdatePolicy write SetUpdatePolicy;
    property Numeric : boolean read GetNumeric write SetNumeric;
    procedure Spin (direction:TGtkSpinType; increment:gfloat);
    property Wrap : boolean read GetWrap write SetWrap;
    property ShadowType : TGtkShadowType read GetShadowType write SetShadowType;
    property SnapToTicks : boolean read GetSnapToTicks write SetSnapToTicks;
    procedure Update;
  end;


  TFPgtkText = class (TFPgtkEditable)
  Private
    FLines:TStrings;
    FIsChanged:boolean;
    procedure SigChanged (Sender:TFPgtkObject; data:pointer);
    function GetLines : TStrings;
    function GetWordWrap : boolean;
    procedure SetWordWrap (TheValue : boolean);
    function GetLineWrap : boolean;
    procedure SetLineWrap (TheValue : boolean);
    function GetPoint : integer;
    procedure SetPoint (TheValue : integer);
    function GetHAdjustment : TFPgtkAdjustment;
    procedure SetHAdjustment (TheValue : TFPgtkAdjustment);
    function GetVAdjustment : TFPgtkAdjustment;
    procedure SetVAdjustment (TheValue : TFPgtkAdjustment);
  Protected
    procedure CreateGtkObject; override;
    procedure RefreshLines;
    procedure SetText (TheValue:string); Override;
  Public
    function TheGtkObject : PGtkText;
    constructor Create;
    destructor Destroy; Override;
    property Lines : TStrings read GetLines;
    procedure Freeze;
    procedure Thaw;
    function TextLength : guint;
    procedure Insert (font:PgdkFont; fore:PgdkColor; back:PgdkColor; TheText:string);
    procedure DeleteBackward (number:longword);
    procedure DeleteForward (number:longword);
    property WordWrap : boolean read GetWordWrap write SetWordWrap;
    property LineWrap : boolean read GetLineWrap write SetLineWrap;
    property Point : integer read GetPoint write SetPoint;
    procedure SetAdjustments (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
    property HAdjustment : TFPgtkAdjustment read GetHAdjustment write SetHAdjustment;
    property VAdjustment : TFPgtkAdjustment read GetVAdjustment write SetVAdjustment;
  end;


  TFPgtkRuler = class (TFPgtkWidget)
  Public
    function TheGtkObject : PGtkRuler;
    procedure SetMetric (aMetric:TGtkMetricType);
    procedure SetRange (Lower:float; Upper:float; Position:float; MaxSize:float);
  end;


  TFPgtkHRuler = class (TFPgtkRuler)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHRuler;
  end;


  TFPgtkVRuler = class (TFPgtkRuler)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVRuler;
  end;


  TFPgtkRange = class (TFPgtkWidget)
  Private
    function GetAdjustment : TFPgtkAdjustment;
    procedure SetAdjustment (TheValue : TFPgtkAdjustment);
    function GetUpdatePolicy : TgtkUpdateType;
    procedure SetUpdatePolicy (TheValue : TgtkUpdateType);
  Protected
    FAdj:TFPgtkAdjustment;
  Public
    function TheGtkObject : PGtkRange;
    property Adjustment : TFPgtkAdjustment read GetAdjustment write SetAdjustment;
    property UpdatePolicy : TgtkUpdateType read GetUpdatePolicy write SetUpdatePolicy;
    constructor Create (AnAdjustment:TFPgtkAdjustment);
    procedure DrawBackground;
    procedure DrawTrough;
    procedure DrawStepForw;
    procedure DrawStepBack;
    procedure DrawSlider;
    procedure SliderUpdate;
    function TroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
    procedure DefaultHSliderUpdate;
    procedure DefaultVSliderUpdate;
    function DefaultHTroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
    function DefaultVTroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
    procedure defaultHMotion (XDelta:integer; YDelta:integer);
    procedure defaultVMotion (XDelta:integer; YDelta:integer);
    procedure ClearBackground;
  end;


  TFPgtkScale = class (TFPgtkRange)
  Private
    function GetDrawValue : boolean;
    procedure SetDrawValue (TheValue : boolean);
    function GetValuePos : TGtkPositionType;
    procedure SetValuePos (TheValue : TGtkPositionType);
  Public
    function TheGtkObject : PGtkScale;
    procedure SetDigits (TheValue:integer);
    property DrawValue : boolean read GetDrawValue write SetDrawValue;
    property ValuePos : TGtkPositionType read GetValuePos write SetValuePos;
  end;


  TFPgtkHScale = class (TFPgtkScale)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHScale;
  end;


  TFPgtkVScale = class (TFPgtkScale)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVScale;
  end;


  TFPgtkScrollbar = class (TFPgtkRange)
  Public
    function TheGtkObject : PGtkScrollbar;
  end;


  TFPgtkHScrollbar = class (TFPgtkScrollbar)
  Protected
    procedure CreateGtkObject; Override;
  Public
    function TheGtkObject : PGtkHScrollbar;
  end;


  TFPgtkVScrollbar = class (TFPgtkScrollbar)
  Protected
    procedure CreateGtkObject; Override;
  Public
  end;


  TFPgtkSeparator = class (TFPgtkWidget)
  Public
    function TheGtkObject : PGtkSeparator;
  end;


  TFPgtkHSeparator = class (TFPgtkSeparator)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkHSeparator;
  end;


  TFPgtkVSeparator = class (TFPgtkSeparator)
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkVSeparator;
  end;


  TFPgtkPreview = class (TFPgtkWidget)
  Private
    function GetExpand : longbool;
    procedure SetExpand (TheValue : longbool);
    function GetDither : TGdkRgbDither;
    procedure SetDither (TheValue : TGdkRgbDither);
  Protected
    procedure CreateGtkObject; override;
  Public
    function TheGtkObject : PGtkPreview;
    procedure Size (aWidth:integer; aHeight:integer);
    procedure Put (aWindow:PGdkWindow; gc:PGdkGC; SrcX:integer; SrcY:integer; destX:integer; DestY:integer; aWidth:integer; aHeight:integer);
    procedure DrawRow (data:pguchar; X:integer; Y:integer; W:integer);
    property Expand : longbool read GetExpand write SetExpand;
    property Dither : TGdkRgbDither read GetDither write SetDither;
  end;


  TFPgtkProgress = class (TFPgtkWidget)
  Private
    function GetShowtext : longbool;
    procedure SetShowtext (TheValue : longbool);
    function GetTextXAlign : gfloat;
    procedure SetTextXAlign (TheValue : gfloat);
    function GetTextYAlign : gfloat;
    procedure SetTextYAlign (TheValue : gfloat);
    function GetCurrentValue : float;
    procedure SetCurrentValue (TheValue : float);
    function GetPercentage : float;
    procedure SetPercentage (TheValue : float);
    function GetFormatString : string;
    procedure SetFormatString (TheValue : string);
    function GetAdjustment : TFPgtkAdjustment;
    procedure SetAdjustment (TheValue : TFPgtkAdjustment);
    function GetActivityMode : longbool;
    procedure SetActivityMode (TheValue : longbool);
  Public
    function TheGtkObject : PGtkProgress;
    property Showtext : longbool read GetShowtext write SetShowtext;
    property TextXAlign : gfloat read GetTextXAlign write SetTextXAlign;
    property TextYAlign : gfloat read GetTextYAlign write SetTextYAlign;
    procedure SetTextAlignment (anXalign:gfloat; anYAlign:gfloat);
    property CurrentValue : float read GetCurrentValue write SetCurrentValue;
    property Percentage : float read GetPercentage write SetPercentage;
    function PercentageFromValue (aValue:gfloat) : gfloat;
    property FormatString : string read GetFormatString write SetFormatString;
    property Adjustment : TFPgtkAdjustment read GetAdjustment write SetAdjustment;
    property ActivityMode : longbool read GetActivityMode write SetActivityMode;
    function CurrentText : string;
    function TextFromValue (aValue:gfloat) : string;
    procedure Configure (aValue:gfloat; aMin:gfloat; aMax:gfloat);
  end;


  TFPgtkProgressBar = class (TFPgtkProgress)
  Private
    FAdj:TFPgtkAdjustment;
    function GetBarStyle : TGtkProgressBarStyle;
    procedure SetBarStyle (TheValue : TGtkProgressBarStyle);
    function GetDiscreteBlocks : longword;
    procedure SetDiscreteBlocks (TheValue : longword);
    function GetActivityStep : longword;
    procedure SetActivityStep (TheValue : longword);
    function GetActivityBlocks : longword;
    procedure SetActivityBlocks (TheValue : longword);
    function GetOrientation : TGtkProgressBarOrientation;
    procedure SetOrientation (TheValue : TGtkProgressBarOrientation);
  Protected
    procedure CreateGtkObject; Override;
  Public
    function TheGtkObject : PGtkProgressBar;
    constructor Create (adj:TFPgtkAdjustment);
    property BarStyle : TGtkProgressBarStyle read GetBarStyle write SetBarStyle;
    property DiscreteBlocks : longword read GetDiscreteBlocks write SetDiscreteBlocks;
    property ActivityStep : longword read GetActivityStep write SetActivityStep;
    property ActivityBlocks : longword read GetActivityBlocks write SetActivityBlocks;
    property Orientation : TGtkProgressBarOrientation read GetOrientation write SetOrientation;
  end;


  TFPgtkItemFactory = class (TFPgtkObject)
  Public
  end;

{ TFPgtkToolTips }
var
  TheTooltips : TFPgtkTooltips;
{ TFPgtkButton }
const
  DefaultButtonModifiers : TGdkModifierType = GDK_MOD1_MASK;
{ TFPgtkWindow }
const
  drNone = 0;
  drOk = 1;
  drCancel = 2;
  drYes = 3;
  drNo = 4;
  drRetry = 5;
  NoMainLevel = high (guint);
{ TFPgtkFontSelection }
resourcestring
  sFontNotFound = 'Can''t find font "%s" on this system';

Const
// TFPgtkObject
  sgDestroy = 'destroy';
// TFPgtkData
  sgDisconnect = 'disconnect';
// TFPgtkAdjustment
  sgValueChanged = 'value_changed';
  sgChanged = 'changed';
// TFPgtkWidget
  sgShow = 'show';
  sghide = 'hide';
  sgmap = 'map';
  sgunmap = 'unmap';
  sgrealize = 'realize';
  sgunrealize = 'unrealize';
  sgDrawFocus = 'draw-focus';
  sgDrawDefault = 'draw-defaut';
  sgParentSet = 'parent-set';
  sgGrabFocus = 'grab-focus';
  sgEvent = 'event';
  sgButtonPressEvent = 'button-press-event';
  sgButtonReleaseEvent = 'button-release-event';
  sgMotionNotifyEvent = 'motion-notify-event';
  sgDeleteEvent = 'delete-event';
  sgDestroyEvent = 'destroy-event';
  sgExposeEvent = 'expose-event';
  sgKeyPressEvent = 'key-press-event';
  sgKeyReleaseEvent = 'key-release-event';
  sgEnterNotifyEvent = 'enter-notify-event';
  sgLeaveNotifyEvent = 'leave-notify-event';
  sgConfigureEvent = 'configure-event';
  sgFocusInEvent = 'focus-in-event';
  sgFocusOutEvent = 'focus-out-event';
  sgMapEvent = 'map-event';
  sgUnmapEvent = 'unmap-event';
  sgPropertyNotifyEvent = 'property-notify-event';
  sgSelectionClearEvent = 'selection-clear-event';
  sgSelectionRequestEvent = 'selection-request-event';
  sgSelectionNotifyEvent = 'selection-notify-event';
  sgProximityInEvent = 'proximity-in-event';
  sgProximityOutEvent = 'proximity-out-event';
  sgClientEvent = 'client-event';
  sgNoExposeEvent = 'no-expose-event';
  sgVisibilityNotifyEvent = 'visibility-notify-event';
// TFPgtkContainer
  sgAdd = 'add';
  sgRemove = 'remove';
  sgCheckResize = 'check-resize';
  sgFocus = 'focus';
  sgSetFocusChild = 'set-focus';
// TFPgtkButton
  sgClicked = 'clicked';
  sgPressed = 'pressed';
  sgReleased = 'released';
  sgEnter = 'enter';
  sgLeave = 'leave';
// TFPgtkToggleButton
  sgToggled = 'toggled';
// TFPgtkItem
  sgSelect = 'select';
  sgDeselect = 'deselect';
  sgToggle = 'toggle';
// TFPgtkMenuItem
  sgActivate = 'activate';
  sgActivateItem = 'activate-item';
// TFPgtkListItem
  sgToggleFocusRow = 'toggle-focus-row';
  sgSelectAll = 'select-all';
  sgUnselectAll = 'unselect-all';
  sgUndoSelection = 'undo-selection';
  sgStartSelection = 'start-selection';
  sgEndSelection = 'end-selection';
  sgToggleAddMode = 'toggle-add-mode';
  sgExtendSelection = 'extend-selection';
  sgScrollVertical = 'scroll-vertical';
  sgScrollHorizontal = 'scroll-horizontal';
// TFPgtkTreeItem
  sgCollapse = 'collapse';
  sgExpand = 'expand';
// TFPgtkWindow
  sgSetFocus = 'set-focus';
// TFPgtkInputDialog
  sgEnableDevice = 'enable-device';
  sgDisableDevice = 'disable-device';
// TFPgtkHandleBox
  sgChildAttached = 'child-attached';
  sgChildDetached = 'child-detached';
// TFPgtkStatusbar
  sgTextPopped = 'text-popped';
  sgTextPushed = 'test-pushed';
// TFPgtkCList
  sgSelectRow = 'select-row';
  sgUnselectRow = 'unselect-row';
  sgRowMove = 'row-move';
  sgScrolHorizontal = 'scroll-horizontal';
  sgAbortColumnResize = 'abort-column-resize';
  sgClickColumn = 'click-column';
  sgResizeColumn = 'resize-column';
// TFPgtkNotebook
  sgSwitchPage = 'switch-page';
// TFPgtkList
  sgSelectionChanged = 'selection-changed';
  sgSelectChild = 'select-child';
  sgUnselectChild = 'unselect-child';
// TFPgtkMenuShell
  sgDeActivate = 'deactivate';
  sgSelectionDone = 'selection-done';
  sgCancel = 'cancel';
  sgMoveCurrent = 'move-current';
  sgActivateCurrent = 'activate-current';
// TFPgtkCalendar
  sgMonthChanged = 'month-changed';
  sgDaySelected = 'day-selected';
  sgDaySelectedDoubleClick = 'day-selected-double-click';
  sgPrevMonth = 'prev-month';
  sgNextMonth = 'next-month';
  sgPrevYear = 'prev-year';
  sgNextYear = 'next-year';
// TFPgtkEditable
  sgInsertText = 'insert-text';
  sgDeleteText = 'delete-text';
  sgSetEditable = 'set-editable';
  sgMoveCursor = 'move-cursor';
  sgMoveWord = 'move-word';
  sgMovePage = 'move-page';
  sgMoveToRow = 'move-to-row';
  sgMoveToCol = 'move-to-column';
  sgKillChar = 'kill-char';
  sgKillWord = 'kill-word';
  sgKillLine = 'kill-line';
  sgCutClipboard = 'cut-clipboard';
  sgCopyClipboard = 'copy-clipboard';
  sgPasteClipboard = 'paste-clipboard';

// TFPgtkObject
function GetPascalInstance (gtkObject:PGtkObject; ObjClass:TFPgtkObjectClass) : TFPgtkObject; Overload;
function GetPascalInstance (gtkObject:PGtkObject) : TFPgtkObject; Overload;
function ConvertToGtkObject (AnObject:TFPgtkObject) : PGtkObject;
function ConvertToPgChar (AString:string) : PgChar;
function FreeFPgtkObjects (Data:pointer) : longbool; Cdecl;
procedure DestroyData (data:pointer); Cdecl;
function IntToPointer (Value:integer) : pointer;
function PointerToInt (Value:pointer) : integer;
// TFPgtkToolTips
function GetTooltipsData (Widget:TFPgtkWidget) : PGtkTooltipsData;
function ComposeTooltip (TooltipText:string; PrivText:string) : string;
procedure DecomposeTooltip (Tooltip:string; var TooltipText:string; var PrivText:string);
// TFPgtkWidget
function GetPascalInstance (Widget:PGtkWidget) : TFPgtkWidget; Overload;
function GetPascalInstance (Widget:PGtkWidget; ObjClass:TFPgtkObjectClass) : TFPgtkWidget; Overload;
function ConvertToGtkWidget (AnObject:TFPgtkWidget) : PGtkWidget;
// TFPgtkImage
function NewImage (aWidth:integer; aHeight:integer) : PGdkImage;
// TFPgtkPixmap
function StringsToPPgchar (Data:TStrings) : PPgchar;
function ArrayToPPgchar (Data:array of string) : PPgchar;
procedure CreateGdkPixmap (var ThePixmap:PGdkPixmap; var TheMask:PGdkBitmap; aWindow:PGdkWindow; data:array of string);
// TFPgtkRadioButtonGroup
function RadioButtonGroupCreateFromStrings (TheItems:TStrings; ToggledFunction:TFPgtkSignalFunction) : TFPgtkRadioButtonGroup;
// TFPgtkWindow
procedure AcceleratorAdd (AG:PGtkAccelGroup; aWidget:TFPgtkWidget; aSignal:string; Key:guint; Mods:TGdkModifierType; Flags:TGtkAccelFlags);
procedure AcceleratorRemove (AG:PGtkAccelGroup; aWidget:TFPgtkWidget; Key:guint; Mods:TGdkModifierType); Overload;
procedure AccelGroupLock (AG:PGtkAccelGroup);
procedure AccelGroupUnlock (AG:PGtkAccelGroup);
function AccelKeyName (Key:guint; Mods:TGdkModifierType) : string;
procedure AccelKeyParse (AccelName:string; var Key:guint; var Mods:TGdkModifierType);
procedure AccelGroupActivate (AG:PGtkAccelGroup; Key:guint; Mods:TGdkModifierType);
// TFPgtkButtonBox
procedure SetButtonBoxDefaultSize (aMinWidth:integer; aMinHeight:integer);
procedure GetButtonBoxDefaultSize (var aMinWidth:integer; var aMinHeight:integer);
procedure SetButtonBoxDefaultPadding (aIPadX:integer; aIPadY:integer);
procedure GetButtonBoxDefaultPadding (var aIPadX:integer; var aIPadY:integer);
// TFPgtkPreview
procedure SetGamma (aGamma:double);

IMPLEMENTATION

 { TFPgtkObject }

function TFPgtkObject.TheGtkObject : PGtkObject;
begin
  result := PgtkObject(FGtkObject);
end;

const
  dtPascalInstance = 'Pascal_Instance';

type
  TIntegerPointer = record
    case word of
      0 : (i : integer);
      1 : (p : pointer);
  end;

var
  ObjectsToFree : TList;
  ip : TIntegerPointer;

procedure Signalproc (Sender:PGtkobject; Data:pointer); cdecl;
var p : TFPgtkSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, TheData)
  end;
end;

function TFPgtkObject.SignalConnect (signal:string; proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@Signalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkObject.SignalConnectAfter (signal:string; proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@Signalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure BooleanSignalproc (Sender:PGtkobject; Bool:boolean; data:pointer); cdecl;
var p : TFPgtkBooleanSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkBooleanSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, Bool, TheData)
  end;
end;

function TFPgtkObject.BooleanSignalConnect (signal:string; proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@BooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkObject.BooleanSignalConnectAfter (signal:string; proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@BooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function GetPascalInstance (gtkObject:PGtkObject; ObjClass:TFPgtkObjectClass) : TFPgtkObject; Overload;
begin
  result := GetPascalInstance(GtkObject);
  if not assigned(result) and assigned(GtkObject) then
    result := ObjClass.CreateFromObject (GtkObject);
end;


function GetPascalInstance (gtkObject:PGtkObject) : TFPgtkObject; Overload;
var p : pointer;
begin
  result := nil;
  if assigned (gtkobject) then
    begin
    p := gtk_object_get_data (gtkObject, dtPascalInstance);
    if assigned(p) then
      result := PPascalClassData(p)^.TheInstance;
    end;
end;


function ConvertToGtkObject (AnObject:TFPgtkObject) : PGtkObject;
begin
  if assigned(AnObject) then
    result := AnObject.TheGtkObject
  else
    result := nil;
end;


function ConvertToPgChar (AString:string) : PgChar;
begin
  result := pointer(aString);
end;


function TFPgtkObject.ConvertSignalData (proc:TFPgtkSignalFunction; data:pointer; FreeIt:boolean) : PSignalData;
begin
  new (result);
  with result^ do
    begin
    TheSignalProc := proc;
    TheWidget := self;
    TheData := data;
    end;
  if FreeIt then
    SignalDatas.Add (result);
end;

function FreeFPgtkObjects (Data:pointer) : longbool; Cdecl;
var r : integer;
    obj : TFPgtkObject;
begin
  for r := ObjectsToFree.Count-1 downto 0 do
    begin
    obj := TFPgtkObject(ObjectsToFree[r]);
    if assigned (Obj) then
      Obj.Free;
    end;
  ObjectsToFree.Clear;
  result := False;
end;


procedure TFPgtkObject.FreeClass (Sender:TFPgtkObject; Data:pointer);
begin
  if FDestroying = dsAlive then
    begin
    if ObjectsToFree.Count = 0 then
      g_idle_Add (@FreeFPgtkObjects, null);
    ObjectsToFree.Add (self);
    FGtkObject := null;
    FDestroying := dsWaiting;
    end;
end;

procedure TFPgtkObject.CheckConvertDatas;
begin
  if not assigned (ConvertDatas) then
    begin
    ConvertDatas := TStringList.Create;
    ConvertDatas.Sorted := True;
    end;
end;

procedure TFPgtkObject.CheckNotifyList;
begin
  if not assigned (Notifylist) then
    NotifyList := TList.Create;
end;

procedure TFPgtkObject.InitCreate;
begin
  inherited create;
  SignalDatas := TList.Create;
end;

procedure TFPgtkObject.FinalCreate;
begin
  PascalInstance.TheInstance := Self;
  SetData (dtPascalInstance, @PascalInstance);
  ConnectDestroy (@FreeClass, nil);
end;

constructor TFPgtkObject.Create;
begin
  InitCreate;
  CreateGtkObject;
  FinalCreate;
end;


constructor TFPgtkObject.CreateFromObject (GtkObject:PGtkObject);
begin
  InitCreate;
  FGtkObject := GtkObject;
  FinalCreate;
end;


procedure TFPgtkObject.AskNotification (AnObject:TFPgtkObject);
begin
  CheckNotifyList;
  with NotifyList do
    if indexof(AnObject) < 0 then
      begin
      Add (AnObject);
      AnObject.AskNotification (Self);
      end;
end;

destructor TFPgtkObject.Destroy;
var r : integer;
    datapointer : PSignalData;
begin
  FDestroying := dsDestroying;
  if assigned(NotifyList) then
    begin
    for r := 0 to NotifyList.count-1 do
      TFPgtkObject(NotifyList[r]).NotifyDestroy (Self);
    NotifyList.Free;
    NotifyList := nil;
    end;
  if assigned(FGtkObject) and not Gtk_Object_destroyed(FGtkObject) then
    begin
    gtk_object_destroy (FGtkObject);
    FGtkObject := nil;
    end;
  for r := 0 to SignalDatas.count-1 do
    begin
    datapointer := signaldatas[r];
    dispose (datapointer);
    end;
  signaldatas.Free;
  if assigned (convertDatas) then
    ConvertDatas.Free;
  r := ObjectsToFree.indexof (self);
  if r >= 0 then
    ObjectsToFree[r] := nil;
  inherited destroy;
end;


procedure TFPgtkObject.NotifyDestroy (AnObject:TFPgtkObject);
var r : integer;
begin
  if assigned(NotifyList) then
    begin
    r := NotifyList.indexOf (AnObject);
    if r >= 0 then
      NotifyList.Delete (r);
    end;
end;

function TFPgtkObject.ConnectDestroy (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDestroy, proc, data);
end;

function TFPgtkObject.ConnectAfterDestroy (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDestroy, proc, data);
end;

procedure TFPgtkObject.SignalDisconnect (SignalHandler:guint);
begin
  gtk_signal_disconnect (TheGtkObject, SignalHandler);
end;

procedure TFPgtkObject.SignalBlockHandler (SignalHandler:guint);
begin
  gtk_signal_handler_block (TheGtkObject, SignalHandler);
end;

procedure TFPgtkObject.SignalUnblockHandler (SignalHandler:guint);
begin
  gtk_signal_handler_unblock (TheGtkObject, SignalHandler);
end;

procedure TFPgtkObject.SignalEmit (aName:string; Args:array of const);
begin
//  gtk_signal_emit_by_name (TheGtkObject, pgchar(aName), Args);
end;

function TFPgtkObject.SignalNEmissions (aName:string) : guint;
begin
  result := gtk_signal_n_emissions_by_name (FGtkObject, pgchar(aName));
end;

procedure TFPgtkObject.SignalEmitStop (aName:string);
begin
  gtk_signal_emit_stop_by_name (FGtkObject, pgchar(aName));
end;

procedure TFPgtkObject.SetData (Key:string; Data:pointer);
begin
  gtk_object_set_data (TheGtkObject, ConvertToPgchar(Key), Data);
end;

function TFPgtkObject.GetUserData : pointer;
begin
  result := gtk_object_get_user_data(TheGtkObject);
end;

procedure TFPgtkObject.SetUserData (TheValue:pointer);
begin
  gtk_object_set_user_data(TheGtkObject,TheValue);
end;

procedure TFPgtkObject.SetDataFull (Key:string; Data:pointer; Destroyer:TFPgtkSignalFunction);
begin
  gtk_object_set_data_full (TheGtkObject, pgChar(Key), ConvertSignalData (Destroyer, data, false), TGtkDestroyNotify(@DestroyData));
  CheckConvertDatas;
  ConvertDatas.Add (Key);
end;

procedure TFPgtkObject.RemoveData (Key:string);
var r : integer;
begin
  gtk_object_remove_data (TheGtkObject, pgChar(Key));
  if assigned (ConvertDatas) then
    begin
    r := ConvertDatas.indexof (Key);
    if r >= 0 then
    ConvertDatas.Delete (r);
    end;
end;

function TFPgtkObject.GetData (Key:string) : pointer;
var p  : pointer;
begin
  p := gtk_object_get_data (TheGtkObject, pgChar(Key));
  if assigned(ConvertDatas) and (ConvertDatas.IndexOf (Key) >= 0) then
    result := PPascalClassData (PSignalData(p)^.TheData)^.TheInstance
  else
    result := p;
end;

procedure DestroyData (data:pointer); Cdecl;
begin
  with PSignaldata(data)^ do
    TheSignalProc (TheWidget, TheData);
end;


function IntToPointer (Value:integer) : pointer;
begin
  ip.i := Value;
  result := ip.p;
end;


function PointerToInt (Value:pointer) : integer;
begin
  ip.p := Value;
  result := ip.i;
end;


function TFPgtkObject.GtkDestroyed : boolean;
begin
  result := gtk_object_destroyed (TheGtkObject);
end;

procedure TFPgtkObject.Constructed;
begin
  gtk_object_constructed (TheGtkObject);
end;

procedure TFPgtkObject.ConstructedDefault;
begin
  gtk_object_default_construct (TheGtkObject);
end;

procedure TFPgtkObject.Sink;
begin
  gtk_object_sink (TheGtkObject);
end;

procedure TFPgtkObject.Ref;
begin
  gtk_object_ref (TheGtkObject);
end;

procedure TFPgtkObject.Unref;
begin
  gtk_object_unref (TheGtkObject);
end;

procedure TFPgtkObject.WeakRef (Notify:TFPgtkSignalFunction; data:pointer);
begin
  gtk_object_weakref (TheGtkObject, TGtkDestroyNotify(@DestroyData), ConvertSignalData (Notify, data, true));
end;

procedure TFPgtkObject.WeakUnref (notify:TFPgtkSignalFunction; data:pointer);
begin
  gtk_object_weakunref (TheGtkObject, TGtkDestroyNotify(@DestroyData), ConvertSignalData (Notify, data, true));
end;

 { TFPgtkData }

function TFPgtkData.TheGtkObject : PGtkData;
begin
  result := PgtkData(FGtkObject);
end;


function TFPgtkData.ConnectDisconnect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDisconnect, proc, data);
end;

function TFPgtkData.ConnectAfterDisconnect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDisconnect, proc, data);
end;

 { TFPgtkAdjustment }

function TFPgtkAdjustment.TheGtkObject : PGtkAdjustment;
begin
  result := PgtkAdjustment(FGtkObject);
end;

procedure TFPgtkAdjustment.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_Adjustment_new (0,0,10,1,2,2));
end;


procedure TFPgtkAdjustment.Configure (aLower:gfloat; anUpper:gfloat; aValue:gfloat; aStepInc:gfloat; aPageInc:gfloat; aPageSize:gfloat);
begin
  Lower := aLower;
  Upper := anUpper;
  Value := aValue;
  StepIncrement := aStepInc;
  PageIncrement := aPageInc;
  PageSize := aPageSize;
end;

function TFPgtkAdjustment.ConnectValueChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgValueChanged, proc, data);
end;

function TFPgtkAdjustment.ConnectAfterValueChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgValueChanged, proc, data);
end;

function TFPgtkAdjustment.ConnectChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgChanged, proc, data);
end;

function TFPgtkAdjustment.ConnectAfterChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgChanged, proc, data);
end;

procedure TFPgtkAdjustment.ValueChanged;
begin
  gtk_Adjustment_Value_Changed (TheGtkObject);
end;

procedure TFPgtkAdjustment.Changed;
begin
  gtk_Adjustment_Changed (TheGtkObject);
end;

procedure TFPgtkAdjustment.ClampPage (aLower:gfloat; aUpper:gfloat);
begin
  gtk_Adjustment_Clamp_Page (TheGtkObject, aLower, aUpper);
end;

function TFPgtkAdjustment.GetValue : gfloat;
begin
  result := TheGtkObject^.Value;
end;

procedure TFPgtkAdjustment.SetValue (TheValue:gfloat);
begin
  gtk_Adjustment_set_Value(TheGtkObject,TheValue);
end;

function TFPgtkAdjustment.GetLower : gfloat;
begin
  result := TheGtkObject^.Lower;
end;

procedure TFPgtkAdjustment.SetLower (TheValue:gfloat);
begin
  TheGtkObject^.Lower := TheValue;
end;

function TFPgtkAdjustment.GetUpper : gfloat;
begin
  result := TheGtkObject^.Upper;
end;

procedure TFPgtkAdjustment.SetUpper (TheValue:gfloat);
begin
  TheGtkObject^.Upper := TheValue;
end;

function TFPgtkAdjustment.GetStepIncrement : gfloat;
begin
  result := TheGtkObject^.Step_Increment;
end;

procedure TFPgtkAdjustment.SetStepIncrement (TheValue:gfloat);
begin
  TheGtkObject^.Step_Increment := TheValue;
end;

function TFPgtkAdjustment.GetPageIncrement : gfloat;
begin
  result := TheGtkObject^.Page_Increment;
end;

procedure TFPgtkAdjustment.SetPageIncrement (TheValue:gfloat);
begin
  TheGtkObject^.Page_increment := TheValue;
end;

function TFPgtkAdjustment.GetPageSize : gfloat;
begin
  result := TheGtkObject^.Page_Size;
end;

procedure TFPgtkAdjustment.SetPageSize (TheValue:gfloat);
begin
  TheGtkObject^.Page_Size := TheValue;
end;

 { TFPgtkToolTips }

function TFPgtkToolTips.TheGtkObject : PGtkToolTips;
begin
  result := PgtkToolTips(FGtkObject);
end;

procedure TFPgtkToolTips.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_tooltips_new);
end;


procedure TFPgtkToolTips.SetColors (Fore:PGdkColor; Back:PGdkColor);
begin
  gtk_tooltips_set_colors (TheGtkObject, Fore, Back);
end;

procedure TFPgtkToolTips.SetTip (Widget:TFPgtkWidget; TipText:string; TipPrivate:string);
begin
  gtk_tooltips_set_tip (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), ConvertToPgchar(TipText), ConvertToPgchar(TipPrivate));
end;

function TFPgtkToolTips.GetEnabled : boolean;
begin
  result := boolean(gtk.enabled(TheGtkObject^));
end;

procedure TFPgtkToolTips.SetEnabled (TheValue:boolean);
begin
  if TheValue then
    gtk_tooltips_enable (TheGtkObject)
  else
    gtk_tooltips_disable (TheGtkObject);
end;

function TFPgtkToolTips.GetDelay : integer;
begin
  result := gtk.delay(TheGtkObject^);
end;

procedure TFPgtkToolTips.SetDelay (TheValue:integer);
begin
  gtk_tooltips_set_delay(TheGtkObject,TheValue);
end;

function TFPgtkToolTips.GetColorForeground : PGdkColor;
begin
  result := TheGtkObject^.foreground;
end;

procedure TFPgtkToolTips.SetColorForeground (TheValue:PGdkColor);
begin
  SetColors (TheValue, ColorBackGround);
end;

function TFPgtkToolTips.GetColorBackground : PGdkColor;
begin
  result := TheGtkObject^.background;
end;

procedure TFPgtkToolTips.SetColorBackground (TheValue:PGdkColor);
begin
  SetColors (ColorForeground, TheValue);
end;

function GetTooltipsData (Widget:TFPgtkWidget) : PGtkTooltipsData;
begin
  result := gtk_tooltips_data_get (ConvertToGtkWidget(Widget));
end;


function ComposeTooltip (TooltipText:string; PrivText:string) : string;
begin
  result := TooltipText;
  if PrivText <> '' then
    result := result + '|' + PrivText;
end;


procedure DecomposeTooltip (Tooltip:string; var TooltipText:string; var PrivText:string);
var r : integer;
begin
  r := pos ('|', tooltip);
  if r > 0 then
    begin
    TooltipText := copy(Tooltip, 1, r-1);
    PrivText := copy (Tooltip, r+1, maxint);
    end
  else
    begin
    TooltipText := Tooltip;
    PrivText := '';
    end;
end;


procedure CheckTooltips;
begin
if not assigned (TheTooltips) then
  TheTooltips := TFPgtkTooltips.Create;
end;


procedure TFPgtkToolTips.ForceWindow;
begin
  gtk_tooltips_force_window (TheGtkObject);
end;

 { TFPgtkWidget }

function TFPgtkWidget.TheGtkObject : PGtkWidget;
begin
  result := PgtkWidget(FGtkObject);
end;


function TFPgtkWidget.GetTheGtkWidget : PGtkWidget;
begin
  result := PGtkWidget (TheGtkObject);
end;

procedure TFPgtkWidget.SetTheGtkWidget (TheValue:PGtkWidget);
begin
  FGtkObject := PgtkObject (TheValue);
end;

function GetPascalInstance (Widget:PGtkWidget) : TFPgtkWidget; Overload;
begin
  result := TFPgtkWidget (GetPascalInstance (PGtkObject(widget)));
end;


function GetPascalInstance (Widget:PGtkWidget; ObjClass:TFPgtkObjectClass) : TFPgtkWidget; Overload;
begin
  result := TFPgtkWidget (GetPascalInstance (PGtkObject(Widget), ObjClass));
end;


function ConvertToGtkWidget (AnObject:TFPgtkWidget) : PGtkWidget;
begin
  if assigned(AnObject) then
    result := AnObject.TheGtkWidget
  else
    result := nil;
end;


procedure WidgetSignalproc (Sender:PGtkobject; Widget:PGtkwidget; Data:pointer); cdecl;
var p : TFPgtkWidgetSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkWidgetSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, GetPascalInstance(PGtkObject(Widget),TFPgtkwidget) as TFPgtkwidget, TheData)
  end;
end;

function TFPgtkWidget.WidgetSignalConnect (signal:string; proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@WidgetSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.WidgetSignalConnectAfter (signal:string; proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@WidgetSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure TFPgtkWidget.SetFlags (NewFlags:longint);
begin
  gtk_widget_set_flags (TheGtkObject, NewFlags);
end;

procedure TFPgtkWidget.UnsetFlags (NewUnsetFlags:longint);
begin
  gtk_widget_unset_flags (TheGtkObject, NewUnsetFlags);
end;

procedure TFPgtkWidget.Map;
begin
  gtk_widget_map (TheGtkObject);
end;

procedure TFPgtkWidget.Unmap;
begin
  gtk_widget_unmap (TheGtkObject);
end;

procedure TFPgtkWidget.QueueDraw;
begin
  gtk_widget_queue_draw (TheGtkObject);
end;

procedure TFPgtkWidget.QueueResize;
begin
  gtk_widget_queue_resize (TheGtkObject);
end;

procedure TFPgtkWidget.Draw (Rectangle:PGdkRectangle); Overload;
begin
  gtk_widget_draw (TheGtkObject, Rectangle);
end;

procedure TFPgtkWidget.DrawFocus;
begin
  gtk_widget_draw_focus (TheGtkObject);
end;

procedure TFPgtkWidget.DrawDefault;
begin
  gtk_widget_draw_default (TheGtkObject);
end;

procedure TFPgtkWidget.Show;
begin
  gtk_widget_show (TheGtkObject);
end;

procedure TFPgtkWidget.Hide;
begin
  gtk_widget_hide (TheGtkObject);
end;

procedure TFPgtkWidget.Realize;
begin
  gtk_widget_realize (TheGtkObject);
end;

procedure TFPgtkWidget.Unrealize;
begin
  gtk_widget_unrealize (TheGtkObject);
end;

procedure TFPgtkWidget.ShowNow;
begin
  gtk_widget_show_now (TheGtkObject);
end;

procedure TFPgtkWidget.ShowAll;
begin
  gtk_widget_show_all (TheGtkObject);
end;

procedure TFPgtkWidget.HideAll;
begin
  gtk_widget_hide_all (TheGtkObject);
end;

procedure TFPgtkWidget.SetAllocation (AnAllocation:TGtkAllocation); Overload;
begin
  with AnAllocation do
    SetAllocation (x, y, width, height);
end;

procedure TFPgtkWidget.SetAllocation (x:integer; y:integer; width:integer; height:integer); Overload;
begin
  SetUPosition (x, y);
  SetUSize (width, height);
end;

function TFPgtkWidget.GetAllocation : TGtkAllocation;
begin
  result := TheGtkObject^.allocation;
end;

procedure TFPgtkWidget.SetUPosition (x:integer; y:integer);
begin
  gtk_widget_set_uposition (TheGtkObject, x, y);
end;

procedure TFPgtkWidget.SetUsize (width:integer; height:integer);
begin
  gtk_widget_set_usize (TheGtkObject, width, height);
end;

function TFPgtkWidget.GetName : string;
begin
  result := gtk_widget_get_name(TheGtkObject);
end;

procedure TFPgtkWidget.SetName (TheValue:string);
begin
  gtk_widget_set_name(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkWidget.GetPropFlags : longint;
begin
  result := gtk_widget_Flags (TheGtkObject);
end;

procedure TFPgtkWidget.SetPropFlags (TheValue:longint);
var f : integer;
begin
  f := GetPropFlags;
  UnsetFlags (f and not TheValue);
  SetFlags (not f and TheValue);
end;

function TFPgtkWidget.GetState : longint;
begin
  result := gtk_widget_State(TheGtkObject);
end;

function TFPgtkWidget.GetSavedState : longint;
begin
  result := gtk_widget_Saved_State(TheGtkObject);
end;

function TFPgtkWidget.GetParent : TFPgtkWidget;
var gtkparent : PgtkWidget;
    o : TFPgtkObject;
begin
  gtkParent := TheGtkObject^.parent;
  o := GetPascalInstance (PgtkObject(GtkParent));
  if o is TFPgtkWidget then
    result := TFPgtkWidget(o)
  else
    result := nil;
end;

procedure TFPgtkWidget.SetParent (TheValue:TFPgtkWidget);
var gtkparent : PgtkWidget;
begin
  gtkParent := TheGtkObject^.parent;
  if assigned(TheValue) then
    if assigned(gtkParent) then
      reparent (TheValue)
    else
      gtk_widget_set_parent (TheGtkWidget, ConvertToGtkWidget(TheValue))
  else
    if assigned(gtkParent) then
      gtk_widget_unparent (TheGtkWidget);
end;


function TFPgtkWidget.GetParentWindow : PGdkWindow;
begin
  result := gtk_widget_get_parent_window(TheGtkObject);
end;

procedure TFPgtkWidget.SetParentWindow (TheValue:PGdkWindow);
begin
  gtk_widget_set_parent_window(TheGtkObject,TheValue);
end;

procedure TFPgtkWidget.Unparent;
begin
  gtk_widget_unparent (TheGtkObject);
end;

procedure TFPgtkWidget.Reparent (NewParent:TFPgtkWidget);
begin
  if (NewParent is TFpgtkContainer) then
    begin
    ref;
    TFPgtkContainer(Parent).remove (self);
    TFPgtkContainer(NewParent).Add (Self);
    unref;
    end;
end;

function TFPgtkWidget.GetVisible : boolean;
begin
  result := gtk_widget_Visible(TheGtkObject);
end;

procedure TFPgtkWidget.SetVisible (TheValue:boolean);
begin
  if TheValue then
    Show
  else
    Hide;
end;

function TFPgtkWidget.GetNoWindow : boolean;
begin
  result := gtk_widget_No_Window(TheGtkObject);
end;

procedure TFPgtkWidget.SetNoWindow (TheValue:boolean);
begin
  if TheValue then
    SetFlags (GTK_NO_WINDOW)
  else
    UnSetFlags (GTK_NO_WINDOW);
end;

function TFPgtkWidget.GetRealized : boolean;
begin
  result := gtk_widget_realized(TheGtkObject);
end;

procedure TFPgtkWidget.SetRealized (TheValue:boolean);
begin
  if TheValue then
    Realize
  else
    Unrealize;
end;

function TFPgtkWidget.GetMapped : boolean;
begin
  result := gtk_widget_Mapped(TheGtkObject);
end;

procedure TFPgtkWidget.SetMapped (TheValue:boolean);
begin
  if TheValue then
    Map
  else
    Unmap;
end;

function TFPgtkWidget.GetDrawable : boolean;
begin
  result := gtk_widget_Drawable(TheGtkObject);
end;

function TFPgtkWidget.GetIsSensitive : boolean;
begin
  result := gtk_widget_Is_Sensitive(TheGtkObject);
end;

function TFPgtkWidget.GetSensitive : boolean;
begin
  result := gtk_widget_Sensitive(TheGtkObject);
end;

procedure TFPgtkWidget.SetSensitive (TheValue:boolean);
begin
  gtk_widget_set_sensitive(TheGtkObject,TheValue);
end;

function TFPgtkWidget.GetParentSensitive : boolean;
begin
  result := gtk_widget_Parent_Sensitive(TheGtkObject);
end;

procedure TFPgtkWidget.SetParentSensitive (TheValue:boolean);
begin
  if TheValue then
    SetFlags (GTK_PARENT_SENSITIVE)
  else
    UnSetFlags (GTK_PARENT_SENSITIVE);
end;

function TFPgtkWidget.GetAppPaintable : boolean;
begin
  result := gtk_widget_App_Paintable(TheGtkObject);
end;

function TFPgtkWidget.GetCanFocus : boolean;
begin
  result := gtk_widget_Can_Focus(TheGtkObject);
end;

procedure TFPgtkWidget.SetCanFocus (TheValue:boolean);
begin
  if TheValue then
    SetFlags (GTK_CAN_FOCUS)
  else
    UnSetFlags (GTK_CAN_FOCUS);
end;

procedure TFPgtkWidget.GrabFocus;
begin
  gtk_widget_grab_focus (TheGtkObject);
end;

function TFPgtkWidget.GetHasFocus : boolean;
begin
  result := gtk_widget_Has_Focus(TheGtkObject);
end;

function TFPgtkWidget.GetCanDefault : boolean;
begin
  result := gtk_widget_Can_Default(TheGtkObject);
end;

procedure TFPgtkWidget.SetCanDefault (TheValue:boolean);
begin
  if TheValue then
    SetFlags (GTK_CAN_DEFAULT)
  else
    UnSetFlags (GTK_CAN_DEFAULT);
end;

procedure TFPgtkWidget.GrabDefault;
begin
  gtk_widget_grab_default (TheGtkObject);
end;

function TFPgtkWidget.GetHasDefault : boolean;
begin
  result := gtk_widget_Has_Default(TheGtkObject);
end;

function TFPgtkWidget.GetReceivesDefault : boolean;
begin
  result := gtk_widget_Receives_Default(TheGtkObject);
end;

function TFPgtkWidget.GetCompositeChild : boolean;
begin
  result := gtk_widget_Composite_Child(TheGtkObject);
end;

function TFPgtkWidget.GetTooltip : string;
var data : PGtkTooltipsData;
begin
  data := Gtk_Tooltips_Data_Get (TheGtkObject);
  if assigned(data) then
    with data^ do
      result := ComposeTooltip (Tip_Text, tip_private)
  else
    result := '';
end;

procedure TFPgtkWidget.SetTooltip (TheValue:string);
var t, p : string;
    ttdata : PGtkTooltipsData;
begin
  if TheValue = '' then
    begin
    ttdata := GetTooltipsData (Self);
    if assigned (ttdata) then
      ; // find a way to remove the hint. Setting '' does not remove
    end
  else
    begin
    CheckTooltips;
    DecomposeTooltip (TheValue, t, p);
    TheToolTips.SetTip (self, t, p);
    end;
end;

procedure TFPgtkWidget.HideOnDelete;
begin
  gtk_widget_hide_on_delete (TheGtkObject);
end;

function TFPgtkWidget.GetColormap : PGdkColormap;
begin
  result := gtk_widget_get_colormap(TheGtkObject);
end;

procedure TFPgtkWidget.SetColormap (TheValue:PGdkColormap);
begin
  gtk_widget_set_colormap(TheGtkObject,TheValue);
end;

function TFPgtkWidget.ConnectShow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgShow, proc, data);
end;

function TFPgtkWidget.ConnectAfterShow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgShow, proc, data);
end;

function TFPgtkWidget.Connecthide (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sghide, proc, data);
end;

function TFPgtkWidget.ConnectAfterhide (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sghide, proc, data);
end;

function TFPgtkWidget.Connectmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgmap, proc, data);
end;

function TFPgtkWidget.ConnectAftermap (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgmap, proc, data);
end;

function TFPgtkWidget.Connectunmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgunmap, proc, data);
end;

function TFPgtkWidget.ConnectAfterunmap (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgunmap, proc, data);
end;

function TFPgtkWidget.Connectrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgrealize, proc, data);
end;

function TFPgtkWidget.ConnectAfterrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgrealize, proc, data);
end;

function TFPgtkWidget.Connectunrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgunrealize, proc, data);
end;

function TFPgtkWidget.ConnectAfterunrealize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgunrealize, proc, data);
end;

function TFPgtkWidget.ConnectDrawFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDrawFocus, proc, data);
end;

function TFPgtkWidget.ConnectAfterDrawFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDrawFocus, proc, data);
end;

function TFPgtkWidget.ConnectDrawDefault (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDrawDefault, proc, data);
end;

function TFPgtkWidget.ConnectAfterDrawDefault (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDrawDefault, proc, data);
end;

function TFPgtkWidget.ConnectParentSet (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgParentSet, proc, data);
end;

function TFPgtkWidget.ConnectAfterParentSet (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgParentSet, proc, data);
end;

function TFPgtkWidget.ConnectGrabFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgGrabFocus, proc, data);
end;

function TFPgtkWidget.ConnectAfterGrabFocus (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgGrabFocus, proc, data);
end;

function Eventfunc (Sender:PGtkwidget; Event:PGdkEvent; data:pointer) : boolean; cdecl;
var p : TFPgtkEventFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventConnect (signal:string; proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@Eventfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventConnectAfter (signal:string; proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@Eventfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgEvent, proc, data);
end;

function EventButtonfunc (Sender:PGtkwidget; Event:PGdkEventButton; data:pointer) : boolean; cdecl;
var p : TFPgtkEventButtonFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventButtonFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventButtonConnect (signal:string; proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventButtonfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventButtonConnectAfter (signal:string; proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventButtonfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectButtonPressEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := EventButtonConnect (sgButtonPressEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterButtonPressEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := EventButtonConnectAfter (sgButtonPressEvent, proc, data);
end;

function TFPgtkWidget.ConnectButtonReleaseEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := EventButtonConnect (sgButtonReleaseEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterButtonReleaseEvent (proc:TFPgtkEventButtonFunction; data:pointer) : guint;
begin
  result := EventButtonConnectAfter (sgButtonReleaseEvent, proc, data);
end;

function EventMotionfunc (Sender:PGtkwidget; Event:PGdkEventMotion; data:pointer) : boolean; cdecl;
var p : TFPgtkEventMotionFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventMotionFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventMotionConnect (signal:string; proc:TFPgtkEventMotionFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventMotionfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventMotionConnectAfter (signal:string; proc:TFPgtkEventMotionFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventMotionfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectMotionNotifyEvent (proc:TFPgtkEventMotionFunction; data:pointer) : guint;
begin
  result := EventMotionConnect (sgMotionNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterMotionNotifyEvent (proc:TFPgtkEventMotionFunction; data:pointer) : guint;
begin
  result := EventMotionConnectAfter (sgMotionNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectDeleteEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgDeleteEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterDeleteEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgDeleteEvent, proc, data);
end;

function TFPgtkWidget.ConnectDestroyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgDestroyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterDestroyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgDestroyEvent, proc, data);
end;

function EventExposefunc (Sender:PGtkwidget; Event:PGdkEventExpose; data:pointer) : boolean; cdecl;
var p : TFPgtkEventExposeFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventExposeFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventExposeConnect (signal:string; proc:TFPgtkEventExposeFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventExposefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventExposeConnectAfter (signal:string; proc:TFPgtkEventExposeFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventExposefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectExposeEvent (proc:TFPgtkEventExposeFunction; data:pointer) : guint;
begin
  result := EventExposeConnect (sgExposeEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterExposeEvent (proc:TFPgtkEventExposeFunction; data:pointer) : guint;
begin
  result := EventExposeConnectAfter (sgExposeEvent, proc, data);
end;

function EventKeyfunc (Sender:PGtkwidget; Event:PGdkEventKey; data:pointer) : boolean; cdecl;
var p : TFPgtkEventKeyFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventKeyFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventKeyConnect (signal:string; proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventKeyfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventKeyConnectAfter (signal:string; proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventKeyfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectKeyPressEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := EventKeyConnect (sgKeyPressEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterKeyPressEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := EventKeyConnectAfter (sgKeyPressEvent, proc, data);
end;

function TFPgtkWidget.ConnectKeyReleaseEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := EventKeyConnect (sgKeyReleaseEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterKeyReleaseEvent (proc:TFPgtkEventKeyFunction; data:pointer) : guint;
begin
  result := EventKeyConnectAfter (sgKeyReleaseEvent, proc, data);
end;

function EventCrossingfunc (Sender:PGtkwidget; Event:PGdkEventCrossing; data:pointer) : boolean; cdecl;
var p : TFPgtkEventCrossingFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventCrossingFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventCrossingConnect (signal:string; proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventCrossingfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventCrossingConnectAfter (signal:string; proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventCrossingfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectEnterNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := EventCrossingConnect (sgEnterNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterEnterNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := EventCrossingConnectAfter (sgEnterNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectLeaveNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := EventCrossingConnect (sgLeaveNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterLeaveNotifyEvent (proc:TFPgtkEventCrossingFunction; data:pointer) : guint;
begin
  result := EventCrossingConnectAfter (sgLeaveNotifyEvent, proc, data);
end;

function EventConfigurefunc (Sender:PGtkwidget; Event:PGdkEventConfigure; data:pointer) : boolean; cdecl;
var p : TFPgtkEventConfigureFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventConfigureFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventConfigureConnect (signal:string; proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventConfigurefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventConfigureConnectAfter (signal:string; proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventConfigurefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectConfigureEvent (proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
begin
  result := EventConfigureConnect (sgConfigureEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterConfigureEvent (proc:TFPgtkEventConfigureFunction; data:pointer) : guint;
begin
  result := EventConfigureConnectAfter (sgConfigureEvent, proc, data);
end;

function EventFocusfunc (Sender:PGtkwidget; Event:PGdkEventFocus; data:pointer) : boolean; cdecl;
var p : TFPgtkEventFocusFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventFocusFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventFocusConnect (signal:string; proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventFocusfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventFocusConnectAfter (signal:string; proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventFocusfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectFocusInEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := EventFocusConnect (sgFocusInEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterFocusInEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := EventFocusConnectAfter (sgFocusInEvent, proc, data);
end;

function TFPgtkWidget.ConnectFocusOutEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := EventFocusConnect (sgFocusOutEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterFocusOutEvent (proc:TFPgtkEventFocusFunction; data:pointer) : guint;
begin
  result := EventFocusConnectAfter (sgFocusOutEvent, proc, data);
end;

function TFPgtkWidget.ConnectMapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgMapEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterMapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgMapEvent, proc, data);
end;

function TFPgtkWidget.ConnectUnmapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgUnmapEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterUnmapEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgUnmapEvent, proc, data);
end;

function EventPropertyfunc (Sender:PGtkwidget; Event:PGdkEventProperty; data:pointer) : boolean; cdecl;
var p : TFPgtkEventPropertyFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventPropertyFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventPropertyConnect (signal:string; proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventPropertyfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventPropertyConnectAfter (signal:string; proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventPropertyfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectPropertyNotifyEvent (proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
begin
  result := EventPropertyConnect (sgPropertyNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterPropertyNotifyEvent (proc:TFPgtkEventPropertyFunction; data:pointer) : guint;
begin
  result := EventPropertyConnectAfter (sgPropertyNotifyEvent, proc, data);
end;

function EventSelectionfunc (Sender:PGtkwidget; Event:PGdkEventSelection; data:pointer) : boolean; cdecl;
var p : TFPgtkEventSelectionFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventSelectionFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventSelectionConnect (signal:string; proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventSelectionfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventSelectionConnectAfter (signal:string; proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventSelectionfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectSelectionClearEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnect (sgSelectionClearEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterSelectionClearEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnectAfter (sgSelectionClearEvent, proc, data);
end;

function TFPgtkWidget.ConnectSelectionRequestEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnect (sgSelectionRequestEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterSelectionRequestEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnectAfter (sgSelectionRequestEvent, proc, data);
end;

function TFPgtkWidget.ConnectSelectionNotifyEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnect (sgSelectionNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterSelectionNotifyEvent (proc:TFPgtkEventSelectionFunction; data:pointer) : guint;
begin
  result := EventSelectionConnectAfter (sgSelectionNotifyEvent, proc, data);
end;

function EventProximityfunc (Sender:PGtkwidget; Event:PGdkEventProximity; data:pointer) : boolean; cdecl;
var p : TFPgtkEventProximityFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventProximityFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventProximityConnect (signal:string; proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventProximityfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventProximityConnectAfter (signal:string; proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventProximityfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectProximityInEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := EventProximityConnect (sgProximityInEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterProximityInEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := EventProximityConnectAfter (sgProximityInEvent, proc, data);
end;

function TFPgtkWidget.ConnectProximityOutEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := EventProximityConnect (sgProximityOutEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterProximityOutEvent (proc:TFPgtkEventProximityFunction; data:pointer) : guint;
begin
  result := EventProximityConnectAfter (sgProximityOutEvent, proc, data);
end;

function EventClientfunc (Sender:PGtkwidget; Event:PGdkEventClient; data:pointer) : boolean; cdecl;
var p : TFPgtkEventClientFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventClientFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventClientConnect (signal:string; proc:TFPgtkEventClientFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventClientfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventClientConnectAfter (signal:string; proc:TFPgtkEventClientFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventClientfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectClientEvent (proc:TFPgtkEventClientFunction; data:pointer) : guint;
begin
  result := EventClientConnect (sgClientEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterClientEvent (proc:TFPgtkEventClientFunction; data:pointer) : guint;
begin
  result := EventClientConnectAfter (sgClientEvent, proc, data);
end;

function EventNoExposefunc (Sender:PGtkwidget; Event:PGdkEventNoExpose; data:pointer) : boolean; cdecl;
var p : TFPgtkEventNoExposeFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkEventNoExposeFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkWidget, Event, TheData)
  end;
end;

function TFPgtkWidget.EventNoExposeConnect (signal:string; proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@EventNoExposefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.EventNoExposeConnectAfter (signal:string; proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@EventNoExposefunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkWidget.ConnectNoExposeEvent (proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
begin
  result := EventNoExposeConnect (sgNoExposeEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterNoExposeEvent (proc:TFPgtkEventNoExposeFunction; data:pointer) : guint;
begin
  result := EventNoExposeConnectAfter (sgNoExposeEvent, proc, data);
end;

function TFPgtkWidget.ConnectVisibilityNotifyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnect (sgVisibilityNotifyEvent, proc, data);
end;

function TFPgtkWidget.ConnectAfterVisibilityNotifyEvent (proc:TFPgtkEventFunction; data:pointer) : guint;
begin
  result := EventConnectAfter (sgVisibilityNotifyEvent, proc, data);
end;

procedure TFPgtkWidget.LockAccelerators;
begin
  gtk_widget_lock_accelerators (TheGtkObject);
end;

procedure TFPgtkWidget.UnlockAccelerators;
begin
  gtk_widget_unlock_accelerators (TheGtkObject);
end;

procedure TFPgtkWidget.RemoveAccelerators (aSignal:string; OnlyVisible:boolean);
begin
  gtk_widget_remove_accelerators (TheGtkObject, ConvertToPgchar(aSignal), OnlyVisible);
end;

procedure TFPgtkWidget.ActivateAccelGroups (Key:guint; Mods:TGdkModifierType);
begin
  gtk_accel_groups_activate (FGtkObject, Key, Mods);
end;

procedure TFPgtkWidget.AcceleratorAdd (AG:PGtkAccelGroup; aSignal:string; Key:guint; Mods:TGdkModifierType; acFlags:TGtkAccelFlags); Overload;
begin
  gtk_widget_add_accelerator (TheGtkWidget, pgchar(aSignal),
        AG, Key, Mods, acFlags);
end;

 { TFPgtkGroup }


procedure TFPgtkGroup.FreeList;
begin
  if FGList <> null then
    begin
    if FManageLists then
      g_list_free (FGList);
    FGList := null;
    end;
end;

procedure TFPgtkGroup.FreeSList;
begin
  if FGSList <> null then
    begin
    if FManageLists then
      g_slist_free (FGSList);
    FGSlist := null;
    end;
end;

function TFPgtkGroup.CreateGList : PGList;
var r : integer;
begin
  FreeList;
  result := null;
  for r := pred(count) downto 0 do
    result := g_list_prepend (result, GetData(r));
  FGList := result;
end;

function TFPgtkGroup.CreateGSList : PGSList;
var r : integer;
begin
  FreeSList;
  result := null;
  for r := pred(count) downto 0 do
    result := g_slist_prepend (result, GetData(r));
  FGSList := result;
end;

procedure TFPgtkGroup.BuildFromGtkList;
var p : PGList;
begin
  clear;
  p := FGList;
  while p <> null do
    begin
    add (UngetData(p^.data));
    p := p^.Next;
    end;
  FListChanged := False;
  FSListChanged := False;
  FClassesChanged := False;
  FreeSList;
end;

procedure TFPgtkGroup.BuildFromGtkSList;
var p :PGSList;
begin
  clear;
  p := FGSList;
  while p <> null do
    begin
    add (UngetData(p^.data));
    p := p^.Next;
    end;
  FListChanged := False;
  FSListChanged := False;
  FClassesChanged := False;
  FreeList;
end;

procedure TFPgtkGroup.Notify (ptr:pointer; Action:TListNotification);
begin
  inherited;
  FClassesChanged := True;
end;

function TFPgtkGroup.GetData (index:integer) : pointer;
// GetData needs to give the pointer to the data in the List or SList of GTK
begin
  result := items[index];
end;

function TFPgtkGroup.UngetData (data:pointer) : pointer;
// UngetData needs to give the item in this list from the datapointer of GTK
begin
  result := data
end;

constructor TFPgtkGroup.Create;
begin
  inherited create;
  FClassesChanged := False;
  FListChanged := false;
  FSListChanged := False;
  FGList := null;
  FGSList := null;
  FNotUpdating := True;
  FManageLists := True;
end;


destructor TFPgtkGroup.Destroy;
begin
  if ManageLists then
    begin
    FreeList;
    FreeSList;
    end;
  inherited Destroy;
end;


function TFPgtkGroup.GetGtkList (buffered:boolean) : PGList;
begin
  if buffered then
    if FClasseschanged then
      result := CreateGList
    else if FSListChanged then
      begin
      BuildFromGtkSList;
      result := CreateGList;
      end
    else
      result := FGlist
  else
    result := CreateGList;
end;

function TFPgtkGroup.GetGtkSList (buffered:boolean) : PGSList;
begin
  if buffered then
    if FClassesChanged then
      result := CreateGSList
    else if FListChanged then
      begin
      BuildFromGtkList;
      result := CreateGSList;
      end
    else
      result := FGSlist
  else
    result := CreateGSList;
end;

procedure TFPgtkGroup.BeginUpdate;
begin
  FNotUpdating := False;
end;

procedure TFPgtkGroup.EndUpdate;
begin
  FNotUpdating := True;
  if FlistChanged then
    BuildFromGtkSList
  else if FSListChanged then
    BuildFromGtkSList
  else if FClassesChanged then
    begin
    FreeSList;
    FreeList;
    end;
end;

procedure TFPgtkGroup.ForEach (Proc:TFPgtkForEachProcedure; data:pointer);
var r: integer;
begin
  for r := 0 to pred(count) do
    Proc (items[r], data);
end;

function TFPgtkGroup.GetGtkListProp : PGList;
begin
  result := GetGtkList (True);
end;

procedure TFPgtkGroup.SetGtkListProp (TheValue:PGList);
begin
  FGList := TheValue;
  if FNotUpdating then
    BuildFromGtkList
  else
    FListChanged := True;
end;

function TFPgtkGroup.GetGtkSListProp : PGSList;
begin
  result := GetGtkSList (True);
end;

procedure TFPgtkGroup.SetGtkSListProp (TheValue:PGSList);
begin
  FGSlist := TheValue;
  if FNotUpdating then
    BuildFromGtkSList
  else
    FSListChanged := True;
end;

 { TFPgtkWidgetGroup }


function TFPgtkWidgetGroup.GetData (index:integer) : pointer;
begin
  result := items[index].FgtkObject;
end;

function TFPgtkWidgetGroup.UnGetData (data:pointer) : pointer;
begin
  result := GetPascalInstance (PGtkObject(Data));
end;

procedure TFPgtkWidgetGroup.AddToContainer (Container:TFPgtkContainer);
var r : integer;
begin
  for r := 0 to pred(count) do
    Container.Add (items[r]);
end;

procedure TFPgtkWidgetGroup.PackInBox (box:TFPgtkBox; AtStart:boolean; Expanding:boolean; Fill:boolean; Padding:integer);
var r : integer;
begin
  if AtStart then
    for r := 0 to pred(Count) do
      box.PackStart (items[r], expanding, fill, padding)
  else
    for r := pred(Count) downto 0 do
      box.PackEnd (items[r], expanding, fill, padding);
end;

function TFPgtkWidgetGroup.GetItem (Index:integer) : TFPgtkWidget;
begin
  result := TFPgtkWidget (Inherited items[index]);
end;

procedure TFPgtkWidgetGroup.SetItem (Index:integer; TheValue:TFPgtkWidget);
begin
  inherited items[index] := TheValue;
end;

function TFPgtkWidgetGroup.GetTooltips (index:integer) : string;
begin
  result := items[index].Tooltip;
end;

procedure TFPgtkWidgetGroup.SetTooltips (index:integer; TheValue:string);
begin
  Items[index].Tooltip := TheValue;
end;

 { TFPgtkMisc }

function TFPgtkMisc.TheGtkObject : PGtkMisc;
begin
  result := PgtkMisc(FGtkObject);
end;


procedure TFPgtkMisc.SetAlignment (x:gfloat; y:gfloat);
begin
  gtk_misc_set_alignment (TheGtkObject, x, y);
end;

procedure TFPgtkMisc.SetPadding (x:word; y:word);
begin
  gtk_misc_set_padding (TheGtkObject, x, y);
end;

function TFPgtkMisc.GetXAlign : gfloat;
begin
  result := TheGtkObject^.XAlign;
end;

procedure TFPgtkMisc.SetXAlign (TheValue:gfloat);
begin
  SetAlignment (TheValue, YAlign);
end;

function TFPgtkMisc.GetYAlign : gfloat;
begin
  result := TheGtkObject^.YAlign;
end;

procedure TFPgtkMisc.SetYAlign (TheValue:gfloat);
begin
  SetAlignment (XAlign, TheValue);
end;

function TFPgtkMisc.GetXPad : word;
begin
  result := TheGtkObject^.XPad;
end;

procedure TFPgtkMisc.SetXPad (TheValue:word);
begin
  SetPadding (TheValue, YPad);
end;

function TFPgtkMisc.GetYPad : word;
begin
  result := TheGtkObject^.YPad;
end;

procedure TFPgtkMisc.SetYPad (TheValue:word);
begin
  SetPadding (XPad, TheValue);
end;

 { TFPgtkLabel }

function TFPgtkLabel.TheGtkObject : PGtkLabel;
begin
  result := PgtkLabel(FGtkObject);
end;

procedure TFPgtkLabel.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_label_new (null));
end;


constructor TFPgtkLabel.Create (aText:string);
begin
  inherited create;
  Text := aText;
  SetAlignment (0.0, 0.5);
end;


function TFPgtkLabel.GetText : string;
begin
  result := TheGtkObject^.TheLabel;
end;

procedure TFPgtkLabel.SetText (TheValue:string);
begin
  gtk_label_set_text(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkLabel.GetPattern : string;
begin
  result := TheGtkObject^.pattern;
end;

procedure TFPgtkLabel.SetPattern (TheValue:string);
begin
  gtk_label_set_pattern(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkLabel.GetJustify : TGtkJustification;
begin
  result := gtk.jtype(TheGtkObject^);
end;

procedure TFPgtkLabel.SetJustify (TheValue:TGtkJustification);
begin
  gtk_label_set_justify(TheGtkObject,TheValue);
end;

function TFPgtkLabel.GetLineWrap : boolean;
begin
  result := TheGtkObject^.wrap;
end;

procedure TFPgtkLabel.SetLineWrap (TheValue:boolean);
begin
  gtk_label_set_line_wrap(TheGtkObject,TheValue);
end;

function TFPgtkLabel.ParseUline (aText:string) : guint;
begin
  result := gtk_label_parse_uline (TheGtkObject, ConvertToPgchar(aText));
end;

 { TFPgtkAccelLabel }

function TFPgtkAccelLabel.TheGtkObject : PGtkAccelLabel;
begin
  result := PgtkAccelLabel(FGtkObject);
end;

procedure TFPgtkAccelLabel.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_accel_label_new (''));
end;


function TFPgtkAccelLabel.GetAccelWidget : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.accel_widget),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkAccelLabel.SetAccelWidget (TheValue:TFPgtkWidget);
begin
  gtk_accel_label_set_accel_widget(TheGtkObject,PGtkwidget(ConvertToGtkObject(TheValue)));
end;

function TFPgtkAccelLabel.AccelText : string;
begin
  result := TheGtkObject^.accel_string;
end;

procedure TFPgtkAccelLabel.Refetch;
begin
  gtk_accel_label_refetch (TheGtkObject);
end;

 { TFPgtkTipsQuery }

function TFPgtkTipsQuery.TheGtkObject : PGtkTipsQuery;
begin
  result := PgtkTipsQuery(FGtkObject);
end;

procedure TFPgtkTipsQuery.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_tips_query_new);
end;


 { TFPgtkArrow }

function TFPgtkArrow.TheGtkObject : PGtkArrow;
begin
  result := PgtkArrow(FGtkObject);
end;

procedure TFPgtkArrow.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_arrow_new (GTK_ARROW_LEFT,GTK_SHADOW_NONE));
end;


function TFPgtkArrow.GetArrowType : TGtkArrowType;
begin
  result := TGtkArrowType (TheGtkObject^.arrow_type);
end;

procedure TFPgtkArrow.SetArrowType (TheValue:TGtkArrowType);
begin
  gtk_arrow_set (TheGtkObject, TheValue, ShadowType);
end;

function TFPgtkArrow.GetShadowType : TGtkShadowType;
begin
  result := TGtkShadowtype (TheGtkObject^.shadow_type);
end;

procedure TFPgtkArrow.SetShadowType (TheValue:TGtkShadowType);
begin
  gtk_arrow_set (TheGtkObject, ArrowType, TheValue);
end;

procedure TFPgtkArrow.SetTypes (AnArrowType:TGtkArrowType; AShadowtype:TGtkShadowType);
begin
  gtk_arrow_set (TheGtkObject, AnArrowType, AShadowtype);
end;

constructor TFPgtkArrow.Create (AnArrowType:TGtkArrowType; AShadowType:TGtkShadowType);
begin
  inherited create;
  SetTypes (AnArrowType, AShadowType);
end;


 { TFPgtkImage }

function TFPgtkImage.TheGtkObject : PGtkImage;
begin
  result := PgtkImage(FGtkObject);
end;

procedure TFPgtkImage.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_image_new (FImage, FMask));
end;


function TFPgtkImage.GetImageProp : PGdkImage;
var m : PGdkBitmap;
begin
  gtk_image_get (TheGtkObject, @result, @m);
end;

procedure TFPgtkImage.SetImageProp (TheValue:PGdkImage);
begin
  gtk_Image_set (TheGtkObject, TheValue, nil);
end;

function TFPgtkImage.GetMask : PGdkBitMap;
var p : PGdkImage;
begin
  gtk_image_get (TheGtkObject, @p, @result);
end;

procedure TFPgtkImage.SetMask (TheValue:PGdkBitMap);
begin
  gtk_image_set (TheGtkObject, Image, TheValue);
end;

procedure TFPgtkImage.SetImage (anImage:PGdkImage; aMask:PGdkBitmap);
begin
  gtk_image_set (TheGtkObject, anImage, aMask);
end;

constructor TFPgtkImage.Create (anImage:PGdkImage; aMask:PGdkBitmap);
begin
  FImage := anImage;
  FMask := aMask;
  inherited create;
end;


function NewImage (aWidth:integer; aHeight:integer) : PGdkImage;
begin
  result := gdk_image_new (gdk_image_fastest, gdk_visual_get_system, aWidth, aHeight);
end;


 { TFPgtkPixmap }

function TFPgtkPixmap.TheGtkObject : PGtkPixmap;
begin
  result := PgtkPixmap(FGtkObject);
end;

procedure TFPgtkPixmap.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_pixmap_new (FPixMap, FMask));
end;

var
  EmptyBitmap : PGdkPixmap;

function StringsToPPgchar (Data:TStrings) : PPgchar;
var r : integer;
    a : PStringArray;
begin
  getmem (a, sizeof (pgchar) * Data.count);
  for r := 0 to Data.Count-1 do
    a^[r] := pchar (Data[r]);
  result := ppgchar (a);
end;


function ArrayToPPgchar (Data:array of string) : PPgchar;
var r,t : integer;
    a : PStringArray;
begin
  getmem (a, sizeof (pgchar) * (high(data)-low(data)+1));
  t := 0;
  for r := low(data) to high(data) do
    begin
    a^[r] := pchar (data[t]);
    inc (t);
    end;
  result := ppgchar (a);
end;


function TFPgtkPixmap.GetBuildInsensitive : longbool;
begin
  result := longbool(gtk.build_insensitive(TheGtkObject^));
end;

procedure TFPgtkPixmap.SetBuildInsensitive (TheValue:longbool);
begin
  gtk_pixmap_set_build_insensitive(TheGtkObject,gint(TheValue));
end;

constructor TFPgtkPixmap.Create;
begin
  if not assigned (EmptyBitmap) then
    EmptyBitmap := gdk_pixmap_new (null, 1, 1, 1);
  FPixMap := EmptyBitmap;
  FMask := PGdkBitmap (EmptyBitmap);
  inherited create;
end;


constructor TFPgtkPixmap.CreateFromFile (Filename:string; Window:TFPgtkWidget);
begin
  FPixMap := gdk_pixmap_create_from_xpm (ConvertToGtkWidget(Window)^.window, @FMask, nil, pgchar(Filename));
  inherited create;
end;


constructor TFPgtkPixmap.CreateFromStrings (Data:TStrings; Window:TFPgtkWidget);
var ppdata : ppgchar;
begin
  ppdata := StringsToPPgchar(Data);
  FPixMap := gdk_pixmap_create_from_xpm_d (ConvertToGtkWidget(Window)^.window, @FMask, nil, ppdata);
  inherited create;
  freemem (ppdata, sizeof (pgchar) * Data.count);
end;


constructor TFPgtkPixmap.CreateFromText (Data:string; Window:TFPgtkWidget);
var l : TStrings;
begin
  l := TStringList.Create;
  try
    l.Text := data;
    CreateFromStrings (l, Window);
  finally
    l.Free;
  end;
end;


function TFPgtkPixmap.GetPixmapProp : PGdkPixMap;
var m : PGdkBitmap;
begin
  gtk_pixmap_get (TheGtkObject, @result, @m);
end;

procedure TFPgtkPixmap.SetPixmapProp (TheValue:PGdkPixMap);
begin
  gtk_pixmap_set (TheGtkObject, TheValue, nil);
end;

function TFPgtkPixmap.GetMask : PGdkBitMap;
var p : PGdkPixmap;
begin
  gtk_pixmap_get (TheGtkObject, @p, @result);
end;

procedure TFPgtkPixmap.SetMask (TheValue:PGdkBitMap);
begin
  gtk_pixmap_set (TheGtkObject, Pixmap, TheValue);
end;

procedure TFPgtkPixmap.SetPixmap (aPixmap:PGdkPixMap; aMask:PGdkBitmap);
begin
  gtk_pixmap_set (TheGtkObject, aPixmap, aMask);
end;

procedure TFPgtkPixmap.GetPixmap (var aPixmap:PGdkPixmap; var aMask:PGdkBitmap);
var P:PGdkPixmap;
   M:PGdkBitmap;
begin
  gtk_pixmap_get (TheGtkObject, @p, @m);
  apixmap := p;
  amask := m;
end;

procedure TFPgtkPixmap.LoadFromFile (Filename:string);
var bm : PGdkBitmap;
    pm : PGdkPixmap;
begin
  pm := gdk_pixmap_colormap_create_from_xpm (nil, Colormap, @bm, nil, pgchar(Filename));
  SetPixmap (pm, bm);
end;

procedure TFPgtkPixmap.LoadFromStrings (data:TStrings);
var bm : PGdkBitmap;
    pm : PGdkPixmap;
    ppdata : ppgchar;
begin
  ppdata := StringsToPPgchar(Data);
  pm := gdk_pixmap_colormap_create_from_xpm_d (nil, Colormap, @bm, nil, ppdata);
  SetPixmap (pm, bm);
  freemem (ppdata, sizeof (pgchar) * Data.count);
end;

procedure TFPgtkPixmap.LoadFromText (data:string);
var l : TStrings;
begin
  l := TStringList.Create;
  try
    l.Text := data;
    LoadFromStrings (l);
  finally
    l.Free;
  end;
end;

procedure TFPgtkPixmap.LoadFromArray (data:array of string);
var bm : PGdkBitmap;
    pm : PGdkPixmap;
    ppdata : ppgchar;
begin
  ppdata := ArrayToPPgchar(Data);
  pm := gdk_pixmap_colormap_create_from_xpm_d (nil, Colormap, @bm, nil, ppdata);
  SetPixmap (pm, bm);
  freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
end;

procedure CreateGdkPixmap (var ThePixmap:PGdkPixmap; var TheMask:PGdkBitmap; aWindow:PGdkWindow; data:array of string);
var ppdata : ppgchar;
begin
  ppdata := ArrayToPPgchar(Data);
  ThePixmap := gdk_pixmap_create_from_xpm_d (aWindow, @TheMask, nil, ppdata);
  freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
end;


 { TFPgtkContainer }

function TFPgtkContainer.TheGtkObject : PGtkContainer;
begin
  result := PgtkContainer(FGtkObject);
end;


function TFPgtkContainer.GetBorder : integer;
begin
  result := gtk.border_width(TheGtkObject^);
end;

procedure TFPgtkContainer.SetBorder (TheValue:integer);
begin
  gtk_container_set_border_width(TheGtkObject,TheValue);
end;

procedure TFPgtkContainer.Add (AWidget:TFPgtkWidget; IsVisible:boolean); Overload;
begin
  gtk_container_add (TheGtkObject, ConvertToGtkWidget(AWidget));
  if IsVisible then
    AWidget.Show;
end;

procedure TFPgtkContainer.Add (AWidget:TFPgtkWidget); Overload;
begin
  gtk_container_add (TheGtkObject, ConvertToGtkWidget(AWidget));
  AWidget.Show;
end;

procedure TFPgtkContainer.Remove (AWidget:TFPgtkWidget);
begin
  gtk_container_remove (TheGtkObject, PGtkwidget(ConvertToGtkObject(AWidget)));
end;

constructor TFPgtkContainer.Create;
begin
  inherited create;
  FChildren := TFPgtkWidgetGroup.Create;
end;


destructor TFPgtkContainer.Destroy;
begin
  if assigned(FChildren) then
    FChildren.Free;
  inherited destroy;
end;


function TFPgtkContainer.GetChildren : TFPgtkWidgetGroup;
begin
  FChildren.GtkList := gtk_container_children (TheGtkObject);
  result := FChildren;
end;

procedure TFPgtkContainer.Focus (Direction:TGtkDirectionType);
begin
  gtk_container_focus (TheGtkObject, Direction);
end;

procedure TFPgtkContainer.FocusChild (Child:TFPgtkWidget);
begin
  gtk_container_set_focus_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

procedure TFPgtkContainer.RegisterToplevel;
begin
  gtk_container_register_toplevel (TheGtkObject);
end;

procedure TFPgtkContainer.UnregisterToplevel;
begin
  gtk_container_unregister_toplevel (TheGtkObject);
end;

procedure TFPgtkContainer.ResizeChildren;
begin
  gtk_container_resize_children (TheGtkObject);
end;

function DirectionFunctionSignalfunc (Sender:PGtkobject; Direction:TGtkDirectionType; data:pointer) : TGtkDirectionType; cdecl;
var p : TFPgtkDirectionFunctionSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkDirectionFunctionSignalFunction (TheSignalProc);
  result := p (TheWidget as TFPgtkObject, Direction, TheData)
  end;
end;

function TFPgtkContainer.DirectionFunctionSignalConnect (signal:string; proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@DirectionFunctionSignalfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkContainer.DirectionFunctionSignalConnectAfter (signal:string; proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@DirectionFunctionSignalfunc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkContainer.ConnectAdd (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgAdd, proc, data);
end;

function TFPgtkContainer.ConnectAfterAdd (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgAdd, proc, data);
end;

function TFPgtkContainer.ConnectRemove (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgRemove, proc, data);
end;

function TFPgtkContainer.ConnectAfterRemove (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgRemove, proc, data);
end;

function TFPgtkContainer.ConnectCheckResize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgCheckResize, proc, data);
end;

function TFPgtkContainer.ConnectAfterCheckResize (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgCheckResize, proc, data);
end;

function TFPgtkContainer.ConnectFocus (proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
begin
  result := DirectionFunctionSignalConnect (sgFocus, proc, data);
end;

function TFPgtkContainer.ConnectAfterFocus (proc:TFPgtkDirectionFunctionSignalFunction; data:pointer) : guint;
begin
  result := DirectionFunctionSignalConnectAfter (sgFocus, proc, data);
end;

function TFPgtkContainer.ConnectSetFocusChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgSetFocusChild, proc, data);
end;

function TFPgtkContainer.ConnectAfterSetFocusChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgSetFocusChild, proc, data);
end;

 { TFPgtkBin }

function TFPgtkBin.TheGtkObject : PGtkBin;
begin
  result := PgtkBin(FGtkObject);
end;


function TFPgtkBin.GetChild : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.Child),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkBin.SetChild (TheValue:TFPgtkWidget);
begin
  Add (TheValue);
end;

 { TFPgtkAlignment }

function TFPgtkAlignment.TheGtkObject : PGtkAlignment;
begin
  result := PgtkAlignment(FGtkObject);
end;


procedure TFPgtkAlignment.Configure (anXAlign:gfloat; anYAlign:gfloat; anXScale:gfloat; anYScale:gfloat);
begin
  gtk_alignment_set (TheGtkObject, anXAlign, anYAlign, anXScale, anYScale);
end;

 { TFPgtkFrame }

function TFPgtkFrame.TheGtkObject : PGtkFrame;
begin
  result := PgtkFrame(FGtkObject);
end;

procedure TFPgtkFrame.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_frame_new (nil));
end;


function TFPgtkFrame.GetText : string;
begin
  result := TheGtkObject^.thelabel;
end;

procedure TFPgtkFrame.SetText (TheValue:string);
begin
  gtk_frame_set_label(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkFrame.GetAlignment : gfloat;
begin
  result := TheGtkObject^.label_xalign;
end;

procedure TFPgtkFrame.SetAlignment (TheValue:gfloat);
begin
  gtk_frame_set_label_align (ThegtkObject, TheValue, 0.0);
end;

function TFPgtkFrame.GetShadowType : TgtkShadowType;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkFrame.SetShadowType (TheValue:TgtkShadowType);
begin
  gtk_frame_set_shadow_type(TheGtkObject,TheValue);
end;

 { TFPgtkAspectFrame }

function TFPgtkAspectFrame.TheGtkObject : PGtkAspectFrame;
begin
  result := PgtkAspectFrame(FGtkObject);
end;

procedure TFPgtkAspectFrame.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_aspect_frame_new (nil,0,0,1,1));
end;


procedure TFPgtkAspectFrame.Configure (anXAlign:gfloat; anYAlign:gfloat; Ratio:gfloat; ObeyChild:longbool);
begin
  gtk_aspect_frame_set (TheGtkObject, anXAlign, anYAlign, Ratio, gint(ObeyChild));
end;

 { TFPgtkButton }

function TFPgtkButton.TheGtkObject : PGtkButton;
begin
  result := PgtkButton(FGtkObject);
end;

procedure TFPgtkButton.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_button_new);
end;


function TFPgtkButton.LabelClass : TFPgtkLabelClass;
begin
  result := TFPgtkLabel;
end;

procedure TFPgtkButton.CreateLabel (aText:string);
begin
if not assigned (FLabel) then
  begin
  FLabel := LabelClass.Create ('');
  with FLabel do
    begin
    AskNotification (Self);
    FAccelKey := ParseULine (aText);
    end;
  if assigned(AddContainer) then
    AddContainer.Add (FLabel)
  else
    Add (FLabel);
  LabelCreated;
  end;
end;

procedure TFPgtkButton.NotifyDestroy (AnObject:TFPgtkObject);
begin
  inherited;
  if AnObject = FLabel then
    FLabel := nil;
end;

function TFPgtkButton.ConnectClicked (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgClicked, proc, data);
end;

function TFPgtkButton.ConnectAfterClicked (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgClicked, proc, data);
end;

function TFPgtkButton.ConnectPressed (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgPressed, proc, data);
end;

function TFPgtkButton.ConnectAfterPressed (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgPressed, proc, data);
end;

function TFPgtkButton.ConnectReleased (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgReleased, proc, data);
end;

function TFPgtkButton.ConnectAfterReleased (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgReleased, proc, data);
end;

function TFPgtkButton.ConnectEnter (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgEnter, proc, data);
end;

function TFPgtkButton.ConnectAfterEnter (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgEnter, proc, data);
end;

function TFPgtkButton.ConnectLeave (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgLeave, proc, data);
end;

function TFPgtkButton.ConnectAfterLeave (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgLeave, proc, data);
end;

procedure TFPgtkButton.Clicked;
begin
  gtk_button_Clicked (TheGtkObject);
end;

procedure TFPgtkButton.Pressed;
begin
  gtk_button_Pressed (TheGtkObject);
end;

procedure TFPgtkButton.Released;
begin
  gtk_button_Released (TheGtkObject);
end;

procedure TFPgtkButton.Enter;
begin
  gtk_button_Enter (TheGtkObject);
end;

procedure TFPgtkButton.Leave;
begin
  gtk_button_Leave (TheGtkObject);
end;

constructor TFPgtkButton.Create;
begin
  inherited create;
  FAddContainer := nil;
end;


constructor TFPgtkButton.CreateWithLabel (aText:string);
begin
  create;
  Text := aText;
end;


constructor TFPgtkButton.CreateWithLabel (aText:string; AccelGroup:PGtkAccelGroup);
begin
  create;
  Text := aText;
  if (FAccelKey <> 0) and assigned(AccelGroup) then
    AcceleratorAdd (AccelGroup, sgClicked, FAccelKey, DefaultButtonModifiers, GTK_ACCEL_Visible);
end;


function TFPgtkButton.GetText : string;
begin
  if assigned (FLabel) then
    result := FLabel.Text
  else
    result := '';
end;

procedure TFPgtkButton.SetText (TheValue:string);
begin
  if assigned (FLabel) then
    FLabel.Text := TheValue
  else
    if TheValue <> '' then
      CreateLabel (TheValue);
end;

function TFPgtkButton.GetReliefStyle : TGtkReliefStyle;
begin
  result := gtk_button_get_relief(TheGtkObject);
end;

procedure TFPgtkButton.SetReliefStyle (TheValue:TGtkReliefStyle);
begin
  gtk_button_set_relief(TheGtkObject,TheValue);
end;

procedure TFPgtkButton.LabelCreated;
begin
  FLabel.setalignment (0.5,0.5);
end;

 { TFPgtkToggleButton }

function TFPgtkToggleButton.TheGtkObject : PGtkToggleButton;
begin
  result := PgtkToggleButton(FGtkObject);
end;

procedure TFPgtkToggleButton.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_toggle_button_new);
end;


function TFPgtkToggleButton.ConnectToggled (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgToggled, proc, data);
end;

function TFPgtkToggleButton.ConnectAfterToggled (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgToggled, proc, data);
end;

procedure TFPgtkToggleButton.Toggled;
begin
  gtk_toggle_button_toggled (TheGtkObject);
end;

function TFPgtkToggleButton.GetActive : boolean;
begin
  result := gtk_toggle_button_get_active(TheGtkObject);
end;

procedure TFPgtkToggleButton.SetActive (TheValue:boolean);
begin
  gtk_toggle_button_set_active(TheGtkObject,TheValue);
end;

function TFPgtkToggleButton.GetDrawIndicator : boolean;
begin
  result := boolean(gtk.draw_indicator(TheGtkObject^));
end;

procedure TFPgtkToggleButton.SetDrawIndicator (TheValue:boolean);
begin
  gtk.Set_draw_indicator(TheGtkObject^,guint(TheValue))
end;

 { TFPgtkCheckButton }

function TFPgtkCheckButton.TheGtkObject : PGtkCheckButton;
begin
  result := PgtkCheckButton(FGtkObject);
end;

procedure TFPgtkCheckButton.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_check_button_new);
end;


 { TFPgtkRadioButton }

function TFPgtkRadioButton.TheGtkObject : PGtkRadioButton;
begin
  result := PgtkRadioButton(FGtkObject);
end;


constructor TFPgtkRadioButton.Create (AGroup:TFPgtkRadioButtonGroup);
begin
  FGroup := AGroup;
  inherited create;
end;


constructor TFPgtkRadioButton.CreateWithLabel (AGroup:TFPgtkRadioButtonGroup; aText:string);
begin
  FGroup := AGroup;
  inherited CreateWithLabel (aText);
end;


procedure TFPgtkRadioButton.CreateGtkObject;
begin
  if not assigned (FGroup) then
    FGroup := TFPgtkRadioButtonGroup.Create;
  TheGtkWidget := gtk_radio_button_new (FGroup.GtkSList);
  FGroup.GtkSList := gtk_radio_button_group (TheGtkObject);
end;

 { TFPgtkRadioButtonGroup }


function TFPgtkRadioButtonGroup.GetItem (index:integer) : TFPgtkRadioButton;
begin
  result := TFPgtkRadioButton(Inherited items[index]);
end;

procedure TFPgtkRadioButtonGroup.SetItem (index:integer; TheValue:TFPgtkRadioButton);
begin
  inherited items[index] := TheValue;
end;

function TFPgtkRadioButtonGroup.ActiveButtonText : string;
begin
  result := ActiveButton.Text;
end;

function TFPgtkRadioButtonGroup.ActiveButtonIndex : integer;
begin
  Result := pred(count);
  while (Result >= 0) and (not items[Result].Active) do
    dec (Result);
end;

function TFPgtkRadioButtonGroup.ActiveButton : TFPgtkRadioButton;
var r : integer;
begin
  r := ActiveButtonIndex;
  if r >= 0 then
    result := items[r]
  else
    result := nil;
end;

function RadioButtonGroupCreateFromStrings (TheItems:TStrings; ToggledFunction:TFPgtkSignalFunction) : TFPgtkRadioButtonGroup;
var r : integer;
    b : TFPgtkRadioButton;
begin
  result := TFPgtkRadioButtonGroup.Create;
  result.BeginUpdate;
  for r := TheItems.count-1 downto 0 do
    begin
    b := TFPgtkRadioButton.CreateWithLabel (result, TheItems[r]);
    if assigned(toggledfunction) then
      b.connecttoggled (ToggledFunction, IntToPointer(r));
    end;
  b.active := true;
  result.EndUpdate;
end;


 { TFPgtkOptionMenu }

function TFPgtkOptionMenu.TheGtkObject : PGtkOptionMenu;
begin
  result := PgtkOptionMenu(FGtkObject);
end;

procedure TFPgtkOptionMenu.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_option_menu_new);
end;


function TFPgtkOptionMenu.GetMenu : TFPgtkMenu;
begin
  result := GetPascalInstance(PGtkObject(gtk_option_menu_get_menu(TheGtkObject)),tfpgtkmenu) as tfpgtkmenu;
end;

procedure TFPgtkOptionMenu.setmenu (TheValue:TFPgtkMenu);
begin
  gtk_option_menu_set_menu(TheGtkObject, ConvertToGtkWidget(TheValue));
end;

procedure TFPgtkOptionMenu.RemoveMenu;
begin
  gtk_option_menu_remove_menu (TheGtkObject);
end;

procedure TFPgtkOptionMenu.SetHistory (index:integer);
begin
  gtk_option_menu_set_history (TheGtkObject, index);
end;

procedure TFPgtkOptionMenu.Clear;
var w : TFPgtkWidget;
begin
  w := Menu;
  if assigned(w) then
    begin
    w := TFPgtkMenu(w).Active;
    if assigned (w) then
      TFPgtkItem(w).Deselect;
    end;
end;

 { TFPgtkItem }

function TFPgtkItem.TheGtkObject : PGtkItem;
begin
  result := PgtkItem(FGtkObject);
end;


function TFPgtkItem.LabelClass : TFPgtkLabelClass;
begin
  result := TFPgtkLabel;
end;

procedure TFPgtkItem.CreateLabel (aText:string);
begin
  if not assigned (FLabel) then
    begin
    FLabel := LabelClass.Create ('');
    with FLabel do
      begin
      AskNotification (Self);
      FAccelKey := ParseULine (aText);
      end;
    if assigned(AddContainer) then
      AddContainer.Add (FLabel)
    else
      Add (FLabel);
    LabelCreated;
    end;
end;

procedure TFPgtkItem.NotifyDestroy (AnObject:TFPgtkObject);
begin
  inherited;
  if AnObject = FLabel then
    FLabel := nil;
end;

function TFPgtkItem.ConnectSelect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgSelect, proc, data);
end;

function TFPgtkItem.ConnectAfterSelect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgSelect, proc, data);
end;

function TFPgtkItem.ConnectDeselect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDeselect, proc, data);
end;

function TFPgtkItem.ConnectAfterDeselect (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDeselect, proc, data);
end;

function TFPgtkItem.ConnectToggle (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgToggle, proc, data);
end;

function TFPgtkItem.ConnectAfterToggle (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgToggle, proc, data);
end;

procedure TFPgtkItem.Select;
begin
  gtk_item_Select (TheGtkObject);
end;

procedure TFPgtkItem.Deselect;
begin
  gtk_item_Deselect (TheGtkObject);
end;

procedure TFPgtkItem.Toggle;
begin
  gtk_item_Toggle (TheGtkObject);
end;

constructor TFPgtkItem.Create;
begin
  inherited;
  FAddContainer := nil;
end;


constructor TFPgtkItem.CreateWithLabel (aText:string);
begin
  inherited create;
  Text := aText;
end;


function TFPgtkItem.GetText : string;
begin
  if assigned (FLabel) then
    result := FLabel.Text
  else
    result := '';
end;

procedure TFPgtkItem.SetText (TheValue:string);
begin
  if assigned (FLabel) then
    FLabel.Text := TheValue
  else
    if TheValue <> '' then
      CreateLabel (TheValue);
end;

procedure TFPgtkItem.LabelCreated;
begin
end;

 { TFPgtkItemGroup }


function TFPgtkItemGroup.GetItem (index:integer) : TFPgtkItem;
begin
  result := TFPgtkItem (inherited items[index]);
end;

procedure TFPgtkItemGroup.SetItem (index:integer; TheValue:TFPgtkItem);
begin
  inherited items[index] := TheValue;
end;

procedure TFPgtkItemGroup.FillFromList (aList:TStrings);
var r : integer;
    i : TFPgtkItem;
begin
  BeginUpdate;
  for r := 0 to aList.count-1 do
    begin
    i := FItemClass.CreateWithLabel (aList[r]);
    add (i);
    i.Show;
    end;
  EndUpdate;
end;

procedure TFPgtkItemGroup.FillFromCommaText (aList:string);
var l : TStrings;
begin
  l := TStringList.Create;
  try
    l.commatext := aList;
    FillFromList (l);
  finally
    l.Free;
  end;
end;

procedure TFPgtkItemGroup.FillFromArray (aList:array of string);
var r : integer;
    l : TStrings;
begin
  l := TStringlist.Create;
  try
    for r := low (aList) to high(aList) do
      l.Add (aList[r]);
    FillFromList (l);
  finally
    l.Free;
  end;
end;

procedure TFPgtkItemGroup.SignalConnect (Signal:string; proc:TFPgtkSignalFunction; data:pointer);
var r : integer;
begin
  if assigned (Proc) then
    for r := 0 to count-1 do
      Items[r].SignalConnect (Signal, proc, data);
end;

constructor TFPgtkItemGroup.create (AnItemClass:TFPgtkItemClass);
begin
  inherited create;
  FItemClass := AnItemClass;
end;


function TFPgtkItemGroup.AddTextItem (aText:string) : TFPgtkItem;
begin
  result := FItemClass.CreateWithLabel (aText);
  Add (result);
  result.Show;
end;

 { TFPgtkMenuItem }

function TFPgtkMenuItem.TheGtkObject : PGtkMenuItem;
begin
  result := PgtkMenuItem(FGtkObject);
end;

procedure TFPgtkMenuItem.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_menu_item_new);
end;


function TFPgtkMenuItem.ConnectActivate (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgActivate, proc, data);
end;

function TFPgtkMenuItem.ConnectAfterActivate (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgActivate, proc, data);
end;

function TFPgtkMenuItem.ConnectActivateItem (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgActivateItem, proc, data);
end;

function TFPgtkMenuItem.ConnectAfterActivateItem (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgActivateItem, proc, data);
end;

procedure TFPgtkMenuItem.Activate;
begin
  gtk_menu_item_activate (TheGtkObject);
end;

procedure TFPgtkMenuItem.SetSubMenu (aSubMenu:TFPgtkWidget);
begin
  gtk_menu_item_Set_submenu (TheGtkObject, PGtkwidget(ConvertToGtkObject(aSubMenu)));
end;

procedure TFPgtkMenuItem.RemoveSubMenu;
begin
  gtk_menu_item_remove_submenu (TheGtkObject);
end;

procedure TFPgtkMenuItem.Configure (ShowToggleIndicator:boolean; ShowSubmenuIndicator:boolean);
begin
  gtk_menu_item_configure (TheGtkObject, ord(ShowToggleIndicator), ord(ShowSubmenuIndicator));
end;

procedure TFPgtkMenuItem.RightJustify;
begin
  gtk_menu_item_right_justify (TheGtkObject);
end;

function TFPgtkMenuItem.GetPlacement : TGtkSubmenuPlacement;
begin
  result := TGtkSubmenuPlacement(submenu_placement(TheGtkObject^));
end;

procedure TFPgtkMenuItem.SetPlacement (TheValue:TGtkSubmenuPlacement);
begin
  gtk_menu_item_set_placement(TheGtkObject,TheValue);
end;

function TFPgtkMenuItem.GetToggleIndicator : boolean;
begin
  result := boolean(gtk.show_toggle_indicator(TheGtkObject^));
end;

procedure TFPgtkMenuItem.SetToggleIndicator (TheValue:boolean);
begin
  Configure (TheValue, SubMenuIndicator);
end;

function TFPgtkMenuItem.GetSubMenuIndicator : boolean;
begin
  result := boolean(gtk.show_submenu_indicator(TheGtkObject^));
end;

procedure TFPgtkMenuItem.SetSubMenuIndicator (TheValue:boolean);
begin
  configure (ToggleIndicator, TheValue);
end;

function TFPgtkMenuItem.GetJustifyRight : boolean;
begin
  result := boolean(gtk.right_justify(TheGtkObject^));
end;

procedure TFPgtkMenuItem.SetJustifyRight (TheValue:boolean);
begin
  gtk.Set_right_justify(TheGtkObject^,guint(TheValue))
end;

function TFPgtkMenuItem.GetSubMenu : TFPgtkMenuShell;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.submenu),tfpgtkmenushell) as tfpgtkmenushell;
end;

procedure TFPgtkMenuItem.SetPropSubMenu (TheValue:TFPgtkMenuShell);
begin
  SetSubMenu (TheValue);
end;

function TFPgtkMenuItem.LabelClass : TFPgtkLabelClass;
begin
  result := TFPgtkAccelLabel;
end;

procedure TFPgtkMenuItem.LabelCreated;
begin
  with (TheLabel as TFPgtkAccelLabel) do
    AccelWidget := Self;
end;

 { TFPgtkCheckMenuItem }

function TFPgtkCheckMenuItem.TheGtkObject : PGtkCheckMenuItem;
begin
  result := PgtkCheckMenuItem(FGtkObject);
end;

procedure TFPgtkCheckMenuItem.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_check_menu_item_new);
end;


function TFPgtkCheckMenuItem.ConnectToggled (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgToggled, proc, data);
end;

function TFPgtkCheckMenuItem.ConnectAfterToggled (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgToggled, proc, data);
end;

procedure TFPgtkCheckMenuItem.Toggled;
begin
  gtk_check_menu_item_toggled (TheGtkObject);
end;

function TFPgtkCheckMenuItem.GetActive : boolean;
begin
  result := boolean(gtk.active(TheGtkObject^));
end;

procedure TFPgtkCheckMenuItem.SetActive (TheValue:boolean);
begin
  gtk_check_menu_item_set_active(TheGtkObject,TheValue);
end;

function TFPgtkCheckMenuItem.GetShowToggle : boolean;
begin
  result := boolean(gtk.always_show_toggle(TheGtkObject^));
end;

procedure TFPgtkCheckMenuItem.SetShowToggle (TheValue:boolean);
begin
  gtk_check_menu_item_set_show_toggle(TheGtkObject,TheValue);
end;

 { TFPgtkRadioMenuItem }

function TFPgtkRadioMenuItem.TheGtkObject : PGtkRadioMenuItem;
begin
  result := PgtkRadioMenuItem(FGtkObject);
end;


procedure TFPgtkRadioMenuItem.CreateGtkObject;
begin
  if not assigned(FGroup) then
    FGroup := TFPgtkRadioMenuGroup.Create;
  TheGtkWidget := gtk_radio_menu_item_new (FGroup.GtkSList);
  FGroup.GtkSList := gtk_radio_menu_item_group (TheGtkObject);
end;

constructor TFPgtkRadioMenuItem.Create (AGroup:TFPgtkRadioMenuGroup);
begin
  FGroup := AGroup;
  inherited create;
end;


constructor TFPgtkRadioMenuItem.CreateWithLabel (Agroup:TFPgtkRadioMenuGroup; aText:string);
begin
  FGroup := Agroup;
  inherited CreateWithLabel (aText);
end;


 { TFPgtkRadioMenuGroup }


function TFPgtkRadioMenuGroup.GetItem (index:integer) : TFPgtkRadioMenuItem;
begin
  result := TFPgtkRadioMenuItem(Inherited items[index]);
end;

procedure TFPgtkRadioMenuGroup.SetItem (index:integer; TheValue:TFPgtkRadioMenuItem);
begin
  inherited items[index] := TheValue;
end;

function TFPgtkRadioMenuGroup.ActiveMenuText : string;
begin
  result := ActiveMenu.Text;
end;

function TFPgtkRadioMenuGroup.ActiveMenuIndex : integer;
begin
  Result := pred(count);
  while (Result >= 0) and (not items[Result].Active) do
    dec (Result);
end;

function TFPgtkRadioMenuGroup.ActiveMenu : TFPgtkRadioMenuItem;
var r : integer;
begin
  r := ActiveMenuIndex;
  if r >= 0 then
    result := items[r]
  else
    result := nil;
end;

constructor TFPgtkRadioMenuGroup.create;
begin
  inherited create (TFPgtkRadioMenuItem);
end;


 { TFPgtkTearOffMenuItem }

function TFPgtkTearOffMenuItem.TheGtkObject : PGtkTearOffMenuItem;
begin
  result := PgtkTearOffMenuItem(FGtkObject);
end;

procedure TFPgtkTearOffMenuItem.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_tearoff_menu_item_new);
end;


 { TFPgtkListItem }

function TFPgtkListItem.TheGtkObject : PGtkListItem;
begin
  result := PgtkListItem(FGtkObject);
end;

procedure TFPgtkListItem.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_list_item_new);
end;


procedure ScrollSignalproc (Sender:PGtkobject; ScrollType:TgtkScrollType; position:gfloat; data:pointer); cdecl;
var p : TFPgtkScrollSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkScrollSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, ScrollType, position, TheData)
  end;
end;

function TFPgtkListItem.ScrollSignalConnect (signal:string; proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@ScrollSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkListItem.ScrollSignalConnectAfter (signal:string; proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@ScrollSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure ScrollBooleanSignalproc (Sender:PGtkobject; ScrolType:TgtkScrollType; Position:gfloat; AutoStartSelection:boolean; data:pointer); cdecl;
var p : TFPgtkScrollBooleanSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkScrollBooleanSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, ScrolType, Position, AutoStartSelection, TheData)
  end;
end;

function TFPgtkListItem.ScrollBooleanSignalConnect (signal:string; proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@ScrollBooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkListItem.ScrollBooleanSignalConnectAfter (signal:string; proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@ScrollBooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkListItem.ConnectToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgToggleFocusRow, proc, data);
end;

function TFPgtkListItem.ConnectAfterToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgToggleFocusRow, proc, data);
end;

function TFPgtkListItem.ConnectSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgSelectAll, proc, data);
end;

function TFPgtkListItem.ConnectAfterSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgSelectAll, proc, data);
end;

function TFPgtkListItem.ConnectUnselectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgUnselectAll, proc, data);
end;

function TFPgtkListItem.ConnectAfterUnselectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgUnselectAll, proc, data);
end;

function TFPgtkListItem.ConnectUndoSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgUndoSelection, proc, data);
end;

function TFPgtkListItem.ConnectAfterUndoSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgUndoSelection, proc, data);
end;

function TFPgtkListItem.ConnectStartSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgStartSelection, proc, data);
end;

function TFPgtkListItem.ConnectAfterStartSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgStartSelection, proc, data);
end;

function TFPgtkListItem.ConnectEndSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgEndSelection, proc, data);
end;

function TFPgtkListItem.ConnectAfterEndSelection (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgEndSelection, proc, data);
end;

function TFPgtkListItem.ConnectToggleAddMode (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgToggleAddMode, proc, data);
end;

function TFPgtkListItem.ConnectAfterToggleAddMode (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgToggleAddMode, proc, data);
end;

function TFPgtkListItem.ConnectExtendSelection (proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := ScrollBooleanSignalConnect (sgExtendSelection, proc, data);
end;

function TFPgtkListItem.ConnectAfterExtendSelection (proc:TFPgtkScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := ScrollBooleanSignalConnectAfter (sgExtendSelection, proc, data);
end;

function TFPgtkListItem.ConnectScrollVertical (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := ScrollSignalConnect (sgScrollVertical, proc, data);
end;

function TFPgtkListItem.ConnectAfterScrollVertical (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := ScrollSignalConnectAfter (sgScrollVertical, proc, data);
end;

function TFPgtkListItem.ConnectScrollHorizontal (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := ScrollSignalConnect (sgScrollHorizontal, proc, data);
end;

function TFPgtkListItem.ConnectAfterScrollHorizontal (proc:TFPgtkScrollSignalFunction; data:pointer) : guint;
begin
  result := ScrollSignalConnectAfter (sgScrollHorizontal, proc, data);
end;

procedure TFPgtkListItem.Select;
begin
  gtk_list_item_select (TheGtkObject);
end;

procedure TFPgtkListItem.Deselect;
begin
  gtk_list_item_deselect (TheGtkObject);
end;

 { TFPgtkListItemGroup }


constructor TFPgtkListItemGroup.create;
begin
  inherited create (TFPgtkListItem);
  ManageLists := false;
end;


 { TFPgtkTreeItem }

function TFPgtkTreeItem.TheGtkObject : PGtkTreeItem;
begin
  result := PgtkTreeItem(FGtkObject);
end;

procedure TFPgtkTreeItem.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_tree_item_new);
end;


function TFPgtkTreeItem.GetSubTree : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(gtk_tree_item_subtree(TheGtkObject)),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkTreeItem.SetSubTree (TheValue:TFPgtkWidget);
begin
  if assigned(TheValue) then
    gtk_tree_item_set_subtree (TheGtkObject, ConvertToGtkWidget(TheValue))
  else
    gtk_tree_item_remove_subtree (TheGtkObject);
end;

function TFPgtkTreeItem.GetPixPlus : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.plus_pix_widget),tfpgtkwidget) as tfpgtkwidget;
end;

function TFPgtkTreeItem.GetPixMinus : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.minus_pix_widget),tfpgtkwidget) as tfpgtkwidget;
end;

function TFPgtkTreeItem.GetExpanded : boolean;
begin
  result := boolean(gtk.expanded(TheGtkObject^));
end;

procedure TFPgtkTreeItem.SetExpanded (TheValue:boolean);
begin
  if TheValue then
    Expand
  else
    collapse;
end;

procedure TFPgtkTreeItem.Select;
begin
  gtk_tree_item_select (TheGtkObject);
end;

procedure TFPgtkTreeItem.Deselect;
begin
  gtk_tree_item_deselect (TheGtkObject);
end;

procedure TFPgtkTreeItem.Expand;
begin
  gtk_tree_item_expand (TheGtkObject);
end;

procedure TFPgtkTreeItem.Collapse;
begin
  gtk_tree_item_collapse (TheGtkObject);
end;

function TFPgtkTreeItem.ConnectCollapse (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgCollapse, proc, data);
end;

function TFPgtkTreeItem.ConnectAfterCollapse (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgCollapse, proc, data);
end;

function TFPgtkTreeItem.ConnectExpand (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgExpand, proc, data);
end;

function TFPgtkTreeItem.ConnectAfterExpand (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgExpand, proc, data);
end;

 { TFPgtkWindow }

function TFPgtkWindow.TheGtkObject : PGtkWindow;
begin
  result := PgtkWindow(FGtkObject);
end;

procedure TFPgtkWindow.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_window_new (TheWindowType));
end;


constructor TFPgtkWindow.Create (AType:TGtkWindowType);
begin
  TheWindowType := AType;
  inherited Create;
  FAccelGroups := TList.Create;
  FMainLevel := NoMainLevel;
end;


destructor TFPgtkWindow.Destroy;
begin
  FAccelGroups.Free;
  inherited;
end;


function TFPgtkWindow.GetWindowType : TGtkWindowType;
begin
  result := TheGtkObject^.thetype;
end;

procedure TFPgtkWindow.SetWindowType (TheValue:TGtkWindowType);
begin
  TheGtkObject^.thetype := TheValue;
end;

function TFPgtkWindow.GetTitle : string;
begin
  result := TheGtkObject^.title;
end;

procedure TFPgtkWindow.SetTitle (TheValue:string);
begin
  gtk_window_set_title(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkWindow.GetModal : boolean;
begin
  result := boolean(gtk.modal(TheGtkObject^));
end;

procedure TFPgtkWindow.SetModal (TheValue:boolean);
begin
  gtk_window_set_modal(TheGtkObject,TheValue);
end;

procedure TFPgtkWindow.DoDialogResult (Action:integer; Sender:TFPgtkObject);
begin
  if assigned (OnDialogResult) then
    OnDialogResult (self, FDialogResult, Action, Sender);
end;

procedure TFPgtkWindow.DoDialogInit (InitData:pointer);
begin
  if assigned (OnDialogInit) then
    OnDialogInit (self, InitData);
  FDialogResult := InitData;
end;

procedure TFPgtkWindow.Close;
begin
  if (FDestroying = dsAlive) then
    gtk_widget_destroy (TheGtkWidget);
end;

procedure TFPgtkWindow.CloseWindow (Sender:TFPgtkObject; data:pointer);
begin
  Close;
end;

procedure TFPgtkWindow.CloseWithResult (Sender:TFPgtkObject; data:pointer);
begin
  ModalAction := pointertoint(data);
end;

procedure TFPgtkWindow.SetModalAction (TheValue:integer);
begin
  FModalAction := TheValue;
  if TheValue <> 0 then
    begin
    DoDialogResult (FModalAction, self);
    close;
    end;
end;

procedure TFPgtkWindow.ExecuteEnds (Sender:TFPgtkObject; data:pointer);
begin
  if gtk_main_level = FMainLevel then
    gtk_main_quit;
end;

function TFPgtkWindow.Execute (anOnDialogInit:DialogInitCallBack; anInitData:pointer; anOnDialogResult:DialogResultCallBack) : integer;
begin
  FModalAction := drNone;
  if assigned (anOnDialogInit) then
    OnDialogInit := anOnDialogInit;
  DoDialogInit (anInitData);
  if assigned (anOnDialogResult) then
    OnDialogResult := anOnDialogResult;
  ConnectDestroy (@ExecuteEnds, nil);
  Modal := True;
  Show;
  FMainLevel := gtk_main_level + 1;
  try
    gtk_main;
    result := FModalAction;
  finally
    FMainLevel := NoMainLevel;
  end;
end;

function TFPgtkWindow.ConnectSetFocus (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgSetFocus, proc, data);
end;

function TFPgtkWindow.ConnectAfterSetFocus (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgSetFocus, proc, data);
end;

procedure TFPgtkWindow.SetTransientFor (aParent:TFPgtkWindow);
begin
  gtk_window_set_transient_for (TheGtkObject, PGtkwindow(ConvertToGtkObject(aParent)));
end;

procedure TFPgtkWindow.DefaultWidget (Widget:TFPgtkWidget);
begin
  gtk_window_set_default (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)));
end;

procedure TFPgtkWindow.FocusedWidget (NewFocus:TFPgtkWidget);
begin
  gtk_window_set_focus (TheGtkObject, PGtkwidget(ConvertToGtkObject(NewFocus)));
end;

function TFPgtkWindow.GetUserSizable : boolean;
begin
  result := (allow_grow(TheGtkObject^)=1) and (auto_shrink(TheGtkObject^)=0);
end;

procedure TFPgtkWindow.SetUserSizable (TheValue:boolean);
begin
  if TheValue then
    gtk_window_set_policy (TheGtkObject, gint(FALSE), gint(TRUE), gint(FALSE))
  else
    gtk_window_set_policy (TheGtkObject, gint(FALSE), gint(FALSE), gint(TRUE));
end;

procedure TFPgtkWindow.ActivateFocus;
begin
  gtk_window_activate_focus (TheGtkObject);
end;

procedure TFPgtkWindow.ActivateDefault;
begin
  gtk_window_activate_default (TheGtkObject);
end;

procedure TFPgtkWindow.SetDefaultSize (Width:gint; Height:gint);
begin
  gtk_window_set_default_size (TheGtkObject, Width, Height);
end;

function TFPgtkWindow.GetPosition : TGtkWindowPosition;
begin
  result := TGtkWindowPosition (gtk.position (TheGtkObject^));
end;

procedure TFPgtkWindow.SetPosition (TheValue:TGtkWindowPosition);
begin
  gtk_window_set_position(TheGtkObject,TheValue);
end;

function TFPgtkWindow.GetAccelGroups (ID:integer) : PGtkAccelGroup;
begin
  result := FAccelGroups[ID];
  if result = nil then
    result := FAccelGroups[-1];
end;

function TFPgtkWindow.AccelGroupNew : integer;
var ag : Pgtkaccelgroup;
begin
  result := FAccelGroups.Count;
  ag := gtk_accel_group_new;
  FAccelGroups.Add (ag);
  gtk_window_add_accel_group (TheGtkObject, ag);
end;

procedure TFPgtkWindow.AccelGroupDelete (ID:integer);
begin
  gtk_accel_group_detach (FAccelGroups[ID], FGtkObject);
  FAccelGroups[ID] := nil;
end;

procedure TFPgtkWindow.AcceleratorAdd (AG:integer; aWidget:TFPgtkWidget; aSignal:string; Key:guint; Mods:TGdkModifierType; acFlags:TGtkAccelFlags); Overload;
begin
  gtk_widget_add_accelerator (ConvertToGtkWidget(aWidget), pgchar(aSignal),
        AccelGroups[AG], Key, Mods, acFlags);
end;

procedure AcceleratorAdd (AG:PGtkAccelGroup; aWidget:TFPgtkWidget; aSignal:string; Key:guint; Mods:TGdkModifierType; Flags:TGtkAccelFlags);
begin
  gtk_widget_add_accelerator (ConvertToGtkWidget(aWidget), pgchar(aSignal),
        AG, Key, Mods, Flags);
end;


procedure TFPgtkWindow.AcceleratorRemove (AG:integer; aWidget:TFPgtkWidget; Key:guint; Mods:TGdkModifierType); Overload;
begin
  gtk_widget_remove_accelerator (ConvertToGtkWidget(aWidget), AccelGroups[AG], Key, Mods);
end;

procedure AcceleratorRemove (AG:PGtkAccelGroup; aWidget:TFPgtkWidget; Key:guint; Mods:TGdkModifierType); Overload;
begin
  gtk_widget_remove_accelerator (ConvertToGtkWidget(aWidget), AG, Key, Mods);
end;


procedure TFPgtkWindow.AccelGroupLock (AG:integer);
begin
  gtk_accel_group_lock (AccelGroups[AG]);
end;

procedure AccelGroupLock (AG:PGtkAccelGroup);
begin
  gtk_accel_group_lock (AG);
end;


procedure TFPgtkWindow.AccelGroupUnlock (AG:integer);
begin
  gtk_accel_group_unlock (AccelGroups[AG]);
end;

procedure AccelGroupUnlock (AG:PGtkAccelGroup);
begin
  gtk_accel_group_unlock (AG);
end;


function AccelKeyName (Key:guint; Mods:TGdkModifierType) : string;
begin
  result := string (gtk_accelerator_name(Key, Mods));
end;


procedure AccelKeyParse (AccelName:string; var Key:guint; var Mods:TGdkModifierType);
var k : guint;
    m : TGdkModifierType;
begin
  gtk_accelerator_parse (pgchar(AccelName), @k, @m);
  Key := k;
  Mods := m;
end;


procedure TFPgtkWindow.AccelGroupActivate (AG:integer; Key:guint; Mods:TGdkModifierType);
begin
  gtk_accel_group_activate (AccelGroups[AG], Key, Mods);
end;

procedure AccelGroupActivate (AG:PGtkAccelGroup; Key:guint; Mods:TGdkModifierType);
begin
  gtk_accel_group_activate (AG, Key, Mods);
end;


 { TFPgtkColorSelectionDialog }

function TFPgtkColorSelectionDialog.TheGtkObject : PGtkColorSelectionDialog;
begin
  result := PgtkColorSelectionDialog(FGtkObject);
end;

procedure TFPgtkColorSelectionDialog.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_color_selection_dialog_new (''));
end;


function TFPgtkColorSelectionDialog.GetColorSel : TFPgtkColorSelection;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.Colorsel),tfpgtkcolorselection) as tfpgtkcolorselection;
end;

function TFPgtkColorSelectionDialog.GetButtonOK : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.ok_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkColorSelectionDialog.GetButtonCancel : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.cancel_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkColorSelectionDialog.GetButtonHelp : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.help_button),tfpgtkbutton) as tfpgtkbutton;
end;

 { TFPgtkDialog }

function TFPgtkDialog.TheGtkObject : PGtkDialog;
begin
  result := PgtkDialog(FGtkObject);
end;

procedure TFPgtkDialog.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_dialog_new);
end;


function TFPgtkDialog.GetActionArea : TFPgtkHBox;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.action_area),tfpgtkhbox) as tfpgtkhbox;
end;

function TFPgtkDialog.GetVBox : TFPgtkVBox;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.vbox),tfpgtkvbox) as tfpgtkvbox;
end;

constructor TFPgtkDialog.create;
begin
  inherited create (gtk_window_dialog);
end;


 { TFPgtkInputDialog }

function TFPgtkInputDialog.TheGtkObject : PGtkInputDialog;
begin
  result := PgtkInputDialog(FGtkObject);
end;

procedure TFPgtkInputDialog.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_input_dialog_new);
end;


function TFPgtkInputDialog.GetButtonClose : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.close_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkInputDialog.GetButtonSave : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.save_button),tfpgtkbutton) as tfpgtkbutton;
end;

procedure DeviceSignalproc (Sender:PGtkinputdialog; DeviceID:integer; Data:pointer); cdecl;
var p : TFPgtkDeviceSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkDeviceSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkInputDialog, DeviceID, TheData)
  end;
end;

function TFPgtkInputDialog.DeviceSignalConnect (signal:string; proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@DeviceSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkInputDialog.DeviceSignalConnectAfter (signal:string; proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@DeviceSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkInputDialog.ConnectEnableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := DeviceSignalConnect (sgEnableDevice, proc, data);
end;

function TFPgtkInputDialog.ConnectAfterEnableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := DeviceSignalConnectAfter (sgEnableDevice, proc, data);
end;

function TFPgtkInputDialog.ConnectDisableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := DeviceSignalConnect (sgDisableDevice, proc, data);
end;

function TFPgtkInputDialog.ConnectAfterDisableDevice (proc:TFPgtkDeviceSignalFunction; data:pointer) : guint;
begin
  result := DeviceSignalConnectAfter (sgDisableDevice, proc, data);
end;

 { TFPgtkFileSelection }

function TFPgtkFileSelection.TheGtkObject : PGtkFileSelection;
begin
  result := PgtkFileSelection(FGtkObject);
end;

procedure TFPgtkFileSelection.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_file_selection_new ('Select a file'));
end;


function TFPgtkFileSelection.GetFilename : string;
begin
  result := gtk_file_selection_get_filename(TheGtkObject);
end;

procedure TFPgtkFileSelection.SetFilename (TheValue:string);
begin
  gtk_file_selection_set_filename(TheGtkObject,Pgchar(TheValue));
end;

procedure TFPgtkFileSelection.Complete (Pattern:string);
begin
  gtk_file_selection_complete (TheGtkObject, ConvertToPgchar(Pattern));
end;

procedure TFPgtkFileSelection.ShowFileOpButtons;
begin
  gtk_file_selection_show_fileop_buttons (TheGtkObject);
end;

procedure TFPgtkFileSelection.HideFileOpButtons;
begin
  gtk_file_selection_hide_fileop_buttons (TheGtkObject);
end;

function TFPgtkFileSelection.GetDirList : TFPgtkCList;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.dir_list),tfpgtkclist) as tfpgtkclist;
end;

function TFPgtkFileSelection.GetFileList : TFPgtkCList;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.file_list),tfpgtkclist) as tfpgtkclist;
end;

function TFPgtkFileSelection.GetOkButton : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.ok_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFileSelection.GetCancelButton : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.cancel_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFileSelection.GetHistoryPulldown : TFPgtkOptionMenu;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.history_pulldown),tfpgtkoptionmenu) as tfpgtkoptionmenu;
end;

function TFPgtkFileSelection.GetFileOpDialog : TFPgtkDialog;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.fileop_dialog),tfpgtkdialog) as tfpgtkdialog;
end;

function TFPgtkFileSelection.GetFileOpCreateDir : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.fileop_c_dir),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFileSelection.GetFileOpDelFile : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.fileop_del_file),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFileSelection.GetFileOpRenFile : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.fileop_ren_file),tfpgtkbutton) as tfpgtkbutton;
end;

 { TFPgtkFontSelectionDialog }

function TFPgtkFontSelectionDialog.TheGtkObject : PGtkFontSelectionDialog;
begin
  result := PgtkFontSelectionDialog(FGtkObject);
end;

procedure TFPgtkFontSelectionDialog.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_font_selection_dialog_new (''));
end;


function TFPgtkFontSelectionDialog.GetFontSel : TFPgtkFontSelection;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.fontsel),tfpgtkfontselection) as tfpgtkfontselection;
end;

function TFPgtkFontSelectionDialog.GetButtonOk : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.ok_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFontSelectionDialog.GetButtonApply : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.apply_button),tfpgtkbutton) as tfpgtkbutton;
end;

function TFPgtkFontSelectionDialog.GetButtonCancel : TFPgtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.cancel_button),tfpgtkbutton) as tfpgtkbutton;
end;

 { TFPgtkEventBox }

function TFPgtkEventBox.TheGtkObject : PGtkEventBox;
begin
  result := PgtkEventBox(FGtkObject);
end;

procedure TFPgtkEventBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_event_box_new);
end;


 { TFPgtkHandleBox }

function TFPgtkHandleBox.TheGtkObject : PGtkHandleBox;
begin
  result := PgtkHandleBox(FGtkObject);
end;

procedure TFPgtkHandleBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_handle_box_new);
end;


function TFPgtkHandleBox.GetShadowType : TGtkShadowtype;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkHandleBox.SetShadowType (TheValue:TGtkShadowtype);
begin
  gtk_handle_box_set_shadow_type(TheGtkObject,TheValue);
end;

function TFPgtkHandleBox.GetHandlePosition : TGtkPositionType;
begin
  result := TGtkPositionType (gtk.handle_position(TheGtkObject^));
end;

procedure TFPgtkHandleBox.SetHandlePosition (TheValue:TGtkPositionType);
begin
  gtk_handle_box_set_handle_position(TheGtkObject,TheValue);
end;

function TFPgtkHandleBox.GetSnapEdge : TGtkPositionType;
begin
  result := TGtkPositionType (gtk.snap_edge(TheGtkObject^));
end;

procedure TFPgtkHandleBox.SetSnapEdge (TheValue:TGtkPositionType);
begin
  gtk_handle_box_set_snap_edge(TheGtkObject,TheValue);
end;

function TFPgtkHandleBox.GetChildDetached : boolean;
begin
  result := boolean(gtk.child_detached(TheGtkObject^));
end;

function TFPgtkHandleBox.ConnectChildAttached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgChildAttached, proc, data);
end;

function TFPgtkHandleBox.ConnectAfterChildAttached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgChildAttached, proc, data);
end;

function TFPgtkHandleBox.ConnectChildDetached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgChildDetached, proc, data);
end;

function TFPgtkHandleBox.ConnectAfterChildDetached (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgChildDetached, proc, data);
end;

 { TFPgtkScrolledWindow }

function TFPgtkScrolledWindow.TheGtkObject : PGtkScrolledWindow;
begin
  result := PgtkScrolledWindow(FGtkObject);
end;


procedure TFPgtkScrolledWindow.CreateGtkObject;
var h, v : PgtkAdjustment;
begin
  if assigned (FHScroll) then
    h := PGtkAdjustment(ConvertToGtkObject(FHScroll))
  else
    h := null;
  if assigned (FVScroll) then
    v := PGtkAdjustment(ConvertToGtkObject(FVScroll))
  else
    v := null;
  FGtkObject := PGtkObject (gtk_scrolled_window_new (h, v));
end;

constructor TFPgtkScrolledWindow.Create (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
begin
  FVScroll := vadj;
  FHScroll := hadj;
  inherited create;
  setusize (200,170);
end;


function TFPgtkScrolledWindow.GetHPolicy : TGtkPolicyType;
begin
  result := gtk.hscrollbar_policy(TheGtkObject^);
end;

procedure TFPgtkScrolledWindow.SetHPolicy (TheValue:TGtkPolicyType);
begin
  gtk_scrolled_window_set_policy (TheGtkObject, TheValue, VPolicy);
end;

function TFPgtkScrolledWindow.GetVPolicy : TGtkPolicyType;
begin
  result := gtk.vscrollbar_policy(TheGtkObject^);
end;

procedure TFPgtkScrolledWindow.SetVPolicy (TheValue:TGtkPolicyType);
begin
  gtk_scrolled_window_set_policy (TheGtkObject, HPolicy, TheValue);
end;

procedure TFPgtkScrolledWindow.SetPolicy (aHScrollBar:TGtkPolicyType; aVScrollbar:TGtkPolicyType); Overload;
begin
  gtk_scrolled_window_set_policy (TheGtkObject, aHScrollBar, aVScrollbar);
end;

procedure TFPgtkScrolledWindow.SetPolicy (aPolicy:TGtkPolicyType); Overload;
begin
  SetPolicy (aPolicy, aPolicy);
end;

function TFPgtkScrolledWindow.GetHAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_scrolled_window_get_hadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkScrolledWindow.SetHAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_scrolled_window_set_hadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkScrolledWindow.GetVAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_scrolled_window_get_vadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkScrolledWindow.SetVAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_scrolled_window_set_vadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

procedure TFPgtkScrolledWindow.AddWithViewport (aChild:TFPgtkWidget);
begin
  gtk_scrolled_window_add_with_viewport (TheGtkObject, ConvertToGtkWidget(aChild));
  TFPgtkViewport.createFromObject (PGtkObject(PGtkBin(TheGtkObject)^.child));
  aChild.Show;
end;

function TFPgtkScrolledWindow.GetPlacement : TGtkCornerType;
begin
  result := gtk.window_placement(TheGtkObject^);
end;

procedure TFPgtkScrolledWindow.SetPlacement (TheValue:TGtkCornerType);
begin
  gtk_scrolled_window_set_placement(TheGtkObject,TheValue);
end;

function TFPgtkScrolledWindow.GetHScrollbar : TFPgtkScrollbar;
var w : TFPgtkObject;
    gtkwidg : PGtkObject;
begin
  gtkwidg := PGtkObject(TheGtkObject^.hscrollbar);
  w := GetPascalInstance (gtkwidg);
  if assigned (w) then
    result := (w as TFPgtkScrollbar)
  else
    result := TFPgtkHScrollbar.CreateFromObject (gtkwidg);
end;

function TFPgtkScrolledWindow.GetVScrollbar : TFPgtkScrollbar;
var w : TFPgtkObject;
    gtkwidg : PGtkObject;
begin
  gtkwidg := PGtkObject(TheGtkObject^.vscrollbar);
  w := GetPascalInstance (gtkwidg);
  if assigned (w) then
    result := (w as TFPgtkScrollbar)
  else
    result := TFPgtkVScrollbar.CreateFromObject (gtkwidg);
end;

procedure TFPgtkScrolledWindow.UpdatePolicy (UpdPolicy:TGtkUpdateType);
var sb : TFpgtkScrollbar;
begin
  sb := HScrollbar;
  if assigned(sb) then
    sb.UpdatePolicy := UpdPolicy;
  sb := VScrollbar;
  if assigned(sb) then
    sb.UpdatePolicy := UpdPolicy;
end;

 { TFPgtkViewport }

function TFPgtkViewport.TheGtkObject : PGtkViewport;
begin
  result := PgtkViewport(FGtkObject);
end;


procedure TFPgtkViewport.CreateGtkObject;
var h, v : PgtkAdjustment;
begin
  if assigned (FHScroll) then
    h := PGtkAdjustment(ConvertToGtkObject(FHScroll))
  else
    h := null;
  if assigned (FVScroll) then
    v := PGtkAdjustment(ConvertToGtkObject(FVScroll))
  else
    v := null;
  FGtkObject := PGtkObject (gtk_scrolled_window_new (h, v));
end;

constructor TFPgtkViewport.Create (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
begin
  FVScroll := vadj;
  FHScroll := hadj;
  inherited create;
end;


function TFPgtkViewport.GetHAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_viewport_get_hadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkViewport.SetHAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_viewport_set_hadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkViewport.GetVAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_viewport_get_vadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkViewport.SetVAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_viewport_set_vadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkViewport.GetShadowType : TgtkShadowType;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkViewport.SetShadowType (TheValue:TgtkShadowType);
begin
  gtk_viewport_set_shadow_type(TheGtkObject,TheValue);
end;

 { TFPgtkBox }

function TFPgtkBox.TheGtkObject : PGtkBox;
begin
  result := PgtkBox(FGtkObject);
end;


function TFPgtkBox.GetHomogeneous : boolean;
begin
  result := boolean(gtk.homogeneous(TheGtkObject^));
end;

procedure TFPgtkBox.SetHomogeneous (TheValue:boolean);
begin
  gtk_Box_set_homogeneous(TheGtkObject,TheValue);
end;

function TFPgtkBox.GetSpacing : integer;
begin
  result := TheGtkObject^.spacing;
end;

procedure TFPgtkBox.SetSpacing (TheValue:integer);
begin
  gtk_Box_set_spacing(TheGtkObject,TheValue);
end;

procedure TFPgtkBox.ReorderChild (Widget:TFPgtkWidget; Position:integer);
begin
  gtk_Box_reorder_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), Position);
end;

procedure TFPgtkBox.GetChildPacking (Widget:TFPgtkWidget; var Expand:boolean; var Fill:boolean; var Padding:integer; var PackType:TGtkPackType);
var PT : PGtkPackType;
begin
  pt := @PackType;
  gtk_box_query_child_packing (TheGtkObject, ConvertToGtkWidget(Widget),
                               pgboolean(@expand), pgboolean(@fill), pguint(@padding), pt);
end;

procedure TFPgtkBox.SetChildPacking (Widget:TFPgtkWidget; Expand:boolean; Fill:boolean; Padding:integer; PackType:TGtkPackType);
begin
  gtk_Box_set_child_packing (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), Expand, Fill, Padding, PackType);
end;

procedure TFPgtkBox.PackStart (Widget:TFPgtkWidget); Overload;
begin
  gtk_box_pack_start_defaults (TheGtkObject, ConvertToGtkWidget(Widget));
  widget.Show;
end;

procedure TFPgtkBox.PackStart (Widget:TFPgtkWidget; IsVisible:boolean); Overload;
begin
  gtk_box_pack_start_defaults (TheGtkObject, ConvertToGtkWidget(Widget));
  if isvisible then
    widget.Show;
end;

procedure TFPgtkBox.PackStart (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer); Overload;
begin
  gtk_box_pack_start (TheGtkObject, ConvertToGtkWidget(Widget), expand, fill, padding);
  widget.Show;
end;

procedure TFPgtkBox.PackStart (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer; IsVisible:boolean); Overload;
begin
  gtk_box_pack_start (TheGtkObject, ConvertToGtkWidget(Widget), expand, fill, padding);
  if isvisible then
    widget.Show;
end;

procedure TFPgtkBox.PackEnd (Widget:TFPgtkWidget); Overload;
begin
  gtk_box_pack_end_defaults (TheGtkObject, ConvertToGtkWidget(Widget));
  widget.Show;
end;

procedure TFPgtkBox.PackEnd (Widget:TFPgtkWidget; IsVisible:boolean); Overload;
begin
  gtk_box_pack_end_defaults (TheGtkObject, ConvertToGtkWidget(Widget));
  if isvisible then
    widget.Show;
end;

procedure TFPgtkBox.PackEnd (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer); Overload;
begin
  gtk_box_pack_end (TheGtkObject, ConvertToGtkWidget(Widget), expand, fill, padding);
  widget.Show;
end;

procedure TFPgtkBox.PackEnd (Widget:TFPgtkWidget; expand:boolean; fill:boolean; padding:integer; IsVisible:boolean); Overload;
begin
  gtk_box_pack_end (TheGtkObject, ConvertToGtkWidget(Widget), expand, fill, padding);
  if isvisible then
    widget.Show;
end;

 { TFPgtkButtonBox }

function TFPgtkButtonBox.TheGtkObject : PGtkButtonBox;
begin
  result := PgtkButtonBox(FGtkObject);
end;


procedure SetButtonBoxDefaultSize (aMinWidth:integer; aMinHeight:integer);
begin
  gtk_button_box_set_child_size_default (aMinWidth, aMinheight);
end;


procedure GetButtonBoxDefaultSize (var aMinWidth:integer; var aMinHeight:integer);
begin
  gtk_button_box_get_child_size_default (@aMinWidth, @aMinheight);
end;


procedure SetButtonBoxDefaultPadding (aIPadX:integer; aIPadY:integer);
begin
  gtk_button_box_set_child_size_default (aIPadX, aIPadY);
end;


procedure GetButtonBoxDefaultPadding (var aIPadX:integer; var aIPadY:integer);
begin
  gtk_button_box_get_child_size_default (@aIPadX, @aIPadY);
end;


function TFPgtkButtonBox.GetSpacing : integer;
begin
  result := gtk_button_box_get_spacing(TheGtkObject);
end;

procedure TFPgtkButtonBox.SetSpacing (TheValue:integer);
begin
  gtk_button_box_set_spacing(TheGtkObject,TheValue);
end;

function TFPgtkButtonBox.GetLayout : TGtkButtonBoxStyle;
begin
  result := gtk_button_box_get_layout(TheGtkObject);
end;

procedure TFPgtkButtonBox.SetLayout (TheValue:TGtkButtonBoxStyle);
begin
  gtk_button_box_set_layout(TheGtkObject,TheValue);
end;

function TFPgtkButtonBox.GetMinWidth : integer;
var x, y : integer;
begin
  gtk_button_box_get_child_size (TheGtkObject, @x, @y);
  result := x;
end;

procedure TFPgtkButtonBox.SetMinWidth (TheValue:integer);
begin
  gtk_button_box_set_child_size (TheGtkObject, TheValue, ChildMinHeight);
end;

function TFPgtkButtonBox.GetMinHeight : integer;
var x, y : integer;
begin
  gtk_button_box_get_child_size (TheGtkObject, @x, @y);
  result := y;
end;

procedure TFPgtkButtonBox.SetMinHeight (TheValue:integer);
begin
  gtk_button_box_set_child_size (TheGtkObject, ChildMinWidth, TheValue);
end;

function TFPgtkButtonBox.GetChildPadX : integer;
var x, y : integer;
begin
  gtk_button_box_get_child_ipadding (TheGtkObject, @x, @y);
  result := x;
end;

procedure TFPgtkButtonBox.SetChildPadX (TheValue:integer);
begin
  gtk_button_box_set_child_ipadding (TheGtkObject, TheValue, ChildPadY);
end;

function TFPgtkButtonBox.GetChildPadY : integer;
var x, y : integer;
begin
  gtk_button_box_get_child_ipadding (TheGtkObject, @x, @y);
  result := y;
end;

procedure TFPgtkButtonBox.SetChildPadY (TheValue:integer);
begin
  gtk_button_box_set_child_ipadding (TheGtkObject, ChildPadX, TheValue);
end;

 { TFPgtkHButtonBox }

function TFPgtkHButtonBox.TheGtkObject : PGtkHButtonBox;
begin
  result := PgtkHButtonBox(FGtkObject);
end;

procedure TFPgtkHButtonBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_hbutton_box_new);
end;


 { TFPgtkVButtonBox }

function TFPgtkVButtonBox.TheGtkObject : PGtkVButtonBox;
begin
  result := PgtkVButtonBox(FGtkObject);
end;

procedure TFPgtkVButtonBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_vbutton_box_new);
end;


 { TFPgtkVBox }

function TFPgtkVBox.TheGtkObject : PGtkVBox;
begin
  result := PgtkVBox(FGtkObject);
end;

procedure TFPgtkVBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_VBox_new (False, 1));
end;


 { TFPgtkColorSelection }

function TFPgtkColorSelection.TheGtkObject : PGtkColorSelection;
begin
  result := PgtkColorSelection(FGtkObject);
end;

procedure TFPgtkColorSelection.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_color_selection_new);
end;


function TFPgtkColorSelection.GetUpdatePolicy : TGtkUpdateType;
begin
  result := TheGtkObject^.policy;
end;

procedure TFPgtkColorSelection.SetUpdatePolicy (TheValue:TGtkUpdateType);
begin
  gtk_color_selection_set_update_policy(TheGtkObject,TheValue);
end;

function TFPgtkColorSelection.GetColor : double;
var c : double;
begin
  gtk_color_selection_get_color (TheGtkObject, @c);
  result := c;
end;

procedure TFPgtkColorSelection.SetColor (TheValue:double);
begin
  gtk_color_selection_set_color (TheGtkObject, @TheValue);
end;

function TFPgtkColorSelection.GetUseOpacity : longbool;
begin
  result := longbool(TheGtkObject^.use_opacity);
end;

procedure TFPgtkColorSelection.SetUseOpacity (TheValue:longbool);
begin
  gtk_color_selection_set_opacity(TheGtkObject,gint(TheValue));
end;

 { TFPgtkGammaCurve }

function TFPgtkGammaCurve.TheGtkObject : PGtkGammaCurve;
begin
  result := PgtkGammaCurve(FGtkObject);
end;

procedure TFPgtkGammaCurve.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_gamma_curve_new);
end;


 { TFPgtkHBox }

function TFPgtkHBox.TheGtkObject : PGtkHBox;
begin
  result := PgtkHBox(FGtkObject);
end;

procedure TFPgtkHBox.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_HBox_new (False, 1));
end;


 { TFPgtkCombo }

function TFPgtkCombo.TheGtkObject : PGtkCombo;
begin
  result := PgtkCombo(FGtkObject);
end;

procedure TFPgtkCombo.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_combo_new);
end;


function TFPgtkCombo.GetEntry : TFPgtkEntry;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.entry), TFPgtkEntry) as tfpgtkentry;
end;

function TFPgtkCombo.GetList : TFPgtkList;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.list), TFPgtkList) as TFPgtkList;
end;

function TFPgtkCombo.GetButton : TFpGtkButton;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.button), TFPgtkButton) as TFPgtkButton;
end;

function TFPgtkCombo.GetValueInList : longbool;
begin
  result := longbool(gtk.value_in_list(TheGtkObject^));
end;

procedure TFPgtkCombo.SetValueInListProp (TheValue:longbool);
begin
  gtk_combo_set_value_in_list (TheGtkObject, gint(TheValue), gint(OkIfEmpty));
end;

function TFPgtkCombo.GetOkIfEmpty : longbool;
begin
  result := longbool(gtk.ok_if_empty(TheGtkObject^));
end;

procedure TFPgtkCombo.SetOkIfEmpty (TheValue:longbool);
begin
  gtk_combo_set_value_in_list (TheGtkObject, gint(ValueInList), gint(TheValue));
end;

function TFPgtkCombo.GetUseArrows : longbool;
begin
  result := longbool(gtk.use_arrows(TheGtkObject^));
end;

procedure TFPgtkCombo.SetUseArrows (TheValue:longbool);
begin
  gtk_combo_set_use_arrows(TheGtkObject,gint(TheValue));
end;

function TFPgtkCombo.GetUseArrowsAlways : longbool;
begin
  result := longbool(gtk.use_arrows_always(TheGtkObject^));
end;

procedure TFPgtkCombo.SetUseArrowsAlways (TheValue:longbool);
begin
  gtk_combo_set_use_arrows_always(TheGtkObject,gint(TheValue));
end;

function TFPgtkCombo.GetCaseSensitive : longbool;
begin
  result := longbool(gtk.case_sensitive(TheGtkObject^));
end;

procedure TFPgtkCombo.SetCaseSensitive (TheValue:longbool);
begin
  gtk_combo_set_case_sensitive(TheGtkObject,gint(TheValue));
end;

procedure TFPgtkCombo.SetItemString (Item:TFPgtkItem; ItemValue:string);
begin
  gtk_combo_set_item_string (TheGtkObject, PGtkitem(ConvertToGtkObject(Item)), ConvertToPgchar(ItemValue));
end;

procedure TFPgtkCombo.DisableActivate;
begin
  gtk_combo_disable_activate (TheGtkObject);
end;

procedure TFPgtkCombo.SetValueInList (Val:longbool; IsOkIfEmpty:longbool);
begin
  gtk_combo_set_value_in_list (TheGtkObject, gint(Val), gint(IsOkIfEmpty));
end;

 { TFPgtkStatusbar }

function TFPgtkStatusbar.TheGtkObject : PGtkStatusbar;
begin
  result := PgtkStatusbar(FGtkObject);
end;

procedure TFPgtkStatusbar.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_statusbar_new);
end;


function TFPgtkStatusbar.GetContextID (ContextDescr:string) : integer;
begin
  result := gtk_statusbar_get_context_id (TheGtkObject, ConvertToPgchar(ContextDescr));
end;

function TFPgtkStatusbar.Push (contextID:integer; text:string) : integer;
begin
  result := gtk_statusbar_push (TheGtkObject, contextID, ConvertToPgchar(text));
end;

procedure TFPgtkStatusbar.Pop (contextID:integer);
begin
  gtk_statusbar_pop (TheGtkObject, contextID);
end;

procedure TFPgtkStatusbar.Remove (contextID:integer; MessageID:integer);
begin
  gtk_statusbar_remove (TheGtkObject, contextID, MessageID);
end;

procedure StatusbarSignalproc (Sender:PGtkobject; contextID:integer; text:pgChar; data:pointer); cdecl;
var p : TFPgtkStatusbarSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkStatusbarSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, contextID, text, TheData)
  end;
end;

function TFPgtkStatusbar.StatusbarSignalConnect (signal:string; proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@StatusbarSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkStatusbar.StatusbarSignalConnectAfter (signal:string; proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@StatusbarSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkStatusbar.ConnectTextPopped (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := StatusbarSignalConnect (sgTextPopped, proc, data);
end;

function TFPgtkStatusbar.ConnectAfterTextPopped (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := StatusbarSignalConnectAfter (sgTextPopped, proc, data);
end;

function TFPgtkStatusbar.ConnectTextPushed (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := StatusbarSignalConnect (sgTextPushed, proc, data);
end;

function TFPgtkStatusbar.ConnectAfterTextPushed (proc:TFPgtkStatusbarSignalFunction; data:pointer) : guint;
begin
  result := StatusbarSignalConnectAfter (sgTextPushed, proc, data);
end;

 { TFPgtkCList }

function TFPgtkCList.TheGtkObject : PGtkCList;
begin
  result := PgtkCList(FGtkObject);
end;

procedure TFPgtkCList.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_clist_new (FColumnCount));
end;


constructor TFPgtkCList.Create (aColumnCount:integer);
begin
  FColumnCount := aColumnCount;
  inherited create;
end;


function TFPgtkCList.GetShadowType : TGtkShadowType;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkCList.SetShadowType (TheValue:TGtkShadowType);
begin
  gtk_clist_set_shadow_type(TheGtkObject,TheValue);
end;

function TFPgtkCList.GetSelectionMode : TGtkSelectionMode;
begin
  result := TheGtkObject^.selection_mode;
end;

procedure TFPgtkCList.SetSelectionMode (TheValue:TGtkSelectionMode);
begin
  gtk_clist_set_selection_mode(TheGtkObject,TheValue);
end;

procedure TFPgtkCList.Freeze;
begin
  gtk_clist_freeze (TheGtkObject);
end;

procedure TFPgtkCList.Thaw;
begin
  gtk_clist_thaw (TheGtkObject);
end;

procedure TFPgtkCList.ShowTitles;
begin
  gtk_clist_Column_titles_show (TheGtkObject);
end;

procedure TFPgtkCList.HideTitles;
begin
  gtk_clist_column_titles_hide (TheGtkObject);
end;

procedure TFPgtkCList.ActiveTitles;
begin
  gtk_clist_column_titles_active (TheGtkObject);
end;

procedure TFPgtkCList.PassiveTitles;
begin
  gtk_clist_column_titles_passive (TheGtkObject);
end;

procedure TFPgtkCList.ActiveTitle (column:integer);
begin
  gtk_clist_column_title_active (TheGtkObject, column);
end;

procedure TFPgtkCList.PassiveTitle (column:integer);
begin
  gtk_clist_column_title_passive (TheGtkObject, column);
end;

function TFPgtkCList.GetColumnTitle (column:integer) : string;
begin
  result := gtk_clist_get_column_title(TheGtkObject,column);
end;

procedure TFPgtkCList.SetColumnTitle (column:integer; TheValue:string);
begin
  gtk_clist_set_column_title(TheGtkObject,column,ConvertToPgchar(TheValue));
end;

function TFPgtkCList.GetColumnWidget (column:integer) : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(gtk_clist_get_column_widget(TheGtkObject,column)),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkCList.SetColumnWidget (column:integer; TheValue:TFPgtkWidget);
begin
  gtk_clist_set_column_widget(TheGtkObject,column,PGtkwidget(ConvertToGtkObject(TheValue)));
end;

procedure TFPgtkCList.SetColumnJustification (column:integer; justification:TGtkJustification);
begin
  gtk_clist_set_column_justification (TheGtkObject, column, justification);
end;

procedure TFPgtkCList.SetColumnVisibility (column:integer; aVisible:boolean);
begin
  gtk_clist_set_column_visibility (TheGtkObject, column, aVisible);
end;

procedure TFPgtkCList.SetColumnResizeable (column:integer; Resizeable:boolean);
begin
  gtk_clist_set_column_resizeable (TheGtkObject, column, Resizeable);
end;

procedure TFPgtkCList.SetColumnAutoResize (column:integer; autoResize:boolean);
begin
  gtk_clist_set_column_auto_resize (TheGtkObject, column, autoResize);
end;

function TFPgtkCList.OptimalColumnWidth (column:integer) : integer;
begin
  result := gtk_clist_optimal_column_width (TheGtkObject, column);
end;

procedure TFPgtkCList.SetColumnWidth (column:integer; width:integer);
begin
  gtk_clist_set_column_width (TheGtkObject, column, width);
end;

procedure TFPgtkCList.SetColumnMinWidth (column:integer; MinWidth:integer);
begin
  gtk_clist_set_column_min_width (TheGtkObject, column, MinWidth);
end;

procedure TFPgtkCList.SetColumnMaxWidth (column:integer; MaxWidth:integer);
begin
  gtk_clist_set_column_max_width (TheGtkObject, column, MaxWidth);
end;

function TFPgtkCList.AutoSizeColumns : integer;
begin
  result := gtk_clist_columns_autosize (TheGtkObject);
end;

procedure TFPgtkCList.ConfigureColumnWidth (column:integer; Width:integer; MinWidth:integer; MaxWidth:integer);
begin
  SetColumnWidth (column, Width);
  SetColumnMaxWidth (column, MaxWidth);
  SetColumnMinWidth (column, MinWidth);
end;

procedure TFPgtkCList.ConfigureColumn (column:integer; Justification:TGtkJustification; Visibility:boolean; Resizeable:boolean; AutoSize:boolean);
begin
  SetColumnJustification (column, Justification);
  SetColumnVisibility (column, Visibility);
  SetColumnResizeable (column, Resizeable);
  SetColumnAutoResize (column, AutoSize);
end;

procedure TFPgtkCList.SetRowHeight (height:integer);
begin
  gtk_clist_set_row_height (TheGtkObject, height);
end;

procedure TFPgtkCList.MoveTo (row:integer; column:integer; RowAlign:gfloat; ColAlign:gfloat);
begin
  gtk_clist_moveto (TheGtkObject, row, column, RowAlign, ColAlign);
end;

function TFPgtkCList.RowIsVisible (Row:integer) : TGtkVisibility;
begin
  result := gtk_clist_row_is_visible (TheGtkObject, Row);
end;

function TFPgtkCList.GetCellType (Row:integer; column:integer) : TGtkCellType;
begin
  result := gtk_clist_get_cell_type (TheGtkObject, Row, column);
end;

function TFPgtkCList.GetCellText (Row:integer; Column:integer) : string;
var s : pgchar;
    r : integer;
begin
  r := gtk_clist_get_text (TheGtkObject, row, column, @s);
  if (r = 0) then
    result := ''
  else
    result := strpas(s);
end;

procedure TFPgtkCList.SetCellText (Row:integer; Column:integer; TheValue:string);
begin
  gtk_clist_set_text(TheGtkObject,Row, Column,ConvertToPgchar(TheValue));
end;

procedure TFPgtkCList.SetPixmap (row:integer; column:integer; pixmap:PGdkPixmap; mask:PGdkBitmap);
begin
  gtk_clist_set_pixmap (TheGtkObject, row, column, pixmap, mask);
end;

procedure TFPgtkCList.GetPixmap (row:integer; column:integer; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
begin
  gtk_clist_get_pixmap (TheGtkObject, row, column, @pixmap, @mask);
end;

procedure TFPgtkCList.SetPixText (row:integer; column:integer; text:string; spacing:guint8; pixmap:PGdkPixmap; mask:PGdkBitmap);
begin
  gtk_clist_set_pixtext (TheGtkObject, row, column, ConvertToPgchar(text), spacing, pixmap, mask);
end;

procedure TFPgtkCList.GetPixText (row:integer; column:integer; var text:string; var aspacing:guint8; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
var r : integer;
    s : PPgchar;
begin
  s := nil;
  r := gtk_clist_get_pixtext (TheGtkObject, row, column, s, @aspacing, @pixmap, @mask);
  if r = 0 then
    begin
    text := '';
    pixmap := nil;
    mask := nil;
    end
  else
    text := string (s^);
end;

procedure TFPgtkCList.SetForeground (row:integer; color:PGdkColor);
begin
  gtk_clist_set_foreground (TheGtkObject, row, color);
end;

procedure TFPgtkCList.SetBackground (row:integer; color:PGdkColor);
begin
  gtk_clist_set_background (TheGtkObject, row, color);
end;

function TFPgtkCList.GetCellStyle (row:integer; column:integer) : PGtkStyle;
begin
  result := gtk_clist_get_cell_style(TheGtkObject,row, column);
end;

procedure TFPgtkCList.SetCellStyle (row:integer; column:integer; TheValue:PGtkStyle);
begin
  gtk_clist_set_cell_style(TheGtkObject,row, column,TheValue);
end;

function TFPgtkCList.GetRowStyle (row:integer) : PGtkStyle;
begin
  result := gtk_clist_get_row_style(TheGtkObject,row);
end;

procedure TFPgtkCList.SetRowStyle (row:integer; TheValue:PGtkStyle);
begin
  gtk_clist_set_row_style(TheGtkObject,row,TheValue);
end;

procedure TFPgtkCList.SetShift (row:integer; column:integer; vertical:integer; horizontal:integer);
begin
  gtk_clist_set_shift (TheGtkObject, row, column, vertical, horizontal);
end;

procedure TFPgtkCList.Remove (row:integer);
begin
  gtk_clist_remove (TheGtkObject, row);
end;

procedure TFPgtkCList.Prepend (Data:TStrings); Overload;
var ppdata : ppgchar;
begin
  ppdata := StringsToPPgchar (Data);
  gtk_clist_prepend (TheGtkObject, ppdata);
  freemem (ppdata, sizeof (pgchar) * data.count);
end;

procedure TFPgtkCList.Prepend (Text:string; separator:string); Overload;
var l : TStrings;
    s : string;
begin
  l := TStringList.Create;
  try
    if pos('"',separator) = 0 then
      s := stringreplace (Text, '"', '""', [rfReplaceAll]);
    if separator <> '' then
      s := stringreplace(Text, separator, '","', [rfReplaceAll]);
    l.CommaText := '"'+s+'"';
    Prepend (l);
  finally
    l.Free;
  end;
end;

procedure TFPgtkCList.Prepend (data:array of string); Overload;
var ppdata : ppgchar;
begin
  ppdata := ArrayToPPgchar (Data);
  gtk_clist_prepend (TheGtkObject, ppdata);
  freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
end;

Function TFPgtkCList.Append (data:TStrings) : Integer; Overload;
var ppdata : ppgchar;
begin
  ppdata := StringsToPPgchar (Data);
  Result:=gtk_clist_append (TheGtkObject, ppdata);
  freemem (ppdata, sizeof (pgchar) * data.count);
end;

Function TFPgtkCList.Append (Text:string; Separator:string) : Integer; Overload;
var l : TStrings;
    s : string;
begin
  l := TStringList.Create;
  try
    if pos('"',separator) = 0 then
      s := stringreplace (Text, '"', '""', [rfReplaceAll]);
    if separator <> '' then
      s := stringreplace(Text, separator, '","', [rfReplaceAll]);
    l.CommaText := '"' + s + '"';
    Result:=Append (l);
  finally
    l.Free;
  end;
end;

Function TFPgtkCList.Append (data:array of string) : Integer; Overload;
var ppdata : ppgchar;
begin
  ppdata := ArrayToPPgchar (Data);
  Result:=gtk_clist_append (TheGtkObject, ppdata);
  freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
end;

procedure TFPgtkCList.Insert (row:integer; data:TStrings); Overload;
var ppdata : ppgchar;
begin
  ppdata := StringsToPPgchar (Data);
  gtk_clist_insert (TheGtkObject, row, ppdata);
  freemem (ppdata, sizeof (pgchar) * data.count);
end;

procedure TFPgtkCList.Insert (row:integer; Text:string; Separator:string); Overload;
var l : TStrings;
    s : string;
begin
  l := TStringList.Create;
  try
    if pos('"',separator) = 0 then
      s := stringreplace (Text, '"', '""', [rfReplaceAll]);
    if separator <> '' then
      s := stringreplace(Text, separator, '","', [rfReplaceAll]);
    l.CommaText := '"' + s + '"';
    Insert (row, l);
  finally
    l.Free;
  end;
end;

procedure TFPgtkCList.Insert (row:integer; data:array of string); Overload;
var ppdata : ppgchar;
begin
  ppdata := ArrayToPPgchar (Data);
  gtk_clist_insert (TheGtkObject, row, ppdata);
  freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
end;

function TFPgtkCList.GetRowData (row:integer) : pointer;
begin
  result := gtk_clist_get_row_data(TheGtkObject,row);
end;

procedure TFPgtkCList.SetRowData (row:integer; TheValue:pointer);
begin
  gtk_clist_set_row_data(TheGtkObject,row,TheValue);
end;

function TFPgtkCList.FindRowFromData (data:pointer) : integer;
begin
  result := gtk_clist_find_row_from_data (TheGtkObject, data);
end;

procedure TFPgtkCList.SelectRow (row:integer; column:integer);
begin
  gtk_clist_select_row (TheGtkObject, row, column);
end;

procedure TFPgtkCList.UnselectRow (row:integer; column:integer);
begin
  gtk_clist_unselect_row (TheGtkObject, row, column);
end;

procedure TFPgtkCList.Clear;
begin
  gtk_clist_clear (TheGtkObject);
end;

procedure TFPgtkCList.SelectAll;
begin
  gtk_clist_select_all (TheGtkObject);
end;

procedure TFPgtkCList.UnselectAll;
begin
  gtk_clist_unselect_all (TheGtkObject);
end;

procedure TFPgtkCList.SwapRows (row1:integer; row2:integer);
begin
  gtk_clist_swap_rows (TheGtkObject, row1, row2);
end;

procedure TFPgtkCList.RowMove (sourceRow:integer; destRow:integer);
begin
  if sourceRow = DestRow then
    Exit;
  gtk_clist_row_move (TheGtkObject, sourceRow, destRow);
end;

procedure TFPgtkCList.Sort;
begin
  gtk_clist_sort (TheGtkObject);
end;

procedure TFPgtkCList.SetCompareFunc (TheValue:TGtkCListCompareFunc);
begin
  gtk_clist_set_Compare_func(TheGtkObject,TheValue);
end;

function TFPgtkCList.GetSortColumn : integer;
begin
  result := TheGtkObject^.sort_column;
end;

procedure TFPgtkCList.SetSortColumn (TheValue:integer);
begin
  gtk_clist_set_sort_column(TheGtkObject,TheValue);
end;

function TFPgtkCList.GetSetSortType : TGtkSortType;
begin
  result := TheGtkObject^.sort_type;
end;

procedure TFPgtkCList.SetSetSortType (TheValue:TGtkSortType);
begin
  gtk_clist_set_sort_type(TheGtkObject,TheValue);
end;

procedure TFPgtkCList.SetAutoSort (autoSort:boolean);
begin
  gtk_clist_set_auto_sort (TheGtkObject, autoSort);
end;

function TFPgtkCList.GetHAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_clist_get_hadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkCList.SetHAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_clist_set_hadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkCList.GetVAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_clist_get_vadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkCList.SetVAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_clist_set_vadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

procedure TFPgtkCList.SetReorderable (reorderable:boolean);
begin
  gtk_clist_set_reorderable (TheGtkObject, reorderable);
end;

function TFPgtkCList.Count : integer;
begin
  result := TheGtkObject^.rows;
end;

procedure CListScrollSignalproc (Sender:PGtkobject; ScrollType:TgtkScrollType; position:gfloat; data:pointer); cdecl;
var p : TFPgtkCListScrollSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkCListScrollSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, ScrollType, position, TheData)
  end;
end;

function TFPgtkCList.CListScrollSignalConnect (signal:string; proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@CListScrollSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.CListScrollSignalConnectAfter (signal:string; proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@CListScrollSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure CListScrollBooleanSignalproc (Sender:PGtkobject; ScrollType:TgtkScrollType; Position:gfloat; AutoStartSelection:boolean; data:pointer); cdecl;
var p : TFPgtkCListScrollBooleanSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkCListScrollBooleanSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, ScrollType, Position, AutoStartSelection, TheData)
  end;
end;

function TFPgtkCList.CListScrollBooleanSignalConnect (signal:string; proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@CListScrollBooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.CListScrollBooleanSignalConnectAfter (signal:string; proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@CListScrollBooleanSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure SelectRowSignalproc (Sender:PGtkobject; row:integer; column:integer; event:PGdkEventButton; data:pointer); cdecl;
var p : TFPgtkSelectRowSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkSelectRowSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, row, column, event, TheData)
  end;
end;

function TFPgtkCList.SelectRowSignalConnect (signal:string; proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@SelectRowSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.SelectRowSignalConnectAfter (signal:string; proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@SelectRowSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ConnectSelectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := SelectRowSignalConnect (sgSelectRow, proc, data);
end;

function TFPgtkCList.ConnectAfterSelectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := SelectRowSignalConnectAfter (sgSelectRow, proc, data);
end;

function TFPgtkCList.ConnectUnselectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := SelectRowSignalConnect (sgUnselectRow, proc, data);
end;

function TFPgtkCList.ConnectAfterUnselectRow (proc:TFPgtkSelectRowSignalFunction; data:pointer) : guint;
begin
  result := SelectRowSignalConnectAfter (sgUnselectRow, proc, data);
end;

procedure MoveSignalproc (Sender:PGtkobject; arg1:integer; arg2:integer; data:pointer); cdecl;
var p : TFPgtkMoveSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkMoveSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, arg1, arg2, TheData)
  end;
end;

function TFPgtkCList.MoveSignalConnect (signal:string; proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@MoveSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.MoveSignalConnectAfter (signal:string; proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@MoveSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ConnectRowMove (proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
begin
  result := MoveSignalConnect (sgRowMove, proc, data);
end;

function TFPgtkCList.ConnectAfterRowMove (proc:TFPgtkMoveSignalFunction; data:pointer) : guint;
begin
  result := MoveSignalConnectAfter (sgRowMove, proc, data);
end;

function TFPgtkCList.ConnectScrollVertical (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := CListScrollSignalConnect (sgScrollVertical, proc, data);
end;

function TFPgtkCList.ConnectAfterScrollVertical (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := CListScrollSignalConnectAfter (sgScrollVertical, proc, data);
end;

function TFPgtkCList.ConnectScrolHorizontal (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := CListScrollSignalConnect (sgScrolHorizontal, proc, data);
end;

function TFPgtkCList.ConnectAfterScrolHorizontal (proc:TFPgtkCListScrollSignalFunction; data:pointer) : guint;
begin
  result := CListScrollSignalConnectAfter (sgScrolHorizontal, proc, data);
end;

function TFPgtkCList.ConnectToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgToggleFocusRow, proc, data);
end;

function TFPgtkCList.ConnectAfterToggleFocusRow (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgToggleFocusRow, proc, data);
end;

function TFPgtkCList.ConnectSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgSelectAll, proc, data);
end;

function TFPgtkCList.ConnectAfterSelectAll (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgSelectAll, proc, data);
end;

function TFPgtkCList.ConnectUnselectAll (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgUnselectAll, proc, data);
end;

function TFPgtkCList.ConnectAfterUnselectAll (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgUnselectAll, proc, data);
end;

function TFPgtkCList.ConnectUndoSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgUndoSelection, proc, data);
end;

function TFPgtkCList.ConnectAfterUndoSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgUndoSelection, proc, data);
end;

function TFPgtkCList.ConnectStartSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgStartSelection, proc, data);
end;

function TFPgtkCList.ConnectAfterStartSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgStartSelection, proc, data);
end;

function TFPgtkCList.ConnectEndSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgEndSelection, proc, data);
end;

function TFPgtkCList.ConnectAfterEndSelection (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgEndSelection, proc, data);
end;

function TFPgtkCList.ConnectToggleAddMode (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgToggleAddMode, proc, data);
end;

function TFPgtkCList.ConnectAfterToggleAddMode (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgToggleAddMode, proc, data);
end;

function TFPgtkCList.ConnectAbortColumnResize (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgAbortColumnResize, proc, data);
end;

function TFPgtkCList.ConnectAfterAbortColumnResize (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgAbortColumnResize, proc, data);
end;

function TFPgtkCList.ConnectExtendSelection (proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := CListScrollBooleanSignalConnect (sgExtendSelection, proc, data);
end;

function TFPgtkCList.ConnectAfterExtendSelection (proc:TFPgtkCListScrollBooleanSignalFunction; data:pointer) : guint;
begin
  result := CListScrollBooleanSignalConnectAfter (sgExtendSelection, proc, data);
end;

procedure ColumnClickedSignalproc (Sender:PGtkobject; column:integer; data:pointer); cdecl;
var p : TFPgtkColumnClickedSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkColumnClickedSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, column, TheData)
  end;
end;

function TFPgtkCList.ColumnClickedSignalConnect (signal:string; proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@ColumnClickedSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ColumnClickedSignalConnectAfter (signal:string; proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@ColumnClickedSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ConnectClickColumn (proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
begin
  result := ColumnClickedSignalConnect (sgClickColumn, proc, data);
end;

function TFPgtkCList.ConnectAfterClickColumn (proc:TFPgtkColumnClickedSignalFunction; data:pointer) : guint;
begin
  result := ColumnClickedSignalConnectAfter (sgClickColumn, proc, data);
end;

procedure ResizeColumnSignalproc (Sender:PGtkobject; column:integer; width:integer; data:pointer); cdecl;
var p : TFPgtkResizeColumnSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkResizeColumnSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, column, width, TheData)
  end;
end;

function TFPgtkCList.ResizeColumnSignalConnect (signal:string; proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@ResizeColumnSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ResizeColumnSignalConnectAfter (signal:string; proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@ResizeColumnSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkCList.ConnectResizeColumn (proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
begin
  result := ResizeColumnSignalConnect (sgResizeColumn, proc, data);
end;

function TFPgtkCList.ConnectAfterResizeColumn (proc:TFPgtkResizeColumnSignalFunction; data:pointer) : guint;
begin
  result := ResizeColumnSignalConnectAfter (sgResizeColumn, proc, data);
end;

 { TFPgtkCTree }

function TFPgtkCTree.TheGtkObject : PGtkCTree;
begin
  result := PgtkCTree(FGtkObject);
end;


function TFPgtkCTree.GetLineStyle : TGtkCTreeLineStyle;
begin
  result := TGtkCTreeLineStyle(gtk.line_style(TheGtkObject^));
end;

procedure TFPgtkCTree.SetLineStyle (TheValue:TGtkCTreeLineStyle);
begin
  gtk_ctree_set_line_style(TheGtkObject,TheValue);
end;

function TFPgtkCTree.GetShowStub : boolean;
begin
  result := boolean(gtk.show_stub(TheGtkObject^));
end;

procedure TFPgtkCTree.SetShowStub (TheValue:boolean);
begin
  gtk_ctree_set_show_stub(TheGtkObject,TheValue);
end;

function TFPgtkCTree.GetExpanderStyle : TGtkCTreeExpanderStyle;
begin
  result := TGtkCTreeExpanderStyle(gtk.expander_style(TheGtkObject^));
end;

procedure TFPgtkCTree.SetExpanderStyle (TheValue:TGtkCTreeExpanderStyle);
begin
  gtk_ctree_set_expander_style(TheGtkObject,TheValue);
end;

function TFPgtkCTree.GetSpacing : guint;
begin
  result := TheGtkObject^.tree_spacing;
end;

procedure TFPgtkCTree.SetSpacing (TheValue:guint);
begin
  gtk_ctree_set_spacing(TheGtkObject,TheValue);
end;

function TFPgtkCTree.GetIndent : guint;
begin
  result := TheGtkObject^.tree_indent;
end;

procedure TFPgtkCTree.SetIndent (TheValue:guint);
begin
  gtk_ctree_set_indent(TheGtkObject,TheValue);
end;

function TFPgtkCTree.GetTreeColumn : integer;
begin
  result := TheGtkObject^.tree_column;
end;

constructor TFPgtkCTree.Create (aColumnCount:integer; aTreeColumn:integer);
begin
  FTreeColumn := aTreeColumn;
  inherited Create (aColumnCount);
end;


procedure TFPgtkCTree.RemoveNode (node:PGtkCTreeNode);
begin
  gtk_ctree_remove_node (TheGtkObject, node);
end;

function TFPgtkCTree.InsertNode (aParent:PGtkCTreeNode; Sibling:PGtkCTreeNode; data:string; aSpacing:guint8; PixmapClosed:PGdkPixmap; MaskClosed:PGdkBitmap; PixmapOpened:PGdkPixmap; MaskOpened:PGdkBitmap; IsLeaf:boolean; Expanded:boolean) : PGtkCTreeNode; Overload;
var
  temppgc : pgchar;
begin
  temppgc:=ConvertToPgchar(data);
  result := gtk_ctree_insert_node (TheGtkObject, aParent, Sibling, @temppgc, aSpacing, PixmapClosed, MaskClosed, PixmapOpened, MaskOpened, IsLeaf, Expanded);
end;

function TFPgtkCTree.InsertNode (aParent:PGtkCTreeNode; Sibling:PGtkCTreeNode; data:string; aSpacing:guint8; IsLeaf:boolean; Expanded:boolean) : PGtkCTreeNode; Overload;
begin
  result := InsertNode (aParent, Sibling, data, aSpacing, nil, nil, nil, nil, IsLeaf, Expanded);
end;

procedure FPgtkCTreeFunc (Tree:PGtkCTree; Node:PGtkCTreeNode; data:pointer); Cdecl;
var p : TFPgtkCTreeFunction;
begin
  with PSignalData(data)^ do
  begin
    p := TFPgtkCTreeFunction (TheSignalProc);
    p (TFPgtkCTree(GetPascalInstance(PgtkObject(Tree))), Node, data);
  end;
end;


procedure TFPgtkCTree.PostRecursive (aNode:PGtkCTreeNode; func:TFPgtkCTreeFunction; data:pointer);
begin
  gtk_CTree_post_recursive (TheGtkObject, aNode, @FPgtkCTreeFunc,
        ConvertSignalData(TFPgtkSignalFunction(func), data, true));
end;

procedure TFPgtkCTree.PostRecursiveToDepth (aNode:PGtkCTreeNode; aDepth:integer; func:TFPgtkCTreeFunction; data:pointer);
begin
  gtk_CTree_post_recursive_to_depth (TheGtkObject, aNode, aDepth, @FPgtkCTreeFunc,
        ConvertSignalData(TFPgtkSignalFunction(func), data, true));
end;

procedure TFPgtkCTree.PreRecursive (aNode:PGtkCTreeNode; func:TFPgtkCTreeFunction; data:pointer);
begin
  gtk_CTree_pre_recursive (TheGtkObject, aNode, @FPgtkCTreeFunc,
        ConvertSignalData(TFPgtkSignalFunction(func), data, true));
end;

procedure TFPgtkCTree.PreRecursiveToDepth (aNode:PGtkCTreeNode; aDepth:integer; func:TFPgtkCTreeFunction; data:pointer);
begin
  gtk_CTree_pre_recursive_to_depth (TheGtkObject, aNode, aDepth, @FPgtkCTreeFunc,
        ConvertSignalData(TFPgtkSignalFunction(func), data, true));
end;

procedure TFPgtkCTree.IsViewable (aNode:PGtkCTreeNode);
begin
  gtk_ctree_is_viewable (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.LastChild (aNode:PGtkCTreeNode);
begin
  gtk_ctree_last (TheGtkObject, aNode);
end;

function TFPgtkCTree.IsChild (anAncestor:PGtkCTreeNode; aChild:PGtkCTreeNode) : boolean;
begin
  result := gtk_ctree_find (TheGtkObject, anAncestor, aChild);
end;

function TFPgtkCTree.IsAncestor (anAncestor:PGtkCTreeNode; aChild:PGtkCTreeNode) : boolean;
begin
  result := gtk_ctree_is_ancestor (TheGtkObject, anAncestor, aChild);
end;

function TFPgtkCTree.IsHotSpot (X:integer; Y:integer) : boolean;
begin
  result := gtk_ctree_is_hot_spot (TheGtkObject, X, Y);
end;

procedure TFPgtkCTree.MoveNode (aNode:PGtkCTreeNode; NewParent:PGtkCTreeNode; NewSibling:PGtkCTreeNode);
begin
  gtk_ctree_move (TheGtkObject, aNode, NewParent, NewSibling);
end;

procedure TFPgtkCTree.Expand (aNode:PGtkCTreeNode);
begin
  gtk_ctree_expand (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.ExpandRecursive (aNode:PGtkCTreeNode);
begin
  gtk_ctree_expand_recursive (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.ExpandToDepth (aNode:PGtkCTreeNode; aDepth:integer);
begin
  gtk_ctree_expand_to_depth (TheGtkObject, aNode, aDepth);
end;

procedure TFPgtkCTree.Collapse (aNode:PGtkCTreeNode);
begin
  gtk_ctree_collapse (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.CollapseRecursive (aNode:PGtkCTreeNode);
begin
  gtk_ctree_collapse_recursive (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.CollapseToDepth (aNode:PGtkCTreeNode; aDepth:integer);
begin
  gtk_ctree_collapse_to_depth (TheGtkObject, aNode, aDepth);
end;

procedure TFPgtkCTree.SelectNode (aNode:PGtkCTreeNode);
begin
  gtk_ctree_select (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.SelectRecursive (aNode:PGtkCTreeNode);
begin
  gtk_ctree_select_recursive (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.UnselectNode (aNode:PGtkCTreeNode);
begin
  gtk_ctree_unselect (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.UnselectRecursive (aNode:PGtkCTreeNode);
begin
  gtk_ctree_unselect_recursive (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.RealSelectRecursive (aNode:PGtkCTreeNode; aState:boolean);
begin
  gtk_ctree_real_select_recursive (TheGtkObject, aNode, ord(aState));
end;

function TFPgtkCTree.NodeGetCellType (Node:PGtkCTreeNode; column:integer) : TGtkCellType;
begin
  result := gtk_ctree_node_get_cell_type (TheGtkObject, Node, column);
end;

function TFPgtkCTree.GetNodeCellText (Node:PGtkCTreeNode; Column:integer) : string;
var s : pgchar;
    r : integer;
begin
  r := gtk_ctree_node_get_text (TheGtkObject, node, column, @s);
  if (r = 0) then
    result := ''
  else
    result := string(s^);
end;

procedure TFPgtkCTree.SetNodeCellText (Node:PGtkCTreeNode; Column:integer; TheValue:string);
begin
  gtk_ctree_node_set_text(TheGtkObject,Node, Column,ConvertToPgchar(TheValue));
end;

procedure TFPgtkCTree.NodeSetPixmap (Node:PGtkCTreeNode; column:integer; pixmap:PGdkPixmap; mask:PGdkBitmap);
begin
  gtk_ctree_node_set_pixmap (TheGtkObject, Node, column, pixmap, mask);
end;

procedure TFPgtkCTree.NodeGetPixmap (Node:PGtkCTreeNode; column:integer; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
begin
  gtk_ctree_node_get_pixmap (TheGtkObject, node, column, @pixmap, @mask);
end;

procedure TFPgtkCTree.NodeSetPixText (Node:PGtkCTreeNode; column:integer; text:string; aspacing:guint8; pixmap:PGdkPixmap; mask:PGdkBitmap);
begin
  gtk_ctree_node_set_pixtext (TheGtkObject, Node, column, ConvertToPgchar(text), aspacing, pixmap, mask);
end;

procedure TFPgtkCTree.NodeGetPixText (Node:PGtkCTreeNode; column:integer; var text:string; var aspacing:guint8; var pixmap:PGdkPixmap; var mask:PGdkBitmap);
var r : integer;
    s : PPgchar;
begin
  s := nil;
  r := gtk_ctree_node_get_pixtext (TheGtkObject, node, column, s, @aspacing, @pixmap, @mask);
  if r = 0 then
    begin
    text := '';
    pixmap := nil;
    mask := nil;
    end
  else
    text := string (s^);
end;

procedure TFPgtkCTree.SetNodeInfo (aNode:PGtkCTreeNode; aText:string; aSpacing:guint8; PixmapClosed:PGdkPixmap; MaskClosed:PGdkBitmap; PixmapOpened:PGdkPixmap; MaskOpened:PGdkBitmap; IsLeaf:boolean; Expanded:boolean); Overload;
begin
  gtk_ctree_set_node_info (TheGtkObject, aNode, ConvertToPgchar(aText), aSpacing, PixmapClosed, MaskClosed, PixmapOpened, MaskOpened, IsLeaf, Expanded);
end;

procedure TFPgtkCTree.GetNodeInfo (aNode:PGtkCTreeNode; var aText:string; var aSpacing:guint8; var PixmapClosed:PGdkPixmap; var MaskClosed:PGdkBitmap; var PixmapOpened:PGdkPixmap; var MaskOpened:PGdkBitmap; var IsLeaf:boolean; var Expanded:boolean); Overload;
var r : integer;
    s : PPgchar;
begin
  s := nil;
  r := gtk_ctree_get_node_info (TheGtkObject, aNode, s,
      @aspacing, @pixmapClosed, @maskClosed, @pixmapOpened, @maskOpened,
      pgboolean(@IsLeaf), pgboolean(@expanded));
  if r = 0 then
    begin
    atext := '';
    Spacing := 0;
    pixmapClosed := nil;
    maskClosed := nil;
    pixmapOpened := nil;
    maskOpened := nil;
    IsLeaf := false;
    Expanded := false;
    end
  else
    atext := string (s^);
end;

procedure TFPgtkCTree.NodeSetShift (Node:PGtkCTreeNode; column:integer; vertical:integer; horizontal:integer);
begin
  gtk_ctree_node_set_shift (TheGtkObject, Node, column, vertical, horizontal);
end;

function TFPgtkCTree.GetNodeSelectable (Node:PGtkCTreeNode) : boolean;
begin
  result := gtk_ctree_node_get_selectable(TheGtkObject,Node);
end;

procedure TFPgtkCTree.SetNodeSelectable (Node:PGtkCTreeNode; TheValue:boolean);
begin
  gtk_ctree_node_set_selectable(TheGtkObject,Node,TheValue);
end;

procedure TFPgtkCTree.NodeSetForeground (Node:PGtkCTreeNode; color:PGdkColor);
begin
  gtk_ctree_node_set_foreground (TheGtkObject, Node, color);
end;

procedure TFPgtkCTree.NodeSetBackground (Node:PGtkCTreeNode; color:PGdkColor);
begin
  gtk_ctree_node_set_background (TheGtkObject, Node, color);
end;

function TFPgtkCTree.GetNodeCellStyle (Node:PGtkCTreeNode; column:integer) : PGtkStyle;
begin
  result := gtk_ctree_node_get_cell_style(TheGtkObject,Node, column);
end;

procedure TFPgtkCTree.SetNodeCellStyle (Node:PGtkCTreeNode; column:integer; TheValue:PGtkStyle);
begin
  gtk_ctree_node_set_cell_style(TheGtkObject,Node, column,TheValue);
end;

function TFPgtkCTree.GetNodeRowStyle (Node:PGtkCTreeNode) : PGtkStyle;
begin
  result := gtk_ctree_node_get_row_style(TheGtkObject,Node);
end;

procedure TFPgtkCTree.SetNodeRowStyle (Node:PGtkCTreeNode; TheValue:PGtkStyle);
begin
  gtk_ctree_node_set_row_style(TheGtkObject,Node,TheValue);
end;

function TFPgtkCTree.GetNodeData (Node:PGtkCTreeNode) : pointer;
begin
  result := gtk_ctree_node_get_row_data(TheGtkObject,Node);
end;

procedure TFPgtkCTree.SetNodeData (Node:PGtkCTreeNode; TheValue:pointer);
begin
  gtk_ctree_node_set_row_data(TheGtkObject,Node,TheValue);
end;

procedure TFPgtkCTree.NodeMoveTo (aNode:PGtkCTreeNode; column:integer; RowAlign:gfloat; ColAlign:gfloat);
begin
  gtk_ctree_node_moveto (TheGtkObject, aNode, column, RowAlign, ColAlign);
end;

function TFPgtkCTree.IsVisible (aNode:PGtkCTreeNode) : TGtkVisibility;
begin
  result := gtk_ctree_node_is_visible (TheGtkObject, aNode);
end;

function TFPgtkCTree.GetCompareDragFunc : TGtkCTreeCompareDragFunc;
begin
  result := TheGtkObject^.drag_compare;
end;

procedure TFPgtkCTree.SetCompareDragFunc (TheValue:TGtkCTreeCompareDragFunc);
begin
  gtk_ctree_set_drag_compare_func(TheGtkObject,TheValue);
end;

procedure TFPgtkCTree.SortNode (aNode:PGtkCTreeNode);
begin
  gtk_ctree_sort_node (TheGtkObject, aNode);
end;

procedure TFPgtkCTree.SortRecursive (aNode:PGtkCTreeNode);
begin
  gtk_ctree_sort_recursive (TheGtkObject, aNode);
end;

function TFPgtkCTree.NthNode (Row:integer) : PGtkCTreeNode;
begin
  result := gtk_ctree_node_Nth (TheGtkObject, Row);
end;

 { TFPgtkFixed }

function TFPgtkFixed.TheGtkObject : PGtkFixed;
begin
  result := PgtkFixed(FGtkObject);
end;

procedure TFPgtkFixed.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_fixed_new);
end;


procedure TFPgtkFixed.Put (Widget:TFPgtkWidget; x:integer; y:integer);
begin
  gtk_fixed_put (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), x, y);
end;

procedure TFPgtkFixed.Move (Widget:TFPgtkWidget; x:integer; y:integer);
begin
  gtk_fixed_move (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), x, y);
end;

procedure TFPgtkFixed.GetPos (Widget:TFPgtkWidget; var PosX:integer; var PosY:integer);
var g : TFPgtkGroup;
    r : integer;
begin
  g := TFPgtkGroup.Create;
  try
    g.ManageLists := false;
    g.gtkList := TheGtkObject^.children;
    r := g.indexof (Widget);
    if r < 0 then
      begin
      PosX := -1;
      PosY := -1;
      end
    else
      with PGtkFixedChild(g.Items[r])^ do
        begin
        PosX := x;
        PosY := Y;
        end;
  finally
    g.Free;
  end;
end;

 { TFPgtkNotebook }

function TFPgtkNotebook.TheGtkObject : PGtkNotebook;
begin
  result := PgtkNotebook(FGtkObject);
end;

procedure TFPgtkNotebook.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_notebook_new);
end;


procedure TFPgtkNotebook.AppendPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
begin
  gtk_notebook_append_page (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel));
  Child.Show;
end;

procedure TFPgtkNotebook.AppendPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean);
begin
  if assigned (MenuLabel) then
    gtk_notebook_append_page_menu (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel), ConvertTogtkWidget(MenuLabel))
  else
    gtk_notebook_append_page (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel));
  if isvisible then
    Child.Show;
end;

procedure TFPgtkNotebook.PrependPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
begin
  gtk_notebook_Prepend_page (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)), PGtkwidget(ConvertToGtkObject(TabLabel)));
end;

procedure TFPgtkNotebook.PrependPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean);
begin
  if assigned (MenuLabel) then
    gtk_notebook_prepend_page_menu (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel), ConvertTogtkWidget(MenuLabel))
  else
    gtk_notebook_prepend_page (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel));
  if isvisible then
    Child.Show;
end;

procedure TFPgtkNotebook.InsertPage (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; Position:integer);
begin
  gtk_notebook_insert_page (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)), PGtkwidget(ConvertToGtkObject(TabLabel)), Position);
end;

procedure TFPgtkNotebook.InsertPageFull (Child:TFPgtkWidget; TabLabel:TFPgtkWidget; MenuLabel:TFPgtkWidget; IsVisible:boolean; Position:integer);
begin
  if assigned (MenuLabel) then
    gtk_notebook_insert_page_menu (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel), ConvertTogtkWidget(MenuLabel), position)
  else
    gtk_notebook_insert_page (TheGtkObject, ConvertTogtkWidget(Child), ConvertTogtkWidget(TabLabel), position);
  if isvisible then
    Child.Show;
end;

procedure TFPgtkNotebook.RemovePage (PageNumber:integer);
begin
  gtk_notebook_remove_page (TheGtkObject, PageNumber);
end;

function TFPgtkNotebook.PageNumberOf (Child:TFPgtkWidget) : integer;
begin
  result := gtk_notebook_page_num (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

procedure TFPgtkNotebook.NextPage;
begin
  gtk_notebook_next_page (TheGtkObject);
end;

procedure TFPgtkNotebook.PrevPage;
begin
  gtk_notebook_prev_page (TheGtkObject);
end;

procedure TFPgtkNotebook.ReorderPage (Child:TFPgtkWidget; PageNum:integer);
begin
  gtk_notebook_reorder_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)), PageNum);
end;

function TFPgtkNotebook.GetPageIndex : integer;
begin
  result := gtk_notebook_get_current_page(TheGtkObject);
end;

procedure TFPgtkNotebook.SetPageIndex (TheValue:integer);
begin
  gtk_notebook_set_page(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetPage : TFPgtkWidget;
begin
  result := GetChildOnPage (PageIndex);
end;

procedure TFPgtkNotebook.SetPage (TheValue:TFPgtkWidget);
var r : integer;
begin
  r := PageNumberOf (TheValue);
  if r > -1 then
    PageIndex := r;
end;

function TFPgtkNotebook.GetTabPos : TGtkPositionType;
begin
  result := gtk.tab_pos(TheGtkObject^);
end;

procedure TFPgtkNotebook.SetTabPos (TheValue:TGtkPositionType);
begin
  gtk_notebook_set_tab_pos(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetShowTabs : boolean;
begin
  result := boolean(gtk.show_tabs(TheGtkObject^));
end;

procedure TFPgtkNotebook.SetShowTabs (TheValue:boolean);
begin
  gtk_notebook_set_show_tabs(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetShowBorder : boolean;
begin
  result := boolean(gtk.show_border(TheGtkObject^));
end;

procedure TFPgtkNotebook.SetShowBorder (TheValue:boolean);
begin
  gtk_notebook_set_show_border(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetScrollable : boolean;
begin
  result := boolean(gtk.scrollable(TheGtkObject^));
end;

procedure TFPgtkNotebook.SetScrollable (TheValue:boolean);
begin
  gtk_notebook_set_scrollable(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetHomogenous : boolean;
begin
  result := boolean(gtk.homogeneous(TheGtkObject^));
end;

procedure TFPgtkNotebook.SetHomogenous (TheValue:boolean);
begin
  gtk_notebook_set_homogeneous_tabs(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetTabHBorder : word;
begin
  result := TheGtkObject^.tab_hborder;
end;

procedure TFPgtkNotebook.SetTabHBorder (TheValue:word);
begin
  gtk_notebook_set_tab_hborder(TheGtkObject,TheValue);
end;

function TFPgtkNotebook.GetTabVBorder : word;
begin
  result := TheGtkObject^.tab_vborder;
end;

procedure TFPgtkNotebook.SetTabVBorder (TheValue:word);
begin
  gtk_notebook_set_tab_vborder(TheGtkObject,TheValue);
end;

procedure TFPgtkNotebook.SetTabBorders (BorderWidth:word);
begin
  gtk_notebook_set_tab_border (TheGtkObject, BorderWidth);
end;

function TFPgtkNotebook.GetMenuLabelOf (Child:TFPgtkWidget) : TFPgtkWidget;
begin
  result := GetPascalInstance (PGtkObject(gtk_notebook_get_menu_label (TheGtkObject, ConvertTogtkWidget(Child)))) as TFPgtkWidget;
end;

procedure TFPgtkNotebook.SetMenuLabel (Child:TFPgtkWidget; MenuLabel:TFPgtkWidget);
begin
  gtk_notebook_set_menu_label (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)), PGtkwidget(ConvertToGtkObject(MenuLabel)));
end;

function TFPgtkNotebook.GetTabLabelOf (Child:TFPgtkWidget) : TFPgtkWidget;
begin
  result := GetPascalInstance (PGtkObject(gtk_notebook_get_tab_label (TheGtkObject, ConvertTogtkWidget(Child)))) as TFPgtkWidget;
end;

procedure TFPgtkNotebook.SetTabLabel (Child:TFPgtkWidget; TabLabel:TFPgtkWidget);
begin
  gtk_notebook_set_tab_label (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)), PGtkwidget(ConvertToGtkObject(TabLabel)));
end;

function TFPgtkNotebook.GetChildOnPage (PageNum:integer) : TFPgtkWidget;
begin
  result := GetPascalInstance (PGtkObject(gtk_notebook_get_nth_page (TheGtkObject, PageNum))) as TFPgtkWidget;
end;

procedure TFPgtkNotebook.GetTabLabelPacking (Widget:TFPgtkWidget; var Expand:boolean; var Fill:boolean; var PackType:TGtkPackType);
var PT : PGtkPackType;
begin
  pt := @PackType;
  gtk_notebook_query_tab_label_packing (TheGtkObject, ConvertTogtkWidget(widget),
                               pgboolean(@expand), pgboolean(@fill), pt);
end;

procedure TFPgtkNotebook.SetTabLabelPacking (Widget:TFPgtkWidget; Expand:boolean; Fill:boolean; PackType:TGtkPackType);
begin
  gtk_notebook_set_tab_label_packing (TheGtkObject, PGtkwidget(ConvertToGtkObject(Widget)), Expand, Fill, PackType);
end;

procedure TFPgtkNotebook.EnablePopup;
begin
  gtk_notebook_popup_enable (TheGtkObject);
end;

procedure TFPgtkNotebook.DisablePopup;
begin
  gtk_notebook_popup_disable (TheGtkObject);
end;

procedure PageSwitchSignalproc (Sender:PGtkobject; PageRec:PGtkNotebookPage; aPageNum:integer; data:pointer); cdecl;
var p : TFPgtkPageSwitchSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkPageSwitchSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, PageRec, aPageNum, TheData)
  end;
end;

function TFPgtkNotebook.PageSwitchSignalConnect (signal:string; proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@PageSwitchSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkNotebook.PageSwitchSignalConnectAfter (signal:string; proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@PageSwitchSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkNotebook.ConnectSwitchPage (proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
begin
  result := PageSwitchSignalConnect (sgSwitchPage, proc, data);
end;

function TFPgtkNotebook.ConnectAfterSwitchPage (proc:TFPgtkPageSwitchSignalFunction; data:pointer) : guint;
begin
  result := PageSwitchSignalConnectAfter (sgSwitchPage, proc, data);
end;

 { TFPgtkFontSelection }

function TFPgtkFontSelection.TheGtkObject : PGtkFontSelection;
begin
  result := PgtkFontSelection(FGtkObject);
end;

procedure TFPgtkFontSelection.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_font_selection_new);
end;


function TFPgtkFontSelection.GetFontName : string;
begin
  result := gtk_font_selection_get_font_name(TheGtkObject);
end;

procedure TFPgtkFontSelection.SetFontName (TheValue:string);
begin
  if not gtk_font_selection_set_font_name (TheGtkObject, pgchar(TheValue)) then
    raise exception.CreateFmt (sFontNotFound, [TheValue]);
end;

function TFPgtkFontSelection.GetFont : PGdkFont;
begin
  result := gtk_font_selection_get_font (TheGtkObject);
end;

function TFPgtkFontSelection.GetPreviewText : string;
begin
  result := gtk_font_selection_get_preview_text(TheGtkObject);
end;

procedure TFPgtkFontSelection.SetPreviewText (TheValue:string);
begin
  gtk_font_selection_set_preview_text(TheGtkObject,ConvertToPgchar(TheValue));
end;

procedure TFPgtkFontSelection.SetFilter (FilterType:TGtkFontFilterType; FontType:TGtkFontType; Foundries:array of string; Weights:array of string; Slants:array of string; SetWidths:array of string; Spacings:array of string; CharSets:array of string);
var ppF, ppW, ppSl, ppSW, ppSp, ppC : ppgchar;

  function MakePP (data : array of string) : ppgchar;
  begin
    if high(data) > low(data) then
      result := ArrayToPPgchar(data)
    else
      result := nil;
  end;

  procedure FreePP (ppdata : ppgchar; data : array of string);
  begin
    if assigned (ppdata) then
      freemem (ppdata, sizeof (pgchar) * (high(data)-low(data)+1));
  end;

begin
  ppF := MakePP(Foundries);
  ppW := MakePP(Weights);
  ppSl := MakePP(Slants);
  ppSW := MakePP(SetWidths);
  ppSp := MakePP(Spacings);
  ppC := MakePP(CharSets);
  gtk_font_selection_set_filter (TheGtkObject, FilterType, FontType, ppF, ppW, ppSl, ppSW, ppSp, ppC);
  FreePP (ppF, Foundries);
  FreePP (ppW, Weights);
  FreePP (ppSl, Slants);
  FreePP (ppSW, SetWidths);
  FreePP (ppSp, Spacings);
  FreePP (ppC, CharSets);
end;

 { TFPgtkPaned }

function TFPgtkPaned.TheGtkObject : PGtkPaned;
begin
  result := PgtkPaned(FGtkObject);
end;


function TFPgtkPaned.GetGutterSize : word;
begin
  result := TheGtkObject^.gutter_size;
end;

procedure TFPgtkPaned.SetGutterSize (TheValue:word);
begin
  {$ifdef gtkwin}
  TheGtkObject^.gutter_size := TheValue;
  {$else}
  gtk_paned_set_gutter_size(TheGtkObject,TheValue);
  {$endif}
end;

function TFPgtkPaned.GetHandleSize : word;
begin
  result := TheGtkObject^.handle_size;
end;

procedure TFPgtkPaned.SetHandleSize (TheValue:word);
begin
  gtk_paned_set_handle_size(TheGtkObject,TheValue);
end;

function TFPgtkPaned.GetPosition : integer;
begin
  result := TheGtkObject^.child1_size;
end;

procedure TFPgtkPaned.SetPosition (TheValue:integer);
begin
  gtk_paned_set_position(TheGtkObject,TheValue);
end;

procedure TFPgtkPaned.ComputePosition (AnAllocation:integer; Child1Req:integer; Child2Req:integer);
begin
  gtk_paned_compute_position (TheGtkObject, AnAllocation, Child1Req, Child2Req);
end;

procedure TFPgtkPaned.Add1 (Child:TFPgtkWidget); Overload;
begin
  gtk_paned_add1 (TheGtkObject, ConvertToGtkWidget(Child));
  Child.Show;
end;

procedure TFPgtkPaned.Pack1 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean); Overload;
begin
  gtk_paned_pack1 (TheGtkObject, ConvertToGtkWidget(Child), Resize, Shrink);
  Child.Show;
end;

procedure TFPgtkPaned.Add1 (Child:TFPgtkWidget; isVisible:boolean); Overload;
begin
  gtk_paned_add1 (TheGtkObject, ConvertToGtkWidget(Child));
  if isvisible then
    Child.Show;
end;

procedure TFPgtkPaned.Pack1 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean; IsVisible:boolean); Overload;
begin
  gtk_paned_pack1 (TheGtkObject, ConvertToGtkWidget(Child), Resize, Shrink);
  if isvisible then
    Child.Show;
end;

procedure TFPgtkPaned.Add2 (Child:TFPgtkWidget); Overload;
begin
  gtk_paned_add2 (TheGtkObject, ConvertToGtkWidget(Child));
  Child.Show;
end;

procedure TFPgtkPaned.Pack2 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean); Overload;
begin
  gtk_paned_pack2 (TheGtkObject, ConvertToGtkWidget(Child), Resize, Shrink);
  Child.Show;
end;

procedure TFPgtkPaned.Add2 (Child:TFPgtkWidget; IsVisible:boolean); Overload;
begin
  gtk_paned_add2 (TheGtkObject, ConvertToGtkWidget(Child));
  if isvisible then
    Child.Show;
end;

procedure TFPgtkPaned.Pack2 (Child:TFPgtkWidget; Resize:boolean; Shrink:boolean; IsVisible:boolean); Overload;
begin
  gtk_paned_pack2 (TheGtkObject, ConvertToGtkWidget(Child), Resize, Shrink);
  if isvisible then
    Child.Show;
end;

 { TFPgtkHPaned }

function TFPgtkHPaned.TheGtkObject : PGtkHPaned;
begin
  result := PgtkHPaned(FGtkObject);
end;

procedure TFPgtkHPaned.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_hpaned_new);
end;


 { TFPgtkVPaned }

function TFPgtkVPaned.TheGtkObject : PGtkVPaned;
begin
  result := PgtkVPaned(FGtkObject);
end;

procedure TFPgtkVPaned.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_vpaned_new);
end;


 { TFPgtkLayout }

function TFPgtkLayout.TheGtkObject : PGtkLayout;
begin
  result := PgtkLayout(FGtkObject);
end;

procedure TFPgtkLayout.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_layout_new (nil,nil));
end;


function TFPgtkLayout.GetHAdj : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_layout_get_hadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkLayout.SetHAdj (TheValue:TFPgtkAdjustment);
begin
  gtk_layout_set_hadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkLayout.GetVAdj : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_layout_get_vadjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkLayout.SetVAdj (TheValue:TFPgtkAdjustment);
begin
  gtk_layout_set_vadjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

procedure TFPgtkLayout.Freeze;
begin
  gtk_layout_freeze (TheGtkObject);
end;

procedure TFPgtkLayout.Thaw;
begin
  gtk_layout_thaw (TheGtkObject);
end;

procedure TFPgtkLayout.Put (aWidget:TFPgtkWidget; X:integer; Y:integer); Overload;
begin
  gtk_layout_put (TheGtkObject, PGtkwidget(ConvertToGtkObject(aWidget)), X, Y);
  aWidget.Show;
end;

procedure TFPgtkLayout.Put (aWidget:TFPgtkWidget; X:integer; Y:integer; aVisible:boolean); Overload;
begin
  gtk_layout_put (TheGtkObject, PGtkwidget(ConvertToGtkObject(aWidget)), X, Y);
  if aVisible then
    aWidget.Show;
end;

procedure TFPgtkLayout.Move (aWidget:TFPgtkWidget; X:integer; Y:integer);
begin
  gtk_layout_move (TheGtkObject, PGtkwidget(ConvertToGtkObject(aWidget)), X, Y);
end;

procedure TFPgtkLayout.SetSize (aWidth:integer; aHeight:integer);
begin
  gtk_layout_set_size (TheGtkObject, aWidth, aHeight);
end;

 { TFPgtkList }

function TFPgtkList.TheGtkObject : PGtkList;
begin
  result := PgtkList(FGtkObject);
end;

procedure TFPgtkList.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_list_new);
end;


function TFPgtkList.ConnectSelectionChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgSelectionChanged, proc, data);
end;

function TFPgtkList.ConnectAfterSelectionChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgSelectionChanged, proc, data);
end;

function TFPgtkList.ConnectSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgSelectChild, proc, data);
end;

function TFPgtkList.ConnectAfterSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgSelectChild, proc, data);
end;

function TFPgtkList.ConnectUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgUnselectChild, proc, data);
end;

function TFPgtkList.ConnectAfterUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgUnselectChild, proc, data);
end;

function TFPgtkList.GetSelectionMode : TGtkSelectionMode;
begin
  result := TGtkSelectionMode(Selection_mode(TheGtkObject^));
end;

procedure TFPgtkList.SetSelectionMode (TheValue:TGtkSelectionMode);
begin
  gtk_list_set_selection_mode(TheGtkObject,TheValue);
end;

procedure TFPgtkList.InsertItems (TheItems:TFPgtkListItemGroup; position:integer);
begin
  gtk_list_insert_items (TheGtkObject, TheItems.GtkList, position);
end;

procedure TFPgtkList.AppendItems (TheItems:TFPgtkListItemGroup);
begin
  gtk_list_append_items (TheGtkObject, TheItems.GtkList);
end;

procedure TFPgtkList.PrependItems (TheItems:TFPgtkListItemGroup);
begin
  gtk_list_prepend_items (TheGtkObject, TheItems.GtkList);
end;

procedure TFPgtkList.RemoveItems (TheItems:TFPgtkListItemGroup);
begin
  gtk_list_remove_items (TheGtkObject, TheItems.GtkList);
end;

procedure TFPgtkList.RemoveItemsNoUnref (TheItems:TFPgtkListItemGroup);
begin
  gtk_list_remove_items_no_unref (TheGtkObject, TheItems.GtkList);
end;

procedure TFPgtkList.ClearItems (FromItem:integer; ToItem:integer);
begin
  if ToItem >= 0 then
    inc (ToItem);
  gtk_list_clear_items (TheGtkObject, FromItem, ToItem);
end;

procedure TFPgtkList.ClearAll;
begin
  ClearItems (0,-1);
end;

procedure TFPgtkList.SelectItem (Item:integer);
begin
  gtk_list_select_item (TheGtkObject, Item);
end;

procedure TFPgtkList.UnselectItem (Item:integer);
begin
  gtk_list_unselect_item (TheGtkObject, Item);
end;

procedure TFPgtkList.SelectChild (Child:TFPgtkWidget);
begin
  gtk_list_select_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

procedure TFPgtkList.UnselectChild (Child:TFPgtkWidget);
begin
  gtk_list_unselect_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

function TFPgtkList.ChildPosition (Child:TFPgtkWidget) : integer;
begin
  result := gtk_list_child_position (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

procedure TFPgtkList.ExtendSelection (ScrollType:TGtkScrollType; Position:gfloat; AutoStartSelection:boolean);
begin
  gtk_list_extend_selection (TheGtkObject, ScrollType, Position, AutoStartSelection);
end;

procedure TFPgtkList.StartSelection;
begin
  gtk_list_start_selection (TheGtkObject);
end;

procedure TFPgtkList.EndSelection;
begin
  gtk_list_end_selection (TheGtkObject);
end;

procedure TFPgtkList.SelectAll;
begin
  gtk_list_select_all (TheGtkObject);
end;

procedure TFPgtkList.UnselectAll;
begin
  gtk_list_unselect_all (TheGtkObject);
end;

procedure TFPgtkList.ScrollHorizontal (ScrollType:TGtkScrollType; Position:gfloat);
begin
  gtk_list_scroll_horizontal (TheGtkObject, ScrollType, Position);
end;

procedure TFPgtkList.ScrollVertical (ScrollType:TGtkScrollType; Position:gfloat);
begin
  gtk_list_scroll_vertical (TheGtkObject, ScrollType, Position);
end;

procedure TFPgtkList.ToggleAddMode;
begin
  gtk_list_toggle_add_mode (TheGtkObject);
end;

procedure TFPgtkList.ToggleFocusRow;
begin
  gtk_list_toggle_focus_row (TheGtkObject);
end;

procedure TFPgtkList.ToggleRow (Child:TFPgtkWidget);
begin
  gtk_list_toggle_row (TheGtkObject, PGtkwidget(ConvertToGtkObject(Child)));
end;

procedure TFPgtkList.UndoSelection;
begin
  gtk_list_undo_selection (TheGtkObject);
end;

procedure TFPgtkList.EndDragSelection;
begin
  gtk_list_end_drag_selection (TheGtkObject);
end;

procedure TFPgtkList.GetSelection (aGroup:TFPgtkGroup);
begin
  with aGroup do
    begin
    ManageLists := False;
    GtkList := TheGtkObject^.Selection;
    end;
end;

 { TFPgtkMenuShell }

function TFPgtkMenuShell.TheGtkObject : PGtkMenuShell;
begin
  result := PgtkMenuShell(FGtkObject);
end;


procedure MoveCurrentSignalproc (Sender:PGtkobject; dir:TGtkMenuDirectionType; data:pointer); cdecl;
var p : TFPgtkMoveCurrentSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkMoveCurrentSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, dir, TheData)
  end;
end;

function TFPgtkMenuShell.MoveCurrentSignalConnect (signal:string; proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@MoveCurrentSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkMenuShell.MoveCurrentSignalConnectAfter (signal:string; proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@MoveCurrentSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure TFPgtkMenuShell.GtkPrepend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_shell_prepend (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure TFPgtkMenuShell.GtkInsert (MenuItem:TFPgtkWidget; position:integer);
begin
  gtk_menu_shell_insert (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)), position);
end;

procedure TFPgtkMenuShell.GtkAppend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_shell_append (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure TFPgtkMenuShell.ActivateItem (MenuItem:TFPgtkWidget; ForceDeactivate:boolean);
begin
  gtk_menu_shell_activate_item (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)), ForceDeactivate);
end;

procedure TFPgtkMenuShell.SelectItem (MenuItem:TFPgtkWidget);
begin
  gtk_menu_shell_select_item (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure TFPgtkMenuShell.DeActivate;
begin
  gtk_menu_shell_deactivate (TheGtkObject);
end;

procedure TFPgtkMenuShell.Prepend (MenuItem:TFPgtkWidget); Overload;
begin
  GtkPrepend (MenuItem);
  MenuItem.Show;
end;

procedure TFPgtkMenuShell.Prepend (MenuItem:TFPgtkWidget; CreateVisible:boolean); Overload;
begin
  GtkPrepend (MenuItem);
  if createvisible then
    MenuItem.Show;
end;

procedure TFPgtkMenuShell.Insert (MenuItem:TFPgtkWidget; position:integer); Overload;
begin
  GtkInsert (MenuItem, position);
  MenuItem.Show;
end;

procedure TFPgtkMenuShell.Insert (MenuItem:TFPgtkWidget; position:integer; CreateVisible:boolean); Overload;
begin
  GtkInsert (MenuItem, position);
  if createvisible then
    MenuItem.Show;
end;

procedure TFPgtkMenuShell.Append (MenuItem:TFPgtkWidget); Overload;
begin
  GtkAppend (MenuItem);
  MenuItem.Show;
end;

procedure TFPgtkMenuShell.Append (MenuItem:TFPgtkWidget; CreateVisible:boolean); Overload;
begin
  GtkAppend (MenuItem);
  if createvisible then
    MenuItem.Show;
end;

function TFPgtkMenuShell.ConnectDeActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgDeActivate, proc, data);
end;

function TFPgtkMenuShell.ConnectAfterDeActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgDeActivate, proc, data);
end;

function TFPgtkMenuShell.ConnectSelectionDone (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgSelectionDone, proc, data);
end;

function TFPgtkMenuShell.ConnectAfterSelectionDone (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgSelectionDone, proc, data);
end;

function TFPgtkMenuShell.ConnectCancel (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgCancel, proc, data);
end;

function TFPgtkMenuShell.ConnectAfterCancel (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgCancel, proc, data);
end;

function TFPgtkMenuShell.ConnectMoveCurrent (proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
begin
  result := MoveCurrentSignalConnect (sgMoveCurrent, proc, data);
end;

function TFPgtkMenuShell.ConnectAfterMoveCurrent (proc:TFPgtkMoveCurrentSignalFunction; data:pointer) : guint;
begin
  result := MoveCurrentSignalConnectAfter (sgMoveCurrent, proc, data);
end;

function TFPgtkMenuShell.ConnectActivateCurrent (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := BooleanSignalConnect (sgActivateCurrent, proc, data);
end;

function TFPgtkMenuShell.ConnectAfterActivateCurrent (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := BooleanSignalConnectAfter (sgActivateCurrent, proc, data);
end;

 { TFPgtkMenuBar }

function TFPgtkMenuBar.TheGtkObject : PGtkMenuBar;
begin
  result := PgtkMenuBar(FGtkObject);
end;

procedure TFPgtkMenuBar.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_menu_bar_new);
end;


procedure TFPgtkMenuBar.GtkPrepend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_bar_prepend (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure TFPgtkMenuBar.GtkInsert (MenuItem:TFPgtkWidget; position:integer);
begin
  gtk_menu_bar_insert (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)), position);
end;

procedure TFPgtkMenuBar.GtkAppend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_bar_append (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

function TFPgtkMenuBar.GetShadow : TgtkShadowType;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkMenuBar.SetShadow (TheValue:TgtkShadowType);
begin
  gtk_menu_bar_set_shadow_type(TheGtkObject,TheValue);
end;

 { TFPgtkMenu }

function TFPgtkMenu.TheGtkObject : PGtkMenu;
begin
  result := PgtkMenu(FGtkObject);
end;

procedure TFPgtkMenu.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_menu_new);
end;


procedure TFPgtkMenu.GtkPrepend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_prepend (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure TFPgtkMenu.GtkInsert (MenuItem:TFPgtkWidget; position:integer);
begin
  gtk_menu_insert (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)), position);
end;

procedure TFPgtkMenu.GtkAppend (MenuItem:TFPgtkWidget);
begin
  gtk_menu_append (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)));
end;

procedure FPgtkMenuPos (Sender:PgtkMenu; x:pgint; y:pgint; data:pointer); Cdecl;
var p : TFPgtkMenuPosFunction;
begin
  with PSignalData (data)^ do
    begin
    p := TFPgtkMenuPosFunction (TheSignalProc);
    p(TFPgtkMenu(GetPascalInstance(PgtkObject(Sender))), x^, y^, data);
    end;
end;


procedure FPgtkMenuDetacher (AttachedWidget:PgtkWidget; TheMenu:PgtkMenu); Cdecl;
var m : TFPgtkMenu;
    a : TFPgtkWidget;
begin
  m := (GetPascalInstance(PgtkObject(TheMenu)) as TFPgtkMenu);
  if assigned(m) and assigned(m.FDetacher) then
    begin
    a := TFPgtkWidget (GetPascalInstance(PgtkObject(AttachedWidget)));
    m.FDetacher (a, m);
    end
end;


procedure TFPgtkMenu.ReorderChild (MenuItem:TFPgtkWidget; position:integer);
begin
  gtk_menu_reorder_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(MenuItem)), position);
end;

procedure TFPgtkMenu.Popup (button:guint); Overload;
begin
  gtk_menu_popup (TheGtkObject, null, null, null, null, button, 0);
end;

procedure TFPgtkMenu.Popup (ParentShell:TFPgtkWidget; ParentItem:TFPgtkWidget; func:TFPgtkMenuPosFunction; data:pointer; button:guint; ActivateTime:guint32); Overload;
begin
  gtk_menu_popup (TheGtkObject, ConvertTogtkWidget(ParentShell), ConvertTogtkWidget(ParentItem),
      @FPgtkMenuPos, ConvertSignalData(TFPgtkSignalFunction(func), data, true), button, ActivateTime);
end;

procedure TFPgtkMenu.PopDown;
begin
  gtk_menu_popdown (TheGtkObject);
end;

procedure TFPgtkMenu.Reposition;
begin
  gtk_menu_reposition (TheGtkObject);
end;

procedure TFPgtkMenu.AttachToWidget (Widget:TFPgtkWidget; detacher:TFPgtkMenuDetachFunction);
begin
  FDetacher := detacher;
  gtk_menu_attach_to_widget (TheGtkObject, ConvertTogtkWidget(Widget), @FPgtkMenuDetacher);
end;

procedure TFPgtkMenu.Detach;
begin
  gtk_menu_detach (TheGtkObject);
end;

procedure TFPgtkMenu.SetTitle (TheValue:string);
begin
  gtk_menu_set_title(TheGtkObject,Pgchar(TheValue));
end;

function TFPgtkMenu.GetActive : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(gtk_menu_get_active(TheGtkObject)),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkMenu.SetActive (TheValue:TFPgtkWidget);
var r : integer;
begin
  r := Children.indexof (TheValue);
  if r >= 0 then
    SetActiveIndex (r);
end;

function TFPgtkMenu.GetActiveIndex : integer;
begin
  result := Children.indexof (GetActive);
end;

procedure TFPgtkMenu.SetActiveIndex (TheValue:integer);
begin
  gtk_menu_set_active(TheGtkObject,TheValue);
end;

function TFPgtkMenu.GetTearOffState : boolean;
begin
  result := boolean(gtk.torn_off(TheGtkObject^));
end;

procedure TFPgtkMenu.SetTearOffState (TheValue:boolean);
begin
  gtk_menu_set_tearoff_state(TheGtkObject,TheValue);
end;

function TFPgtkMenu.GetAttachedTo : TFPgtkWidget;
begin
  result := GetPascalInstance(PGtkObject(gtk_menu_get_attach_widget(TheGtkObject)),tfpgtkwidget) as tfpgtkwidget;
end;

procedure TFPgtkMenu.SetAttachedTo (TheValue:TFPgtkWidget);
begin
  AttachToWidget (TheValue, nil);
end;

function TFPgtkMenu.GetAccelGroup : PGtkAccelGroup;
begin
  result := gtk_menu_ensure_uline_accel_group(TheGtkObject);
end;

procedure TFPgtkMenu.SetAccelGroup (TheValue:PGtkAccelGroup);
begin
  gtk_menu_set_accel_group(TheGtkObject,TheValue);
end;

 { TFPgtkPacker }

function TFPgtkPacker.TheGtkObject : PGtkPacker;
begin
  result := PgtkPacker(FGtkObject);
end;

procedure TFPgtkPacker.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_packer_new);
end;


procedure TFPgtkPacker.Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions); Overload;
begin
  gtk_packer_add_defaults (TheGtkObject, Child.TheGtkWidget, Side, anchor, options);
  Child.Show;
end;

procedure TFPgtkPacker.Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aVisible:boolean); Overload;
begin
  gtk_packer_add_defaults (TheGtkObject, Child.TheGtkWidget, Side, anchor, options);
  if aVisible then
    Child.Show;
end;

procedure TFPgtkPacker.Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint); Overload;
begin
  gtk_packer_add (TheGtkObject, Child.TheGtkWidget, Side, anchor, options, aborder, padX, PadY, IPadX, IPadY);
  Child.Show;
end;

procedure TFPgtkPacker.Add (Child:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint; aVisible:boolean); Overload;
begin
  gtk_packer_add (TheGtkObject, Child.TheGtkWidget, Side, anchor, options, aborder, padX, PadY, IPadX, IPadY);
  if aVisible then
    Child.Show;
end;

procedure TFPgtkPacker.ReorderChild (aChild:TFPgtkWidget; position:integer);
begin
  gtk_packer_reorder_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(aChild)), position);
end;

function TFPgtkPacker.GetSpacing : guint;
begin
  result := TheGtkObject^.spacing;
end;

procedure TFPgtkPacker.SetSpacing (TheValue:guint);
begin
  gtk_packer_set_spacing(TheGtkObject,TheValue);
end;

procedure TFPgtkPacker.DefaultBorder (aBorder:guint);
begin
  gtk_packer_set_default_border_width (TheGtkObject, aBorder);
end;

procedure TFPgtkPacker.DefaultPad (PadX:guint; PadY:guint);
begin
  gtk_packer_set_default_pad (TheGtkObject, PadX, PadY);
end;

procedure TFPgtkPacker.DefaultIPad (IPadX:guint; IPadY:guint);
begin
  gtk_packer_set_default_ipad (TheGtkObject, IPadX, IPadY);
end;

procedure TFPgtkPacker.Configure (aChild:TFPgtkWidget; Side:TGtkSideType; Anchor:TGtkAnchorType; options:TGtkPackerOptions; aBorder:guint; PadX:Guint; PadY:guint; IPadX:guint; IPadY:guint); Overload;
begin
  gtk_packer_set_child_packing (TheGtkObject, PGtkwidget(ConvertToGtkObject(aChild)), Side, Anchor, options, aBorder, PadX, PadY, IPadX, IPadY);
end;

 { TFPgtkTable }

function TFPgtkTable.TheGtkObject : PGtkTable;
begin
  result := PgtkTable(FGtkObject);
end;

procedure TFPgtkTable.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_table_new (1,1,False));
end;


constructor TFPgtkTable.Create (AColumns:integer; ARows:integer);
begin
  inherited create;
  resize (AColumns, ARows);
end;


procedure TFPgtkTable.Resize (AColumns:integer; ARows:integer);
begin
  gtk_table_resize (TheGtkObject, ARows, AColumns);
end;

procedure TFPgtkTable.Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; XOptions:integer; YOptions:integer; XPadding:integer; YPadding:integer; IsVisible:boolean);
begin
  gtk_table_attach (TheGtkObject, ConvertToGtkWidget(Widget), left, right, top, bottom,
                    XOptions, YOptions, XPadding, YPadding);
  if isvisible then
    widget.Show;
end;

procedure TFPgtkTable.Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; XOptions:integer; YOptions:integer; XPadding:integer; YPadding:integer);
begin
  gtk_table_attach (TheGtkObject, ConvertTogtkWidget(Widget), left, right, top, bottom,
                    XOptions, YOptions, XPadding, YPadding);
  widget.Show;
end;

procedure TFPgtkTable.Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer; IsVisible:boolean);
begin
  gtk_table_attach_defaults (TheGtkObject, ConvertTogtkWidget(Widget), left, right, top, bottom);
  if isvisible then
    widget.Show;
end;

procedure TFPgtkTable.Attach (Widget:TFPgtkWidget; left:integer; right:integer; top:integer; bottom:integer);
begin
  gtk_table_attach_defaults (TheGtkObject, ConvertTogtkWidget(Widget), left, right, top, bottom);
  widget.Show;
end;

function TFPgtkTable.GetRowCount : integer;
begin
  result := TheGtkObject^.nrows;
end;

function TFPgtkTable.GetColCount : integer;
begin
  result := TheGtkObject^.ncols;
end;

function TFPgtkTable.GetHomogeneous : boolean;
begin
  result := boolean(gtk.homogeneous(TheGtkObject^));
end;

procedure TFPgtkTable.SetHomogeneous (TheValue:boolean);
begin
  gtk_table_set_homogeneous(TheGtkObject,TheValue);
end;

function TFPgtkTable.GetRowSpacings : integer;
begin
  result := TheGtkObject^.column_spacing;
end;

procedure TFPgtkTable.SetRowSpacings (TheValue:integer);
begin
  gtk_table_set_row_spacings(TheGtkObject,TheValue);
end;

function TFPgtkTable.GetColSpacings : integer;
begin
  result := TheGtkObject^.row_spacing;
end;

procedure TFPgtkTable.SetColSpacings (TheValue:integer);
begin
  gtk_table_set_col_spacings(TheGtkObject,TheValue);
end;

procedure TFPgtkTable.SetOneRowSpacing (row:integer; TheValue:integer);
begin
  gtk_table_set_row_spacing (TheGtkObject, row, TheValue);
end;

procedure TFPgtkTable.SetOneColSpacing (Column:integer; TheValue:integer);
begin
  gtk_table_set_col_spacing (TheGtkObject, Column, TheValue);
end;

 { TFPgtkToolbar }

function TFPgtkToolbar.TheGtkObject : PGtkToolbar;
begin
  result := PgtkToolbar(FGtkObject);
end;

procedure TFPgtkToolbar.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,GTK_TOOLBAR_BOTH));
end;


function TFPgtkToolbar.GetButtonRelief : TGtkReliefStyle;
begin
  result := gtk_toolbar_get_button_relief(TheGtkObject);
end;

procedure TFPgtkToolbar.SetButtonRelief (TheValue:TGtkReliefStyle);
begin
  gtk_toolbar_set_button_relief(TheGtkObject,TheValue);
end;

function TFPgtkToolbar.GetTooltips : TFPgtkTooltips;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.tooltips),tfpgtktooltips) as tfpgtktooltips;
end;

function TFPgtkToolbar.GetEnableTooltips : longbool;
begin
  result := tooltips.enabled;
end;

procedure TFPgtkToolbar.SetEnableTooltips (TheValue:longbool);
begin
  gtk_toolbar_set_tooltips(TheGtkObject,gint(TheValue));
end;

function TFPgtkToolbar.GetSpaceStyle : TGtkToolbarSpaceStyle;
begin
  result := TheGtkObject^.space_style;
end;

procedure TFPgtkToolbar.SetSpaceStyle (TheValue:TGtkToolbarSpaceStyle);
begin
  gtk_toolbar_set_space_style(TheGtkObject,TheValue);
end;

function TFPgtkToolbar.GetSpaceSize : integer;
begin
  result := TheGtkObject^.space_size;
end;

procedure TFPgtkToolbar.SetSpaceSize (TheValue:integer);
begin
  gtk_toolbar_set_space_size(TheGtkObject,TheValue);
end;

function TFPgtkToolbar.GetStyle : TGtkToolbarStyle;
begin
  result := TheGtkObject^.style;
end;

procedure TFPgtkToolbar.SetStyle (TheValue:TGtkToolbarStyle);
begin
  gtk_toolbar_set_style(TheGtkObject,TheValue);
end;

function TFPgtkToolbar.GetOrientation : tGtkOrientation;
begin
  result := TheGtkObject^.orientation;
end;

procedure TFPgtkToolbar.SetOrientation (TheValue:tGtkOrientation);
begin
  gtk_toolbar_set_orientation(TheGtkObject,TheValue);
end;

procedure TFPgtkToolbar.InsertWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string; Position:integer);
begin
  gtk_toolbar_insert_widget (TheGtkObject, ConvertToGtkWidget(Widget), ConvertToPgchar(TooltipText), ConvertTopgchar(TooltipPrivate), Position);
  Widget.Show;
end;

procedure TFPgtkToolbar.PrependWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string);
begin
  gtk_toolbar_prepend_widget (TheGtkObject, ConvertToGtkWidget(Widget), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate));
  Widget.Show;
end;

procedure TFPgtkToolbar.AppendWidget (Widget:TFPgtkWidget; TooltipText:string; TooltipPrivate:string);
begin
  gtk_toolbar_append_widget (TheGtkObject, ConvertToGtkWidget(Widget), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate));
  Widget.Show;
end;

function TFPgtkToolbar.InsertElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget;
var w : PGtkWidget;
    t : TFPgtkObjectClass;
begin
  w := gtk_toolbar_insert_element (TheGtkObject, ButtonType,
           ConvertToGtkwidget(PrevRadioBut), ConvertTopgchar(Text),
           ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate),
           ConvertToGtkwidget(Icon),
           gtk_signal_func(@SignalProc),
           ConvertSignalData(TFPgtkSignalFunction(callback), data, true),
           position);
  if assigned (w) then
    begin
    case ButtonType of
      GTK_TOOLBAR_CHILD_WIDGET:
        t := TFPgtkWidget;
      GTK_TOOLBAR_CHILD_BUTTON:
        t := TFPgtkButton;
      GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
        t := TFPgtkToggleButton;
      GTK_TOOLBAR_CHILD_RADIOBUTTON:
        t := TFPgtkRadioButton;
    end;
    if t = TFPgtkWidget then
      result := GetPascalInstance (w)
    else
      result := GetPascalInstance (w, t);
    end
  else
    result := nil;
end;

function TFPgtkToolbar.AppendElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget;
var w : PGtkWidget;
    t : TFPgtkObjectClass;
begin
  w := gtk_toolbar_append_element (TheGtkObject, ButtonType, ConvertToGtkwidget(PrevRadioBut),
          ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate),
          ConvertToGtkwidget(Icon), gtk_signal_func(@SignalProc),
          ConvertSignalData(TFPgtkSignalFunction(callback), data, true));
  if assigned (w) then
    begin
    case ButtonType of
      GTK_TOOLBAR_CHILD_WIDGET:
        t := TFPgtkWidget;
      GTK_TOOLBAR_CHILD_BUTTON:
        t := TFPgtkButton;
      GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
        t := TFPgtkToggleButton;
      GTK_TOOLBAR_CHILD_RADIOBUTTON:
        t := TFPgtkRadioButton;
    end;
    if t = TFPgtkWidget then
      result := GetPascalInstance (w)
    else
      result := GetPascalInstance (w, t);
    end
  else
    result := nil;
end;

function TFPgtkToolbar.PrependElement (ButtonType:TGtkToolbarChildType; PrevRadioBut:TFPgtkWidget; Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget;
var w : PGtkWidget;
    t : TFPgtkObjectClass;
begin
  w := gtk_toolbar_prepend_element (TheGtkObject, ButtonType, ConvertToGtkwidget(PrevRadioBut),
          ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate),
          ConvertToGtkwidget(Icon), gtk_signal_func(@SignalProc),
          ConvertSignalData(TFPgtkSignalFunction(callback), data, true));
  if assigned (w) then
    begin
    case ButtonType of
      GTK_TOOLBAR_CHILD_WIDGET:
        t := TFPgtkWidget;
      GTK_TOOLBAR_CHILD_BUTTON:
        t := TFPgtkButton;
      GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
        t := TFPgtkToggleButton;
      GTK_TOOLBAR_CHILD_RADIOBUTTON:
        t := TFPgtkRadioButton;
    end;
    if t = TFPgtkWidget then
      result := GetPascalInstance (w)
    else
      result := GetPascalInstance (w, t);
    end
  else
    result := nil;
end;

function TFPgtkToolbar.InsertItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget; Overload;
begin
  result := GetPascalInstance (
      gtk_toolbar_insert_item (TheGtkObject, ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate), ConvertToGtkWidget(Icon),
              gtk_signal_func(@SignalProc), ConvertSignalData(TFPgtkSignalFunction(callback), data, true), position),
      TFPgtkButton);
end;

function TFPgtkToolbar.AppendItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
begin
  result := GetPascalInstance (
      gtk_toolbar_append_item (TheGtkObject, ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate),
              ConvertToGtkWidget(Icon), gtk_signal_func(@SignalProc), ConvertSignalData(TFPgtkSignalFunction(callback), data, true)),
      TFPgtkButton);
end;

function TFPgtkToolbar.PrependItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:TFPgtkWidget; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
begin
  result := GetPascalInstance (
      gtk_toolbar_prepend_item (TheGtkObject, Converttopgchar(Text), Converttopgchar(TooltipText),
              Converttopgchar(TooltipPrivate), ConvertToGtkWidget(Icon), gtk_signal_func(@SignalProc),
              ConvertSignalData(TFPgtkSignalFunction(callback), data, true)),
      TFPgtkButton);
end;

function TFPgtkToolbar.InsertItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer; position:integer) : TFPgtkWidget; Overload;
var pm : TFPgtkPixmap;
begin
  if low(icon) < high(icon) then
    begin
    pm := TFPgtkPixmap.Create;
    pm.loadFromArray (icon);
    end
  else
    pm := nil;
  result := GetPascalInstance (
      gtk_toolbar_insert_item (TheGtkObject, ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate), ConvertToGtkWidget(pm),
              gtk_signal_func(@SignalProc), ConvertSignalData(TFPgtkSignalFunction(callback), data, true), position),
      TFPgtkButton);
end;

function TFPgtkToolbar.AppendItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
var pm : TFPgtkPixmap;
begin
  if low(icon) < high(icon) then
    begin
    pm := TFPgtkPixmap.Create;
    pm.loadFromArray (icon);
    end
  else
    pm := nil;
  result := GetPascalInstance (
      gtk_toolbar_append_item (TheGtkObject, ConvertTopgchar(Text), ConvertTopgchar(TooltipText), ConvertTopgchar(TooltipPrivate),
              ConvertToGtkWidget(pm), gtk_signal_func(@SignalProc), ConvertSignalData(TFPgtkSignalFunction(callback), data, true)),
      TFPgtkButton);
end;

function TFPgtkToolbar.PrependItem (Text:string; TooltipText:string; TooltipPrivate:string; Icon:array of string; CallBack:TFPgtkSignalFunction; data:pointer) : TFPgtkWidget; Overload;
var pm : TFPgtkPixmap;
begin
  if low(icon) < high(icon) then
    begin
    pm := TFPgtkPixmap.Create;
    pm.loadFromArray (icon);
    end
  else
    pm := nil;
  result := GetPascalInstance (
      gtk_toolbar_prepend_item (TheGtkObject, Converttopgchar(Text), Converttopgchar(TooltipText),
              Converttopgchar(TooltipPrivate), ConvertToGtkWidget(pm), gtk_signal_func(@SignalProc),
              ConvertSignalData(TFPgtkSignalFunction(callback), data, true)),
      TFPgtkButton);
end;

procedure TFPgtkToolbar.InsertSpace (position:integer);
begin
  gtk_toolbar_insert_space (TheGtkObject, position);
end;

procedure TFPgtkToolbar.AppendSpace;
begin
  gtk_toolbar_append_space (TheGtkObject);
end;

procedure TFPgtkToolbar.PrependSpace;
begin
  gtk_toolbar_prepend_space (TheGtkObject);
end;

 { TFPgtkTree }

function TFPgtkTree.TheGtkObject : PGtkTree;
begin
  result := PgtkTree(FGtkObject);
end;

procedure TFPgtkTree.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_tree_new);
end;


function TFPgtkTree.ConnectSelectionChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgSelectionChanged, proc, data);
end;

function TFPgtkTree.ConnectAfterSelectionChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgSelectionChanged, proc, data);
end;

function TFPgtkTree.ConnectSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgSelectChild, proc, data);
end;

function TFPgtkTree.ConnectAfterSelectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgSelectChild, proc, data);
end;

function TFPgtkTree.ConnectUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnect (sgUnselectChild, proc, data);
end;

function TFPgtkTree.ConnectAfterUnselectChild (proc:TFPgtkWidgetSignalFunction; data:pointer) : guint;
begin
  result := WidgetSignalConnectAfter (sgUnselectChild, proc, data);
end;

function TFPgtkTree.GetSelectionMode : TGtkSelectionMode;
begin
  result := gtk.selection_mode(TheGtkObject^);
end;

procedure TFPgtkTree.SetSelectionMode (TheValue:TGtkSelectionMode);
begin
  gtk_tree_set_selection_mode(TheGtkObject,TheValue);
end;

function TFPgtkTree.GetViewLines : boolean;
begin
  result := boolean(gtk.view_line(TheGtkObject^));
end;

procedure TFPgtkTree.SetViewLines (TheValue:boolean);
begin
  gtk_tree_set_view_lines(TheGtkObject,guint(TheValue));
end;

function TFPgtkTree.GetViewMode : TGtkTreeViewMode;
begin
  result := gtk.view_mode(TheGtkObject^);
end;

procedure TFPgtkTree.SetViewMode (TheValue:TGtkTreeViewMode);
begin
  gtk_tree_set_view_mode(TheGtkObject,TheValue);
end;

procedure TFPgtkTree.Append (TreeItem:TFPgtkWidget);
begin
  gtk_tree_append (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)));
  TreeItem.Show;
end;

procedure TFPgtkTree.Prepend (TreeItem:TFPgtkWidget);
begin
  gtk_tree_prepend (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)));
  TreeItem.Show;
end;

procedure TFPgtkTree.Insert (TreeItem:TFPgtkWidget; position:integer);
begin
  gtk_tree_insert (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)),position);
  TreeItem.show;
end;

procedure TFPgtkTree.Remove (TreeItem:TFPgtkWidget);
var l : PGList;
begin
{$ifndef win32}
  gtk_tree_remove_item (TheGtkObject, ConvertToGtkWidget(TreeItem));
{$else}
  l := null;
  l := g_list_append (l, ConvertToGtkWidget(TreeItem));
  gtk_tree_remove_items (TheGtkObject, l);
  g_list_free (l);
{$endif}
end;

procedure TFPgtkTree.ClearItems (StartPos:integer; EndPos:integer);
begin
  gtk_tree_clear_items (TheGtkObject, StartPos, EndPos);
end;

procedure TFPgtkTree.SelectItem (Item:integer);
begin
  gtk_tree_select_item (TheGtkObject, Item);
end;

procedure TFPgtkTree.UnselectItem (Item:integer);
begin
  gtk_tree_unselect_item (TheGtkObject, Item);
end;

procedure TFPgtkTree.SelectChild (TreeItem:TFPgtkWidget);
begin
  gtk_tree_select_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)));
end;

procedure TFPgtkTree.UnselectChild (TreeItem:TFPgtkWidget);
begin
  gtk_tree_unselect_child (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)));
end;

function TFPgtkTree.ChildPosition (TreeItem:TFPgtkWidget) : integer;
begin
  result := gtk_tree_child_position (TheGtkObject, PGtkwidget(ConvertToGtkObject(TreeItem)));
end;

function TFPgtkTree.RootTree : TFPgtkTree;
begin
  result := GetPascalInstance(PGtkObject(GTK_TREE_ROOT_TREE(TheGtkObject))) as TFPgtkTree;
end;

function TFPgtkTree.IsRootTree : boolean;
begin
  result := GTK_IS_ROOT_TREE (TheGtkObject);
end;

procedure TFPgtkTree.GetSelection (aGroup:TFPgtkGroup);
begin
  aGroup.ManageLists := false;
  aGroup.GtkList := Gtk_Tree_selection (TheGtkObject);
end;

function TFPgtkTree.Level : integer;
begin
  result := TheGtkObject^.level;
end;

 { TFPgtkCalendar }

function TFPgtkCalendar.TheGtkObject : PGtkCalendar;
begin
  result := PgtkCalendar(FGtkObject);
end;

procedure TFPgtkCalendar.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_calendar_new);
end;


function TFPgtkCalendar.SelectMonth (aMonth:guint; aYear:guint) : integer;
begin
  result := gtk_calendar_select_month (TheGtkObject, aMonth-1, aYear);
end;

procedure TFPgtkCalendar.SelectDay (aDay:guint);
begin
  gtk_calendar_select_day (TheGtkObject, aDay);
end;

function TFPgtkCalendar.MarkDay (aDay:guint) : integer;
begin
  result := gtk_calendar_mark_day (TheGtkObject, aDay);
end;

function TFPgtkCalendar.UnmarkDay (aDay:guint) : integer;
begin
  result := gtk_calendar_unmark_day (TheGtkObject, aDay);
end;

procedure TFPgtkCalendar.ClearMarks;
begin
  gtk_calendar_clear_marks (TheGtkObject);
end;

function TFPgtkCalendar.GetDisplayOptions : TGtkCalendarDisplayOptions;
begin
  result := TheGtkObject^.display_flags;
end;

procedure TFPgtkCalendar.SetDisplayOptions (TheValue:TGtkCalendarDisplayOptions);
begin
  gtk_calendar_display_options(TheGtkObject,TheValue);
end;

function TFPgtkCalendar.GetDate : TDatetime;
var y, m, d : guint;
begin
  gtk_calendar_get_date (TheGtkObject, @y, @m, @d);
  result := encodedate (y,m+1,d);
end;

procedure TFPgtkCalendar.SetDate (TheValue:TDatetime);
var y,m,d : word;
begin
  decodedate (TheValue, y,m,d);
  SelectMonth(m,y);
  SelectDay(d);
end;

procedure TFPgtkCalendar.Freeze;
begin
  gtk_calendar_freeze (TheGtkObject);
end;

procedure TFPgtkCalendar.Thaw;
begin
  gtk_calendar_thaw (TheGtkObject);
end;

function TFPgtkCalendar.ConnectMonthChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgMonthChanged, proc, data);
end;

function TFPgtkCalendar.ConnectAfterMonthChanged (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgMonthChanged, proc, data);
end;

function TFPgtkCalendar.ConnectDaySelected (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgDaySelected, proc, data);
end;

function TFPgtkCalendar.ConnectAfterDaySelected (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgDaySelected, proc, data);
end;

function TFPgtkCalendar.ConnectDaySelectedDoubleClick (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgDaySelectedDoubleClick, proc, data);
end;

function TFPgtkCalendar.ConnectAfterDaySelectedDoubleClick (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgDaySelectedDoubleClick, proc, data);
end;

function TFPgtkCalendar.ConnectPrevMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgPrevMonth, proc, data);
end;

function TFPgtkCalendar.ConnectAfterPrevMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgPrevMonth, proc, data);
end;

function TFPgtkCalendar.ConnectNextMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgNextMonth, proc, data);
end;

function TFPgtkCalendar.ConnectAfterNextMonth (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgNextMonth, proc, data);
end;

function TFPgtkCalendar.ConnectPrevYear (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgPrevYear, proc, data);
end;

function TFPgtkCalendar.ConnectAfterPrevYear (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgPrevYear, proc, data);
end;

function TFPgtkCalendar.ConnectNextYear (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnect (sgNextYear, proc, data);
end;

function TFPgtkCalendar.ConnectAfterNextYear (proc:TFPgtksignalFunction; data:pointer) : guint;
begin
  result := signalConnectAfter (sgNextYear, proc, data);
end;

 { TFPgtkDrawingArea }

function TFPgtkDrawingArea.TheGtkObject : PGtkDrawingArea;
begin
  result := PgtkDrawingArea(FGtkObject);
end;

procedure TFPgtkDrawingArea.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_drawing_area_new);
end;


procedure TFPgtkDrawingArea.SetSize (Width:integer; Height:integer);
begin
  gtk_drawing_area_Size (TheGtkObject, Width, Height);
end;

 { TFPgtkCurve }

function TFPgtkCurve.TheGtkObject : PGtkCurve;
begin
  result := PgtkCurve(FGtkObject);
end;

procedure TFPgtkCurve.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_curve_new);
end;


procedure TFPgtkCurve.SetRange (MinX:float; MaxX:float; MinY:float; MaxY:float);
begin
  gtk_curve_set_range (TheGtkObject, MinX, MaxX, MinY, MaxY);
end;

procedure TFPgtkCurve.Reset;
begin
  gtk_curve_reset (TheGtkObject);
end;

procedure TFPgtkCurve.SetGamma (GammaValue:float);
begin
  gtk_curve_set_gamma (TheGtkObject, GammaValue);
end;

function TFPgtkCurve.GetCurveType : TGtkCurveType;
begin
  result := TheGtkObject^.curve_type;
end;

procedure TFPgtkCurve.SetCurveType (TheValue:TGtkCurveType);
begin
  gtk_curve_set_curve_type(TheGtkObject,TheValue);
end;

 { TFPgtkEditable }

function TFPgtkEditable.TheGtkObject : PGtkEditable;
begin
  result := PgtkEditable(FGtkObject);
end;


function TFPgtkEditable.GetHasSelection : boolean;
begin
  result := SelectionStart <> SelectionEnd;
end;

function TFPgtkEditable.GetEditable : boolean;
begin
  result := boolean(gtk.editable(TheGtkObject^));
end;

procedure TFPgtkEditable.SetEditable (TheValue:boolean);
begin
  gtk_Editable_set_editable(TheGtkObject,TheValue);
end;

function TFPgtkEditable.GetVisible : boolean;
begin
  result := boolean(gtk.visible(TheGtkObject^));
end;

procedure TFPgtkEditable.SetVisible (TheValue:boolean);
begin
  gtk.Set_visible(TheGtkObject^,guint(TheValue))
end;

function TFPgtkEditable.GetPosition : integer;
begin
  result := gtk_Editable_get_position(TheGtkObject);
end;

procedure TFPgtkEditable.SetPosition (TheValue:integer);
begin
  gtk_Editable_set_position(TheGtkObject,TheValue);
end;

function TFPgtkEditable.GetSelectionStart : integer;
begin
  result := TheGtkObject^.selection_start_pos;
end;

procedure TFPgtkEditable.SetSelectionStart (TheValue:integer);
begin
  gtk_editable_select_region (TheGtkObject, TheValue, SelectionEnd);
end;

function TFPgtkEditable.GetSelectionEnd : integer;
begin
  result := TheGtkObject^.Selection_end_pos;
end;

procedure TFPgtkEditable.SetSelectionEnd (TheValue:integer);
begin
  gtk_editable_select_region (TheGtkObject, SelectionStart, TheValue);
end;

procedure TFPgtkEditable.SetSelection (TheValue:string);
var b : integer;
begin
  if HasSelection then
    begin
    b := SelectionStart;
    deleteText (SelectionStart, SelectionEnd);
    end
  else
    b := position;
  InsertText (TheValue, b);
  Position := b + length(TheValue);
  SelectRegion (b, position);
end;

function TFPgtkEditable.GetSelection : string;
var c : pgchar;
begin
  c := gtk_editable_get_chars (TheGtkObject, SelectionStart, SelectionEnd);
  result := string (c);
  g_free (c);
end;

function TFPgtkEditable.GetText : string;
var c : pgchar;
begin
  c := gtk_editable_get_chars (TheGtkObject, 0, -1);
  result := string (c);
  g_free (c);
end;

procedure TFPgtkEditable.Changed;
begin
  gtk_Editable_Changed (TheGtkObject);
end;

procedure TFPgtkEditable.InsertText (NewText:string; AtPosition:integer);
var p : integer;
begin
  p := AtPosition;
  gtk_editable_insert_text (TheGtkObject, pgchar(NewText), length(NewText), @p);
end;

procedure TFPgtkEditable.DeleteText (StartPos:integer; EndPos:integer);
begin
  gtk_Editable_Delete_Text (TheGtkObject, StartPos, EndPos);
end;

procedure TFPgtkEditable.GetChars (StartPos:integer; EndPos:integer);
begin
  gtk_Editable_get_chars (TheGtkObject, StartPos, EndPos);
end;

procedure TFPgtkEditable.CutClipboard;
begin
  gtk_Editable_cut_clipboard (TheGtkObject);
end;

procedure TFPgtkEditable.CopyClipboard;
begin
  gtk_Editable_copy_clipboard (TheGtkObject);
end;

procedure TFPgtkEditable.PasteClipboard;
begin
  gtk_Editable_paste_clipboard (TheGtkObject);
end;

procedure TFPgtkEditable.SelectRegion (StartPos:integer; EndPos:integer);
begin
  gtk_Editable_select_region (TheGtkObject, StartPos, EndPos);
end;

procedure TFPgtkEditable.ClaimSelection (claim:boolean; time:guint32);
begin
  gtk_Editable_claim_selection (TheGtkObject, claim, time);
end;

procedure TFPgtkEditable.DeleteSelection;
begin
  gtk_Editable_delete_selection (TheGtkObject);
end;

procedure TFPgtkEditable.Clear;
begin
  DeleteText (0,-1);
end;

procedure InsertSignalproc (Sender:PGtkobject; NewText:pgChar; TextLength:integer; var Position:integer; data:pointer); cdecl;
var p : TFPgtkInsertSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkInsertSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, NewText, TextLength, Position, TheData)
  end;
end;

function TFPgtkEditable.InsertSignalConnect (signal:string; proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@InsertSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.InsertSignalConnectAfter (signal:string; proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@InsertSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure DeleteSignalproc (Sender:PGtkobject; StartPos:integer; EndPos:integer; data:pointer); cdecl;
var p : TFPgtkDeleteSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkDeleteSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, StartPos, EndPos, TheData)
  end;
end;

function TFPgtkEditable.DeleteSignalConnect (signal:string; proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@DeleteSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.DeleteSignalConnectAfter (signal:string; proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@DeleteSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure XYSignalproc (Sender:PGtkobject; x:integer; y:integer; data:pointer); cdecl;
var p : TFPgtkXYSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkXYSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, x, y, TheData)
  end;
end;

function TFPgtkEditable.XYSignalConnect (signal:string; proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@XYSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.XYSignalConnectAfter (signal:string; proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@XYSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure DirectionSignalproc (Sender:PGtkobject; Direction:integer; data:pointer); cdecl;
var p : TFPgtkDirectionSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkDirectionSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, Direction, TheData)
  end;
end;

function TFPgtkEditable.DirectionSignalConnect (signal:string; proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@DirectionSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.DirectionSignalConnectAfter (signal:string; proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@DirectionSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure MoveWordSignalproc (Sender:PGtkobject; NumWords:integer; data:pointer); cdecl;
var p : TFPgtkMoveWordSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkMoveWordSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, NumWords, TheData)
  end;
end;

function TFPgtkEditable.MoveWordSignalConnect (signal:string; proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@MoveWordSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.MoveWordSignalConnectAfter (signal:string; proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@MoveWordSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

procedure MovetoSignalproc (Sender:PGtkobject; MoveTo:integer; data:pointer); cdecl;
var p : TFPgtkMovetoSignalFunction;
begin
with PSignalData(data)^ do
  begin
  p := TFPgtkMovetoSignalFunction (TheSignalProc);
  p (TheWidget as TFPgtkObject, MoveTo, TheData)
  end;
end;

function TFPgtkEditable.MovetoSignalConnect (signal:string; proc:TFPgtkMovetoSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect (FGtkObject, pgChar(signal), gtk_signal_func(@MovetoSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.MovetoSignalConnectAfter (signal:string; proc:TFPgtkMovetoSignalFunction; data:pointer) : guint;
begin
  result := gtk_signal_connect_After (FGtkObject, pgChar(signal), gtk_signal_func(@MovetoSignalproc), ConvertSignalData(TFPgtkSignalFunction(proc), data, true));
end;

function TFPgtkEditable.ConnectChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgChanged, proc, data);
end;

function TFPgtkEditable.ConnectAfterChanged (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgChanged, proc, data);
end;

function TFPgtkEditable.ConnectActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgActivate, proc, data);
end;

function TFPgtkEditable.ConnectAfterActivate (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgActivate, proc, data);
end;

function TFPgtkEditable.ConnectInsertText (proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
begin
  result := InsertSignalConnect (sgInsertText, proc, data);
end;

function TFPgtkEditable.ConnectAfterInsertText (proc:TFPgtkInsertSignalFunction; data:pointer) : guint;
begin
  result := InsertSignalConnectAfter (sgInsertText, proc, data);
end;

function TFPgtkEditable.ConnectDeleteText (proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
begin
  result := DeleteSignalConnect (sgDeleteText, proc, data);
end;

function TFPgtkEditable.ConnectAfterDeleteText (proc:TFPgtkDeleteSignalFunction; data:pointer) : guint;
begin
  result := DeleteSignalConnectAfter (sgDeleteText, proc, data);
end;

function TFPgtkEditable.ConnectSetEditable (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := BooleanSignalConnect (sgSetEditable, proc, data);
end;

function TFPgtkEditable.ConnectAfterSetEditable (proc:TFPgtkBooleanSignalFunction; data:pointer) : guint;
begin
  result := BooleanSignalConnectAfter (sgSetEditable, proc, data);
end;

function TFPgtkEditable.ConnectMoveCursor (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := XYSignalConnect (sgMoveCursor, proc, data);
end;

function TFPgtkEditable.ConnectAfterMoveCursor (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := XYSignalConnectAfter (sgMoveCursor, proc, data);
end;

function TFPgtkEditable.ConnectMoveWord (proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
begin
  result := MoveWordSignalConnect (sgMoveWord, proc, data);
end;

function TFPgtkEditable.ConnectAfterMoveWord (proc:TFPgtkMoveWordSignalFunction; data:pointer) : guint;
begin
  result := MoveWordSignalConnectAfter (sgMoveWord, proc, data);
end;

function TFPgtkEditable.ConnectMovePage (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := XYSignalConnect (sgMovePage, proc, data);
end;

function TFPgtkEditable.ConnectAfterMovePage (proc:TFPgtkXYSignalFunction; data:pointer) : guint;
begin
  result := XYSignalConnectAfter (sgMovePage, proc, data);
end;

function TFPgtkEditable.ConnectMoveToRow (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
begin
  result := MoveToSignalConnect (sgMoveToRow, proc, data);
end;

function TFPgtkEditable.ConnectAfterMoveToRow (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
begin
  result := MoveToSignalConnectAfter (sgMoveToRow, proc, data);
end;

function TFPgtkEditable.ConnectMoveToCol (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
begin
  result := MoveToSignalConnect (sgMoveToCol, proc, data);
end;

function TFPgtkEditable.ConnectAfterMoveToCol (proc:TFPgtkMoveToSignalFunction; data:pointer) : guint;
begin
  result := MoveToSignalConnectAfter (sgMoveToCol, proc, data);
end;

function TFPgtkEditable.ConnectKillChar (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnect (sgKillChar, proc, data);
end;

function TFPgtkEditable.ConnectAfterKillChar (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnectAfter (sgKillChar, proc, data);
end;

function TFPgtkEditable.ConnectKillWord (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnect (sgKillWord, proc, data);
end;

function TFPgtkEditable.ConnectAfterKillWord (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnectAfter (sgKillWord, proc, data);
end;

function TFPgtkEditable.ConnectKillLine (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnect (sgKillLine, proc, data);
end;

function TFPgtkEditable.ConnectAfterKillLine (proc:TFPgtkDirectionSignalFunction; data:pointer) : guint;
begin
  result := DirectionSignalConnectAfter (sgKillLine, proc, data);
end;

function TFPgtkEditable.ConnectCutClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgCutClipboard, proc, data);
end;

function TFPgtkEditable.ConnectAfterCutClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgCutClipboard, proc, data);
end;

function TFPgtkEditable.ConnectCopyClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgCopyClipboard, proc, data);
end;

function TFPgtkEditable.ConnectAfterCopyClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgCopyClipboard, proc, data);
end;

function TFPgtkEditable.ConnectPasteClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnect (sgPasteClipboard, proc, data);
end;

function TFPgtkEditable.ConnectAfterPasteClipboard (proc:TFPgtkSignalFunction; data:pointer) : guint;
begin
  result := SignalConnectAfter (sgPasteClipboard, proc, data);
end;

 { TFPgtkEntry }

function TFPgtkEntry.TheGtkObject : PGtkEntry;
begin
  result := PgtkEntry(FGtkObject);
end;

procedure TFPgtkEntry.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_Entry_new);
end;


procedure TFPgtkEntry.SetText (TheValue:string);
begin
  gtk_Entry_set_text (TheGtkObject, Pgchar(TheValue));
end;

procedure TFPgtkEntry.AppendText (aText:string);
begin
  gtk_Entry_append_text (TheGtkObject, ConvertToPgchar(aText));
end;

procedure TFPgtkEntry.PrependText (aText:string);
begin
  gtk_Entry_prepend_text (TheGtkObject, ConvertToPgchar(aText));
end;

function TFPgtkEntry.GetVisibility : boolean;
begin
  result := boolean(gtk.visible(TheGtkObject^));
end;

procedure TFPgtkEntry.SetVisibility (TheValue:boolean);
begin
  gtk_Entry_set_visibility(TheGtkObject,TheValue);
end;

function TFPgtkEntry.GetMaxLength : word;
begin
  result := TheGtkObject^.text_max_length;
end;

procedure TFPgtkEntry.SetMaxLength (TheValue:word);
begin
  gtk_Entry_set_max_length(TheGtkObject,TheValue);
end;

 { TFPgtkSpinButton }

function TFPgtkSpinButton.TheGtkObject : PGtkSpinButton;
begin
  result := PgtkSpinButton(FGtkObject);
end;

procedure TFPgtkSpinButton.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_spin_button_new (TFPgtkAdjustment.Create.TheGtkObject,1,0));
end;


procedure TFPgtkSpinButton.Configure (Adj:TFPgtkAdjustment; aClimbRate:gfloat; aDigits:integer);
begin
  if assigned (Adj) then
    gtk_spin_button_configure (TheGtkObject, PGtkadjustment(Adj.TheGtkObject), aClimbRate, aDigits)
  else
    gtk_spin_button_configure (TheGtkObject, nil, aClimbRate, aDigits);
end;

function TFPgtkSpinButton.GetAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_spin_button_get_adjustment(TheGtkObject)),TFPGtkAdjustment) as TFPgtkAdjustment;
end;

procedure TFPgtkSpinButton.SetAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_spin_button_set_adjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkSpinButton.GetClimbRate : gfloat;
begin
  result := TheGtkObject^.climb_rate;
end;

procedure TFPgtkSpinButton.SetClimbRate (TheValue:gfloat);
begin
  TheGtkObject^.climb_rate := TheValue;
end;

function TFPgtkSpinButton.GetDigits : integer;
begin
  result := gtk.digits(TheGtkObject^);
end;

procedure TFPgtkSpinButton.SetDigits (TheValue:integer);
begin
  gtk_spin_button_set_digits(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetAsInteger : integer;
begin
  result := gtk_spin_button_get_value_as_int(TheGtkObject);
end;

procedure TFPgtkSpinButton.SetAsInteger (TheValue:integer);
begin
  gtk_spin_button_set_Value(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetAsFloat : gfloat;
begin
  result := gtk_spin_button_get_value_as_int(TheGtkObject);
end;

procedure TFPgtkSpinButton.SetAsFloat (TheValue:gfloat);
begin
  gtk_spin_button_set_Value(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetUpdatePolicy : TGtkSpinButtonUpdatePolicy;
begin
  result := TheGtkObject^.update_policy;
end;

procedure TFPgtkSpinButton.SetUpdatePolicy (TheValue:TGtkSpinButtonUpdatePolicy);
begin
  gtk_spin_button_set_update_policy(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetNumeric : boolean;
begin
  result := boolean(gtk.numeric(TheGtkObject^));
end;

procedure TFPgtkSpinButton.SetNumeric (TheValue:boolean);
begin
  gtk_spin_button_set_numeric(TheGtkObject,TheValue);
end;

procedure TFPgtkSpinButton.Spin (direction:TGtkSpinType; increment:gfloat);
begin
  gtk_spin_button_spin (TheGtkObject, direction, increment);
end;

function TFPgtkSpinButton.GetWrap : boolean;
begin
  result := boolean(gtk.wrap(TheGtkObject^));
end;

procedure TFPgtkSpinButton.SetWrap (TheValue:boolean);
begin
  gtk_spin_button_set_wrap(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetShadowType : TGtkShadowType;
begin
  result := TheGtkObject^.shadow_type;
end;

procedure TFPgtkSpinButton.SetShadowType (TheValue:TGtkShadowType);
begin
  gtk_spin_button_set_shadow_type(TheGtkObject,TheValue);
end;

function TFPgtkSpinButton.GetSnapToTicks : boolean;
begin
  result := boolean(gtk.snap_to_ticks(TheGtkObject^));
end;

procedure TFPgtkSpinButton.SetSnapToTicks (TheValue:boolean);
begin
  gtk_spin_button_set_snap_to_ticks(TheGtkObject,TheValue);
end;

procedure TFPgtkSpinButton.Update;
begin
  gtk_spin_button_update (TheGtkObject);
end;

 { TFPgtkText }

function TFPgtkText.TheGtkObject : PGtkText;
begin
  result := PgtkText(FGtkObject);
end;

procedure TFPgtkText.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_Text_new (null,null));
end;


constructor TFPgtkText.Create;
begin
  inherited create;
  editable := true;
  wordwrap := true;
  linewrap := true;
  FLines := TStringlist.Create;
  ConnectChanged (@SigChanged, nil);
end;


destructor TFPgtkText.Destroy;
begin
  FLines.Free;
  inherited;
end;


procedure TFPgtkText.SigChanged (Sender:TFPgtkObject; data:pointer);
begin
  FIsChanged := True;
end;

procedure TFPgtkText.RefreshLines;
begin
  if not assigned (FLines) then
    FLines := TStringlist.Create;
  FLines.Text := Text;
end;

function TFPgtkText.GetLines : TStrings;
begin
  if FIsChanged then
    RefreshLines;
  result := FLines;
end;

procedure TFPgtkText.Freeze;
begin
  gtk_Text_Freeze (TheGtkObject);
end;

procedure TFPgtkText.Thaw;
begin
  gtk_Text_Thaw (TheGtkObject);
end;

function TFPgtkText.TextLength : guint;
begin
  result := gtk_Text_get_length (TheGtkObject);
end;

procedure TFPgtkText.Insert (font:PgdkFont; fore:PgdkColor; back:PgdkColor; TheText:string);
begin
  gtk_text_insert (TheGtkObject, font, fore, back, pgchar(TheText), length(TheText));
end;

procedure TFPgtkText.DeleteBackward (number:longword);
begin
  gtk_Text_Backward_Delete (TheGtkObject, number);
end;

procedure TFPgtkText.DeleteForward (number:longword);
begin
  gtk_Text_Forward_Delete (TheGtkObject, number);
end;

function TFPgtkText.GetWordWrap : boolean;
begin
  result := boolean(gtk.word_wrap(TheGtkObject^));
end;

procedure TFPgtkText.SetWordWrap (TheValue:boolean);
begin
  gtk_text_set_word_wrap (TheGtkObject,gint(TheValue));
end;

function TFPgtkText.GetLineWrap : boolean;
begin
  result := boolean(gtk.Line_Wrap(TheGtkObject^));
end;

procedure TFPgtkText.SetLineWrap (TheValue:boolean);
begin
{$IFDEF win32 or go32v2}
  Set_Line_Wrap (TheGtkObject^, gint(TheValue));
{$ELSE}
  gtk_Text_Set_Line_Wrap (TheGtkObject, gint(TheValue));
{$ENDIF}
end;

function TFPgtkText.GetPoint : integer;
begin
  result := gtk_Text_get_Point(TheGtkObject);
end;

procedure TFPgtkText.SetPoint (TheValue:integer);
begin
  gtk_Text_set_Point(TheGtkObject,TheValue);
end;

procedure TFPgtkText.SetAdjustments (hadj:TFPgtkAdjustment; vadj:TFPgtkAdjustment);
begin
  gtk_text_set_adjustments (TheGtkObject, hadj.TheGtkObject, vadj.TheGtkObject);
end;

function TFPgtkText.GetHAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.hadj),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkText.SetHAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_Text_Set_Adjustments(TheGtkObject, TheValue.TheGtkObject, TheGtkObject^.vadj);
end;

function TFPgtkText.GetVAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(TheGtkObject^.vadj),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkText.SetVAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_Text_Set_Adjustments(TheGtkObject, TheGtkObject^.hadj, TheValue.TheGtkObject);
end;

procedure TFPgtkText.SetText (TheValue:string);
begin
  Freeze;
  {$ifdef gtkwin}
  TheValue := stringreplace (TheValue, #13#10, #10, [rfReplaceAll]);
  {$endif}
  clear;
  Insert (null, null, null, TheValue);
  Thaw;
end;

 { TFPgtkRuler }

function TFPgtkRuler.TheGtkObject : PGtkRuler;
begin
  result := PgtkRuler(FGtkObject);
end;


procedure TFPgtkRuler.SetMetric (aMetric:TGtkMetricType);
begin
  gtk_ruler_set_metric (TheGtkObject, aMetric);
end;

procedure TFPgtkRuler.SetRange (Lower:float; Upper:float; Position:float; MaxSize:float);
begin
  gtk_ruler_set_range (TheGtkObject, Lower, Upper, Position, MaxSize);
end;

 { TFPgtkHRuler }

function TFPgtkHRuler.TheGtkObject : PGtkHRuler;
begin
  result := PgtkHRuler(FGtkObject);
end;

procedure TFPgtkHRuler.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_hruler_new);
end;


 { TFPgtkVRuler }

function TFPgtkVRuler.TheGtkObject : PGtkVRuler;
begin
  result := PgtkVRuler(FGtkObject);
end;

procedure TFPgtkVRuler.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_vruler_new);
end;


 { TFPgtkRange }

function TFPgtkRange.TheGtkObject : PGtkRange;
begin
  result := PgtkRange(FGtkObject);
end;


function TFPgtkRange.GetAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance(PGtkObject(gtk_Range_get_Adjustment(TheGtkObject)),tfpgtkadjustment) as tfpgtkadjustment;
end;

procedure TFPgtkRange.SetAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_Range_set_adjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkRange.GetUpdatePolicy : TgtkUpdateType;
begin
  result := gtk.policy(TheGtkObject^);
end;

procedure TFPgtkRange.SetUpdatePolicy (TheValue:TgtkUpdateType);
begin
  gtk_Range_set_update_policy(TheGtkObject,TheValue);
end;

constructor TFPgtkRange.Create (AnAdjustment:TFPgtkAdjustment);
begin
  FAdj := AnAdjustment;
  inherited create;
end;


procedure TFPgtkRange.DrawBackground;
begin
  gtk_Range_draw_background (TheGtkObject);
end;

procedure TFPgtkRange.DrawTrough;
begin
  gtk_Range_draw_trough (TheGtkObject);
end;

procedure TFPgtkRange.DrawStepForw;
begin
  gtk_Range_draw_step_forw (TheGtkObject);
end;

procedure TFPgtkRange.DrawStepBack;
begin
  gtk_Range_draw_step_back (TheGtkObject);
end;

procedure TFPgtkRange.DrawSlider;
begin
  gtk_Range_draw_slider (TheGtkObject);
end;

procedure TFPgtkRange.SliderUpdate;
begin
  gtk_Range_slider_update (TheGtkObject);
end;

function TFPgtkRange.TroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
begin
  result := gtk_Range_trough_click (TheGtkObject, X, Y, @JumpPerc);
end;

procedure TFPgtkRange.DefaultHSliderUpdate;
begin
  gtk_Range_default_hslider_update (TheGtkObject);
end;

procedure TFPgtkRange.DefaultVSliderUpdate;
begin
  gtk_Range_default_vslider_update (TheGtkObject);
end;

function TFPgtkRange.DefaultHTroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
begin
  result := gtk_Range_default_htrough_click (TheGtkObject, X, Y, @JumpPerc);
end;

function TFPgtkRange.DefaultVTroughClick (X:integer; Y:integer; var JumpPerc:gfloat) : integer;
begin
  result := gtk_Range_default_vtrough_click (TheGtkObject, X, Y, @JumpPerc);
end;

procedure TFPgtkRange.defaultHMotion (XDelta:integer; YDelta:integer);
begin
  gtk_Range_default_hmotion (TheGtkObject, XDelta, YDelta);
end;

procedure TFPgtkRange.defaultVMotion (XDelta:integer; YDelta:integer);
begin
  gtk_Range_default_vmotion (TheGtkObject, XDelta, YDelta);
end;

procedure TFPgtkRange.ClearBackground;
begin
  gtk_Range_clear_background (TheGtkObject);
end;

 { TFPgtkScale }

function TFPgtkScale.TheGtkObject : PGtkScale;
begin
  result := PgtkScale(FGtkObject);
end;


procedure TFPgtkScale.SetDigits (TheValue:integer);
begin
  gtk_scale_set_digits (TheGtkObject, TheValue);
end;

function TFPgtkScale.GetDrawValue : boolean;
begin
  result := boolean(gtk.draw_value(TheGtkObject^));
end;

procedure TFPgtkScale.SetDrawValue (TheValue:boolean);
begin
  gtk_scale_set_draw_value(TheGtkObject,TheValue);
end;

function TFPgtkScale.GetValuePos : TGtkPositionType;
begin
  result := gtk.value_pos(TheGtkObject^);
end;

procedure TFPgtkScale.SetValuePos (TheValue:TGtkPositionType);
begin
  gtk_scale_set_value_pos(TheGtkObject,TheValue);
end;

 { TFPgtkHScale }

function TFPgtkHScale.TheGtkObject : PGtkHScale;
begin
  result := PgtkHScale(FGtkObject);
end;

procedure TFPgtkHScale.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_hscale_new (nil));
end;


 { TFPgtkVScale }

function TFPgtkVScale.TheGtkObject : PGtkVScale;
begin
  result := PgtkVScale(FGtkObject);
end;

procedure TFPgtkVScale.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_vscale_new (nil));
end;


 { TFPgtkScrollbar }

function TFPgtkScrollbar.TheGtkObject : PGtkScrollbar;
begin
  result := PgtkScrollbar(FGtkObject);
end;


 { TFPgtkHScrollbar }

function TFPgtkHScrollbar.TheGtkObject : PGtkHScrollbar;
begin
  result := PgtkHScrollbar(FGtkObject);
end;


procedure TFPgtkHScrollbar.CreateGtkObject;
var a : PgtkAdjustment;
begin
  if assigned (FAdj) then
    a := FAdj.TheGtkObject
  else
    a := null;
  FGtkObject := PgtkObject (gtk_hscrollbar_new (a));
  FAdj := nil;
end;

 { TFPgtkVScrollbar }


procedure TFPgtkVScrollbar.CreateGtkObject;
var a : PgtkAdjustment;
begin
  if assigned (FAdj) then
    a := FAdj.TheGtkObject
  else
    a := null;
  FGtkObject := PgtkObject (gtk_vscrollbar_new (a));
  FAdj := nil;
end;

 { TFPgtkSeparator }

function TFPgtkSeparator.TheGtkObject : PGtkSeparator;
begin
  result := PgtkSeparator(FGtkObject);
end;


 { TFPgtkHSeparator }

function TFPgtkHSeparator.TheGtkObject : PGtkHSeparator;
begin
  result := PgtkHSeparator(FGtkObject);
end;

procedure TFPgtkHSeparator.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_HSeparator_new);
end;


 { TFPgtkVSeparator }

function TFPgtkVSeparator.TheGtkObject : PGtkVSeparator;
begin
  result := PgtkVSeparator(FGtkObject);
end;

procedure TFPgtkVSeparator.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_VSeparator_new);
end;


 { TFPgtkPreview }

function TFPgtkPreview.TheGtkObject : PGtkPreview;
begin
  result := PgtkPreview(FGtkObject);
end;

procedure TFPgtkPreview.CreateGtkObject;
begin
  FGtkObject := PGtkObject(gtk_preview_new (GTK_PREVIEW_COLOR));
end;


procedure TFPgtkPreview.Size (aWidth:integer; aHeight:integer);
begin
  gtk_preview_size (TheGtkObject, aWidth, aHeight);
end;

procedure TFPgtkPreview.Put (aWindow:PGdkWindow; gc:PGdkGC; SrcX:integer; SrcY:integer; destX:integer; DestY:integer; aWidth:integer; aHeight:integer);
begin
  gtk_preview_put (TheGtkObject, aWindow, gc, SrcX, SrcY, destX, DestY, aWidth, aHeight);
end;

procedure TFPgtkPreview.DrawRow (data:pguchar; X:integer; Y:integer; W:integer);
begin
  gtk_preview_draw_row (TheGtkObject, data, X, Y, W);
end;

procedure SetGamma (aGamma:double);
begin
  gtk_preview_set_gamma (aGamma);
end;


function TFPgtkPreview.GetExpand : longbool;
begin
  result := longbool(gtk.expand(TheGtkObject^));
end;

procedure TFPgtkPreview.SetExpand (TheValue:longbool);
begin
  gtk_preview_set_expand(TheGtkObject,gint(TheValue));
end;

function TFPgtkPreview.GetDither : TGdkRgbDither;
begin
  result := TheGtkObject^.dither;
end;

procedure TFPgtkPreview.SetDither (TheValue:TGdkRgbDither);
begin
  gtk_preview_set_dither(TheGtkObject,TheValue);
end;

 { TFPgtkProgress }

function TFPgtkProgress.TheGtkObject : PGtkProgress;
begin
  result := PgtkProgress(FGtkObject);
end;


function TFPgtkProgress.GetShowtext : longbool;
begin
  result := longbool(gtk.show_text(TheGtkObject^));
end;

procedure TFPgtkProgress.SetShowtext (TheValue:longbool);
begin
  gtk_progress_set_show_text(TheGtkObject,gint(TheValue));
end;

function TFPgtkProgress.GetTextXAlign : gfloat;
begin
  result := TheGtkObject^.x_align;
end;

procedure TFPgtkProgress.SetTextXAlign (TheValue:gfloat);
begin
  gtk_progress_set_text_alignment (TheGtkObject, TheValue, TextYAlign);
end;

function TFPgtkProgress.GetTextYAlign : gfloat;
begin
  result := TheGtkObject^.y_align;
end;

procedure TFPgtkProgress.SetTextYAlign (TheValue:gfloat);
begin
  gtk_progress_set_text_alignment (TheGtkObject, TextXAlign, TheValue);
end;

procedure TFPgtkProgress.SetTextAlignment (anXalign:gfloat; anYAlign:gfloat);
begin
  gtk_progress_set_text_alignment (TheGtkObject, anXalign, anYAlign);
end;

function TFPgtkProgress.GetCurrentValue : float;
begin
  result := gtk_progress_get_Value(TheGtkObject);
end;

procedure TFPgtkProgress.SetCurrentValue (TheValue:float);
begin
  gtk_progress_Set_value (TheGtkObject, TheValue);
  Draw (nil);
end;

function TFPgtkProgress.GetPercentage : float;
begin
  result := gtk_progress_get_current_percentage(TheGtkObject);
end;

procedure TFPgtkProgress.SetPercentage (TheValue:float);
begin
  gtk_progress_set_percentage(TheGtkObject,TheValue);
end;

function TFPgtkProgress.PercentageFromValue (aValue:gfloat) : gfloat;
begin
  result := gtk_progress_get_percentage_from_value (TheGtkObject, aValue);
end;

function TFPgtkProgress.GetFormatString : string;
begin
  result := TheGtkObject^.format;
end;

procedure TFPgtkProgress.SetFormatString (TheValue:string);
begin
  gtk_progress_set_format_string(TheGtkObject,ConvertToPgchar(TheValue));
end;

function TFPgtkProgress.GetAdjustment : TFPgtkAdjustment;
begin
  result := GetPascalInstance (PGtkObject(TheGtkObject^.adjustment), TFPgtkAdjustment) as TFPgtkAdjustment;
end;

procedure TFPgtkProgress.SetAdjustment (TheValue:TFPgtkAdjustment);
begin
  gtk_progress_set_adjustment(TheGtkObject,PGtkadjustment(ConvertToGtkObject(TheValue)));
end;

function TFPgtkProgress.GetActivityMode : longbool;
begin
  result := longbool(gtk.activity_mode(TheGtkObject^));
end;

procedure TFPgtkProgress.SetActivityMode (TheValue:longbool);
begin
  gtk_progress_set_activity_mode(TheGtkObject,gint(TheValue));
end;

function TFPgtkProgress.CurrentText : string;
begin
  result := gtk_progress_get_current_text (TheGtkObject);
end;

function TFPgtkProgress.TextFromValue (aValue:gfloat) : string;
begin
  result := gtk_progress_get_text_from_value (TheGtkObject, aValue);
end;

procedure TFPgtkProgress.Configure (aValue:gfloat; aMin:gfloat; aMax:gfloat);
begin
  gtk_progress_configure (TheGtkObject, aValue, aMin, aMax);
end;

 { TFPgtkProgressBar }

function TFPgtkProgressBar.TheGtkObject : PGtkProgressBar;
begin
  result := PgtkProgressBar(FGtkObject);
end;


constructor TFPgtkProgressBar.Create (adj:TFPgtkAdjustment);
begin
  FAdj := adj;
  inherited create;
end;


procedure TFPgtkProgressBar.CreateGtkObject;
begin
  if assigned (FAdj) then
    TheGtkWidget := gtk_progress_bar_new_with_adjustment (FAdj.TheGtkObject)
  else
    TheGtkWidget := gtk_progress_bar_new;
end;

function TFPgtkProgressBar.GetBarStyle : TGtkProgressBarStyle;
begin
  result := TheGtkObject^.bar_style;
end;

procedure TFPgtkProgressBar.SetBarStyle (TheValue:TGtkProgressBarStyle);
begin
  gtk_progress_bar_set_bar_style(TheGtkObject,TheValue);
end;

function TFPgtkProgressBar.GetDiscreteBlocks : longword;
begin
  result := TheGtkObject^.blocks;
end;

procedure TFPgtkProgressBar.SetDiscreteBlocks (TheValue:longword);
begin
  gtk_progress_bar_set_discrete_blocks(TheGtkObject,TheValue);
end;

function TFPgtkProgressBar.GetActivityStep : longword;
begin
  result := TheGtkObject^.activity_step;
end;

procedure TFPgtkProgressBar.SetActivityStep (TheValue:longword);
begin
  gtk_progress_bar_set_activity_step(TheGtkObject,TheValue);
end;

function TFPgtkProgressBar.GetActivityBlocks : longword;
begin
  result := TheGtkObject^.activity_blocks;
end;

procedure TFPgtkProgressBar.SetActivityBlocks (TheValue:longword);
begin
  gtk_progress_bar_set_activity_blocks(TheGtkObject,TheValue);
end;

function TFPgtkProgressBar.GetOrientation : TGtkProgressBarOrientation;
begin
  result := TheGtkObject^.orientation;
end;

procedure TFPgtkProgressBar.SetOrientation (TheValue:TGtkProgressBarOrientation);
begin
  gtk_progress_bar_set_orientation(TheGtkObject,TheValue);
end;

 { TFPgtkItemFactory }


INITIALIZATION
ObjectsToFree := TList.Create;

FINALIZATION
ObjectsToFree.Free;
if assigned (TheTooltips) then
  TheTooltips.Free;

End.
