1 /* testtreecolumnsizing.c: Test case for tree view column resizing.
3 * Copyright (C) 2008 Kristian Rietveld <kris@gtk.org>
5 * This work is provided "as is"; redistribution and modification
6 * in whole or in part, in any medium, physical or electronic is
7 * permitted without restriction.
9 * This work is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * In no event shall the authors or contributors be liable for any
14 * direct, indirect, incidental, special, exemplary, or consequential
15 * damages (including, but not limited to, procurement of substitute
16 * goods or services; loss of use, data, or profits; or business
17 * interruption) however caused and on any theory of liability, whether
18 * in contract, strict liability, or tort (including negligence or
19 * otherwise) arising in any way out of the use of this software, even
20 * if advised of the possibility of such damage.
26 #define NO_EXPAND "No expandable columns"
27 #define SINGLE_EXPAND "One expandable column"
28 #define MULTI_EXPAND "Multiple expandable columns"
29 #define LAST_EXPAND "Last column is expandable"
30 #define BORDER_EXPAND "First and last columns are expandable"
31 #define ALL_EXPAND "All columns are expandable"
42 store = gtk_list_store_new (5,
49 for (i = 0; i < N_ROWS; i++)
53 str = g_strdup_printf ("Row %d", i);
54 gtk_list_store_insert_with_values (store, NULL, i,
56 1, "Blah blah blah blah blah",
64 return GTK_TREE_MODEL (store);
68 toggle_long_content_row (GtkToggleButton *button,
73 model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_data));
74 if (gtk_tree_model_iter_n_children (model, NULL) == N_ROWS)
76 gtk_list_store_insert_with_values (GTK_LIST_STORE (model), NULL, N_ROWS,
77 0, "Very very very very longggggg",
78 1, "Blah blah blah blah blah",
81 4, "Eek we make the scrollbar appear",
88 gtk_tree_model_iter_nth_child (model, &iter, NULL, N_ROWS);
89 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
94 combo_box_changed (GtkComboBox *combo_box,
101 str = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo_box));
105 columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (user_data));
107 if (!strcmp (str, NO_EXPAND))
109 for (list = columns; list; list = list->next)
110 gtk_tree_view_column_set_expand (list->data, FALSE);
112 else if (!strcmp (str, SINGLE_EXPAND))
114 for (list = columns; list; list = list->next)
116 if (list->prev && !list->prev->prev)
117 /* This is the second column */
118 gtk_tree_view_column_set_expand (list->data, TRUE);
120 gtk_tree_view_column_set_expand (list->data, FALSE);
123 else if (!strcmp (str, MULTI_EXPAND))
125 for (list = columns; list; list = list->next)
127 if (list->prev && !list->prev->prev)
128 /* This is the second column */
129 gtk_tree_view_column_set_expand (list->data, TRUE);
130 else if (list->prev && !list->prev->prev->prev)
131 /* This is the third column */
132 gtk_tree_view_column_set_expand (list->data, TRUE);
134 gtk_tree_view_column_set_expand (list->data, FALSE);
137 else if (!strcmp (str, LAST_EXPAND))
139 for (list = columns; list->next; list = list->next)
140 gtk_tree_view_column_set_expand (list->data, FALSE);
141 /* This is the last column */
142 gtk_tree_view_column_set_expand (list->data, TRUE);
144 else if (!strcmp (str, BORDER_EXPAND))
146 gtk_tree_view_column_set_expand (columns->data, TRUE);
147 for (list = columns->next; list->next; list = list->next)
148 gtk_tree_view_column_set_expand (list->data, FALSE);
149 /* This is the last column */
150 gtk_tree_view_column_set_expand (list->data, TRUE);
152 else if (!strcmp (str, ALL_EXPAND))
154 for (list = columns; list; list = list->next)
155 gtk_tree_view_column_set_expand (list->data, TRUE);
159 g_list_free (columns);
163 main (int argc, char **argv)
168 GtkWidget *combo_box;
170 GtkWidget *tree_view;
173 gtk_init (&argc, &argv);
176 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
177 gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
178 g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
179 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
181 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
182 gtk_container_add (GTK_CONTAINER (window), vbox);
184 /* Option menu contents */
185 combo_box = gtk_combo_box_text_new ();
187 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), NO_EXPAND);
188 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), SINGLE_EXPAND);
189 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), MULTI_EXPAND);
190 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), LAST_EXPAND);
191 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), BORDER_EXPAND);
192 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), ALL_EXPAND);
194 gtk_box_pack_start (GTK_BOX (vbox), combo_box, FALSE, FALSE, 0);
196 /* Scrolled window and tree view */
197 sw = gtk_scrolled_window_new (NULL, NULL);
198 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
199 GTK_POLICY_AUTOMATIC,
200 GTK_POLICY_AUTOMATIC);
201 gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
203 tree_view = gtk_tree_view_new_with_model (create_model ());
204 gtk_container_add (GTK_CONTAINER (sw), tree_view);
206 for (i = 0; i < 5; i++)
208 GtkTreeViewColumn *column;
210 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
212 gtk_cell_renderer_text_new (),
216 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), i);
217 gtk_tree_view_column_set_resizable (column, TRUE);
220 /* Toggle button for long content row */
221 button = gtk_toggle_button_new_with_label ("Toggle long content row");
222 g_signal_connect (button, "toggled",
223 G_CALLBACK (toggle_long_content_row), tree_view);
224 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
226 /* Set up option menu callback and default item */
227 g_signal_connect (combo_box, "changed",
228 G_CALLBACK (combo_box_changed), tree_view);
229 gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0);
232 gtk_widget_show_all (window);