Чтобы получать уведомления одним щелчком мыши, подключитесь к сигналу cursor_changed .Это не предоставляет никаких переменных для функции обратного вызова, поэтому вам нужно определить отдельную функцию, которая получает индекс выбранного элемента:
Эта функция может использовать метод get_selection () объект TreeView для получения объекта TreeSelection.Установите режим выбора на одиночный выбор , используя метод set_mode .Затем вы можете получить TreeModel и TreeIter , используя параметры out метода get_selected .Вы должны проверить возвращаемое значение этой функции - true, если что-то выбрано, и false, если ничего не выбрано.Затем используйте метод get_path TreeModel, чтобы получить TreePath выбранного элемента.
Полный пример:
using Gtk;
public class MyListView : ScrolledWindow {
ListStore list_store;
TreeView tree_view;
GLib.List<string> list;
enum Columns {
TEXT,
N_COLUMNS
}
void make_list () {
list = new GLib.List<string> ();
list.append("Hello World");
list.append("row 2");
list.append("<b>bold</b>");
list.append("<i>italic</i>");
list.append("...");
list.append("etc.");
}
public MyListView () {
make_list();
list_store = new ListStore(Columns.N_COLUMNS, typeof(string));
tree_view = new TreeView.with_model(list_store);
var text = new CellRendererText ();
var column = new TreeViewColumn ();
column.pack_start (text, true);
column.add_attribute (text, "markup", Columns.TEXT);
tree_view.append_column (column);
tree_view.set_headers_visible (false);
TreeIter iter;
foreach (string item in list) {
list_store.append(out iter);
list_store.set(
iter,
Columns.TEXT, item
);
}
this.add(tree_view);
tree_view.cursor_changed.connect(change);
}
public int get_selected () {
var selection = tree_view.get_selection();
selection.set_mode(SelectionMode.SINGLE);
TreeModel model;
TreeIter iter;
if (!selection.get_selected(out model, out iter)) {
return -1;
}
TreePath path = model.get_path(iter);
return int.parse(path.to_string());
}
public void change () {
var index = this.get_selected();
if (index >= 0) {
var item = list.nth_data(index);
print(index.to_string() + ". " + item + "\n");
}
}
}
public static void main (string[] args) {
Gtk.init(ref args);
var win = new Window();
win.add(new MyListView());
win.show_all();
win.destroy.connect(Gtk.main_quit);
Gtk.main();
}