Advertisement
Guest User

GtkTreeView problem v2

a guest
May 31st, 2014
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.04 KB | None | 0 0
  1. #include <gtk/gtk.h>
  2.  
  3. static GtkWidget *tree_view;
  4. static GtkWidget *btn_add_item;
  5. static int row_count = 0;
  6.  
  7. static void btn_add_item_clicked(GtkWidget *button, gpointer data) {
  8.     GtkListStore *model;
  9.     GtkTreeIter iter;
  10.     char text[50];
  11.  
  12.     model = (GtkListStore*) gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view));
  13.     gtk_list_store_append(model,
  14.             &iter);
  15.  
  16.     sprintf(text,
  17.             "%d",
  18.             row_count + 1);
  19.     gtk_list_store_set(model,
  20.             &iter,
  21.             0, g_strdup(text),
  22.             -1);
  23.  
  24.     gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view),
  25.             GTK_TREE_MODEL(model));
  26. }
  27.  
  28. static void content_renderer_edited(GtkCellRendererText *renderer, gchar *path,
  29.         gchar *new_text, gpointer user_data) {
  30.     GtkListStore *list_store;
  31.     GtkTreeIter iter;
  32.     GtkTreePath *tree_path;
  33.  
  34.     tree_path = gtk_tree_path_new_from_string(path);
  35.  
  36.     list_store = (GtkListStore*) gtk_tree_view_get_model(
  37.             GTK_TREE_VIEW(tree_view));
  38.     gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store),
  39.             &iter,
  40.             tree_path);
  41.  
  42.     gtk_list_store_set(list_store,
  43.             &iter,
  44.             1, new_text,
  45.             -1);
  46.  
  47.     gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view),
  48.             GTK_TREE_MODEL(list_store));
  49. }
  50.  
  51. static GtkWidget *create_tree_view() {
  52.     GtkWidget *grid;
  53.     GtkWidget *scrolled_window;
  54.     GtkListStore *list_store;
  55.     GtkTreeViewColumn *label_col;
  56.     GtkTreeViewColumn *content_col;
  57.     GtkCellRenderer *content_renderer;
  58.  
  59.     list_store = gtk_list_store_new(2,
  60.             G_TYPE_STRING,
  61.             G_TYPE_INT);
  62.  
  63.     tree_view = gtk_tree_view_new();
  64.     label_col = gtk_tree_view_column_new_with_attributes("Layer",
  65.             gtk_cell_renderer_text_new(),
  66.             NULL);
  67.     content_renderer = gtk_cell_renderer_text_new();
  68.     g_signal_connect(content_renderer,
  69.             "edited",
  70.             G_CALLBACK(content_renderer_edited),
  71.             NULL);
  72.  
  73.     g_object_set(content_renderer,
  74.             "editable", TRUE,
  75.             NULL);
  76.  
  77.     content_col = gtk_tree_view_column_new_with_attributes("Content",
  78.             content_renderer,
  79.             NULL);
  80.  
  81.     gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view),
  82.             label_col);
  83.     gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view),
  84.             content_col);
  85.  
  86.     gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view),
  87.             GTK_TREE_MODEL(list_store));
  88.  
  89.     scrolled_window = gtk_scrolled_window_new(NULL,
  90.             NULL);
  91.     gtk_container_add(GTK_CONTAINER(scrolled_window),
  92.             tree_view);
  93.  
  94.     btn_add_item = gtk_button_new_with_label("Add");
  95.     g_signal_connect(btn_add_item,
  96.             "clicked",
  97.             G_CALLBACK(btn_add_item_clicked),
  98.             NULL);
  99.  
  100.     grid = gtk_box_new(GTK_ORIENTATION_VERTICAL,
  101.             5);
  102.     gtk_box_pack_start(GTK_BOX(grid),
  103.             scrolled_window,
  104.             TRUE,
  105.             TRUE,
  106.             5);
  107.     gtk_box_pack_start(GTK_BOX(grid),
  108.             btn_add_item,
  109.             FALSE,
  110.             FALSE,
  111.             5);
  112.  
  113.     return grid;
  114. }
  115.  
  116. int main(int argc, char **argv) {
  117.     GtkWidget *window;
  118.     GtkWidget *content_area;
  119.  
  120.     gtk_init(&argc, &argv);
  121.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  122.     g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
  123.  
  124.     gtk_container_add(GTK_CONTAINER(window),
  125.             create_tree_view());
  126.     gtk_window_resize(GTK_WINDOW(window),
  127.             800,
  128.             600);
  129.  
  130.     gtk_widget_show_all(window);
  131.     gtk_main();
  132.  
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement