Question about how to start editing GTree.cell_renderer_text's in some easy and safe way...
"Stalkern 2 (Fastweb)" <[email protected]> Thu, 03 Jun 2010 16:52:32 +0200
| Newsgroups | gmane.comp.lang.ocaml.lib.gtk |
|---|---|
| Message-ID | <[email protected]> |
Hello to everybody!
I was looking at the tree.ml example provided with lablgtk2 and I was
modifying it so to get cell editing just as soon as cursor is moved to
an editable cell, without needing to activate the row or press the
[Space] key or the [Return] key.
Here is the code:
-------------------------------
tree_testForCellEditing1.ml
-------------------------------
open StdLabels
open Gobject.Data
let cols = new GTree.column_list
let title = cols#add string
let author = cols#add string
let checked = cols#add boolean
let authorCellrenderer = (GTree.cell_renderer_text[])
(*set 'author' cell as editable*)
let () = (authorCellrenderer#set_properties [ (`EDITABLE true) ])
let create_model () =
let store = GTree.tree_store cols in
let row = store#append () in
store#set ~row ~column:title "The Arch of Computer Programming";
store#set ~row ~column:author "Donald Knots";
store#set ~row ~column:checked false;
let row = store#append () in
store#set ~row ~column:title "The Chart of Programmers' Computing";
store#set ~row ~column:author "A. N. Onymous";
store#set ~row ~column:checked false;
let row = store#append () in
store#set ~row ~column:title "The Bar of Histeric Scripting";
store#set ~row ~column:author "Gerald Fitz";
store#set ~row ~column:checked false;
(*store#set ~row:(store#append ~parent:row ())
~column:title "Volume 1: Fundamental Algorithms";
store#set ~row:(store#append ~parent:row ())
~column:title "Volume 2: Seminumerical Algorithms";
store#set ~row:(store#append ~parent:row ())
~column:title "Volume 3: Sorting and Searching Algorithms";*)
store
let main () =
let model = create_model () in
let window = GWindow.window () in
window#connect#destroy ~callback:GMain.quit;
let view = GTree.view ~model ~packing:window#add () in
let col = GTree.view_column ~title:"Title" ()
~renderer:(GTree.cell_renderer_text[], ["text",title]) in
view#append_column col;
let col = GTree.view_column ~title:"Author" ()
~renderer:(authorCellrenderer, ["text",author]) in
view#append_column col;
let col = GTree.view_column ~title:"Checked-out" ()
~renderer:(GTree.cell_renderer_text[], ["text",checked]) in
view#append_column col;
view#selection#connect#after#changed ~callback:
begin fun () ->
prerr_endline "selection changed";
List.iter view#selection#get_selected_rows ~f:
(
fun p ->
(
prerr_endline (GtkTree.TreePath.to_string p);
view#set_cursor
~cell:authorCellrenderer
~edit:true (*start_editing?*)
p
(view#get_column 1)
)
)
end;
window#show ();
GMain.main ()
let () = main ()
-------------------------------
If I run the above code with
$ lablgtk2 tree_testForCellEditing1.ml
I don't see *any* editing "just" triggered by the selection_changed
callback.
Indeed, I notice *no difference* between the behaviour obtained writing
--8<----8<----8<----8<----8<----8<----
view#set_cursor
~cell:authorCellrenderer
~edit:false
p
(view#get_column 1)
---->8---->8---->8---->8---->8---->8--
and the one obtained writing
--8<----8<----8<----8<----8<----8<----
view#set_cursor
~cell:authorCellrenderer
~edit:true
p
(view#get_column 1)
---->8---->8---->8---->8---->8---->8--
I've been noticing this using lablgtk 2.10.1 with glib-2.0 version
2.20.0 and gtk+-2.0 version 2.14.7.
I've been reading around for days, but I did not find anything about
this behaviour. One issue with missing the editing keys is that "input
methods" windows pop up, take the focus and then I end up filling
something in the outer space, far away from my app, with no hope of
coming back ...
Any idea?
Thank you in advance for any hint!
Ernesto Torresin