summaryrefslogtreecommitdiff
path: root/tests/testtreeview.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2001-05-03 00:46:19 +0000
committerOwen Taylor <otaylor@src.gnome.org>2001-05-03 00:46:19 +0000
commit4c2a74b79d0513ae9accfb8652b0ca47f5eab894 (patch)
tree6691b8b09b77760a16e995a8e781d6e063ffb214 /tests/testtreeview.c
parenta5d1bc41ecb847f95ece2059d3ca0842f76076a1 (diff)
downloadgtk+-4c2a74b79d0513ae9accfb8652b0ca47f5eab894.tar.gz
Reduce new_text_length appropriately when we run into the size limit for
Wed May 2 20:36:38 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkentry.c (gtk_entry_real_insert_text): Reduce new_text_length appropriately when we run into the size limit for the entry. (#53445, reported by Jeff Franks) * tests/testgtk.c (create_entry): Remove most of the property toggle buttons. Replace with a "Props" button that brings up a property editor. * tests/prop-editor.[ch] test/testtreeview.c tests/Makefile.am: Split the property editor code out for reuse, improve.
Diffstat (limited to 'tests/testtreeview.c')
-rw-r--r--tests/testtreeview.c482
1 files changed, 9 insertions, 473 deletions
diff --git a/tests/testtreeview.c b/tests/testtreeview.c
index 7a61d1633a..edf623ce3a 100644
--- a/tests/testtreeview.c
+++ b/tests/testtreeview.c
@@ -1,6 +1,6 @@
-
-#include <gtk/gtk.h>
#include <string.h>
+#include "prop-editor.h"
+#include <gtk/gtk.h>
/* Don't copy this bad example; inline RGB data is always a better
@@ -32,7 +32,6 @@ static char *book_closed_xpm[] = {
" "
};
-static GtkWidget* create_prop_editor (GObject *object);
static void run_automated_tests (void);
/* This custom model is to test custom model use. */
@@ -303,7 +302,7 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type)
rend = gtk_cell_renderer_toggle_new ();
g_signal_connect_data (G_OBJECT (rend), "toggled",
- toggled_callback, tree_view,
+ GTK_SIGNAL_FUNC (toggled_callback), tree_view,
NULL, FALSE, FALSE);
col = gtk_tree_view_column_new_with_attributes ("Column 3",
@@ -315,7 +314,7 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type)
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
- pixbuf = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
+ pixbuf = gdk_pixbuf_new_from_xpm_data ((char **)book_closed_xpm);
image = gtk_image_new_from_pixbuf (pixbuf);
@@ -336,7 +335,7 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type)
g_object_set (G_OBJECT (rend), "radio", TRUE, NULL);
g_signal_connect_data (G_OBJECT (rend), "toggled",
- toggled_callback, tree_view,
+ G_CALLBACK (toggled_callback), tree_view,
NULL, FALSE, FALSE);
col = gtk_tree_view_column_new_with_attributes ("Column 4",
@@ -910,7 +909,7 @@ gtk_tree_model_types_class_init (GtkTreeModelTypesClass *class)
GTK_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
GTK_SIGNAL_OFFSET (GtkTreeModelTypesClass, changed),
- NULL,
+ NULL, NULL,
gtk_marshal_VOID__BOXED_BOXED,
G_TYPE_NONE, 2,
G_TYPE_POINTER,
@@ -920,7 +919,7 @@ gtk_tree_model_types_class_init (GtkTreeModelTypesClass *class)
GTK_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
GTK_SIGNAL_OFFSET (GtkTreeModelTypesClass, inserted),
- NULL,
+ NULL, NULL,
gtk_marshal_VOID__BOXED_BOXED,
G_TYPE_NONE, 2,
G_TYPE_POINTER,
@@ -930,7 +929,7 @@ gtk_tree_model_types_class_init (GtkTreeModelTypesClass *class)
GTK_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
GTK_SIGNAL_OFFSET (GtkTreeModelTypesClass, child_toggled),
- NULL,
+ NULL, NULL,
gtk_marshal_VOID__BOXED_BOXED,
G_TYPE_NONE, 2,
G_TYPE_POINTER,
@@ -940,7 +939,7 @@ gtk_tree_model_types_class_init (GtkTreeModelTypesClass *class)
GTK_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
GTK_SIGNAL_OFFSET (GtkTreeModelTypesClass, deleted),
- NULL,
+ NULL, NULL,
gtk_marshal_VOID__BOXED,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
@@ -1271,469 +1270,6 @@ gtk_real_model_types_iter_parent (GtkTreeModel *tree_model,
}
/*
- * Property editor thingy
- */
-
-static void
-get_param_specs (GObject *object,
- GParamSpec ***specs,
- gint *n_specs)
-{
- /* Use private interface for now, fix later */
- *specs = G_OBJECT_GET_CLASS (object)->property_specs;
- *n_specs = G_OBJECT_GET_CLASS (object)->n_property_specs;
-}
-
-typedef struct
-{
- gpointer instance;
- guint id;
-} DisconnectData;
-
-static void
-disconnect_func (gpointer data)
-{
- DisconnectData *dd = data;
-
- g_signal_handler_disconnect (dd->instance, dd->id);
- g_free (dd);
-}
-
-static void
-g_object_connect_property (GObject *object,
- const gchar *prop_name,
- GtkSignalFunc func,
- gpointer data,
- GObject *alive_object)
-{
- gchar *with_detail = g_strconcat ("notify::", prop_name, NULL);
- DisconnectData *dd;
-
- dd = g_new (DisconnectData, 1);
-
- dd->id = g_signal_connect_data (object, with_detail,
- func, data,
- NULL, FALSE, FALSE);
-
- dd->instance = object;
-
- g_object_set_data_full (G_OBJECT (alive_object),
- "alive-object",
- dd,
- disconnect_func);
-
- g_free (with_detail);
-}
-
-typedef struct
-{
- GObject *obj;
- gchar *prop;
-} ObjectProperty;
-
-static void
-free_object_property (ObjectProperty *p)
-{
- g_free (p->prop);
- g_free (p);
-}
-
-static void
-connect_controller (GObject *controller,
- const gchar *signal,
- GObject *model,
- const gchar *prop_name,
- GtkSignalFunc func)
-{
- ObjectProperty *p;
-
- p = g_new (ObjectProperty, 1);
- p->obj = model;
- p->prop = g_strdup (prop_name);
-
- g_signal_connect_data (controller, signal, func, p,
- (GClosureNotify)free_object_property,
- FALSE, FALSE);
-}
-
-static void
-int_modified (GtkAdjustment *adj, gpointer data)
-{
- ObjectProperty *p = data;
-
- g_object_set (p->obj, p->prop, (int) adj->value, NULL);
-}
-
-static void
-int_changed (GObject *object, GParamSpec *pspec, gpointer data)
-{
- GtkAdjustment *adj = GTK_ADJUSTMENT (data);
- GValue val = { 0, };
-
- g_value_init (&val, G_TYPE_INT);
- g_object_get_property (object, pspec->name, &val);
-
- if (g_value_get_int (&val) != (int)adj->value)
- gtk_adjustment_set_value (adj, g_value_get_int (&val));
-
- g_value_unset (&val);
-}
-
-static void
-float_modified (GtkAdjustment *adj, gpointer data)
-{
- ObjectProperty *p = data;
-
- g_object_set (p->obj, p->prop, (float) adj->value, NULL);
-}
-
-static void
-float_changed (GObject *object, GParamSpec *pspec, gpointer data)
-{
- GtkAdjustment *adj = GTK_ADJUSTMENT (data);
- GValue val = { 0, };
-
- g_value_init (&val, G_TYPE_FLOAT);
- g_object_get_property (object, pspec->name, &val);
-
- if (g_value_get_float (&val) != (float) adj->value)
- gtk_adjustment_set_value (adj, g_value_get_float (&val));
-
- g_value_unset (&val);
-}
-
-static void
-string_modified (GtkEntry *entry, gpointer data)
-{
- ObjectProperty *p = data;
- gchar *text;
-
- text = gtk_entry_get_text (entry);
-
- g_object_set (p->obj, p->prop, text, NULL);
-}
-
-static void
-string_changed (GObject *object, GParamSpec *pspec, gpointer data)
-{
- GtkEntry *entry = GTK_ENTRY (data);
- GValue val = { 0, };
- gchar *str;
- gchar *text;
-
- g_value_init (&val, G_TYPE_STRING);
- g_object_get_property (object, pspec->name, &val);
-
- str = g_value_get_string (&val);
- if (str == NULL)
- str = "";
- text = gtk_entry_get_text (entry);
-
- if (strcmp (str, text) != 0)
- gtk_entry_set_text (entry, str);
-
- g_value_unset (&val);
-}
-
-static void
-bool_modified (GtkToggleButton *tb, gpointer data)
-{
- ObjectProperty *p = data;
-
- g_object_set (p->obj, p->prop, (int) tb->active, NULL);
-}
-
-static void
-bool_changed (GObject *object, GParamSpec *pspec, gpointer data)
-{
- GtkToggleButton *tb = GTK_TOGGLE_BUTTON (data);
- GValue val = { 0, };
-
- g_value_init (&val, G_TYPE_BOOLEAN);
- g_object_get_property (object, pspec->name, &val);
-
- if (g_value_get_boolean (&val) != tb->active)
- gtk_toggle_button_set_active (tb, g_value_get_boolean (&val));
-
- gtk_label_set_text (GTK_LABEL (GTK_BIN (tb)->child), g_value_get_boolean (&val) ?
- "TRUE" : "FALSE");
-
- g_value_unset (&val);
-}
-
-
-static void
-enum_modified (GtkOptionMenu *om, gpointer data)
-{
- ObjectProperty *p = data;
- gint i;
- GParamSpec *spec;
- GEnumClass *eclass;
-
- spec = g_object_class_find_property (G_OBJECT_GET_CLASS (p->obj),
- p->prop);
-
- eclass = G_ENUM_CLASS (g_type_class_peek (spec->value_type));
-
- i = gtk_option_menu_get_history (om);
-
- g_object_set (p->obj, p->prop, eclass->values[i].value, NULL);
-}
-
-static void
-enum_changed (GObject *object, GParamSpec *pspec, gpointer data)
-{
- GtkOptionMenu *om = GTK_OPTION_MENU (data);
- GValue val = { 0, };
- GEnumClass *eclass;
- gint i;
-
- eclass = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
-
- g_value_init (&val, pspec->value_type);
- g_object_get_property (object, pspec->name, &val);
-
- i = 0;
- while (i < eclass->n_values)
- {
- if (eclass->values[i].value == g_value_get_enum (&val))
- break;
- ++i;
- }
-
- if (gtk_option_menu_get_history (om) != i)
- gtk_option_menu_set_history (om, i);
-
- g_value_unset (&val);
-}
-
-static GtkWidget*
-create_prop_editor (GObject *object)
-{
- GtkWidget *win;
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *label;
- GtkWidget *prop_edit;
- GtkWidget *sw;
- gint n_specs = 0;
- GParamSpec **specs = NULL;
- gint i;
- GtkAdjustment *adj;
-
- win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- /* hold a strong ref to the object we're editing */
- g_object_ref (G_OBJECT (object));
- g_object_set_data_full (G_OBJECT (win), "model-object",
- object, (GDestroyNotify)g_object_unref);
-
- vbox = gtk_vbox_new (TRUE, 2);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), vbox);
- gtk_container_add (GTK_CONTAINER (win), sw);
-
- get_param_specs (object, &specs, &n_specs);
-
- i = 0;
- while (i < n_specs)
- {
- GParamSpec *spec = specs[i];
- gboolean can_modify;
-
- prop_edit = NULL;
-
- can_modify = ((spec->flags & G_PARAM_WRITABLE) != 0 &&
- (spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
-
- if ((spec->flags & G_PARAM_READABLE) == 0)
- {
- /* can't display unreadable properties */
- ++i;
- continue;
- }
-
- switch (spec->value_type)
- {
- case G_TYPE_INT:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_INT (spec)->default_value,
- G_PARAM_SPEC_INT (spec)->minimum,
- G_PARAM_SPEC_INT (spec)->maximum,
- 1,
- MAX ((G_PARAM_SPEC_INT (spec)->maximum -
- G_PARAM_SPEC_INT (spec)->minimum) / 10, 1),
- 0.0));
-
- prop_edit = gtk_spin_button_new (adj, 1.0, 0);
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (int_changed),
- adj, G_OBJECT (adj));
-
- if (can_modify)
- connect_controller (G_OBJECT (adj), "value_changed",
- object, spec->name, (GtkSignalFunc) int_modified);
- break;
-
- case G_TYPE_FLOAT:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_FLOAT (spec)->default_value,
- G_PARAM_SPEC_FLOAT (spec)->minimum,
- G_PARAM_SPEC_FLOAT (spec)->maximum,
- 0.1,
- MAX ((G_PARAM_SPEC_FLOAT (spec)->maximum -
- G_PARAM_SPEC_FLOAT (spec)->minimum) / 10, 0.1),
- 0.0));
-
- prop_edit = gtk_spin_button_new (adj, 0.1, 2);
-
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (float_changed),
- adj, G_OBJECT (adj));
-
- if (can_modify)
- connect_controller (G_OBJECT (adj), "value_changed",
- object, spec->name, (GtkSignalFunc) float_modified);
- break;
-
- case G_TYPE_STRING:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_entry_new ();
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (string_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "changed",
- object, spec->name, (GtkSignalFunc) string_modified);
- break;
-
- case G_TYPE_BOOLEAN:
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_toggle_button_new_with_label ("");
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (bool_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "toggled",
- object, spec->name, (GtkSignalFunc) bool_modified);
- break;
-
- default:
- if (g_type_is_a (spec->value_type, G_TYPE_ENUM))
- {
- GtkWidget *menu;
- GEnumClass *eclass;
- gint i;
-
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (spec->nick);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- prop_edit = gtk_option_menu_new ();
-
- menu = gtk_menu_new ();
-
- eclass = G_ENUM_CLASS (g_type_class_peek (spec->value_type));
-
- i = 0;
- while (i < eclass->n_values)
- {
- GtkWidget *mi;
-
- mi = gtk_menu_item_new_with_label (eclass->values[i].value_name);
-
- gtk_widget_show (mi);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
-
- ++i;
- }
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (prop_edit), menu);
-
- gtk_box_pack_end (GTK_BOX (hbox), prop_edit, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- g_object_connect_property (object, spec->name,
- GTK_SIGNAL_FUNC (enum_changed),
- prop_edit, G_OBJECT (prop_edit));
-
- if (can_modify)
- connect_controller (G_OBJECT (prop_edit), "changed",
- object, spec->name, (GtkSignalFunc) enum_modified);
- }
- else
- {
- gchar *msg = g_strdup_printf ("%s: don't know how to edit type %s",
- spec->nick, g_type_name (spec->value_type));
- hbox = gtk_hbox_new (FALSE, 10);
- label = gtk_label_new (msg);
- g_free (msg);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- }
- break;
- }
-
- if (prop_edit)
- {
- if (!can_modify)
- gtk_widget_set_sensitive (prop_edit, FALSE);
-
- /* set initial value */
- g_object_notify (object, spec->name);
- }
-
- ++i;
- }
-
- gtk_window_set_default_size (GTK_WINDOW (win), 300, 500);
-
- gtk_widget_show_all (win);
-
- return win;
-}
-
-/*
* Automated testing
*/