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 ("FOO: %d", i++);
25 gtk_tree_store_set (base_model, iter, 0, str, -1);
28 str = g_strdup_printf ("%d", g_random_int ());
29 gtk_tree_store_set (base_model, iter, 1, str, -1);
34 iter_remove (GtkWidget *button, GtkTreeView *tree_view)
37 GtkTreeIter s_selected;
40 model = gtk_tree_view_get_model (tree_view);
42 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (tree_view),
46 if (GTK_IS_TREE_STORE (model))
48 gtk_tree_store_remove (GTK_TREE_STORE (model), &selected);
54 iter_insert (GtkWidget *button, GtkTreeView *tree_view)
59 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
61 entry = gtk_object_get_user_data (GTK_OBJECT (button));
62 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
66 gtk_tree_store_insert (model,
69 atoi (gtk_entry_get_text (GTK_ENTRY (entry))));
73 gtk_tree_store_insert (model,
76 atoi (gtk_entry_get_text (GTK_ENTRY (entry))));
83 iter_insert_before (GtkWidget *button, GtkTreeView *tree_view)
87 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
89 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
93 gtk_tree_store_insert_before (model,
100 gtk_tree_store_insert_before (model,
110 iter_insert_after (GtkWidget *button, GtkTreeView *tree_view)
113 GtkTreeIter selected;
114 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
116 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
120 gtk_tree_store_insert_after (model,
127 gtk_tree_store_insert_after (model,
137 iter_prepend (GtkWidget *button, GtkTreeView *tree_view)
140 GtkTreeIter selected;
141 GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
142 GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
144 if (gtk_tree_selection_get_selected (selection, NULL, &selected))
146 if (GTK_IS_TREE_STORE (model))
148 gtk_tree_store_prepend (GTK_TREE_STORE (model),
156 if (GTK_IS_TREE_STORE (model))
158 gtk_tree_store_prepend (GTK_TREE_STORE (model),
167 iter_append (GtkWidget *button, GtkTreeView *tree_view)
170 GtkTreeIter selected;
171 GtkTreeStore *model = gtk_tree_view_get_model (tree_view);
173 if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
177 if (GTK_IS_TREE_STORE (model))
179 gtk_tree_store_append (model, &iter, &selected);
185 if (GTK_IS_TREE_STORE (model))
187 gtk_tree_store_append (model, &iter, NULL);
194 make_window (gboolean use_sort)
198 GtkWidget *hbox, *entry;
200 GtkWidget *scrolled_window;
201 GtkWidget *tree_view;
202 GtkTreeViewColumn *column;
203 GtkCellRenderer *cell;
204 GtkObject *selection;
206 /* Make the Widgets/Objects */
207 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
209 gtk_window_set_title (GTK_WINDOW (window), "Sorted list");
211 gtk_window_set_title (GTK_WINDOW (window), "Unsorted list");
213 vbox = gtk_vbox_new (FALSE, 8);
214 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
215 gtk_window_set_default_size (GTK_WINDOW (window), 300, 350);
216 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
219 GtkTreeModel *sort_model;
221 sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (base_model),
223 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (sort_model));
227 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (base_model));
230 selection = GTK_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)));
231 gtk_tree_selection_set_type (GTK_TREE_SELECTION (selection), GTK_TREE_SELECTION_SINGLE);
233 /* Put them together */
234 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
235 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
236 gtk_container_add (GTK_CONTAINER (window), vbox);
237 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
238 GTK_POLICY_AUTOMATIC,
239 GTK_POLICY_AUTOMATIC);
240 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
243 button = gtk_button_new_with_label ("gtk_tree_store_remove");
244 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
245 gtk_signal_connect (GTK_OBJECT (selection),
249 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_remove, tree_view);
250 gtk_widget_set_sensitive (button, FALSE);
252 button = gtk_button_new_with_label ("gtk_tree_store_insert");
253 hbox = gtk_hbox_new (FALSE, 8);
254 entry = gtk_entry_new ();
255 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
256 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
257 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0);
258 gtk_object_set_user_data (GTK_OBJECT (button), entry);
259 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert, tree_view);
262 button = gtk_button_new_with_label ("gtk_tree_store_insert_before");
263 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
264 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_before, tree_view);
265 gtk_signal_connect (GTK_OBJECT (selection),
269 gtk_widget_set_sensitive (button, FALSE);
271 button = gtk_button_new_with_label ("gtk_tree_store_insert_after");
272 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
273 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_after, tree_view);
274 gtk_signal_connect (GTK_OBJECT (selection),
278 gtk_widget_set_sensitive (button, FALSE);
280 button = gtk_button_new_with_label ("gtk_tree_store_prepend");
281 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
282 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_prepend, tree_view);
284 button = gtk_button_new_with_label ("gtk_tree_store_append");
285 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
286 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_append, tree_view);
288 /* The selected column */
289 cell = gtk_cell_renderer_text_new ();
290 column = gtk_tree_view_column_new_with_attributes ("Node ID", cell, "text", 0, NULL);
291 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
293 cell = gtk_cell_renderer_text_new ();
294 column = gtk_tree_view_column_new_with_attributes ("Random Number", cell, "text", 1, NULL);
295 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
300 iter_prepend (NULL, GTK_TREE_VIEW (tree_view));
301 iter_prepend (NULL, GTK_TREE_VIEW (tree_view));
302 iter_prepend (NULL, GTK_TREE_VIEW (tree_view));
305 gtk_widget_show_all (window);
309 main (int argc, char *argv[])
311 gtk_init (&argc, &argv);
313 base_model = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
315 /* FIXME: reverse this */