aboutsummaryrefslogtreecommitdiffstats
path: root/src/statusbar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/statusbar.c')
-rwxr-xr-xsrc/statusbar.c321
1 files changed, 321 insertions, 0 deletions
diff --git a/src/statusbar.c b/src/statusbar.c
new file mode 100755
index 000000000..8ac84cfb9
--- /dev/null
+++ b/src/statusbar.c
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2002 Jorn Baayen
+ *
+ * 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, 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.
+ */
+
+#include "statusbar.h"
+#include "ephy-stock-icons.h"
+#include "ephy-bonobo-extensions.h"
+
+#include <string.h>
+#include <time.h>
+#include <gtk/gtkprogressbar.h>
+#include <gtk/gtkeventbox.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkframe.h>
+#include <gtk/gtktooltips.h>
+#include <bonobo/bonobo-window.h>
+#include <bonobo/bonobo-control.h>
+
+static void statusbar_class_init (StatusbarClass *klass);
+static void statusbar_init (Statusbar *t);
+static void statusbar_finalize (GObject *object);
+static void
+statusbar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void
+statusbar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void
+statusbar_set_window (Statusbar *t, EphyWindow *window);
+
+enum
+{
+ PROP_0,
+ PROP_EPHY_WINDOW
+};
+
+static GObjectClass *parent_class = NULL;
+
+struct StatusbarPrivate
+{
+ EphyWindow *window;
+ BonoboUIComponent *ui_component;
+ GtkWidget *security_icon;
+ GtkWidget *progress;
+ GtkTooltips *tooltips;
+ GtkWidget *security_evbox;
+ gboolean visibility;
+};
+
+GType
+statusbar_get_type (void)
+{
+ static GType statusbar_type = 0;
+
+ if (statusbar_type == 0)
+ {
+ static const GTypeInfo our_info =
+ {
+ sizeof (StatusbarClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) statusbar_class_init,
+ NULL,
+ NULL, /* class_data */
+ sizeof (Statusbar),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) statusbar_init
+ };
+
+ statusbar_type = g_type_register_static (G_TYPE_OBJECT,
+ "Statusbar",
+ &our_info, 0);
+ }
+
+ return statusbar_type;
+
+}
+
+static void
+statusbar_class_init (StatusbarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = statusbar_finalize;
+ object_class->set_property = statusbar_set_property;
+ object_class->get_property = statusbar_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_EPHY_WINDOW,
+ g_param_spec_object ("EphyWindow",
+ "EphyWindow",
+ "Parent window",
+ EPHY_WINDOW_TYPE,
+ G_PARAM_READWRITE));
+}
+
+static void
+statusbar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ Statusbar *s = STATUSBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_EPHY_WINDOW:
+ statusbar_set_window (s, g_value_get_object (value));
+ break;
+ }
+}
+
+static void
+statusbar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ Statusbar *s = STATUSBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_EPHY_WINDOW:
+ g_value_set_object (value, s->priv->window);
+ break;
+ }
+}
+
+static void
+create_statusbar_security_icon (Statusbar *s)
+{
+ GtkWidget *security_frame;
+ BonoboControl *control;
+
+ security_frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (security_frame),
+ GTK_SHADOW_IN);
+
+ s->priv->security_icon = gtk_image_new ();
+ s->priv->security_evbox = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (security_frame),
+ GTK_WIDGET (s->priv->security_evbox));
+ gtk_container_add (GTK_CONTAINER (s->priv->security_evbox),
+ GTK_WIDGET (s->priv->security_icon));
+ /*
+ g_signal_connect (G_OBJECT (security_eventbox),
+ "button_release_event",
+ GTK_SIGNAL_FUNC
+ (security_icon_button_release_cb), t);
+ */
+
+ control = bonobo_control_new (security_frame);
+ bonobo_ui_component_object_set (s->priv->ui_component,
+ "/status/SecurityIconWrapper",
+ BONOBO_OBJREF (control),
+ NULL);
+ bonobo_object_unref (control);
+
+ statusbar_set_security_state (s, FALSE, NULL);
+
+ gtk_widget_show_all (security_frame);
+}
+
+static void
+create_statusbar_progress (Statusbar *s)
+{
+ BonoboControl *control;
+
+ s->priv->progress = gtk_progress_bar_new ();
+
+ control = bonobo_control_new (s->priv->progress);
+ bonobo_ui_component_object_set (s->priv->ui_component,
+ "/status/ProgressWrapper",
+ BONOBO_OBJREF (control),
+ NULL);
+
+ gtk_widget_show_all (s->priv->progress);
+}
+
+static void
+statusbar_set_window (Statusbar *s, EphyWindow *window)
+{
+ g_return_if_fail (s->priv->window == NULL);
+
+ s->priv->window = window;
+ s->priv->ui_component = BONOBO_UI_COMPONENT
+ (s->priv->window->ui_component);
+
+ create_statusbar_progress (s);
+ create_statusbar_security_icon (s);
+}
+
+static void
+statusbar_init (Statusbar *t)
+{
+ t->priv = g_new0 (StatusbarPrivate, 1);
+ t->priv->visibility = TRUE;
+
+ t->priv->tooltips = gtk_tooltips_new ();
+}
+
+static void
+statusbar_finalize (GObject *object)
+{
+ Statusbar *t;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (IS_STATUSBAR (object));
+
+ t = STATUSBAR (object);
+
+ g_return_if_fail (t->priv != NULL);
+
+ gtk_object_destroy (GTK_OBJECT (t->priv->tooltips));
+
+ g_free (t->priv);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+Statusbar *
+statusbar_new (EphyWindow *window)
+{
+ Statusbar *t;
+
+ t = STATUSBAR (g_object_new (STATUSBAR_TYPE,
+ "EphyWindow", window,
+ NULL));
+
+ g_return_val_if_fail (t->priv != NULL, NULL);
+
+ return t;
+}
+
+void
+statusbar_set_visibility (Statusbar *t,
+ gboolean visibility)
+{
+ if (visibility == t->priv->visibility) return;
+
+ t->priv->visibility = visibility;
+
+ ephy_bonobo_set_hidden (BONOBO_UI_COMPONENT(t->priv->ui_component),
+ "/status",
+ !visibility);
+}
+
+void
+statusbar_set_security_state (Statusbar *t,
+ gboolean state,
+ const char *tooltip)
+{
+ const char *stock;
+
+ stock = state ? EPHY_STOCK_SECURE : EPHY_STOCK_UNSECURE;
+
+ gtk_image_set_from_stock (GTK_IMAGE (t->priv->security_icon), stock,
+ GTK_ICON_SIZE_MENU);
+
+ gtk_tooltips_set_tip (t->priv->tooltips, t->priv->security_evbox,
+ tooltip, NULL);
+}
+
+void
+statusbar_set_progress (Statusbar *t,
+ int progress)
+{
+ if (progress == -1)
+ {
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR(t->priv->progress));
+ }
+ else
+ {
+ float tmp;
+ tmp = (float)(progress) / 100;
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(t->priv->progress),
+ tmp);
+ }
+}
+
+void
+statusbar_set_message (Statusbar *s,
+ const char *message)
+{
+ g_return_if_fail (BONOBO_IS_UI_COMPONENT(s->priv->ui_component));
+ g_return_if_fail (message != NULL);
+
+ /* Bonobo doesnt like 0 length messages */
+ if (g_utf8_strlen (message, -1) == 0)
+ {
+ message = " ";
+ }
+
+ if (bonobo_ui_component_get_container (s->priv->ui_component)) /* should not do this here... */
+ {
+ bonobo_ui_component_set_status (s->priv->ui_component,
+ message,
+ NULL);
+ }
+}
+