|
Packit |
98cdb6 |
/* testtreecolumnsizing.c: Test case for tree view column resizing.
|
|
Packit |
98cdb6 |
*
|
|
Packit |
98cdb6 |
* Copyright (C) 2008 Kristian Rietveld <kris@gtk.org>
|
|
Packit |
98cdb6 |
*
|
|
Packit |
98cdb6 |
* This work is provided "as is"; redistribution and modification
|
|
Packit |
98cdb6 |
* in whole or in part, in any medium, physical or electronic is
|
|
Packit |
98cdb6 |
* permitted without restriction.
|
|
Packit |
98cdb6 |
*
|
|
Packit |
98cdb6 |
* This work is distributed in the hope that it will be useful,
|
|
Packit |
98cdb6 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
98cdb6 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
Packit |
98cdb6 |
*
|
|
Packit |
98cdb6 |
* In no event shall the authors or contributors be liable for any
|
|
Packit |
98cdb6 |
* direct, indirect, incidental, special, exemplary, or consequential
|
|
Packit |
98cdb6 |
* damages (including, but not limited to, procurement of substitute
|
|
Packit |
98cdb6 |
* goods or services; loss of use, data, or profits; or business
|
|
Packit |
98cdb6 |
* interruption) however caused and on any theory of liability, whether
|
|
Packit |
98cdb6 |
* in contract, strict liability, or tort (including negligence or
|
|
Packit |
98cdb6 |
* otherwise) arising in any way out of the use of this software, even
|
|
Packit |
98cdb6 |
* if advised of the possibility of such damage.
|
|
Packit |
98cdb6 |
*/
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
#include <gtk/gtk.h>
|
|
Packit |
98cdb6 |
#include <string.h>
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
#define NO_EXPAND "No expandable columns"
|
|
Packit |
98cdb6 |
#define SINGLE_EXPAND "One expandable column"
|
|
Packit |
98cdb6 |
#define MULTI_EXPAND "Multiple expandable columns"
|
|
Packit |
98cdb6 |
#define LAST_EXPAND "Last column is expandable"
|
|
Packit |
98cdb6 |
#define BORDER_EXPAND "First and last columns are expandable"
|
|
Packit |
98cdb6 |
#define ALL_EXPAND "All columns are expandable"
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
#define N_ROWS 10
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static GtkTreeModel *
|
|
Packit |
98cdb6 |
create_model (void)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
int i;
|
|
Packit |
98cdb6 |
GtkListStore *store;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
store = gtk_list_store_new (5,
|
|
Packit |
98cdb6 |
G_TYPE_STRING,
|
|
Packit |
98cdb6 |
G_TYPE_STRING,
|
|
Packit |
98cdb6 |
G_TYPE_STRING,
|
|
Packit |
98cdb6 |
G_TYPE_STRING,
|
|
Packit |
98cdb6 |
G_TYPE_STRING);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (i = 0; i < N_ROWS; i++)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gchar *str;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
str = g_strdup_printf ("Row %d", i);
|
|
Packit |
98cdb6 |
gtk_list_store_insert_with_values (store, NULL, i,
|
|
Packit |
98cdb6 |
0, str,
|
|
Packit |
98cdb6 |
1, "Blah blah blah blah blah",
|
|
Packit |
98cdb6 |
2, "Less blah",
|
|
Packit |
98cdb6 |
3, "Medium length",
|
|
Packit |
98cdb6 |
4, "Eek",
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
g_free (str);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return GTK_TREE_MODEL (store);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
toggle_long_content_row (GtkToggleButton *button,
|
|
Packit |
98cdb6 |
gpointer user_data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeModel *model;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_data));
|
|
Packit |
98cdb6 |
if (gtk_tree_model_iter_n_children (model, NULL) == N_ROWS)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gtk_list_store_insert_with_values (GTK_LIST_STORE (model), NULL, N_ROWS,
|
|
Packit |
98cdb6 |
0, "Very very very very longggggg",
|
|
Packit |
98cdb6 |
1, "Blah blah blah blah blah",
|
|
Packit |
98cdb6 |
2, "Less blah",
|
|
Packit |
98cdb6 |
3, "Medium length",
|
|
Packit |
98cdb6 |
4, "Eek we make the scrollbar appear",
|
|
Packit |
98cdb6 |
-1);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeIter iter;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_model_iter_nth_child (model, &iter, NULL, N_ROWS);
|
|
Packit |
98cdb6 |
gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
static void
|
|
Packit |
98cdb6 |
combo_box_changed (GtkComboBox *combo_box,
|
|
Packit |
98cdb6 |
gpointer user_data)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gchar *str;
|
|
Packit |
98cdb6 |
GList *list;
|
|
Packit |
98cdb6 |
GList *columns;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
str = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo_box));
|
|
Packit |
98cdb6 |
if (!str)
|
|
Packit |
98cdb6 |
return;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (user_data));
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
if (!strcmp (str, NO_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
for (list = columns; list; list = list->next)
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, FALSE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if (!strcmp (str, SINGLE_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
for (list = columns; list; list = list->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (list->prev && !list->prev->prev)
|
|
Packit |
98cdb6 |
/* This is the second column */
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, FALSE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if (!strcmp (str, MULTI_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
for (list = columns; list; list = list->next)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
if (list->prev && !list->prev->prev)
|
|
Packit |
98cdb6 |
/* This is the second column */
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
else if (list->prev && !list->prev->prev->prev)
|
|
Packit |
98cdb6 |
/* This is the third column */
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
else
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, FALSE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if (!strcmp (str, LAST_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
for (list = columns; list->next; list = list->next)
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, FALSE);
|
|
Packit |
98cdb6 |
/* This is the last column */
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if (!strcmp (str, BORDER_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (columns->data, TRUE);
|
|
Packit |
98cdb6 |
for (list = columns->next; list->next; list = list->next)
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, FALSE);
|
|
Packit |
98cdb6 |
/* This is the last column */
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
else if (!strcmp (str, ALL_EXPAND))
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
for (list = columns; list; list = list->next)
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_expand (list->data, TRUE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
g_free (str);
|
|
Packit |
98cdb6 |
g_list_free (columns);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
int
|
|
Packit |
98cdb6 |
main (int argc, char **argv)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
int i;
|
|
Packit |
98cdb6 |
GtkWidget *window;
|
|
Packit |
98cdb6 |
GtkWidget *vbox;
|
|
Packit |
98cdb6 |
GtkWidget *combo_box;
|
|
Packit |
98cdb6 |
GtkWidget *sw;
|
|
Packit |
98cdb6 |
GtkWidget *tree_view;
|
|
Packit |
98cdb6 |
GtkWidget *button;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_init (&argc, &argv);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Window and box */
|
|
Packit |
98cdb6 |
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
Packit |
98cdb6 |
gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
|
|
Packit |
98cdb6 |
g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
|
|
Packit |
98cdb6 |
gtk_container_set_border_width (GTK_CONTAINER (window), 5);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
vbox = gtk_vbox_new (FALSE, 5);
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (window), vbox);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Option menu contents */
|
|
Packit |
98cdb6 |
combo_box = gtk_combo_box_text_new ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), NO_EXPAND);
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), SINGLE_EXPAND);
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), MULTI_EXPAND);
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), LAST_EXPAND);
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), BORDER_EXPAND);
|
|
Packit |
98cdb6 |
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), ALL_EXPAND);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox), combo_box, FALSE, FALSE, 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Scrolled window and tree view */
|
|
Packit |
98cdb6 |
sw = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
98cdb6 |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
|
Packit |
98cdb6 |
GTK_POLICY_AUTOMATIC,
|
|
Packit |
98cdb6 |
GTK_POLICY_AUTOMATIC);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
tree_view = gtk_tree_view_new_with_model (create_model ());
|
|
Packit |
98cdb6 |
gtk_container_add (GTK_CONTAINER (sw), tree_view);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
for (i = 0; i < 5; i++)
|
|
Packit |
98cdb6 |
{
|
|
Packit |
98cdb6 |
GtkTreeViewColumn *column;
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
|
|
Packit |
98cdb6 |
i, "Header",
|
|
Packit |
98cdb6 |
gtk_cell_renderer_text_new (),
|
|
Packit |
98cdb6 |
"text", i,
|
|
Packit |
98cdb6 |
NULL);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), i);
|
|
Packit |
98cdb6 |
gtk_tree_view_column_set_resizable (column, TRUE);
|
|
Packit |
98cdb6 |
}
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Toggle button for long content row */
|
|
Packit |
98cdb6 |
button = gtk_toggle_button_new_with_label ("Toggle long content row");
|
|
Packit |
98cdb6 |
g_signal_connect (button, "toggled",
|
|
Packit |
98cdb6 |
G_CALLBACK (toggle_long_content_row), tree_view);
|
|
Packit |
98cdb6 |
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Set up option menu callback and default item */
|
|
Packit |
98cdb6 |
g_signal_connect (combo_box, "changed",
|
|
Packit |
98cdb6 |
G_CALLBACK (combo_box_changed), tree_view);
|
|
Packit |
98cdb6 |
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
/* Done */
|
|
Packit |
98cdb6 |
gtk_widget_show_all (window);
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
gtk_main ();
|
|
Packit |
98cdb6 |
|
|
Packit |
98cdb6 |
return 0;
|
|
Packit |
98cdb6 |
}
|