[monkey-bubble: 661/753] new test program.



commit dcc6fbd474c0e344edd844fee20f4f34ab3ba703
Author: Jonathan Blandford <jrb redhat com>
Date:   Sat Aug 25 04:43:08 2001 +0000

    new test program.
    
    Sat Aug 25 00:33:41 2001  Jonathan Blandford  <jrb redhat com>
    
    	* testdruid.c (main): new test program.
    
    Sat Aug 25 00:33:51 2001  Jonathan Blandford  <jrb redhat com>
    
    	* gnome-druid-page-standard.c
    	(gnome_druid_page_standard_append_item): Modified patch from James
    	Cape to improve look of druid.  Added a convenience API.

 libgnomeui/ChangeLog                   |    6 +
 libgnomeui/gnome-druid-page-standard.c | 1018 ++++++++++++++++++++------------
 libgnomeui/gnome-druid-page-standard.h |   77 ++-
 libgnomeui/gnome-druid.c               |   31 +-
 test-gnome/ChangeLog                   |    4 +
 test-gnome/Makefile.am                 |    5 +-
 test-gnome/testdruid.c                 |   47 ++
 7 files changed, 778 insertions(+), 410 deletions(-)
---
diff --git a/libgnomeui/ChangeLog b/libgnomeui/ChangeLog
index 0f81fbc..09f6964 100644
--- a/libgnomeui/ChangeLog
+++ b/libgnomeui/ChangeLog
@@ -1,3 +1,9 @@
+Sat Aug 25 00:33:51 2001  Jonathan Blandford  <jrb redhat com>
+
+	* gnome-druid-page-standard.c
+	(gnome_druid_page_standard_append_item): Modified patch from James
+	Cape to improve look of druid.  Added a convenience API.
+
 2001-08-24  Darin Adler  <darin bentspoon com>
 
 	* gnome-file-entry.h:
diff --git a/libgnomeui/gnome-druid-page-standard.c b/libgnomeui/gnome-druid-page-standard.c
index d3d708b..b930521 100644
--- a/libgnomeui/gnome-druid-page-standard.c
+++ b/libgnomeui/gnome-druid-page-standard.c
@@ -1,5 +1,7 @@
 /* gnome-druid-page-standard.c
  * Copyright (C) 1999  Red Hat, Inc.
+ * Copyright (C) 2001  James M. Cape <jcape ignore-your tv>
+ * Copyright (C) 2001  Jonathan Blandford <jrb alum mit edu>
  * All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
@@ -17,175 +19,451 @@
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
-/*
-  @NOTATION@
-*/
 
 #include <config.h>
 #include "gnome-macros.h"
 
 #include "gnome-druid.h"
-#include <libgnomecanvas/gnome-canvas-pixbuf.h>
-#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
-#include <libgnomecanvas/gnome-canvas-text.h>
 #include "gnome-uidefs.h"
 #include <libgnome/gnome-i18n.h>
 
+/* FIXME: Are these includes needed */
+#include <gtk/gtklabel.h>
+#include <gtk/gtklayout.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkeventbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <string.h>
 #include "gnome-druid-page-standard.h"
 
 struct _GnomeDruidPageStandardPrivate
 {
-	GtkWidget *canvas;
-	GtkWidget *side_bar;
-	GnomeCanvasItem *logoframe_item;
-	GnomeCanvasItem *logo_item;
-	GnomeCanvasItem *top_watermark_item;
-	GnomeCanvasItem *title_item;
-	GnomeCanvasItem *background_item;
-};
+	GtkWidget *top_bar;
+	GtkWidget *watermark;
+	GtkWidget *logo;
+	GtkWidget *title_label;
+
+	GtkWidget *left_line;
+	GtkWidget *right_line;
+	GtkWidget *bottom_line;
 
+	GtkWidget *evbox;
 
-static void gnome_druid_page_standard_init	    (GnomeDruidPageStandard          *druid_page_standard);
-static void gnome_druid_page_standard_class_init    (GnomeDruidPageStandardClass     *klass);
-static void gnome_druid_page_standard_destroy 	    (GtkObject                       *object);
-static void gnome_druid_page_standard_setup         (GnomeDruidPageStandard          *druid_page_standard);
-static void gnome_druid_page_standard_finalize      (GObject                         *widget);
-static void gnome_druid_page_standard_size_allocate (GtkWidget                       *widget,
-						     GtkAllocation                   *allocation);
-static void gnome_druid_page_standard_prepare       (GnomeDruidPage                  *page,
-						     GtkWidget                       *druid,
-						     gpointer                        *data);
+	guint title_foreground_set : 1;
+	guint background_set : 1;
+	guint logo_background_set : 1;
+	guint contents_background_set : 1;
+};
 
-static void gnome_druid_page_standard_configure_canvas (GnomeDruidPageStandard	     *druid_page_standard);
 
-#define LOGO_WIDTH 50.0
-#define DRUID_PAGE_WIDTH 516
-#define GDK_COLOR_TO_RGBA(color) GNOME_CANVAS_COLOR ((color).red/256, (color).green/256, (color).blue/256)
+static void gnome_druid_page_standard_init          (GnomeDruidPageStandard      *druid_page_standard);
+static void gnome_druid_page_standard_class_init    (GnomeDruidPageStandardClass *class);
+
+static void gnome_druid_page_standard_get_property  (GObject                     *object,
+						     guint                        prop_id,
+						     GValue                      *value,
+						     GParamSpec                  *pspec);
+static void gnome_druid_page_standard_set_property  (GObject                     *object,
+						     guint                        prop_id,
+						     const GValue                *value,
+						     GParamSpec                  *pspec);
+static void gnome_druid_page_standard_finalize      (GObject                     *widget);
+static void gnome_druid_page_standard_destroy       (GtkObject                   *object);
+static void gnome_druid_page_standard_realize       (GtkWidget                   *widget);
+static void gnome_druid_page_standard_style_set     (GtkWidget                   *widget,
+						     GtkStyle                    *old_style);
+static void gnome_druid_page_standard_prepare       (GnomeDruidPage              *page,
+						     GtkWidget                   *druid,
+						     gpointer                    *data);
+static void gnome_druid_page_standard_size_allocate (GtkWidget                   *widget,
+						     GtkAllocation               *allocation);
+static void gnome_druid_page_standard_layout_setup  (GnomeDruidPageStandard      *druid_page_standard);
+static void gnome_druid_page_standard_set_color     (GnomeDruidPageStandard      *druid_page_standard);
+
+
+#define LOGO_WIDTH 48
+#define DRUID_PAGE_WIDTH 508
+
+enum {
+	PROP_0,
+	PROP_TITLE,
+	PROP_LOGO,
+	PROP_TOP_WATERMARK,
+	PROP_TITLE_FOREGROUND,
+	PROP_TITLE_FOREGROUND_GDK,
+	PROP_TITLE_FOREGROUND_SET,
+	PROP_BACKGROUND,
+	PROP_BACKGROUND_GDK,
+	PROP_BACKGROUND_SET,
+	PROP_LOGO_BACKGROUND,
+	PROP_LOGO_BACKGROUND_GDK,
+	PROP_LOGO_BACKGROUND_SET,
+	PROP_CONTENTS_BACKGROUND,
+	PROP_CONTENTS_BACKGROUND_GDK,
+	PROP_CONTENTS_BACKGROUND_SET,
+};
 
 GNOME_CLASS_BOILERPLATE (GnomeDruidPageStandard, gnome_druid_page_standard,
 			 GnomeDruidPage, gnome_druid_page)
 
 static void
-gnome_druid_page_standard_class_init (GnomeDruidPageStandardClass *klass)
+gnome_druid_page_standard_class_init (GnomeDruidPageStandardClass *class)
 {
 	GtkObjectClass *object_class;
 	GObjectClass *gobject_class;
 	GtkWidgetClass *widget_class;
+	GnomeDruidPageClass *druid_page_class;
 
-	object_class = (GtkObjectClass*) klass;
-	gobject_class = (GObjectClass*) klass;
-	widget_class = (GtkWidgetClass*) klass;
+	object_class = (GtkObjectClass*) class;
+	gobject_class = (GObjectClass*) class;
+	widget_class = (GtkWidgetClass*) class;
+	druid_page_class = (GnomeDruidPageClass*) class;
 
-	object_class->destroy = gnome_druid_page_standard_destroy;
+	gobject_class->get_property = gnome_druid_page_standard_get_property;
+	gobject_class->set_property = gnome_druid_page_standard_set_property;
 	gobject_class->finalize = gnome_druid_page_standard_finalize;
+	object_class->destroy = gnome_druid_page_standard_destroy;
 	widget_class->size_allocate = gnome_druid_page_standard_size_allocate;
-
+	widget_class->realize = gnome_druid_page_standard_realize;
+	widget_class->style_set = gnome_druid_page_standard_style_set;
+	druid_page_class->prepare = gnome_druid_page_standard_prepare;
+
+	g_object_class_install_property (gobject_class,
+					 PROP_TITLE,
+					 g_param_spec_string ("title",
+							      _("Title"),
+							      _("Title of the druid"),
+							      NULL,
+							      G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_LOGO,
+					 g_param_spec_object ("logo",
+							      _("Logo"),
+							      _("Logo image"),
+							      GDK_TYPE_PIXBUF,
+							      G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_TOP_WATERMARK,
+					 g_param_spec_object ("top_watermark",
+							      _("Top Watermark"),
+							      _("Watermark image for the top"),
+							      GDK_TYPE_PIXBUF,
+							      G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_TITLE_FOREGROUND,
+					 g_param_spec_string ("title_foreground",
+							      _("Title Foreground"),
+							      _("Foreground color of the title"),
+							      NULL,
+							      G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_TITLE_FOREGROUND_GDK,
+					 g_param_spec_boxed ("title_foreground_gdk",
+							     _("Title Foreground Color"),
+							     _("Foreground color of the title as a GdkColor"),
+							     GDK_TYPE_COLOR,
+							     G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_TITLE_FOREGROUND_SET,
+					 g_param_spec_boolean ("title_foreground_set",
+							       _("Title Foreground color set"),
+							       _("Foreground color of the title is set"),
+							       FALSE,
+							       G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_BACKGROUND,
+					 g_param_spec_string ("background",
+							      _("Background Color"),
+							      _("Background color"),
+							      NULL,
+							      G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_BACKGROUND_GDK,
+					 g_param_spec_boxed ("background_gdk",
+							     _("Background Color"),
+							     _("Background color as a GdkColor"),
+							     GDK_TYPE_COLOR,
+							     G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_BACKGROUND_SET,
+					 g_param_spec_boolean ("background_set",
+							       _("Background color set"),
+							       _("Background color is set"),
+							       FALSE,
+							       G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_LOGO_BACKGROUND,
+					 g_param_spec_string ("logo_background",
+							      _("Logo Background Color"),
+							      _("Logo Background color"),
+							      NULL,
+							      G_PARAM_WRITABLE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_LOGO_BACKGROUND_GDK,
+					 g_param_spec_boxed ("logo_background_gdk",
+							     _("Logo Background Color"),
+							     _("Logo Background color as a GdkColor"),
+							     GDK_TYPE_COLOR,
+							     G_PARAM_READWRITE));
+
+	g_object_class_install_property (gobject_class,
+					 PROP_LOGO_BACKGROUND_SET,
+					 g_param_spec_boolean ("logo_background_set",
+							       _("Logo Background color set"),
+							       _("Logo Background color is set"),
+							       FALSE,
+							       G_PARAM_READWRITE));
 }
+
 static void
 gnome_druid_page_standard_init (GnomeDruidPageStandard *druid_page_standard)
 {
-	druid_page_standard->_priv = g_new0(GnomeDruidPageStandardPrivate, 1);
 
-	/* initialize the color values */
-	druid_page_standard->background_color.red = 6400; /* midnight blue */
-	druid_page_standard->background_color.green = 6400;
-	druid_page_standard->background_color.blue = 28672;
-	druid_page_standard->logo_background_color.red = 65280; /* white */
-	druid_page_standard->logo_background_color.green = 65280;
-	druid_page_standard->logo_background_color.blue = 65280;
-	druid_page_standard->title_color.red = 65280; /* white */
-	druid_page_standard->title_color.green = 65280;
-	druid_page_standard->title_color.blue = 65280;
-}
-
-void
-gnome_druid_page_standard_construct (GnomeDruidPageStandard *druid_page_standard,
-				     gboolean		     antialiased,
-				     const gchar	    *title,
-				     GdkPixbuf		    *logo,
-				     GdkPixbuf              *top_watermark)
-{
-	GtkWidget *canvas;
-	GtkRcStyle *rc_style;
 	GtkWidget *vbox;
 	GtkWidget *hbox;
 
-	g_return_if_fail (druid_page_standard != NULL);
-	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
-
-	if (antialiased) {
-		gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-		canvas = gnome_canvas_new_aa();
-		gtk_widget_pop_colormap ();
-	} else {
-		canvas = gnome_canvas_new();
-	}
-
-	druid_page_standard->_priv->canvas = canvas;
-
-	druid_page_standard->title = g_strdup (title ? title : "");
-
-	if (logo != NULL)
-		gdk_pixbuf_ref (logo);
-	druid_page_standard->logo_image = logo;
-
-	if (top_watermark != NULL)
-		gdk_pixbuf_ref (top_watermark);
-	druid_page_standard->top_watermark_image = top_watermark;
+	druid_page_standard->_priv = g_new0(GnomeDruidPageStandardPrivate, 1);
 
-	/* Set up the widgets */
+	/* Top VBox */
 	vbox = gtk_vbox_new (FALSE, 0);
+	gtk_container_add (GTK_CONTAINER (druid_page_standard), vbox);
+	gtk_widget_show (vbox);
+
+	/* Top bar layout widget */
+	druid_page_standard->_priv->top_bar = gtk_layout_new (NULL, NULL);
+	gtk_box_pack_start (GTK_BOX (vbox),
+			    druid_page_standard->_priv->top_bar,
+	                    FALSE, FALSE, 0);
+	gtk_widget_set_size_request (druid_page_standard->_priv->top_bar, -1, 52);
+	gtk_widget_show (druid_page_standard->_priv->top_bar);
+
+	/* Top Bar Watermark */
+	druid_page_standard->_priv->watermark = gtk_image_new_from_pixbuf (NULL);
+	gtk_layout_put (GTK_LAYOUT (druid_page_standard->_priv->top_bar),
+	                druid_page_standard->_priv->watermark, 0, 0);
+	gtk_widget_show (druid_page_standard->_priv->watermark);
+
+	/* Title label */
+	druid_page_standard->_priv->title_label = gtk_label_new (NULL);
+	gtk_layout_put (GTK_LAYOUT (druid_page_standard->_priv->top_bar),
+	                druid_page_standard->_priv->title_label, 16, 2);
+	gtk_widget_set_size_request (druid_page_standard->_priv->title_label, -1, LOGO_WIDTH);
+	gtk_widget_show (druid_page_standard->_priv->title_label);
+
+	/* Top bar logo*/
+	druid_page_standard->_priv->logo = gtk_image_new_from_pixbuf (NULL);
+	gtk_layout_put (GTK_LAYOUT (druid_page_standard->_priv->top_bar),
+	                druid_page_standard->_priv->logo,
+	                (DRUID_PAGE_WIDTH - (LOGO_WIDTH + 2)), 2);
+	gtk_widget_show (druid_page_standard->_priv->logo);
+
+	/* HBox for contents row */
 	hbox = gtk_hbox_new (FALSE, 0);
-	druid_page_standard->vbox = gtk_vbox_new (FALSE, 0);
-	druid_page_standard->_priv->side_bar = gtk_drawing_area_new ();
-	gtk_drawing_area_size (GTK_DRAWING_AREA (druid_page_standard->_priv->side_bar),
-			       15, 10);
-	rc_style = gtk_rc_style_new ();
-	rc_style->bg[GTK_STATE_NORMAL].red = 6400;
-	rc_style->bg[GTK_STATE_NORMAL].green = 6400;
-	rc_style->bg[GTK_STATE_NORMAL].blue = 28672;
-	rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_BG;
-	gtk_rc_style_ref (rc_style);
-	gtk_widget_modify_style (druid_page_standard->_priv->side_bar, rc_style);
-
-	/* FIXME: can I just ref the old style? */
-	rc_style = gtk_rc_style_new ();
-	rc_style->bg[GTK_STATE_NORMAL].red = 6400;
-	rc_style->bg[GTK_STATE_NORMAL].green = 6400;
-	rc_style->bg[GTK_STATE_NORMAL].blue = 28672;
-	rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_BG;
-	gtk_widget_modify_style (canvas, rc_style);
-	gtk_box_pack_start (GTK_BOX (vbox), canvas, FALSE, FALSE, 0);
 	gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX (hbox), druid_page_standard->_priv->side_bar, FALSE, FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (hbox), druid_page_standard->vbox, TRUE, TRUE, 0);
-	gtk_widget_set_usize (canvas, 508, LOGO_WIDTH + GNOME_PAD * 2);
-	gtk_container_set_border_width (GTK_CONTAINER (druid_page_standard), 0);
-	gtk_container_add (GTK_CONTAINER (druid_page_standard), vbox);
-	gtk_widget_show_all (vbox);
+	gtk_widget_show (hbox);
+
+	/* Left line */
+	druid_page_standard->_priv->left_line = gtk_drawing_area_new ();
+	gtk_drawing_area_size (GTK_DRAWING_AREA (druid_page_standard->_priv->left_line), 1, 1);
+	gtk_box_pack_start (GTK_BOX (hbox), druid_page_standard->_priv->left_line,
+	                    FALSE, FALSE, 0);
+	gtk_widget_show (druid_page_standard->_priv->left_line);
+
+	/* Contents Event Box (used for styles) */
+	druid_page_standard->_priv->evbox = gtk_event_box_new ();
+	gtk_box_pack_start (GTK_BOX (hbox), druid_page_standard->_priv->evbox, TRUE, TRUE, 0);
+	gtk_widget_show (druid_page_standard->_priv->evbox);
+
+	/* Contents Vbox */
+	druid_page_standard->vbox = gtk_vbox_new (FALSE, 6);
+	gtk_container_set_border_width (GTK_CONTAINER (druid_page_standard->vbox), 16);
+	gtk_container_add (GTK_CONTAINER (druid_page_standard->_priv->evbox), druid_page_standard->vbox);
+	gtk_widget_show (druid_page_standard->vbox);
+
+	/* Right line */
+	druid_page_standard->_priv->right_line = gtk_drawing_area_new ();
+	gtk_drawing_area_size (GTK_DRAWING_AREA (druid_page_standard->_priv->right_line),
+	                       1, 1);
+	gtk_box_pack_start (GTK_BOX (hbox), druid_page_standard->_priv->right_line,
+	                    FALSE, FALSE, 0);
+	gtk_widget_show (druid_page_standard->_priv->right_line);
+
+	/* Bottom line */
+	druid_page_standard->_priv->bottom_line = gtk_drawing_area_new ();
+	gtk_drawing_area_size (GTK_DRAWING_AREA (druid_page_standard->_priv->bottom_line),
+	                       1, 1);
+	gtk_box_pack_start (GTK_BOX (vbox), druid_page_standard->_priv->bottom_line,
+	                    FALSE, FALSE, 0);
+	gtk_widget_show (druid_page_standard->_priv->bottom_line);
+}
+
+static void
+get_color_arg (GValue *value, GdkColor *orig)
+{
+  GdkColor *color;
 
-	gnome_druid_page_standard_setup (druid_page_standard);
+  color = g_new (GdkColor, 1);
+  *color = *orig;
+  g_value_init (value, GDK_TYPE_COLOR);
+  g_value_set_boxed (value, color);
 }
 
 static void
-gnome_druid_page_standard_destroy (GtkObject *object)
+gnome_druid_page_standard_get_property (GObject    *object,
+					guint       prop_id,
+					GValue     *value,
+					GParamSpec *pspec)
 {
 	GnomeDruidPageStandard *druid_page_standard = GNOME_DRUID_PAGE_STANDARD (object);
 
-	/* remember, destroy can be run multiple times! */
-
-	if (druid_page_standard->logo_image != NULL)
-		gdk_pixbuf_unref (druid_page_standard->logo_image);
-	druid_page_standard->logo_image = NULL;
+	switch (prop_id) {
+	case PROP_TITLE:
+		g_value_set_string (value, druid_page_standard->title);
+		break;
+	case PROP_LOGO:
+		g_value_set_object (value, druid_page_standard->logo);
+		break;
+	case PROP_TOP_WATERMARK:
+		g_value_set_object (value, druid_page_standard->top_watermark);
+		break;
+	case PROP_TITLE_FOREGROUND_GDK:
+		get_color_arg (value, & (druid_page_standard->title_foreground));
+		break;
+	case PROP_TITLE_FOREGROUND_SET:
+		g_value_set_boolean (value, druid_page_standard->_priv->title_foreground_set);
+		break;
+	case PROP_BACKGROUND_GDK:
+		get_color_arg (value, & (druid_page_standard->background));
+		break;
+	case PROP_BACKGROUND_SET:
+		g_value_set_boolean (value, druid_page_standard->_priv->background_set);
+		break;
+	case PROP_LOGO_BACKGROUND_GDK:
+		get_color_arg (value, & (druid_page_standard->logo_background));
+		break;
+	case PROP_LOGO_BACKGROUND_SET:
+		g_value_set_boolean (value, druid_page_standard->_priv->logo_background_set);
+		break;
+	case PROP_CONTENTS_BACKGROUND_GDK:
+		get_color_arg (value, & (druid_page_standard->contents_background));
+		break;
+	case PROP_CONTENTS_BACKGROUND_SET:
+		g_value_set_boolean (value, druid_page_standard->_priv->contents_background_set);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
 
-	if (druid_page_standard->top_watermark_image != NULL)
-		gdk_pixbuf_unref (druid_page_standard->top_watermark_image);
-	druid_page_standard->top_watermark_image = NULL;
+	GNOME_CALL_PARENT_HANDLER (G_OBJECT_CLASS, get_property, (object, prop_id, value, pspec));
+}
 
-	g_free (druid_page_standard->title);
-	druid_page_standard->title = NULL;
+static void
+gnome_druid_page_standard_set_property (GObject      *object,
+					guint         prop_id,
+					const GValue *value,
+					GParamSpec   *pspec)
+{
+	GnomeDruidPageStandard *druid_page_standard;
+	GdkColor color;
+
+	druid_page_standard = GNOME_DRUID_PAGE_STANDARD (object);
+
+	switch (prop_id) {
+	case PROP_TITLE:
+		gnome_druid_page_standard_set_title (druid_page_standard, g_value_get_string (value));
+		break;
+	case PROP_LOGO:
+		gnome_druid_page_standard_set_logo (druid_page_standard, g_value_get_object (value));
+		break;
+	case PROP_TOP_WATERMARK:
+		gnome_druid_page_standard_set_top_watermark (druid_page_standard, g_value_get_object (value));
+		break;
+	case PROP_TITLE_FOREGROUND:
+	case PROP_TITLE_FOREGROUND_GDK:
+		if (prop_id == PROP_TITLE_FOREGROUND_GDK)
+			color = *((GdkColor *)g_value_get_boxed (value));
+		else if (! gdk_color_parse (g_value_get_string (value), &color)) {
+			g_warning ("Don't know color `%s'", g_value_get_string (value));
+			break;
+		}
+		gnome_druid_page_standard_set_title_foreground (druid_page_standard, &color);
+		if (druid_page_standard->_priv->title_foreground_set == FALSE) {
+			druid_page_standard->_priv->title_foreground_set = TRUE;
+			g_object_notify (object, "title_foreground_set");
+		}
+		break;
+	case PROP_TITLE_FOREGROUND_SET:
+		druid_page_standard->_priv->title_foreground_set = g_value_get_boolean (value);
+		break;
+	case PROP_BACKGROUND:
+	case PROP_BACKGROUND_GDK:
+		if (prop_id == PROP_BACKGROUND_GDK)
+			color = *((GdkColor *)g_value_get_boxed (value));
+		else if (! gdk_color_parse (g_value_get_string (value), &color)) {
+			g_warning ("Don't know color `%s'", g_value_get_string (value));
+			break;
+		}
+		gnome_druid_page_standard_set_background (druid_page_standard, &color);
+		if (druid_page_standard->_priv->background_set == FALSE) {
+			druid_page_standard->_priv->background_set = TRUE;
+			g_object_notify (object, "background_set");
+		}
+		break;
+	case PROP_BACKGROUND_SET:
+		druid_page_standard->_priv->background_set = g_value_get_boolean (value);
+		break;
+	case PROP_LOGO_BACKGROUND:
+	case PROP_LOGO_BACKGROUND_GDK:
+		if (prop_id == PROP_LOGO_BACKGROUND_GDK)
+			color = *((GdkColor *)g_value_get_boxed (value));
+		else if (! gdk_color_parse (g_value_get_string (value), &color)) {
+			g_warning ("Don't know color `%s'", g_value_get_string (value));
+			break;
+		}
+		gnome_druid_page_standard_set_logo_background (druid_page_standard, &color);
+		if (druid_page_standard->_priv->logo_background_set == FALSE) {
+			druid_page_standard->_priv->logo_background_set = TRUE;
+			g_object_notify (object, "logo_background_set");
+		}
+		break;
+	case PROP_LOGO_BACKGROUND_SET:
+		druid_page_standard->_priv->logo_background_set = g_value_get_boolean (value);
+		break;
+	case PROP_CONTENTS_BACKGROUND:
+	case PROP_CONTENTS_BACKGROUND_GDK:
+		if (prop_id == PROP_CONTENTS_BACKGROUND_GDK)
+			color = *((GdkColor *)g_value_get_boxed (value));
+		else if (! gdk_color_parse (g_value_get_string (value), &color)) {
+			g_warning ("Don't know color `%s'", g_value_get_string (value));
+			break;
+		}
+		gnome_druid_page_standard_set_contents_background (druid_page_standard, &color);
+		if (druid_page_standard->_priv->contents_background_set == FALSE) {
+			druid_page_standard->_priv->contents_background_set = TRUE;
+			g_object_notify (object, "contents_background_set");
+		}
+		break;
+	case PROP_CONTENTS_BACKGROUND_SET:
+		druid_page_standard->_priv->contents_background_set = g_value_get_boolean (value);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
 
-	GNOME_CALL_PARENT_HANDLER (GTK_OBJECT_CLASS, destroy, (object));
+	GNOME_CALL_PARENT_HANDLER (G_OBJECT_CLASS, set_property, (object, prop_id, value, pspec));
 }
 
 static void
@@ -193,7 +471,7 @@ gnome_druid_page_standard_finalize (GObject *object)
 {
 	GnomeDruidPageStandard *druid_page_standard = GNOME_DRUID_PAGE_STANDARD(object);
 
-	g_free(druid_page_standard->_priv);
+	g_free (druid_page_standard->_priv);
 	druid_page_standard->_priv = NULL;
 
 	GNOME_CALL_PARENT_HANDLER (G_OBJECT_CLASS, finalize, (object));
@@ -201,119 +479,47 @@ gnome_druid_page_standard_finalize (GObject *object)
 
 
 static void
-gnome_druid_page_standard_configure_canvas (GnomeDruidPageStandard *druid_page_standard)
+gnome_druid_page_standard_destroy (GtkObject *object)
 {
-	int width, height;
+	GnomeDruidPageStandard *druid_page_standard = GNOME_DRUID_PAGE_STANDARD (object);
 
-	g_return_if_fail (druid_page_standard != NULL);
-	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
+	/* remember, destroy can be run multiple times! */
 
-	width = GTK_WIDGET(druid_page_standard)->allocation.width;
-	height = GTK_WIDGET(druid_page_standard)->allocation.height;
-
-	gnome_canvas_item_set (druid_page_standard->_priv->background_item,
-			       "x1", 0.0,
-			       "y1", 0.0,
-			       "x2", (double) width,
-			       "y2", (double) (LOGO_WIDTH + GNOME_PAD * 2),
-			       "width_units", 1.0,
-			       NULL);
-	if (druid_page_standard->logo_image != NULL) {
-		gnome_canvas_item_show (druid_page_standard->_priv->logoframe_item);
-		gnome_canvas_item_set (druid_page_standard->_priv->logoframe_item,
-				       "x1", (double) (width - LOGO_WIDTH - GNOME_PAD),
-				       "y1", (double) (GNOME_PAD),
-				       "x2", (double) (width - GNOME_PAD),
-				       "y2", (double) (GNOME_PAD + LOGO_WIDTH),
-				       "width_units", 1.0,
-				       NULL);
-	} else {
-		gnome_canvas_item_hide (druid_page_standard->_priv->logoframe_item);
-	}
-	gnome_canvas_item_set (druid_page_standard->_priv->logo_item,
-			       "x", (double) (width - GNOME_PAD - LOGO_WIDTH),
-			       "y", (double) (GNOME_PAD),
-			       "width", (double) (LOGO_WIDTH),
-			       "height", (double) (LOGO_WIDTH),
-			       NULL);
-}
+	if (druid_page_standard->logo != NULL)
+		gdk_pixbuf_unref (druid_page_standard->logo);
+	druid_page_standard->logo = NULL;
 
-static void
-gnome_druid_page_standard_setup (GnomeDruidPageStandard *druid_page_standard)
-{
-	GnomeCanvas *canvas;
-	static guint32 fill_color = 0;
-
-	canvas = GNOME_CANVAS (druid_page_standard->_priv->canvas);
-
-	/* set up the rest of the page */
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->background_color);
-	druid_page_standard->_priv->background_item =
-		gnome_canvas_item_new (gnome_canvas_root (canvas),
-				       gnome_canvas_rect_get_type (),
-				       "fill_color_rgba", fill_color,
-				       NULL);
-
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->logo_background_color);
-	druid_page_standard->_priv->logoframe_item =
-		gnome_canvas_item_new (gnome_canvas_root (canvas),
-				       gnome_canvas_rect_get_type (),
-				       "fill_color_rgba", fill_color,
-				       NULL);
-	if (druid_page_standard->logo_image == NULL) {
-		gnome_canvas_item_hide (druid_page_standard->_priv->logoframe_item);
-	}
+	if (druid_page_standard->top_watermark != NULL)
+		gdk_pixbuf_unref (druid_page_standard->top_watermark);
+	druid_page_standard->top_watermark = NULL;
 
-	druid_page_standard->_priv->top_watermark_item =
-		gnome_canvas_item_new (gnome_canvas_root (canvas),
-				       gnome_canvas_pixbuf_get_type (),
-				       "x", 0.0,
-				       "y", 0.0,
-				       "x_set", TRUE,
-				       "y_set", TRUE,
-				       NULL);
-
-	if (druid_page_standard->top_watermark_image != NULL) {
-		gnome_canvas_item_set (druid_page_standard->_priv->top_watermark_item,
-				       "pixbuf", druid_page_standard->top_watermark_image,
-				       NULL);
-	}
+	g_free (druid_page_standard->title);
+	druid_page_standard->title = NULL;
 
+	GNOME_CALL_PARENT_HANDLER (GTK_OBJECT_CLASS, destroy, (object));
+}
 
-	druid_page_standard->_priv->logo_item =
-		gnome_canvas_item_new (gnome_canvas_root (canvas),
-				       gnome_canvas_pixbuf_get_type (),
-				       "x_set", TRUE,
-				       "y_set", TRUE,
-				       NULL);
+static void
+gnome_druid_page_standard_realize (GtkWidget *widget)
+{
+	GnomeDruidPageStandard *druid_page_standard = GNOME_DRUID_PAGE_STANDARD (widget);
 
-	if (druid_page_standard->logo_image != NULL) {
-		gnome_canvas_item_set (druid_page_standard->_priv->logo_item,
-				       "pixbuf", druid_page_standard->logo_image,
-				       NULL);
-	}
+	GNOME_CALL_PARENT_HANDLER (GTK_WIDGET_CLASS, realize, (widget));
+	
+	gnome_druid_page_standard_set_color (druid_page_standard);
+}
 
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->title_color);
-	druid_page_standard->_priv->title_item =
-		gnome_canvas_item_new (gnome_canvas_root (canvas),
-				       gnome_canvas_text_get_type (),
-				       "text", druid_page_standard->title,
-				       "fontset", _("-adobe-helvetica-bold-r-normal-*-*-180-*-*-p-*-*-*,*-r-*"),
-				       "fill_color_rgba", fill_color,
-				       NULL);
-
-	gnome_canvas_item_set (druid_page_standard->_priv->title_item,
-			       "x", 15.0,
-			       "y", (double) (GNOME_PAD + LOGO_WIDTH / 2.0),
-			       "anchor", GTK_ANCHOR_WEST,
-			       NULL);
-
-	gtk_signal_connect (GTK_OBJECT (druid_page_standard),
-			    "prepare",
-			    GTK_SIGNAL_FUNC (gnome_druid_page_standard_prepare),
-			    NULL);
+static void
+gnome_druid_page_standard_style_set (GtkWidget *widget,
+				     GtkStyle  *old_style)
+{
+	GnomeDruidPageStandard *druid_page_standard = GNOME_DRUID_PAGE_STANDARD (widget);
 
+	GNOME_CALL_PARENT_HANDLER (GTK_WIDGET_CLASS, style_set, (widget, old_style));
+	
+	gnome_druid_page_standard_set_color (druid_page_standard);
 }
+
 static void
 gnome_druid_page_standard_prepare (GnomeDruidPage *page,
 				   GtkWidget *druid,
@@ -324,24 +530,6 @@ gnome_druid_page_standard_prepare (GnomeDruidPage *page,
 	gtk_widget_grab_default (GNOME_DRUID (druid)->next);
 }
 
-static void
-gnome_druid_page_standard_size_allocate (GtkWidget *widget,
-					 GtkAllocation *allocation)
-{
-	GtkWidget *canvas;
-
-	canvas = GNOME_DRUID_PAGE_STANDARD (widget)->_priv->canvas;
-
-	GNOME_CALL_PARENT_HANDLER (GTK_WIDGET_CLASS, size_allocate,
-				   (widget, allocation));
-
-	gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas),
-					0.0, 0.0,
-					allocation->width,
-					allocation->height);
-	gnome_druid_page_standard_configure_canvas (GNOME_DRUID_PAGE_STANDARD (widget));
-}
-
 GtkWidget *
 gnome_druid_page_standard_new (void)
 {
@@ -349,195 +537,301 @@ gnome_druid_page_standard_new (void)
 
 	retval = gtk_type_new (gnome_druid_page_standard_get_type ());
 
-	gnome_druid_page_standard_construct (retval,
-					     FALSE,
-					     NULL,
-					     NULL,
-					     NULL);
-
 	return GTK_WIDGET (retval);
 }
 
 GtkWidget *
-gnome_druid_page_standard_new_aa (void)
+gnome_druid_page_standard_new_with_vals (const gchar *title,
+					 GdkPixbuf   *logo,
+					 GdkPixbuf   *top_watermark)
 {
 	GnomeDruidPageStandard *retval;
 
 	retval = gtk_type_new (gnome_druid_page_standard_get_type ());
 
-	gnome_druid_page_standard_construct (retval,
-					     TRUE,
-					     NULL,
-					     NULL,
-					     NULL);
-
+	gnome_druid_page_standard_set_title (retval, title);
+	gnome_druid_page_standard_set_logo (retval, logo);
+	gnome_druid_page_standard_set_top_watermark (retval, top_watermark);
 	return GTK_WIDGET (retval);
 }
 
-GtkWidget *
-gnome_druid_page_standard_new_with_vals (gboolean antialiased,
-					 const gchar *title,
-					 GdkPixbuf *logo,
-					 GdkPixbuf *top_watermark)
-{
-	GnomeDruidPageStandard *retval;
 
-	retval = gtk_type_new (gnome_druid_page_standard_get_type ());
 
-	gnome_druid_page_standard_construct (retval,
-					     antialiased,
-					     title,
-					     logo,
-					     top_watermark);
+/**
+ * gnome_druid_page_standard_set_logo:
+ * @druid_page_standard: the #GnomeDruidPageStandard to work on
+ * @title: the string to use as the new title text
+ *
+ * Description:  Sets the title #GtkLabel to display the passed string.
+ **/
+void
+gnome_druid_page_standard_set_title (GnomeDruidPageStandard *druid_page_standard,
+				     const gchar            *title)
+{
+	gchar *title_string;
+	g_return_if_fail (druid_page_standard != NULL);
+	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
 
-	return GTK_WIDGET (retval);
+	g_free (druid_page_standard->title);
+	druid_page_standard->title = g_strdup (title);
+	title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">",
+				    title ? title : "", "</span>", NULL);
+	gtk_label_set_label (GTK_LABEL (druid_page_standard->_priv->title_label), title_string);
+	gtk_label_set_use_markup (GTK_LABEL (druid_page_standard->_priv->title_label), TRUE);
+	g_free (title_string);
+	g_object_notify (G_OBJECT (druid_page_standard), "title");
 }
 
+
+/**
+ * gnome_druid_page_standard_set_logo:
+ * @druid_page_standard: the #GnomeDruidPageStandard to work on
+ * @logo_image: The #GdkPixbuf to use as a logo
+ *
+ * Description:  Sets a #GdkPixbuf as the logo in the top right corner.
+ * If %NULL, then no logo will be displayed.
+ **/
 void
-gnome_druid_page_standard_set_bg_color (GnomeDruidPageStandard *druid_page_standard,
-					GdkColor *color)
+gnome_druid_page_standard_set_logo (GnomeDruidPageStandard *druid_page_standard,
+				    GdkPixbuf              *logo_image)
 {
-	guint32 fill_color;
+	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
 
-	g_return_if_fail (druid_page_standard != NULL);
+	if (logo_image != NULL)
+		gdk_pixbuf_ref (logo_image);
+	if (druid_page_standard->logo)
+		gdk_pixbuf_unref (druid_page_standard->logo);
+
+	druid_page_standard->logo = logo_image;
+	gtk_image_set_from_pixbuf (GTK_IMAGE (druid_page_standard->_priv->logo), logo_image);
+	g_object_notify (G_OBJECT (druid_page_standard), "logo");
+}
+
+
+
+/**
+ * gnome_druid_page_standard_set_top_watermark:
+ * @druid_page_standard: the #GnomeDruidPageStandard to work on
+ * @top_watermark_image: The #GdkPixbuf to use as a top watermark
+ *
+ * Description:  Sets a #GdkPixbuf as the watermark on top of the top
+ * strip on the druid.  If #top_watermark_image is %NULL, it is reset
+ * to the normal color.
+ **/
+void
+gnome_druid_page_standard_set_top_watermark (GnomeDruidPageStandard *druid_page_standard,
+					     GdkPixbuf              *top_watermark_image)
+{
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
-	g_return_if_fail (color != NULL);
 
-	druid_page_standard->background_color.red = color->red;
-	druid_page_standard->background_color.green = color->green;
-	druid_page_standard->background_color.blue = color->blue;
+	if (top_watermark_image != NULL)
+		gdk_pixbuf_ref (top_watermark_image);
+	if (druid_page_standard->top_watermark)
+		gdk_pixbuf_unref (druid_page_standard->top_watermark);
 
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->background_color);
+	druid_page_standard->top_watermark = top_watermark_image;
 
-	gnome_canvas_item_set (druid_page_standard->_priv->background_item,
-			       "fill_color_rgba", fill_color,
-			       NULL);
+	gtk_image_set_from_pixbuf (GTK_IMAGE (druid_page_standard->_priv->watermark), top_watermark_image);
+	g_object_notify (G_OBJECT (druid_page_standard), "top_watermark");
+}
 
-	if (GTK_WIDGET_REALIZED (druid_page_standard)) {
+void
+gnome_druid_page_standard_set_title_foreground (GnomeDruidPageStandard *druid_page_standard,
+						GdkColor               *color)
+{
+	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
+	g_return_if_fail (color != NULL);
 
-		GtkStyle *style;
+	druid_page_standard->title_foreground.red = color->red;
+	druid_page_standard->title_foreground.green = color->green;
+	druid_page_standard->title_foreground.blue = color->blue;
 
-		style = gtk_style_copy (gtk_widget_get_style (druid_page_standard->_priv->side_bar));
-		style->bg[GTK_STATE_NORMAL].red = color->red;
-		style->bg[GTK_STATE_NORMAL].green = color->green;
-		style->bg[GTK_STATE_NORMAL].blue = color->blue;
-		gtk_widget_set_style (druid_page_standard->_priv->side_bar, style);
-	} else {
-		GtkRcStyle *rc_style;
+	gtk_widget_modify_fg (druid_page_standard->_priv->title_label, GTK_STATE_NORMAL, color);
 
-		rc_style = gtk_rc_style_new ();
-		rc_style->bg[GTK_STATE_NORMAL].red = color->red;
-		rc_style->bg[GTK_STATE_NORMAL].green = color->green;
-		rc_style->bg[GTK_STATE_NORMAL].blue = color->blue;
-		rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_BG;
-		gtk_rc_style_ref (rc_style);
-		gtk_widget_modify_style (druid_page_standard->_priv->side_bar, rc_style);
+	g_object_notify (G_OBJECT (druid_page_standard), "title_foreground");
+	if (druid_page_standard->_priv->title_foreground_set == FALSE) {
+		druid_page_standard->_priv->title_foreground_set = TRUE;
+		g_object_notify (G_OBJECT (druid_page_standard), "title_foreground_set");
 	}
 }
 
 void
-gnome_druid_page_standard_set_logo_bg_color (GnomeDruidPageStandard *druid_page_standard,
-					     GdkColor *color)
+gnome_druid_page_standard_set_background (GnomeDruidPageStandard *druid_page_standard,
+					  GdkColor               *color)
 {
-	guint32 fill_color;
-
-	g_return_if_fail (druid_page_standard != NULL);
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
 	g_return_if_fail (color != NULL);
 
-	druid_page_standard->logo_background_color.red = color->red;
-	druid_page_standard->logo_background_color.green = color->green;
-	druid_page_standard->logo_background_color.blue = color->blue;
+	druid_page_standard->background.red = color->red;
+	druid_page_standard->background.green = color->green;
+	druid_page_standard->background.blue = color->blue;
+
+	gtk_widget_modify_bg (druid_page_standard->_priv->top_bar, GTK_STATE_NORMAL, color);
+	gtk_widget_modify_bg (druid_page_standard->_priv->left_line, GTK_STATE_NORMAL, color);
+	gtk_widget_modify_bg (druid_page_standard->_priv->right_line, GTK_STATE_NORMAL, color);
+	gtk_widget_modify_bg (druid_page_standard->_priv->bottom_line, GTK_STATE_NORMAL, color);
 
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->logo_background_color);
-	gnome_canvas_item_set (druid_page_standard->_priv->logoframe_item,
-			       "fill_color_rgba", fill_color,
-			       NULL);
+	g_object_notify (G_OBJECT (druid_page_standard), "background");
+	if (druid_page_standard->_priv->background_set == FALSE) {
+		druid_page_standard->_priv->background_set = TRUE;
+		g_object_notify (G_OBJECT (druid_page_standard), "background_set");
+	}
 }
 
 void
-gnome_druid_page_standard_set_title_color (GnomeDruidPageStandard *druid_page_standard,
-					   GdkColor *color)
+gnome_druid_page_standard_set_logo_background (GnomeDruidPageStandard *druid_page_standard,
+					       GdkColor               *color)
 {
-	guint32 fill_color;
-
-	g_return_if_fail (druid_page_standard != NULL);
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
 	g_return_if_fail (color != NULL);
 
-	druid_page_standard->title_color.red = color->red;
-	druid_page_standard->title_color.green = color->green;
-	druid_page_standard->title_color.blue = color->blue;
+	druid_page_standard->logo_background.red = color->red;
+	druid_page_standard->logo_background.green = color->green;
+	druid_page_standard->logo_background.blue = color->blue;
 
-	fill_color = GDK_COLOR_TO_RGBA (druid_page_standard->title_color);
-	gnome_canvas_item_set (druid_page_standard->_priv->title_item,
-			       "fill_color_rgba", fill_color,
-			       NULL);
+	gtk_widget_modify_bg (druid_page_standard->_priv->logo, GTK_STATE_NORMAL, color);
+	g_object_notify (G_OBJECT (druid_page_standard), "logo_background");
+	if (druid_page_standard->_priv->logo_background_set == FALSE) {
+		druid_page_standard->_priv->logo_background_set = TRUE;
+		g_object_notify (G_OBJECT (druid_page_standard), "logo_background_set");
+	}
 }
 
+
 void
-gnome_druid_page_standard_set_title (GnomeDruidPageStandard *druid_page_standard,
-				     const gchar *title)
+gnome_druid_page_standard_set_contents_background (GnomeDruidPageStandard *druid_page_standard,
+					       GdkColor               *color)
 {
-	g_return_if_fail (druid_page_standard != NULL);
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
+	g_return_if_fail (color != NULL);
 
-	g_free (druid_page_standard->title);
-	druid_page_standard->title = g_strdup (title ? title : "");
-	gnome_canvas_item_set (druid_page_standard->_priv->title_item,
-			       "text", druid_page_standard->title,
-			       NULL);
+	druid_page_standard->contents_background.red = color->red;
+	druid_page_standard->contents_background.green = color->green;
+	druid_page_standard->contents_background.blue = color->blue;
+
+	gtk_widget_modify_bg (druid_page_standard->_priv->evbox, GTK_STATE_NORMAL, color);
+
+	g_object_notify (G_OBJECT (druid_page_standard), "contents_background");
+	if (druid_page_standard->_priv->contents_background_set == FALSE) {
+		druid_page_standard->_priv->contents_background_set = TRUE;
+		g_object_notify (G_OBJECT (druid_page_standard), "contents_background_set");
+	}
 }
 
+
 /**
- * gnome_druid_page_standard_set_logo:
- * @druid_page_standard: the #GnomeDruidPageStandard to work on
- * @logo_image: The #GdkPixbuf to use as a logo
+ * gnome_druid_page_standard_append_item:
+ * @druid_page_standard: The #GnomeDruidPageStandard to work on
+ * @question: The text to place above the item
+ * @item: The #GtkWidget to be included
+ * @additional_info: The text to be placed below the item in a smaller
+ * font
  *
- * Description:  Sets a #GdkPixbuf as the logo in the top right corner.
- * If %NULL, then no logo will be displayed.
+ * Description: Convenience function to add a #GtkWidget to the
+ * #GnomeDruidPageStandard vbox.  WRITEME
  **/
 void
-gnome_druid_page_standard_set_logo (GnomeDruidPageStandard *druid_page_standard,
-				    GdkPixbuf *logo_image)
+gnome_druid_page_standard_append_item (GnomeDruidPageStandard *druid_page_standard,
+                                       const gchar            *question,
+                                       GtkWidget              *item,
+                                       const gchar            *additional_info)
 {
-	g_return_if_fail (druid_page_standard != NULL);
+	GtkWidget *q_label;
+	GtkWidget *a_label;
+	GtkWidget *vbox;
+	gchar *a_text;
+
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
+	g_return_if_fail (GTK_IS_WIDGET (item));
+
+	/* Create the vbox to hold the three new items */
+	vbox = gtk_vbox_new (FALSE, 4);
+	gtk_box_pack_start (GTK_BOX (druid_page_standard->vbox), vbox, FALSE, FALSE, 0);
+	gtk_widget_show (vbox);
+
+	/* Create the question label if question is not empty */
+	if (question != NULL && strcmp (question, "") != 0) {
+		q_label = gtk_label_new (NULL);
+		gtk_label_set_label (GTK_LABEL (q_label),question);
+		gtk_label_set_use_markup (GTK_LABEL (q_label), TRUE);
+		gtk_label_set_use_underline (GTK_LABEL (q_label), TRUE);
+		gtk_label_set_mnemonic_widget (GTK_LABEL (q_label), item);
+		gtk_label_set_justify (GTK_LABEL (q_label), GTK_JUSTIFY_LEFT);
+		gtk_misc_set_alignment (GTK_MISC (q_label), 0.0, 0.5);
+		gtk_box_pack_start (GTK_BOX (vbox), q_label, FALSE, FALSE, 0);
+		gtk_widget_show (q_label);
+	}
 
-	if (druid_page_standard->logo_image)
-		gdk_pixbuf_unref (druid_page_standard->logo_image);
+	/* Append/show the item */
+	gtk_box_pack_start (GTK_BOX (vbox), item, FALSE, FALSE, 0);
+	gtk_widget_show (item);
+
+	/* Create the "additional info" label if additional_info is not empty */
+	if (additional_info != NULL && additional_info[0] != '\000') {
+		a_text = g_strconcat ("<span size=\"small\">", additional_info, "</span>", NULL);
+		a_label = gtk_label_new (NULL);
+		gtk_label_set_label (GTK_LABEL (a_label), a_text);
+		gtk_label_set_use_markup (GTK_LABEL (a_label), TRUE);
+		g_free (a_text);
+		gtk_label_set_justify (GTK_LABEL (a_label), GTK_JUSTIFY_LEFT);
+		gtk_misc_set_alignment (GTK_MISC (a_label), 0.0, 0.5);
+		gtk_misc_set_padding (GTK_MISC (a_label), 24, 0);
+		gtk_box_pack_start (GTK_BOX (vbox), a_label, FALSE, FALSE, 0);
+		gtk_widget_show (a_label);
+	}
+}
 
-	druid_page_standard->logo_image = logo_image;
-	if (logo_image != NULL)
-		gdk_pixbuf_ref (logo_image);
-	gnome_canvas_item_set (druid_page_standard->_priv->logo_item,
-			       "pixbuf", druid_page_standard->logo_image,
-			       NULL);
+static void
+gnome_druid_page_standard_size_allocate (GtkWidget *widget,
+					 GtkAllocation *allocation)
+{
+	GNOME_CALL_PARENT_HANDLER (GTK_WIDGET_CLASS, size_allocate,
+				   (widget, allocation));
+	gnome_druid_page_standard_layout_setup (GNOME_DRUID_PAGE_STANDARD (widget));
 }
 
-/**
- * gnome_druid_page_standard_set_top_watermark:
- * @druid_page_standard: the #GnomeDruidPageStandard to work on
- * @top_watermark_image: The #GdkPixbuf to use as a top watermark
- *
- * Description:  Sets a #GdkPixbuf as the watermark on top of the top
- * strip on the druid.  If #top_watermark_image is %NULL, it is reset
- * to the normal color.
- **/
-void
-gnome_druid_page_standard_set_top_watermark (GnomeDruidPageStandard *druid_page_standard,
-					     GdkPixbuf *top_watermark_image)
+static void
+gnome_druid_page_standard_layout_setup (GnomeDruidPageStandard *druid_page_standard)
 {
 	g_return_if_fail (druid_page_standard != NULL);
 	g_return_if_fail (GNOME_IS_DRUID_PAGE_STANDARD (druid_page_standard));
 
-	if (druid_page_standard->top_watermark_image)
-		gdk_pixbuf_unref (druid_page_standard->top_watermark_image);
+	gtk_layout_move (GTK_LAYOUT (druid_page_standard->_priv->top_bar),
+	                 druid_page_standard->_priv->logo,
+	                 (druid_page_standard->_priv->top_bar->allocation.width - (LOGO_WIDTH + 2)), 2);
+	gtk_layout_move (GTK_LAYOUT (druid_page_standard->_priv->top_bar),
+	                 druid_page_standard->_priv->title_label, 16, 2);
+}
 
-	druid_page_standard->top_watermark_image = top_watermark_image;
-	if (top_watermark_image != NULL)
-		gdk_pixbuf_ref (top_watermark_image);
-	gnome_canvas_item_set (druid_page_standard->_priv->top_watermark_item,
-			       "pixbuf", druid_page_standard->top_watermark_image,
-			       NULL);
+static void
+gnome_druid_page_standard_set_color (GnomeDruidPageStandard *druid_page_standard)
+{
+	GtkWidget *widget = GTK_WIDGET (druid_page_standard);
+	if (druid_page_standard->_priv->background_set == FALSE) {
+		druid_page_standard->background.red = widget->style->bg[GTK_STATE_SELECTED].red;
+		druid_page_standard->background.green = widget->style->bg[GTK_STATE_SELECTED].green;
+		druid_page_standard->background.blue = widget->style->bg[GTK_STATE_SELECTED].blue;
+	}
+	if (druid_page_standard->_priv->logo_background_set == FALSE) {
+		druid_page_standard->logo_background.red = widget->style->bg[GTK_STATE_SELECTED].red;
+		druid_page_standard->logo_background.green = widget->style->bg[GTK_STATE_SELECTED].green;
+		druid_page_standard->logo_background.blue = widget->style->bg[GTK_STATE_SELECTED].blue;
+	}
+	if (druid_page_standard->_priv->title_foreground_set == FALSE) {
+		druid_page_standard->title_foreground.red = widget->style->fg[GTK_STATE_SELECTED].red;
+		druid_page_standard->title_foreground.green = widget->style->fg[GTK_STATE_SELECTED].green;
+		druid_page_standard->title_foreground.blue = widget->style->fg[GTK_STATE_SELECTED].blue;
+	}
+	if (druid_page_standard->_priv->contents_background_set == FALSE) {
+		druid_page_standard->contents_background.red = widget->style->bg[GTK_STATE_PRELIGHT].red;
+		druid_page_standard->contents_background.green = widget->style->bg[GTK_STATE_PRELIGHT].green;
+		druid_page_standard->contents_background.blue = widget->style->bg[GTK_STATE_PRELIGHT].blue;
+	}
+
+	gtk_widget_modify_fg (druid_page_standard->_priv->title_label, GTK_STATE_NORMAL, &(druid_page_standard->title_foreground));
+	gtk_widget_modify_bg (druid_page_standard->_priv->top_bar, GTK_STATE_NORMAL, &(druid_page_standard->background));
+	gtk_widget_modify_bg (druid_page_standard->_priv->left_line, GTK_STATE_NORMAL, &(druid_page_standard->background));
+	gtk_widget_modify_bg (druid_page_standard->_priv->right_line, GTK_STATE_NORMAL, &(druid_page_standard->background));
+	gtk_widget_modify_bg (druid_page_standard->_priv->bottom_line, GTK_STATE_NORMAL, &(druid_page_standard->background));
+	gtk_widget_modify_bg (druid_page_standard->_priv->evbox, GTK_STATE_NORMAL,&(druid_page_standard->contents_background));
 }
diff --git a/libgnomeui/gnome-druid-page-standard.h b/libgnomeui/gnome-druid-page-standard.h
index 47eb92b..1f0ea0a 100644
--- a/libgnomeui/gnome-druid-page-standard.h
+++ b/libgnomeui/gnome-druid-page-standard.h
@@ -1,5 +1,6 @@
 /* gnome-druid-page-standard.h
  * Copyright (C) 1999  Red Hat, Inc.
+ * Copyright (C) 2001  James M. Cape <jcape ignore-your tv>
  * All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
@@ -24,7 +25,6 @@
 #define __GNOME_DRUID_PAGE_STANDARD_H__
 
 #include <gtk/gtk.h>
-#include <libgnomecanvas/gnome-canvas.h>
 #include "gnome-druid-page.h"
 
 G_BEGIN_DECLS
@@ -47,14 +47,13 @@ struct _GnomeDruidPageStandard
 
 	/*< public >*/
 	GtkWidget *vbox;
-	GdkPixbuf *logo_image;
-	GdkPixbuf *top_watermark_image;
-
 	gchar *title;
-
-	GdkColor background_color;
-	GdkColor logo_background_color;
-	GdkColor title_color;
+	GdkPixbuf *logo;
+	GdkPixbuf *top_watermark;
+	GdkColor title_foreground;
+	GdkColor background;
+	GdkColor logo_background;
+	GdkColor contents_background;
 	
 	/*< private >*/
 	GnomeDruidPageStandardPrivate *_priv;
@@ -64,31 +63,45 @@ struct _GnomeDruidPageStandardClass
 	GnomeDruidPageClass parent_class;
 };
 
+#ifndef GNOME_DISABLE_DEPRECATED
+
+#define gnome_druid_page_standard_set_bg_color      gnome_druid_page_standard_set_background
+#define gnome_druid_page_standard_set_logo_bg_color gnome_druid_page_standard_set_logo_background
+#define gnome_druid_page_standard_set_title_color   gnome_druid_page_standard_set_title_foreground
+
+#endif
+
+
+GtkType    gnome_druid_page_standard_get_type                (void) G_GNUC_CONST;
+GtkWidget *gnome_druid_page_standard_new                     (void);
+GtkWidget *gnome_druid_page_standard_new_with_vals           (const gchar            *title,
+							      GdkPixbuf              *logo,
+							      GdkPixbuf              *top_watermark);
+void       gnome_druid_page_standard_construct               (GnomeDruidPageStandard *druid_page_standard,
+							      const gchar	    *title,
+							      GdkPixbuf		    *logo,
+							      GdkPixbuf              *top_watermark);
+
+void       gnome_druid_page_standard_set_title               (GnomeDruidPageStandard *druid_page_standard,
+							      const gchar            *title);
+void       gnome_druid_page_standard_set_logo                (GnomeDruidPageStandard *druid_page_standard,
+							      GdkPixbuf              *logo_image);
+void       gnome_druid_page_standard_set_top_watermark       (GnomeDruidPageStandard *druid_page_standard,
+							      GdkPixbuf              *top_watermark_image);
+void       gnome_druid_page_standard_set_title_foreground    (GnomeDruidPageStandard *druid_page_standard,
+							      GdkColor               *color);
+void       gnome_druid_page_standard_set_background          (GnomeDruidPageStandard *druid_page_standard,
+							      GdkColor               *color);
+void       gnome_druid_page_standard_set_logo_background     (GnomeDruidPageStandard *druid_page_standard,
+							      GdkColor               *color);
+void       gnome_druid_page_standard_set_contents_background (GnomeDruidPageStandard *druid_page_standard,
+							      GdkColor               *color);
 
-GtkType    gnome_druid_page_standard_get_type      (void) G_GNUC_CONST;
-GtkWidget *gnome_druid_page_standard_new           (void);
-GtkWidget *gnome_druid_page_standard_new_aa        (void);
-GtkWidget *gnome_druid_page_standard_new_with_vals (gboolean		 antialiased,
-						    const gchar		*title,
-						    GdkPixbuf		*logo,
-						    GdkPixbuf		*top_watermark);
-void       gnome_druid_page_standard_construct     (GnomeDruidPageStandard *druid_page_standard,
-						    gboolean		 antialiased,
-						    const gchar		*title,
-						    GdkPixbuf		*logo,
-						    GdkPixbuf		*top_watermark);
-void       gnome_druid_page_standard_set_bg_color  (GnomeDruidPageStandard *druid_page_standard,
-						    GdkColor		*color);
-void       gnome_druid_page_standard_set_logo_bg_color(GnomeDruidPageStandard *druid_page_standard,
-						    GdkColor		*color);
-void       gnome_druid_page_standard_set_title_color(GnomeDruidPageStandard *druid_page_standard,
-						    GdkColor		*color);
-void       gnome_druid_page_standard_set_title     (GnomeDruidPageStandard *druid_page_standard,
-						    const gchar		*title);
-void       gnome_druid_page_standard_set_logo      (GnomeDruidPageStandard *druid_page_standard,
-						    GdkPixbuf		*logo_image);
-void       gnome_druid_page_standard_set_top_watermark(GnomeDruidPageStandard *druid_page_standard,
-						    GdkPixbuf		*top_watermark_image);
+/* Convenience Function */
+void       gnome_druid_page_standard_append_item             (GnomeDruidPageStandard *druid_page_standard,
+							      const gchar            *question_mnemonic,
+							      GtkWidget              *item,
+							      const gchar            *additional_info_markup);
 
 G_END_DECLS
 
diff --git a/libgnomeui/gnome-druid.c b/libgnomeui/gnome-druid.c
index 959e8c8..bb866c7 100644
--- a/libgnomeui/gnome-druid.c
+++ b/libgnomeui/gnome-druid.c
@@ -122,6 +122,22 @@ gnome_druid_class_init (GnomeDruidClass *klass)
 				gtk_marshal_NONE__NONE,
 				GTK_TYPE_NONE, 0);
 
+	object_class->destroy = gnome_druid_destroy;
+	gobject_class->set_property = gnome_druid_set_property;
+	gobject_class->get_property = gnome_druid_get_property;
+	gobject_class->finalize = gnome_druid_finalize;
+	widget_class->size_request = gnome_druid_size_request;
+	widget_class->size_allocate = gnome_druid_size_allocate;
+	widget_class->map = gnome_druid_map;
+	widget_class->unmap = gnome_druid_unmap;
+	widget_class->expose_event = gnome_druid_expose;
+
+	container_class->forall = gnome_druid_forall;
+	container_class->add = gnome_druid_add;
+	container_class->remove = gnome_druid_remove;
+	container_class->child_type = gnome_druid_child_type;
+
+
 	g_object_class_install_property (gobject_class,
 					 PROP_SHOW_FINISH,
 					 g_param_spec_boolean ("show_finish",
@@ -137,21 +153,6 @@ gnome_druid_class_init (GnomeDruidClass *klass)
 							       _("Show the 'Help' button"),
 							       FALSE,
 							       G_PARAM_READWRITE));
-
-	object_class->destroy = gnome_druid_destroy;
-	gobject_class->set_property = gnome_druid_set_property;
-	gobject_class->get_property = gnome_druid_get_property;
-	gobject_class->finalize = gnome_druid_finalize;
-	widget_class->size_request = gnome_druid_size_request;
-	widget_class->size_allocate = gnome_druid_size_allocate;
-	widget_class->map = gnome_druid_map;
-	widget_class->unmap = gnome_druid_unmap;
-	widget_class->expose_event = gnome_druid_expose;
-
-	container_class->forall = gnome_druid_forall;
-	container_class->add = gnome_druid_add;
-	container_class->remove = gnome_druid_remove;
-	container_class->child_type = gnome_druid_child_type;
 }
 
 static void
diff --git a/test-gnome/ChangeLog b/test-gnome/ChangeLog
index b71fd1d..eedde65 100644
--- a/test-gnome/ChangeLog
+++ b/test-gnome/ChangeLog
@@ -1,3 +1,7 @@
+Sat Aug 25 00:33:41 2001  Jonathan Blandford  <jrb redhat com>
+
+	* testdruid.c (main): new test program.
+
 2001-08-24  Darin Adler  <darin bentspoon com>
 
 	* testgnome.c: (create_entry): Update for new API.
diff --git a/test-gnome/Makefile.am b/test-gnome/Makefile.am
index 165998e..9c6352d 100644
--- a/test-gnome/Makefile.am
+++ b/test-gnome/Makefile.am
@@ -23,12 +23,15 @@ noinst_HEADERS = \
 	testgnome.h
 
 noinst_PROGRAMS = \
-	test-gnome
+	test-gnome test-druid
 
 test_gnome_SOURCES =		\
 	testgnome.c		\
 	$(noinst_HEADERS)
 
+test_druid_SOURCES =	\
+	testdruid.c
+
 EXTRA_DIST = 		\
 	bomb.xpm
 
diff --git a/test-gnome/testdruid.c b/test-gnome/testdruid.c
new file mode 100644
index 0000000..770e19e
--- /dev/null
+++ b/test-gnome/testdruid.c
@@ -0,0 +1,47 @@
+
+#include <config.h>
+#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <libgnomeui.h>
+#include <libgnomeui/gnome-druid.h>
+#include <libgnomeui/gnome-druid-page.h>
+#include <libgnomeui/gnome-druid-page-standard.h>
+
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window;
+  GtkWidget *druid;
+  GtkWidget *druid_page;
+  GtkWidget *hbox;
+  gtk_init (&argc, &argv);
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  druid = gnome_druid_new ();
+  gtk_container_add (GTK_CONTAINER (window), druid);
+  druid_page = gnome_druid_page_standard_new_with_vals ("Test Druid", NULL, NULL);
+  gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (druid_page));
+  gnome_druid_page_standard_append_item (GNOME_DRUID_PAGE_STANDARD (druid_page),
+					 "Test _one:",
+					 gtk_entry_new (),
+					 "Longer information here");
+  gnome_druid_page_standard_append_item (GNOME_DRUID_PAGE_STANDARD (druid_page),
+					 "Test _two:",
+					 gtk_entry_new (),
+					 "Longer information here");
+  gnome_druid_page_standard_append_item (GNOME_DRUID_PAGE_STANDARD (druid_page),
+					 "Test t_hree:",
+					 gtk_entry_new (),
+					 "Longer information here");
+  gnome_druid_page_standard_append_item (GNOME_DRUID_PAGE_STANDARD (druid_page),
+					 "Test fou_r:",
+					 gtk_entry_new (),
+					 "Longer information here");
+  gtk_widget_show_all (window);
+
+  gtk_main ();
+  return 0;
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]