method private connect_events =
ignore (view#event#connect#button_press ~callback:
(
fun ev ->
match GdkEvent.get_type ev with
`BUTTON_PRESS when GdkEvent.Button.button ev = 3 ->
(
GToolbox.popup_menu
~button: 3
~time: (Int32.zero)
~entries: self#menu;
true
)
| `TWO_BUTTON_PRESS ->
(
let x = int_of_float (GdkEvent.Button.x ev) in
let y = int_of_float (GdkEvent.Button.y ev) in
match view#get_path_at_pos ~x ~y with
None -> true
| Some (path,_,_,_) ->
let d =
let it = store#get_iter path in
store#get ~row: it ~column: col_data
in
self#on_double_click d;
true
)
| `BUTTON_PRESS
| `BUTTON_RELEASE
| `THREE_BUTTON_PRESS -> false
)
);
ignore
(view#selection#connect#changed
(fun () ->
let sel = view#selection in
match sel#get_selected_rows with
[] ->
selection <- [];
List.iter self#on_deselect selection
| l ->
let l = List.map
(fun path ->
let it = store#get_iter path in
store#get ~row: it ~column: col_data
)
l
in
let newly_selected =
List.filter (fun e -> not (List.mem e selection)) l
in
let no_more_selected =
List.filter (fun e -> not (List.mem e l)) selection
in
selection <- l;
List.iter self#on_deselect no_more_selected;
List.iter self#on_select newly_selected;
)
);
ignore
(view#event#connect#key_press
(fun t ->
(List.mem (GdkEvent.Key.keyval t)
[
GdkKeysyms._ISO_Enter ;
GdkKeysyms._KP_Enter ;
GdkKeysyms._Return ;
]
) && (self#on_enter (); true)
)
);
let f = function
| ColString _ | ColPixbuf _ -> ()
| ColCheck(col,renderer,_,f_on_toggle) ->
ignore(renderer#connect#toggled
(fun path ->
let it = store#get_iter path in
let (data, v) =
(store#get ~row: it ~column: col_data,
store#get ~row: it ~column: col)
in
let v = f_on_toggle data (not v) in
store#set ~row: it ~column: col v;
)
)
in
List.iter f cols_display;