5 GtkTreeStore *base_model;
8 selection_changed (GtkTreeSelection *selection,
11 if (gtk_tree_selection_get_selected (selection, NULL, NULL))
12 gtk_widget_set_sensitive (button, TRUE);
14 gtk_widget_set_sensitive (button, FALSE);
18 node_set (GtkTreeIter *iter)
24 str = g_strdup_printf ("Row (<span color=\"red\">%d</span>)", i++);
25 gtk_tree_store_set (base_model, iter, 0, str, -1);
31 str = g_strdup_printf ("%d", n);
33 gtk_tree_store_set (base_model, iter, 1, str, -1);
38 iter_remove (GtkWidget *button, GtkTreeView *tree_view)
41 GtkTreeIter s_selected;
44 model = gtk_tree_view_get_model (tree_view);
46 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (tree_view),
50 if (GTK_IS_TREE_STORE (model))
52 gtk_tree_store_remove (GTK_TREE_STORE (model), &selected);
58 iter_insert (GtkWidget *button, GtkTreeView *tree_view)
63 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
65 entry = gtk_object_get_user_data (GTK_OBJECT (button));
66 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
70 gtk_tree_store_insert (model,
73 atoi (gtk_entry_get_text (GTK_ENTRY (entry))));
77 gtk_tree_store_insert (model,
80 atoi (gtk_entry_get_text (GTK_ENTRY (entry))));
87 iter_insert_before (GtkWidget *button, GtkTreeView *tree_view)
91 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
93 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
97 gtk_tree_store_insert_before (model,
104 gtk_tree_store_insert_before (model,
114 iter_insert_after (GtkWidget *button, GtkTreeView *tree_view)
117 GtkTreeIter selected;
118 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
120 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
124 if (GTK_IS_TREE_STORE (model))
126 gtk_tree_store_insert_after (model,
135 if (GTK_IS_TREE_STORE (model))
137 gtk_tree_store_insert_after (model,
147 iter_prepend (GtkWidget *button, GtkTreeView *tree_view)
150 GtkTreeIter selected;
151 GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
152 GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
154 if (gtk_tree_selection_get_selected (selection, NULL, &selected))
156 if (GTK_IS_TREE_STORE (model))
158 gtk_tree_store_prepend (GTK_TREE_STORE (model),
166 if (GTK_IS_TREE_STORE (model))
168 gtk_tree_store_prepend (GTK_TREE_STORE (model),
177 iter_append (GtkWidget *button, GtkTreeView *tree_view)
180 GtkTreeIter selected;
181 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
183 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
187 if (GTK_IS_TREE_STORE (model))
189 gtk_tree_store_append (model, &iter, &selected);
195 if (GTK_IS_TREE_STORE (model))
197 gtk_tree_store_append (model, &iter, NULL);
204 uppercase_value (const GValue *src, GValue *dest, gpointer data)
208 g_value_init (dest, G_TYPE_STRING);
209 str = g_strdup (g_value_get_string (src));
212 g_value_set_string (dest, str);
217 make_window (gint view_type)
221 GtkWidget *hbox, *entry;
223 GtkWidget *scrolled_window;
224 GtkWidget *tree_view;
225 GtkTreeViewColumn *column;
226 GtkCellRenderer *cell;
227 GtkObject *selection;
229 /* Make the Widgets/Objects */
230 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
234 gtk_window_set_title (GTK_WINDOW (window), "Unsorted list");
237 gtk_window_set_title (GTK_WINDOW (window), "Sorted list");
241 vbox = gtk_vbox_new (FALSE, 8);
242 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
243 gtk_window_set_default_size (GTK_WINDOW (window), 300, 350);
244 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
248 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (base_model));
252 GtkTreeModel *sort_model;
254 sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (base_model),
256 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (sort_model));
261 selection = GTK_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)));
262 gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), GTK_TREE_SELECTION_SINGLE);
264 /* Put them together */
265 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
266 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
267 gtk_container_add (GTK_CONTAINER (window), vbox);
268 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
269 GTK_POLICY_AUTOMATIC,
270 GTK_POLICY_AUTOMATIC);
271 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
274 button = gtk_button_new_with_label ("gtk_tree_store_remove");
275 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
276 g_signal_connectc (G_OBJECT (selection),
280 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_remove, tree_view);
281 gtk_widget_set_sensitive (button, FALSE);
283 button = gtk_button_new_with_label ("gtk_tree_store_insert");
284 hbox = gtk_hbox_new (FALSE, 8);
285 entry = gtk_entry_new ();
286 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
287 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
288 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0);
289 gtk_object_set_user_data (GTK_OBJECT (button), entry);
290 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert, tree_view);
293 button = gtk_button_new_with_label ("gtk_tree_store_insert_before");
294 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
295 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_before, tree_view);
296 g_signal_connectc (G_OBJECT (selection),
300 gtk_widget_set_sensitive (button, FALSE);
302 button = gtk_button_new_with_label ("gtk_tree_store_insert_after");
303 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
304 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_after, tree_view);
305 g_signal_connectc (G_OBJECT (selection),
309 gtk_widget_set_sensitive (button, FALSE);
311 button = gtk_button_new_with_label ("gtk_tree_store_prepend");
312 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
313 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_prepend, tree_view);
315 button = gtk_button_new_with_label ("gtk_tree_store_append");
316 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
317 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_append, tree_view);
319 /* The selected column */
320 cell = gtk_cell_renderer_text_new ();
321 column = gtk_tree_view_column_new_with_attributes ("Node ID", cell, "markup", 0, NULL);
322 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
324 cell = gtk_cell_renderer_text_new ();
325 column = gtk_tree_view_column_new_with_attributes ("Random Number", cell, "text", 1, NULL);
326 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
331 iter_append (NULL, GTK_TREE_VIEW (tree_view));
332 iter_append (NULL, GTK_TREE_VIEW (tree_view));
333 iter_append (NULL, GTK_TREE_VIEW (tree_view));
334 iter_append (NULL, GTK_TREE_VIEW (tree_view));
335 iter_append (NULL, GTK_TREE_VIEW (tree_view));
336 iter_append (NULL, GTK_TREE_VIEW (tree_view));
339 gtk_widget_show_all (window);
343 main (int argc, char *argv[])
345 gtk_init (&argc, &argv);
347 base_model = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
349 /* FIXME: reverse this */