1 
2 
3 #include "gconf.h"
4 #include "panel.h"
5 
6 //#define DEBUGPRN
7 #include "dbg.h"
8 
9 enum
10 {
11     TYPE_COL,
12     NAME_COL,
13     N_COLUMNS
14 };
15 
16 GtkTreeStore *store;
17 GtkWidget *tree;
18 GtkWidget *bbox;
19 
20 static void
mk_model(xconf * xc)21 mk_model(xconf *xc)
22 {
23     GtkTreeIter iter;
24     xconf *pxc;
25     int i;
26     gchar *type;
27 
28     store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
29     for (i = 0; (pxc = xconf_find(xc, "plugin", i)); i++)
30     {
31         XCG(pxc, "type", &type, str);
32         gtk_tree_store_append(store, &iter, NULL);
33         gtk_tree_store_set (store, &iter,
34             TYPE_COL, type,
35             NAME_COL, "Martin Heidegger",
36             -1);
37     }
38 }
39 
40 static void
tree_selection_changed_cb(GtkTreeSelection * selection,gpointer data)41 tree_selection_changed_cb(GtkTreeSelection *selection, gpointer data)
42 {
43     GtkTreeIter iter;
44     GtkTreeModel *model;
45     gchar *type;
46     gboolean sel;
47 
48     sel = gtk_tree_selection_get_selected(selection, &model, &iter);
49     if (sel)
50     {
51         gtk_tree_model_get(model, &iter, TYPE_COL, &type, -1);
52         g_print("%s\n", type);
53         g_free(type);
54     }
55     gtk_widget_set_sensitive(bbox, sel);
56 }
57 
58 static GtkWidget *
mk_view()59 mk_view()
60 {
61     GtkCellRenderer *renderer;
62     GtkTreeViewColumn *column;
63     GtkTreeSelection *select;
64 
65     tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
66     renderer = gtk_cell_renderer_text_new();
67     column = gtk_tree_view_column_new_with_attributes("Type",
68         renderer, "text", TYPE_COL, NULL);
69     gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
70 
71     select = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
72     gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
73     g_signal_connect(G_OBJECT(select), "changed",
74         G_CALLBACK(tree_selection_changed_cb), NULL);
75     return tree;
76 }
77 
78 GtkWidget *
mk_buttons()79 mk_buttons()
80 {
81     GtkWidget *bm, *b, *w;
82 
83     bm = gtk_hbox_new(FALSE, 3);
84 
85     w = gtk_button_new_from_stock(GTK_STOCK_ADD);
86     gtk_box_pack_start(GTK_BOX(bm), w, FALSE, TRUE, 0);
87 
88     b = gtk_hbox_new(FALSE, 3);
89     gtk_box_pack_start(GTK_BOX(bm), b, FALSE, TRUE, 0);
90     bbox = b;
91     gtk_widget_set_sensitive(bbox, FALSE);
92 
93     w = gtk_button_new_from_stock(GTK_STOCK_EDIT);
94     gtk_box_pack_start(GTK_BOX(b), w, FALSE, TRUE, 0);
95     w = gtk_button_new_from_stock(GTK_STOCK_DELETE);
96     gtk_box_pack_start(GTK_BOX(b), w, FALSE, TRUE, 0);
97     w = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
98     gtk_box_pack_start(GTK_BOX(b), w, FALSE, TRUE, 0);
99     w = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
100     gtk_box_pack_start(GTK_BOX(b), w, FALSE, TRUE, 0);
101 
102     return bm;
103 }
104 
105 GtkWidget *
mk_tab_plugins(xconf * xc)106 mk_tab_plugins(xconf *xc)
107 {
108     GtkWidget *page, *w;
109 
110     ENTER;
111     page = gtk_vbox_new(FALSE, 1);
112     gtk_container_set_border_width(GTK_CONTAINER(page), 10);
113 
114     mk_model(xc);
115 
116     w = mk_view();
117     gtk_box_pack_start(GTK_BOX(page), w, TRUE, TRUE, 0);
118     w = mk_buttons();
119     gtk_box_pack_start(GTK_BOX(page), w, FALSE, TRUE, 0);
120 
121     gtk_widget_show_all(page);
122     RET(page);
123 }
124