Gtk.TreeViewの信号にどのように接続すれば、行が選択されたときに通知されるのですか?現在、私はrow_activated信号に接続していますが、これは行をダブルクリックする必要があり、シングルクリックで通知されたいのです。ツリービュー(リストストア)行が選択されたときに通知を受け取る方法は?
プログラム例:
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.row_activated.connect(change);
}
public void change (TreePath path, TreeViewColumn col) {
var index = int.parse(path.to_string());
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();
}
このプログラムは、私がrow_activatedのダブルクリックの必要性がある場合を除くたいとおりに動作します。
get_selected()で選択モードを設定しないでください。また、TreePathを解析するのではなく、ListStoreを使用してTreeIterでデータを取得してください。 – lethalman