aboutsummaryrefslogtreecommitdiffstats
path: root/executive-summary/widgets/e-summary-subwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'executive-summary/widgets/e-summary-subwindow.c')
-rw-r--r--executive-summary/widgets/e-summary-subwindow.c299
1 files changed, 299 insertions, 0 deletions
diff --git a/executive-summary/widgets/e-summary-subwindow.c b/executive-summary/widgets/e-summary-subwindow.c
new file mode 100644
index 0000000000..bf5bcb1eba
--- /dev/null
+++ b/executive-summary/widgets/e-summary-subwindow.c
@@ -0,0 +1,299 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-summary.c
+ *
+ * Authors: Iain Holmes <iain@helixcode.com>
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gnome.h>
+#include <gal/util/e-util.h>
+#include <gal/widgets/e-font.h>
+
+#include <gal/e-text/e-text.h>
+
+#include "e-summary-subwindow.h"
+
+#define PARENT_TYPE (gnome_canvas_group_get_type ())
+#define TITLEBAR_BORDER_WIDTH 2
+
+static void e_summary_subwindow_destroy (GtkObject *object);
+static void e_summary_subwindow_class_init (GtkObjectClass *object_class);
+static void e_summary_subwindow_init (GtkObject *object);
+
+static GnomeCanvasGroupClass *parent_class;
+
+struct _ESummarySubwindowPrivate {
+ GnomeCanvasItem *titlebar;
+ GnomeCanvasItem *contents;
+
+ GtkWidget *container;
+
+ char *title;
+};
+
+enum {
+ ARG_0,
+ ARG_X,
+ ARG_Y,
+ ARG_WIDTH,
+ ARG_HEIGHT,
+ ARG_STATE
+};
+
+enum {
+ CLOSE_CLICKED,
+ SHADE_CLICKED,
+ EDIT_CLICKED,
+ LAST_SIGNAL
+};
+
+static guint32 e_summary_subwindow_signals[LAST_SIGNAL] = { 0 };
+
+static void
+e_summary_subwindow_destroy (GtkObject *object)
+{
+ ESummarySubwindow *subwindow = E_SUMMARY_SUBWINDOW (object);
+ ESummarySubwindowPrivate *priv;
+
+ priv = subwindow->private;
+
+ if (priv == NULL)
+ return;
+
+ if (priv->container) {
+ gtk_widget_destroy (priv->container);
+ priv->container = NULL;
+ }
+
+ if (priv->title) {
+ g_free (priv->title);
+ priv->title = NULL;
+ }
+
+ g_free (subwindow->private);
+ subwindow->private = NULL;
+
+ if (GTK_OBJECT_CLASS (parent_class)->destroy)
+ (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+static void
+e_summary_subwindow_realize (GnomeCanvasItem *item)
+{
+ if (GNOME_CANVAS_ITEM_CLASS (parent_class)->realize)
+ (* GNOME_CANVAS_ITEM_CLASS (parent_class)->realize) (item);
+}
+
+static void
+e_summary_subwindow_unrealize (GnomeCanvasItem *item)
+{
+ if (GNOME_CANVAS_ITEM_CLASS (parent_class)->unrealize)
+ (* GNOME_CANVAS_ITEM_CLASS (parent_class)->unrealize) (item);
+}
+
+static void
+e_summary_subwindow_class_init (GtkObjectClass *object_class)
+{
+ GnomeCanvasItemClass *item_class;
+
+ item_class = (GnomeCanvasItemClass *) object_class;
+
+ object_class->destroy = e_summary_subwindow_destroy;
+
+ item_class->realize = e_summary_subwindow_realize;
+ item_class->unrealize = e_summary_subwindow_unrealize;
+
+ parent_class = gtk_type_class (PARENT_TYPE);
+}
+
+static void
+e_summary_subwindow_init (GtkObject *object)
+{
+ ESummarySubwindow *subwindow = E_SUMMARY_SUBWINDOW (object);
+ ESummarySubwindowPrivate *priv;
+
+ subwindow->private = g_new0 (ESummarySubwindowPrivate, 1);
+ priv = subwindow->private;
+
+ priv->title = NULL;
+}
+
+E_MAKE_TYPE (e_summary_subwindow, "ESummarySubwindow", ESummarySubwindow,
+ e_summary_subwindow_class_init, e_summary_subwindow_init,
+ PARENT_TYPE);
+
+static void
+container_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation,
+ ESummarySubwindow *subwindow)
+{
+ ESummarySubwindowPrivate *priv;
+
+ g_return_if_fail (subwindow != NULL);
+ g_return_if_fail (IS_E_SUMMARY_SUBWINDOW (subwindow));
+
+ priv = subwindow->private;
+
+ gnome_canvas_item_set (priv->titlebar,
+ "width", (double) allocation->width - 1,
+ NULL);
+
+}
+
+static void
+edit_cb (GnomeCanvasItem *item,
+ ESummarySubwindow *subwindow)
+{
+ g_print ("EDIT!\n");
+}
+
+static void
+shade_cb (GnomeCanvasItem *item,
+ ESummarySubwindow *subwindow)
+{
+ g_print ("SHADE!\n");
+}
+
+static void
+close_cb (GnomeCanvasItem *item,
+ ESummarySubwindow *subwindow)
+{
+ g_print ("CLOSE!\n");
+ gtk_object_destroy (GTK_OBJECT (subwindow));
+}
+
+void
+e_summary_subwindow_construct (GnomeCanvasItem *item)
+{
+ GnomeCanvasGroup *group;
+ ESummarySubwindow *subwindow;
+ ESummarySubwindowPrivate *priv;
+ EFont *font;
+ int titlebar_height;
+
+ g_return_if_fail (item != NULL);
+ g_return_if_fail (IS_E_SUMMARY_SUBWINDOW (item));
+
+ subwindow = E_SUMMARY_SUBWINDOW (item);
+ priv = subwindow->private;
+
+ group = GNOME_CANVAS_GROUP (item);
+
+ font = e_font_from_gdk_font ( ((GtkWidget *) item->canvas)->style->font);
+
+ titlebar_height = 18 + 2 * TITLEBAR_BORDER_WIDTH; /* FIXME: Not hardcoded */
+
+ priv->titlebar = gnome_canvas_item_new (group,
+ e_summary_titlebar_get_type (),
+ "text", "Titlebar",
+ "width", 100.0,
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (priv->titlebar), "edit",
+ GTK_SIGNAL_FUNC (edit_cb), subwindow);
+ gtk_signal_connect (GTK_OBJECT (priv->titlebar), "shade",
+ GTK_SIGNAL_FUNC (shade_cb), subwindow);
+ gtk_signal_connect (GTK_OBJECT (priv->titlebar), "close",
+ GTK_SIGNAL_FUNC (close_cb), subwindow);
+
+ priv->container = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (priv->container), GTK_SHADOW_ETCHED_IN);
+ gtk_widget_show (priv->container);
+
+ priv->contents = gnome_canvas_item_new (group,
+ gnome_canvas_widget_get_type (),
+ "x", (double) 0,
+ "y", (double) titlebar_height + 1,
+ "widget", priv->container,
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (priv->container), "size_allocate",
+ GTK_SIGNAL_FUNC (container_size_allocate), subwindow);
+
+}
+
+GnomeCanvasItem *
+e_summary_subwindow_new (GnomeCanvasGroup *parent,
+ double x,
+ double y)
+{
+ GnomeCanvasItem *item;
+
+ item = gnome_canvas_item_new (parent, e_summary_subwindow_get_type (),
+ "x", x,
+ "y", y,
+ NULL);
+ e_summary_subwindow_construct (item);
+
+ return item;
+}
+
+/* These functions mimic the GtkContainer methods */
+
+void
+e_summary_subwindow_add (ESummarySubwindow *subwindow,
+ GtkWidget *widget)
+{
+ ESummarySubwindowPrivate *priv;
+
+ g_return_if_fail (subwindow != NULL);
+ g_return_if_fail (IS_E_SUMMARY_SUBWINDOW (subwindow));
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+
+ priv = subwindow->private;
+
+ gtk_container_add (GTK_CONTAINER (priv->container), widget);
+
+}
+
+void
+e_summary_subwindow_remove (ESummarySubwindow *subwindow,
+ GtkWidget *widget)
+{
+ ESummarySubwindowPrivate *priv;
+
+ g_return_if_fail (subwindow != NULL);
+ g_return_if_fail (IS_E_SUMMARY_SUBWINDOW (subwindow));
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+
+ priv = subwindow->private;
+
+ gtk_container_remove (GTK_CONTAINER (priv->container), widget);
+}
+
+void
+e_summary_subwindow_set_title (ESummarySubwindow *subwindow,
+ const char *title)
+{
+ ESummarySubwindowPrivate *priv;
+
+ g_return_if_fail (subwindow != NULL);
+ g_return_if_fail (IS_E_SUMMARY_SUBWINDOW (subwindow));
+ g_return_if_fail (title != NULL);
+
+ priv = subwindow->private;
+ if (priv->title)
+ g_free (priv->title);
+
+ priv->title = g_strdup (title);
+}