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 (%d)", 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 make_window (gboolean use_sort)
208 GtkWidget *hbox, *entry;
210 GtkWidget *scrolled_window;
211 GtkWidget *tree_view;
212 GtkTreeViewColumn *column;
213 GtkCellRenderer *cell;
214 GtkObject *selection;
216 /* Make the Widgets/Objects */
217 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
219 gtk_window_set_title (GTK_WINDOW (window), "Sorted list");
221 gtk_window_set_title (GTK_WINDOW (window), "Unsorted list");
223 vbox = gtk_vbox_new (FALSE, 8);
224 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
225 gtk_window_set_default_size (GTK_WINDOW (window), 300, 350);
226 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
229 GtkTreeModel *sort_model;
231 sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (base_model),
233 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (sort_model));
237 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (base_model));
240 selection = GTK_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)));
241 gtk_tree_selection_set_type (GTK_TREE_SELECTION (selection), GTK_TREE_SELECTION_SINGLE);
243 /* Put them together */
244 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
245 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
246 gtk_container_add (GTK_CONTAINER (window), vbox);
247 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
248 GTK_POLICY_AUTOMATIC,
249 GTK_POLICY_AUTOMATIC);
250 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
253 button = gtk_button_new_with_label ("gtk_tree_store_remove");
254 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
255 gtk_signal_connect (GTK_OBJECT (selection),
259 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_remove, tree_view);
260 gtk_widget_set_sensitive (button, FALSE);
262 button = gtk_button_new_with_label ("gtk_tree_store_insert");
263 hbox = gtk_hbox_new (FALSE, 8);
264 entry = gtk_entry_new ();
265 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
266 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
267 gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0);
268 gtk_object_set_user_data (GTK_OBJECT (button), entry);
269 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert, tree_view);
272 button = gtk_button_new_with_label ("gtk_tree_store_insert_before");
273 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
274 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_before, tree_view);
275 gtk_signal_connect (GTK_OBJECT (selection),
279 gtk_widget_set_sensitive (button, FALSE);
281 button = gtk_button_new_with_label ("gtk_tree_store_insert_after");
282 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
283 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_insert_after, tree_view);
284 gtk_signal_connect (GTK_OBJECT (selection),
288 gtk_widget_set_sensitive (button, FALSE);
290 button = gtk_button_new_with_label ("gtk_tree_store_prepend");
291 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
292 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_prepend, tree_view);
294 button = gtk_button_new_with_label ("gtk_tree_store_append");
295 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
296 gtk_signal_connect (GTK_OBJECT (button), "clicked", iter_append, tree_view);
298 /* The selected column */
299 cell = gtk_cell_renderer_text_new ();
300 column = gtk_tree_view_column_new_with_attributes ("Node ID", cell, "text", 0, NULL);
301 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
303 cell = gtk_cell_renderer_text_new ();
304 column = gtk_tree_view_column_new_with_attributes ("Random Number", cell, "text", 1, NULL);
305 gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
310 iter_append (NULL, GTK_TREE_VIEW (tree_view));
311 iter_append (NULL, GTK_TREE_VIEW (tree_view));
312 iter_append (NULL, GTK_TREE_VIEW (tree_view));
313 iter_append (NULL, GTK_TREE_VIEW (tree_view));
314 iter_append (NULL, GTK_TREE_VIEW (tree_view));
315 iter_append (NULL, GTK_TREE_VIEW (tree_view));
318 gtk_widget_show_all (window);
322 main (int argc, char *argv[])
324 gtk_init (&argc, &argv);
326 base_model = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
328 /* FIXME: reverse this */