Updated Spanish translation
[anjuta-git-plugin.git] / libegg / test-union.c
blob6ebe26c87f1b9414bdf2759a96d55bd9db698aea
1 /**
2 * EVIL TEST CASE
4 * Do not copy any code from here (:. I won't mention my name here.
5 */
7 #include <gtk/gtk.h>
8 #include <stdio.h>
10 #include "eggtreemodelunion.h"
13 typedef struct {
14 GtkWidget *hbox;
16 GtkWidget *tv;
18 GtkWidget *vbox;
19 GtkWidget *add;
20 GtkWidget *delete;
21 } ViewBox;
24 static void
25 add_row (GtkWidget *button, gpointer data)
27 char buf[16];
28 GtkTreeIter iter;
29 GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (data));
31 sprintf (buf, "%d", g_random_int ());
33 if (GTK_IS_LIST_STORE (model)) {
34 GtkListStore *l = GTK_LIST_STORE (model);
36 gtk_list_store_append (l, &iter);
37 gtk_list_store_set (l, &iter, 0, buf, -1);
38 } else if (GTK_IS_TREE_STORE (model)) {
39 GtkTreeIter parent;
40 GtkTreeStore *l = GTK_TREE_STORE (model);
41 GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (data));
43 if (gtk_tree_selection_get_selected (sel, NULL, &parent))
44 gtk_tree_store_append (l, &iter, &parent);
45 else
46 gtk_tree_store_append (l, &iter, NULL);
48 gtk_tree_store_set (l, &iter, 0, buf, -1);
52 static void
53 delete_row (GtkWidget *button, gpointer data)
55 GtkTreeIter iter;
56 GtkTreeModel *model = NULL;
57 GtkTreeSelection *sel;
58 GtkTreeView *tv = GTK_TREE_VIEW (data);
60 sel = gtk_tree_view_get_selection (tv);
61 if (gtk_tree_selection_get_selected (sel, &model, &iter)) {
62 if (GTK_IS_LIST_STORE (model))
63 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
64 else if (GTK_IS_TREE_STORE (model))
65 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
69 static ViewBox *
70 create_view_box (GtkTreeModel *model)
72 ViewBox *vb = g_new0 (ViewBox, 1);
74 vb->hbox = gtk_hbox_new (FALSE, 2);
75 gtk_container_set_border_width (GTK_CONTAINER (vb->hbox), 5);
77 vb->tv = gtk_tree_view_new_with_model (model);
78 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (vb->tv), FALSE);
79 gtk_widget_set_size_request (vb->tv, 80, 100);
80 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vb->tv),
81 0, NULL,
82 gtk_cell_renderer_text_new (),
83 "text", 0, NULL);
84 gtk_box_pack_start (GTK_BOX (vb->hbox), vb->tv, FALSE, FALSE, 0);
86 vb->vbox = gtk_vbox_new (TRUE, 2);
87 gtk_box_pack_start (GTK_BOX (vb->hbox), vb->vbox, FALSE, FALSE, 0);
89 vb->add = gtk_button_new_from_stock (GTK_STOCK_ADD);
90 g_signal_connect (vb->add, "clicked",
91 G_CALLBACK (add_row), vb->tv);
92 gtk_box_pack_start (GTK_BOX (vb->vbox), vb->add, TRUE, FALSE, 0);
94 vb->delete = gtk_button_new_from_stock (GTK_STOCK_DELETE);
95 g_signal_connect (vb->delete, "clicked",
96 G_CALLBACK (delete_row), GTK_TREE_VIEW (vb->tv));
97 gtk_box_pack_start (GTK_BOX (vb->vbox), vb->delete, TRUE, FALSE, 0);
99 return vb;
102 static GtkTreeModel *
103 create_model (GtkListStore **l1, GtkTreeStore **l2, GtkListStore **l3)
105 GtkTreeIter iter, iter2;
106 GtkTreeModel *u;
108 *l1 = gtk_list_store_new (1, G_TYPE_STRING);
109 *l2 = gtk_tree_store_new (1, G_TYPE_STRING);
110 *l3 = gtk_list_store_new (1, G_TYPE_STRING);
112 u = egg_tree_model_union_new (1, G_TYPE_STRING);
114 egg_tree_model_union_append (EGG_TREE_MODEL_UNION (u),
115 GTK_TREE_MODEL (*l1));
116 egg_tree_model_union_prepend (EGG_TREE_MODEL_UNION (u),
117 GTK_TREE_MODEL (*l2));
118 egg_tree_model_union_insert (EGG_TREE_MODEL_UNION (u),
119 GTK_TREE_MODEL (*l3), 1);
121 gtk_list_store_append (*l1, &iter);
122 gtk_list_store_set (*l1, &iter, 0, "blaat", -1);
124 gtk_list_store_append (*l1, &iter);
125 gtk_list_store_set (*l1, &iter, 0, "foobar", -1);
127 gtk_tree_store_append (*l2, &iter, NULL);
128 gtk_tree_store_set (*l2, &iter, 0, "BLAAT", -1);
130 gtk_tree_store_append (*l2, &iter2, &iter);
131 gtk_tree_store_set (*l2, &iter2, 0, "ha ha ha", -1);
133 gtk_tree_store_append (*l2, &iter, &iter2);
134 gtk_tree_store_set (*l2, &iter, 0, "I hate you guys", -1);
136 gtk_tree_store_append (*l2, &iter, NULL);
137 gtk_tree_store_set (*l2, &iter, 0, "FOOBAR", -1);
139 gtk_list_store_append (*l3, &iter);
140 gtk_list_store_set (*l3, &iter, 0, "------", -1);
143 return u;
147 main (int argc, char **argv)
149 GtkWidget *hbox;
150 GtkWidget *vbox;
151 GtkWidget *window;
152 GtkWidget *sw;
153 GtkWidget *treeview;
154 GtkWidget *mainbox;
155 GtkTreeModel *model;
156 GtkListStore *l1, *l3;
157 GtkTreeStore *l2;
159 gtk_init (&argc, &argv);
161 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
162 gtk_window_set_title (GTK_WINDOW (window), "Union test");
163 g_signal_connect (window, "delete_event",
164 G_CALLBACK (gtk_main_quit), window);
165 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
167 hbox = gtk_hbox_new (FALSE, 2);
168 gtk_container_add (GTK_CONTAINER (window), hbox);
170 vbox = gtk_vbox_new (TRUE, 5);
171 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
173 model = create_model (&l1, &l2, &l3);
175 /* leakety leak */
176 gtk_box_pack_start (GTK_BOX (vbox), create_view_box (GTK_TREE_MODEL (l1))->hbox,
177 TRUE, FALSE, 0);
178 gtk_box_pack_start (GTK_BOX (vbox), create_view_box (GTK_TREE_MODEL (l2))->hbox,
179 TRUE, FALSE, 0);
180 gtk_box_pack_start (GTK_BOX (vbox), create_view_box (GTK_TREE_MODEL (l3))->hbox,
181 TRUE, FALSE, 0);
183 sw = gtk_scrolled_window_new (NULL, NULL);
184 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
185 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
186 gtk_container_set_border_width (GTK_CONTAINER (sw), 5);
187 gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
189 treeview = gtk_tree_view_new_with_model (model);
190 gtk_widget_set_size_request (treeview, 90, -1);
191 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
192 0, NULL,
193 gtk_cell_renderer_text_new (),
194 "text", 0, NULL);
195 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
196 gtk_container_add (GTK_CONTAINER (sw), treeview);
198 gtk_widget_show_all (window);
200 gtk_main ();
202 return 0;