Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gtk/gtk.h>
- #include <stdbool.h>
- void on_cursor_changed(GtkTreeView *tree_view, gpointer data);
- int main(int argc, char *argv[]) {
- gtk_init(&argc, &argv);
- // Creating visual elements
- GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL),
- *tree_view = gtk_tree_view_new();
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
- GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(
- "title", renderer, "text", 0, NULL);
- gtk_tree_view_insert_column(GTK_TREE_VIEW(tree_view), column, 0);
- // Creating model
- GtkTreeStore *model = gtk_tree_store_new(1, G_TYPE_STRING);
- // Adding toplevel rows
- GtkTreeIter iter;
- gtk_tree_store_append(model, &iter, NULL);
- gtk_tree_store_set(model, &iter, 0, "line 0", -1);
- gtk_tree_store_append(model, &iter, NULL);
- gtk_tree_store_set(model, &iter, 0, "line 1", -1);
- gtk_tree_store_append(model, &iter, NULL);
- gtk_tree_store_set(model, &iter, 0, "line 2 with children", -1);
- // Adding children rows
- GtkTreeIter child;
- gtk_tree_store_append(model, &child, &iter);
- gtk_tree_store_set(model, &child, 0, "child line 1", -1);
- gtk_tree_store_append(model, &child, &iter);
- gtk_tree_store_set(model, &child, 0, "child line 2", -1);
- // Binding model to view
- gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(model));
- // Selecting a line
- gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &iter, "2:0");
- GtkTreeSelection *selection =
- gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
- gtk_tree_selection_select_iter(selection, &iter);
- // Connecting selection callback to view
- g_signal_connect(G_OBJECT(tree_view), "cursor-changed",
- G_CALLBACK(on_cursor_changed), NULL);
- gtk_widget_show(tree_view);
- // Gran finale
- gtk_container_add(GTK_CONTAINER(window), tree_view);
- gtk_widget_show(window);
- gtk_main();
- return 0;
- }
- void on_cursor_changed(GtkTreeView *tree_view, gpointer data) {
- GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view);
- GtkTreeIter iter;
- GtkTreeModel *model;
- bool has_selection = gtk_tree_selection_get_selected(
- selection, &model, &iter);
- //if (!has_selection) return;
- gchar *path_str = gtk_tree_model_get_string_from_iter(model, &iter);
- if (strncmp(path_str, "0", 2) == 0) {
- g_print("1st line selected\n");
- } else if (strncmp(path_str, "1", 2) == 0) {
- g_print("2nd line selected\n");
- } else if (strncmp(path_str, "2", 2) == 0) {
- g_print("3rd line selected\n");
- } else if (strncmp(path_str, "2:", 2) == 0) {
- GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
- gint *indices = gtk_tree_path_get_indices(path);
- g_print("Child #%d from 3rd line selected\n", indices[1]);
- }
- g_free(path_str);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement