--- /dev/null
+(* $Id$ *)
+
+open Gaux
+open Gtk
+open GtkData
+open GtkBase
+
+(* Object *)
+
+class gtkobj obj = object
+ val obj = obj
+ method destroy () = Object.destroy obj
+ method get_id = Object.get_id obj
+end
+
+class gtkobj_misc obj = object
+ val obj = obj
+ method get_type = Type.name (Object.get_type obj)
+ method disconnect = GtkSignal.disconnect obj
+ method handler_block = GtkSignal.handler_block obj
+ method handler_unblock = GtkSignal.handler_unblock obj
+end
+
+class gtkobj_signals ?(after=false) obj = object
+ val obj = obj
+ val after = after
+ method after = {< after = true >}
+ method destroy = GtkSignal.connect ~sgn:Object.Signals.destroy obj
+end
+
+(* Widget *)
+
+class event_signals ?(after=false) obj = object
+ val obj = Widget.coerce obj
+ val after = after
+ method after = {< after = true >}
+ method any = GtkSignal.connect ~sgn:Widget.Signals.Event.any ~after obj
+ method button_press =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.button_press ~after obj
+ method button_release =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.button_release ~after obj
+ method configure =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.configure ~after obj
+ method delete =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.delete ~after obj
+ method destroy =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.destroy ~after obj
+ method enter_notify =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.enter_notify ~after obj
+ method expose =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.expose ~after obj
+ method focus_in =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.focus_in ~after obj
+ method focus_out =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.focus_out ~after obj
+ method key_press =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.key_press ~after obj
+ method key_release =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.key_release ~after obj
+ method leave_notify =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.leave_notify ~after obj
+ method map = GtkSignal.connect ~sgn:Widget.Signals.Event.map ~after obj
+ method motion_notify =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.motion_notify ~after obj
+ method property_notify =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.property_notify ~after obj
+ method proximity_in =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_in ~after obj
+ method proximity_out =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_out ~after obj
+ method selection_clear =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.selection_clear ~after obj
+ method selection_notify =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.selection_notify ~after obj
+ method selection_request =
+ GtkSignal.connect ~sgn:Widget.Signals.Event.selection_request ~after obj
+ method unmap = GtkSignal.connect ~sgn:Widget.Signals.Event.unmap ~after obj
+end
+
+class event_ops obj = object
+ val obj = Widget.coerce obj
+ method add = Widget.add_events obj
+ method connect = new event_signals obj
+ method send : Gdk.Tags.event_type Gdk.event -> bool = Widget.event obj
+ method set_extensions = Widget.set_extension_events obj
+end
+
+class style st = object
+ val style = st
+ method as_style = style
+ method copy = {< style = Style.copy style >}
+ method bg state = Style.get_bg style ~state
+ method colormap = Style.get_colormap style
+ method font = Style.get_font style
+ method set_bg =
+ List.iter ~f:
+ (fun (state,c) -> Style.set_bg style ~state ~color:(GDraw.color c))
+ method set_font = Style.set_font style
+ method set_background = Style.set_background style
+end
+
+class selection_data (sel : Selection.t) = object
+ val sel = sel
+ method selection = Selection.selection sel
+ method target = Selection.target sel
+ method seltype = Selection.seltype sel
+ method format = Selection.format sel
+ method data = Selection.get_data sel
+ method set = Selection.set sel
+end
+
+class drag_signals ?(after=false) obj = object
+ val obj = Widget.coerce obj
+ val after = after
+ method after = {< after = true >}
+ method beginning ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_begin ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method ending ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_end ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method data_delete ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_data_delete ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method leave ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_leave ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method motion ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_motion ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method drop ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_drop ~after obj
+ ~callback:(fun context -> callback (new drag_context context))
+ method data_get ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_data_get ~after obj
+ ~callback:(fun context data -> callback (new drag_context context)
+ (new selection_data data))
+ method data_received ~callback =
+ GtkSignal.connect ~sgn:Widget.Signals.drag_data_received ~after obj
+ ~callback:(fun context ~x ~y data -> callback (new drag_context context)
+ ~x ~y (new selection_data data))
+
+end
+
+and drag_ops obj = object
+ val obj = Widget.coerce obj
+ method connect = new drag_signals obj
+ method dest_set ?(flags=[`ALL]) ?(actions=[]) targets =
+ DnD.dest_set obj ~flags ~actions ~targets:(Array.of_list targets)
+ method dest_unset () = DnD.dest_unset obj
+ method get_data ?(time=0) ~context:(context : drag_context) target =
+ DnD.get_data obj (context : < context : Gdk.drag_context; .. >)#context
+ ~target ~time
+ method highlight () = DnD.highlight obj
+ method unhighlight () = DnD.unhighlight obj
+ method source_set ?modi:m ?(actions=[]) targets =
+ DnD.source_set obj ?modi:m ~actions ~targets:(Array.of_list targets)
+ method source_set_icon ?(colormap = Gdk.Color.get_system_colormap ())
+ (pix : GDraw.pixmap) =
+ DnD.source_set_icon obj ~colormap pix#pixmap ?mask:pix#mask
+ method source_unset () = DnD.source_unset obj
+end
+
+and drag_context context = object
+ inherit GDraw.drag_context context
+ method context = context
+ method finish = DnD.finish context
+ method source_widget =
+ new widget (Object.unsafe_cast (DnD.get_source_widget context))
+ method set_icon_widget (w : widget) =
+ DnD.set_icon_widget context (w#as_widget)
+ method set_icon_pixmap ?(colormap = Gdk.Color.get_system_colormap ())
+ (pix : GDraw.pixmap) =
+ DnD.set_icon_pixmap context ~colormap pix#pixmap ?mask:pix#mask
+end
+
+and misc_signals ?after obj = object
+ inherit gtkobj_signals ?after obj
+ method draw ~callback =
+ GtkSignal.connect obj ~sgn:Widget.Signals.draw ~after ~callback:
+ begin fun rect ->
+ callback
+ { x = Gdk.Rectangle.x rect ; y = Gdk.Rectangle.y rect;
+ width = Gdk.Rectangle.width rect;
+ height = Gdk.Rectangle.height rect }
+ end
+ method show = GtkSignal.connect ~sgn:Widget.Signals.show ~after obj
+ method hide = GtkSignal.connect ~sgn:Widget.Signals.hide ~after obj
+ method map = GtkSignal.connect ~sgn:Widget.Signals.map ~after obj
+ method unmap = GtkSignal.connect ~sgn:Widget.Signals.unmap ~after obj
+ method realize = GtkSignal.connect ~sgn:Widget.Signals.realize ~after obj
+ method state_changed =
+ GtkSignal.connect ~sgn:Widget.Signals.state_changed ~after obj
+ method parent_set ~callback =
+ GtkSignal.connect obj ~sgn:Widget.Signals.parent_set ~after ~callback:
+ begin function
+ None -> callback None
+ | Some w -> callback (Some (new widget (Object.unsafe_cast w)))
+ end
+ method style_set ~callback =
+ GtkSignal.connect obj ~sgn:Widget.Signals.style_set ~after ~callback:
+ (fun opt -> callback (may opt ~f:(new style)))
+end
+
+and misc_ops obj = object
+ inherit gtkobj_misc (Widget.coerce obj)
+ method connect = new misc_signals obj
+ method show () = Widget.show obj
+ method unparent () = Widget.unparent obj
+ method show_all () = Widget.show_all obj
+ method hide () = Widget.hide obj
+ method hide_all () = Widget.hide_all obj
+ method map () = Widget.map obj
+ method unmap () = Widget.unmap obj
+ method realize () = Widget.realize obj
+ method unrealize () = Widget.unrealize obj
+ method draw = Widget.draw obj
+ method activate () = Widget.activate obj
+ method reparent (w : widget) = Widget.reparent obj w#as_widget
+ method popup = Widget.popup obj
+ method intersect = Widget.intersect obj
+ method grab_focus () = Widget.grab_focus obj
+ method grab_default () = Widget.grab_default obj
+ method is_ancestor (w : widget) = Widget.is_ancestor obj w#as_widget
+ method add_accelerator ~sgn:sg ~group ?modi ?flags key =
+ Widget.add_accelerator obj ~sgn:sg group ~key ?modi ?flags
+ method remove_accelerator ~group ?modi key =
+ Widget.remove_accelerator obj group ~key ?modi
+ method lock_accelerators () = Widget.lock_accelerators obj
+ method set_name = Widget.set_name obj
+ method set_state = Widget.set_state obj
+ method set_sensitive = Widget.set_sensitive obj
+ method set_can_default = Widget.set_can_default obj
+ method set_can_focus = Widget.set_can_focus obj
+ method set_geometry ?(x = -2) ?(y = -2) ?(width = -2) ?(height = -2) () =
+ if x+y <> -4 then Widget.set_uposition obj ~x ~y;
+ if width+height <> -4 then Widget.set_usize obj ~width ~height
+ method set_style (style : style) = Widget.set_style obj style#as_style
+ (* get functions *)
+ method name = Widget.get_name obj
+ method toplevel =
+ try Some (new widget (Object.unsafe_cast (Widget.get_toplevel obj)))
+ with Gpointer.Null -> None
+ method window = Widget.window obj
+ method colormap = Widget.get_colormap obj
+ method visual = Widget.get_visual obj
+ method visual_depth = Gdk.Window.visual_depth (Widget.get_visual obj)
+ method pointer = Widget.get_pointer obj
+ method style = new style (Widget.get_style obj)
+ method visible = Widget.visible obj
+ method has_focus = Widget.has_focus obj
+ method parent =
+ try Some (new widget (Object.unsafe_cast (Widget.parent obj)))
+ with Gpointer.Null -> None
+ method set_app_paintable = Widget.set_app_paintable obj
+ method allocation = Widget.allocation obj
+end
+
+and widget obj = object (self)
+ inherit gtkobj obj
+ method as_widget = Widget.coerce obj
+ method misc = new misc_ops obj
+ method drag = new drag_ops (Object.unsafe_cast obj)
+ method coerce =
+ (self :> < destroy : _; get_id : _; as_widget : _; misc : _;
+ drag : _; coerce : _ >)
+end
+
+(* just to check that GDraw.misc_ops is compatible with misc_ops *)
+let _ = fun (x : #GDraw.misc_ops) -> (x : misc_ops)
+
+class widget_signals ?after (obj : [> `widget] obj) =
+ gtkobj_signals ?after obj
+
+(*
+class widget_coerce obj = object
+ inherit widget obj
+ method coerce = (self :> widget)
+end
+*)
+
+class widget_full obj = object
+ inherit widget obj
+ method connect = new widget_signals obj
+end
+
+let as_widget (w : widget) = w#as_widget
+
+let pack_return self ~packing ~show =
+ may packing ~f:(fun f -> (f (self :> widget) : unit));
+ if show <> Some false then self#misc#show ();
+ self