module GUtil:sig
..end
val print_widget : Stdlib.Format.formatter -> #GObj.widget -> unit
A nice function to use with #install_printer
The memo class provides an easy way to remember the real class of
a widget.
Insert all widgets of class in one single t memo
, and you can then
recover their original ML object with #find
.
class[< get_oid : int; .. >]
memo :unit ->
object
..end
It allows one to add GTK-like signals to arbitrary objects.
val next_callback_id : unit -> GtkSignal.id
class['a]
signal :unit ->
object
..end
As with GTK signals, you can use GtkSignal.stop_emit
inside a
callback to prevent other callbacks from being called.
class virtual ml_signals :(GtkSignal.id -> bool) list ->
object
..end
class virtual add_ml_signals :'a Gtk.obj -> (GtkSignal.id -> bool) list ->
object
..end
To add ML signals to a LablGTK object:
class mywidget_signals obj ~mysignal1 ~mysignal2 = object
inherit somewidget_signals obj
inherit add_ml_signals obj [mysignal1#disconnect; mysignal2#disconnect]
method mysignal1 = mysignal1#connect ~after
method mysignal2 = mysignal2#connect ~after
end
class mywidget obj = object (self)
inherit somewidget obj
val mysignal1 = new signal obj
val mysignal2 = new signal obj
method connect = new mywidget_signals obj ~mysignal1 ~mysignal2
method call1 = mysignal1#call
method call2 = mysignal2#call
end
You can also add ML signals to an arbitrary object; just inherit
from ml_signals
in place of widget_signals
+add_ml_signals
.
class mysignals ~mysignal1 ~mysignal2 = object
inherit ml_signals [mysignal1#disconnect; mysignal2#disconnect]
method mysignal1 = mysignal1#connect ~after
method mysignal2 = mysignal2#connect ~after
end
The variable class provides an easy way to propagate state modifications.
A new variable is created by new variable init
. The #set
method just
calls the set
signal, which by default only calls real_set
.
real_set
sets the variable and calls changed
when needed.
Deep equality is used to compare values, but check is only done if
there are callbacks for changed
.
class['a]
variable_signals :set:'a signal -> changed:'a signal ->
object
..end
class['a]
variable :'a ->
object
..end