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;
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));
255 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (sort_model));
259 g_assert_not_reached ();
263 selection = G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)));
264 gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), GTK_TREE_SELECTION_SINGLE);
266 /* Put them together */
267 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
268 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
269 gtk_container_add (GTK_CONTAINER (window), vbox);
270 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
271 GTK_POLICY_AUTOMATIC,
272 GTK_POLICY_AUTOMATIC);
273 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
276 button = gtk_button_new_with_label ("gtk_tree_store_remove");
277 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
278 g_signal_connectc (G_OBJECT (selection),
282 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_remove, tree_view);
283 gtk_widget_set_sensitive (button, FALSE);
285 button = gtk_button_new_with_label ("gtk_tree_store_insert");
286 hbox = gtk_hbox_new (FALSE, 8);
287 entry = gtk_entry_new ();
288 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
289 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
290 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0);
291 gtk_object_set_user_data (GTK_OBJECT (button), entry);
292 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert, tree_view);
295 button = gtk_button_new_with_label ("gtk_tree_store_insert_before");
296 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
297 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_before, tree_view);
298 g_signal_connectc (G_OBJECT (selection),
302 gtk_widget_set_sensitive (button, FALSE);
304 button = gtk_button_new_with_label ("gtk_tree_store_insert_after");
305 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
306 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_after, tree_view);
307 g_signal_connectc (G_OBJECT (selection),
311 gtk_widget_set_sensitive (button, FALSE);
313 button = gtk_button_new_with_label ("gtk_tree_store_prepend");
314 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
315 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_prepend, tree_view);
317 button = gtk_button_new_with_label ("gtk_tree_store_append");
318 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
319 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_append, tree_view);
321 /* The selected column */
322 cell = gtk_cell_renderer_text_new ();
323 column = gtk_tree_view_column_new_with_attributes ("Node ID", cell, "markup", 0, NULL);
324 gtk_tree_view_column_set_sort_column_id (column, 0);
325 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
326 g_object_unref (G_OBJECT (cell));
327 g_object_unref (G_OBJECT (column));
329 cell = gtk_cell_renderer_text_new ();
330 column = gtk_tree_view_column_new_with_attributes ("Random Number", cell, "text", 1, NULL);
331 gtk_tree_view_column_set_sort_column_id (column, 1);
332 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
333 g_object_unref (G_OBJECT (cell));
334 g_object_unref (G_OBJECT (column));
339 iter_append (NULL, GTK_TREE_VIEW (tree_view));
340 iter_append (NULL, GTK_TREE_VIEW (tree_view));
341 iter_append (NULL, GTK_TREE_VIEW (tree_view));
342 iter_append (NULL, GTK_TREE_VIEW (tree_view));
343 iter_append (NULL, GTK_TREE_VIEW (tree_view));
344 iter_append (NULL, GTK_TREE_VIEW (tree_view));
345 gtk_widget_show_all (window);
351 main (int argc, char *argv[])
353 gtk_init (&argc, &argv);
355 base_model = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
357 /* FIXME: reverse this */