2
class button_wire_tuple ~owner ~system =
3
let clicked = Chip.wcounter ~name:(owner^"#clicked") ~system () in
4
let enter = Chip.wcounter ~name:(owner^"#enter") ~system () in
5
let leave = Chip.wcounter ~name:(owner^"#leave") ~system () in
6
let pressed = Chip.wcounter ~name:(owner^"#pressed") ~system () in
7
let released = Chip.wcounter ~name:(owner^"#clicked") ~system () in
9
method clicked = clicked
12
method pressed = pressed
13
method released = released
23
type button_signal = Clicked | Enter | Leave | Pressed | Released
30
let name = match name with None -> Chip.fresh_wire_name "button" | Some x -> x in
31
let wire = new button_wire_tuple ~owner:name ~system in
33
inherit GButton.button (obj : Gtk.button Gtk.obj) as self_as_gbutton
36
inherit [ button_signal, (int * int * int * int * int)] Chip.wire ~name ?parent system as self_as_wire
40
self_as_wire#destroy ();
41
self_as_gbutton#destroy ()
43
method reset () = assert false (* unused! *)
45
method set_alone = function
46
| Clicked -> wire#clicked#set ()
47
| Enter -> wire#enter#set ()
48
| Leave -> wire#leave#set ()
49
| Pressed -> wire#pressed#set ()
50
| Released -> wire#released#set ()
60
Printf.sprintf "%d [shape=record, label=\"%s (%d) | {|{%s}|}\"];"
64
(Chip.dot_record_of_port_names
72
ignore (self#connect#clicked ~callback:(wire#clicked#set));
73
ignore (self#connect#enter ~callback:(wire#enter#set));
74
ignore (self#connect#leave ~callback:(wire#leave#set));
75
ignore (self#connect#pressed ~callback:(wire#pressed#set));
76
ignore (self#connect#released ~callback:(wire#released#set));
77
let p = (Some self#as_common) in
78
wire#clicked#set_parent p;
79
wire#enter#set_parent p;
80
wire#leave#set_parent p;
81
wire#pressed#set_parent p;
82
wire#released#set_parent p;
86
let pack_return create p ?packing ?show () =
87
GObj.pack_return (create p) ~packing ~show
89
let button ?name ?parent (system:Chip.system) ?label =
90
GtkButton.Button.make_params [] ?label ~cont:(
91
pack_return (fun p -> new button ?name ?parent system (GtkButton.Button.create p)))