Вы должны подключить сигнал edited
, чтобы получать уведомления об изменениях, сделанных пользователем, вот полный пример:
class MainWindow : Gtk.Window {
public MainWindow () {
Gtk.TreeView tree_view = new Gtk.TreeView ();
setup_treeview (tree_view);
add(tree_view);
}
private void setup_treeview (Gtk.TreeView view) {
var listmodel = new Gtk.ListStore (4, typeof (string), typeof (string),
typeof (string), typeof (string));
view.set_model (listmodel);
view.insert_column_with_attributes (-1, "Account Name", new Gtk.CellRendererText (), "text", 0);
view.insert_column_with_attributes (-1, "Type", new Gtk.CellRendererText (), "text", 1);
var cell = new Gtk.CellRendererText ();
cell.set ("foreground_set", true);
cell.editable = true;
cell.edited.connect ((path, new_text) => {
stdout.printf (path + "\n");
stdout.printf (new_text + "\n");
stdout.flush ();
});
view.insert_column_with_attributes (-1, "Balance", cell, "text", 2, "foreground", 3);
Gtk.TreeIter iter;
listmodel.append (out iter);
listmodel.set (iter, 0, "My Visacard", 1, "card", 2, "102,10", 3, "red");
listmodel.append (out iter);
listmodel.set (iter, 0, "My Mastercard", 1, "card", 2, "10,20", 3, "red");
}
}
int main (string[] args) {
Gtk.init (ref args);
MainWindow window = new MainWindow ();
window.title = "Tree View test";
window.border_width = 10;
window.window_position = Gtk.WindowPosition.CENTER;
window.set_default_size (350, 200);
window.destroy.connect (Gtk.main_quit);
window.show_all ();
Gtk.main ();
return 0;
}
Важный бит здесь:
var cell = new Gtk.CellRendererText ();
cell.editable = true;
cell.edited.connect ((path, new_text) => {
stdout.printf (path + "\n");
stdout.printf (new_text + "\n");
stdout.flush ();
});
Он выведет путь и новый_текст измененной ячейки в командную строку.
Все, что вам нужно сделать, это обновить модель соответствующим образом.