5
let hbox = GPack.hbox () in
6
let scw = GBin.scrolled_window
9
~packing:(hbox#pack ~expand:true) () in
11
let columns = new GTree.column_list in
12
let command_col = columns#add Data.string in
13
let coq_col = columns#add Data.string in
14
let store = GTree.list_store columns
17
(* populate the store *)
18
let _ = List.iter (fun (x,y) ->
19
let row = store#append () in
20
store#set ~row ~column:command_col x;
21
store#set ~row ~column:coq_col y)
24
let view = GTree.view ~model:store ~packing:scw#add_with_viewport () in
26
(* Alternate colors for the rows *)
27
view#set_rules_hint true;
29
let renderer_comm = GTree.cell_renderer_text [`EDITABLE true] in
30
ignore (renderer_comm#connect#edited
31
~callback:(fun (path:Gtk.tree_path) (s:string) ->
33
~row:(store#get_iter path)
34
~column:command_col s));
36
GTree.view_column ~title:"Coq Command to try"
37
~renderer:(renderer_comm,["text",command_col])
39
in ignore (view#append_column first);
41
let renderer_coq = GTree.cell_renderer_text [`EDITABLE true] in
42
ignore(renderer_coq#connect#edited
43
~callback:(fun (path:Gtk.tree_path) (s:string) ->
45
~row:(store#get_iter path)
48
GTree.view_column ~title:"Coq Command to insert"
49
~renderer:(renderer_coq,["text",coq_col])
51
in ignore (view#append_column second);
53
let vbox = GPack.button_box `VERTICAL ~packing:hbox#pack ~layout:`SPREAD ()
55
let up = GButton.button ~stock:`GO_UP ~label:"Up" ~packing:(vbox#pack ~expand:true ~fill:false) () in
56
let down = GButton.button
59
~packing:(vbox#pack ~expand:true ~fill:false) ()
61
let add = GButton.button ~stock:`ADD
63
~packing:(vbox#pack ~expand:true ~fill:false)
66
let remove = GButton.button ~stock:`REMOVE
68
~packing:(vbox#pack ~expand:true ~fill:false) ()
71
ignore (add#connect#clicked
73
let n = store#append () in
74
view#selection#select_iter n));
75
ignore (remove#connect#clicked
76
~callback:(fun b -> match view#selection#get_selected_rows with
79
let iter = store#get_iter path in
80
ignore (store#remove iter);
82
ignore (up#connect#clicked
84
match view#selection#get_selected_rows with
87
let iter = store#get_iter path in
88
ignore (GtkTree.TreePath.prev path);
89
let upiter = store#get_iter path in
90
ignore (store#swap iter upiter);
92
ignore (down#connect#clicked
94
match view#selection#get_selected_rows with
97
let iter = store#get_iter path in
98
GtkTree.TreePath.next path;
99
try let upiter = store#get_iter path in
100
ignore (store#swap iter upiter)
104
let start_path = GtkTree.TreePath.from_string "0" in
105
let start_iter = store#get_iter start_path in
107
let new_acc = (store#get ~row:start_iter ~column:command_col,
108
store#get ~row:start_iter ~column:coq_col)::acc
110
if store#iter_next start_iter then all new_acc else List.rev new_acc