summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2000-12-21 01:53:39 +0000
committerHavoc Pennington <hp@src.gnome.org>2000-12-21 01:53:39 +0000
commitf00175cf07395d9f05f8c98efb203ee3c74a31cd (patch)
tree9bc26a15bc80d371a415f9bfab4cc9e4acba64e8 /tests
parent8d1ff18de01d36f97e442a58ec8948206cb54961 (diff)
downloadgdk-pixbuf-f00175cf07395d9f05f8c98efb203ee3c74a31cd.tar.gz
new directory to contain tests, gtk/test* should move here sometime (with
2000-12-20 Havoc Pennington <hp@redhat.com> * tests: new directory to contain tests, gtk/test* should move here sometime (with appropriate on-cvs-server hackery) * tests/testtreeview.c, tests/Makefile.am: a test * configure.in (AC_OUTPUT): add tests/Makefile * gtk/gtktexttag.c (gtk_text_tag_get_property): Add "invisible" and "invisible_set" which were missing * gtk/gtkrbtree.h: some cheesy indentation fix
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am40
-rw-r--r--tests/testtreeview.c214
2 files changed, 254 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 000000000..1c39a3826
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,40 @@
+## Makefile.am for gtk+/tests
+
+INCLUDES = @STRIP_BEGIN@ \
+ -I$(top_srcdir) \
+ -I$(top_builddir)/gdk \
+ -DGTK_DISABLE_COMPAT_H \
+ @GTK_DEBUG_FLAGS@ \
+ @GTK_XIM_FLAGS@ \
+ @GTK_LOCALE_FLAGS@ \
+ @PANGO_CFLAGS@ \
+ @GLIB_CFLAGS@ \
+ @more_cflags@ \
+@STRIP_END@
+
+DEPS = \
+ $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-1.3.la \
+ $(top_builddir)/gdk/@gdktargetlib@ \
+ $(top_builddir)/gtk/@gtktargetlib@
+
+LDADDS = @STRIP_BEGIN@ \
+ $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-1.3.la \
+ $(top_builddir)/gdk/@gdktargetlib@ \
+ $(top_builddir)/gtk/@gtktargetlib@ \
+ @more_ldflags@ \
+ @more_libs@ \
+ @GDK_WLIBS@ \
+ @PANGO_LIBS@ \
+ @GLIB_LIBS@ \
+ @GTK_LIBS_EXTRA@ \
+ -lm \
+@STRIP_END@
+
+noinst_PROGRAMS = \
+ testtreeview
+
+testtreeview_DEPENDENCIES = $(DEPS)
+
+testtreeview_LDADD = $(LDADDS)
+
+testtreeview_SOURCES = testtreeview.c
diff --git a/tests/testtreeview.c b/tests/testtreeview.c
new file mode 100644
index 000000000..9b2d9183a
--- /dev/null
+++ b/tests/testtreeview.c
@@ -0,0 +1,214 @@
+
+#include <gtk/gtk.h>
+
+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;
+}
+
+static void
+g_object_connect_property (GObject *object,
+ const gchar *prop_name,
+ GtkSignalFunc func,
+ gpointer data)
+{
+ gchar *with_detail = g_strconcat ("notify::", prop_name, NULL);
+
+ g_signal_connect_data (object, with_detail,
+ func, data,
+ NULL, FALSE, FALSE);
+
+ g_free (with_detail);
+}
+
+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);
+
+ gtk_adjustment_set_value (adj, g_value_get_int (&val));
+ g_value_unset (&val);
+}
+
+static void
+string_changed (GObject *object, GParamSpec *pspec, gpointer data)
+{
+ GtkEntry *entry = GTK_ENTRY (data);
+ GValue val = { 0, };
+ gchar *str;
+
+ g_value_init (&val, G_TYPE_STRING);
+ g_object_get_property (object, pspec->name, &val);
+
+ str = g_value_get_string (&val);
+
+ gtk_entry_set_text (entry, str ? str : "");
+ g_value_unset (&val);
+}
+
+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);
+
+ 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 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);
+
+ 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];
+
+ prop_edit = NULL;
+
+ 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);
+ 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);
+ 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);
+ break;
+
+ default:
+ break;
+ }
+
+ if (prop_edit)
+ {
+ /* make insensitive if the property isn't writable */
+ if ((spec->flags & G_PARAM_WRITABLE) == 0 ||
+ (spec->flags & G_PARAM_CONSTRUCT_ONLY) != 0)
+ 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;
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ GtkWidget *window;
+
+ gtk_init (&argc, &argv);
+
+ /* I didn't write the tree test yet, just the property editor to use
+ * inside the tree test ;-)
+ */
+ window = create_prop_editor (G_OBJECT (gtk_text_tag_new ("foo")));
+
+ gtk_main ();
+
+ return 0;
+}