From 4dcc88ed0bccf5fcd0d8b458cc933b14ddf1ee8a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sat, 27 Dec 2008 18:37:33 +0000 Subject: Add EvProgressMessageArea derived from EvMessageArea to show progress 2008-12-27 Carlos Garcia Campos * shell/Makefile.am: * shell/ev-progress-message-area.[ch]: * shell/ev-message-area.[ch]: (ev_message_area_init), (ev_message_area_set_image_from_stock): Add EvProgressMessageArea derived from EvMessageArea to show progress information in the message area. svn path=/trunk/; revision=3308 --- diff --git a/ChangeLog b/ChangeLog index 141c55c..f6a308d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2008-12-27 Carlos Garcia Campos + * shell/Makefile.am: + * shell/ev-progress-message-area.[ch]: + * shell/ev-message-area.[ch]: (ev_message_area_init), + (ev_message_area_set_image_from_stock): + + Add EvProgressMessageArea derived from EvMessageArea to show + progress information in the message area. + +2008-12-27 Carlos Garcia Campos + * cut-n-paste/gedit-message-area/gedit-message-area.[ch]: Use GTK_RESPONSE_CLOSE instead of GTK_RESPONSE_CANCEL for the diff --git a/shell/Makefile.am b/shell/Makefile.am index 7f7ad4d..d5abcb0 100644 --- a/shell/Makefile.am +++ b/shell/Makefile.am @@ -63,6 +63,8 @@ evince_SOURCES= \ ev-pixbuf-cache.h \ ev-print-operation.h \ ev-print-operation.c \ + ev-progress-message-area.h \ + ev-progress-message-area.c \ ev-properties-dialog.c \ ev-properties-dialog.h \ ev-properties-fonts.c \ diff --git a/shell/ev-message-area.c b/shell/ev-message-area.c index 70c76a5..c469ec4 100644 --- a/shell/ev-message-area.c +++ b/shell/ev-message-area.c @@ -101,10 +101,13 @@ ev_message_area_class_init (EvMessageAreaClass *class) static void ev_message_area_init (EvMessageArea *area) { + GtkWidget *main_box; GtkWidget *hbox, *vbox; area->priv = EV_MESSAGE_AREA_GET_PRIVATE (area); + main_box = gtk_vbox_new (FALSE, 12); + hbox = gtk_hbox_new (FALSE, 12); vbox = gtk_vbox_new (FALSE, 12); @@ -133,8 +136,11 @@ ev_message_area_init (EvMessageArea *area) gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); - gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (area), hbox); + gtk_box_pack_start (GTK_BOX (main_box), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); + + gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (area), main_box); + gtk_widget_show (main_box); } static void @@ -281,6 +287,18 @@ ev_message_area_set_image (EvMessageArea *area, } void +ev_message_area_set_image_from_stock (EvMessageArea *area, + const gchar *stock_id) +{ + g_return_if_fail (EV_IS_MESSAGE_AREA (area)); + g_return_if_fail (stock_id != NULL); + + gtk_image_set_from_stock (GTK_IMAGE (area->priv->image), + stock_id, + GTK_ICON_SIZE_DIALOG); +} + +void ev_message_area_set_text (EvMessageArea *area, const gchar *str) { diff --git a/shell/ev-message-area.h b/shell/ev-message-area.h index ca403db..7128482 100644 --- a/shell/ev-message-area.h +++ b/shell/ev-message-area.h @@ -52,17 +52,19 @@ struct _EvMessageAreaClass { GeditMessageAreaClass parent_class; }; -GType ev_message_area_get_type (void) G_GNUC_CONST; -GtkWidget *ev_message_area_new (GtkMessageType type, - const gchar *text, - const gchar *first_button_text, - ...); -void ev_message_area_set_image (EvMessageArea *area, - GtkWidget *image); -void ev_message_area_set_text (EvMessageArea *area, - const gchar *str); -void ev_message_area_set_secondary_text (EvMessageArea *area, - const gchar *str); +GType ev_message_area_get_type (void) G_GNUC_CONST; +GtkWidget *ev_message_area_new (GtkMessageType type, + const gchar *text, + const gchar *first_button_text, + ...); +void ev_message_area_set_image (EvMessageArea *area, + GtkWidget *image); +void ev_message_area_set_image_from_stock (EvMessageArea *area, + const gchar *stock_id); +void ev_message_area_set_text (EvMessageArea *area, + const gchar *str); +void ev_message_area_set_secondary_text (EvMessageArea *area, + const gchar *str); G_END_DECLS diff --git a/shell/ev-progress-message-area.c b/shell/ev-progress-message-area.c new file mode 100644 index 0000000..ac2fda3 --- /dev/null +++ b/shell/ev-progress-message-area.c @@ -0,0 +1,198 @@ +/* ev-progress-message-area.c + * this file is part of evince, a gnome document viewer + * + * Copyright (C) 2008 Carlos Garcia Campos + * + * Evince 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. + * + * Evince 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 + +#include + +#include "ev-progress-message-area.h" + +#define EV_PROGRESS_MESSAGE_AREA_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaPrivate)) + +struct _EvProgressMessageAreaPrivate { + GtkWidget *label; + GtkWidget *progress_bar; +}; + +enum { + PROP_0, + PROP_STATUS, + PROP_FRACTION +}; + +static void ev_progress_message_area_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void ev_progress_message_area_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +G_DEFINE_TYPE (EvProgressMessageArea, ev_progress_message_area, EV_TYPE_MESSAGE_AREA) + +static void +ev_progress_message_area_class_init (EvProgressMessageAreaClass *class) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (class); + + gobject_class->set_property = ev_progress_message_area_set_property; + gobject_class->get_property = ev_progress_message_area_get_property; + + g_object_class_install_property (gobject_class, + PROP_STATUS, + g_param_spec_string ("status", + "Status", + "The status text of the progress area", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_FRACTION, + g_param_spec_double ("fraction", + "Fraction", + "The fraction of total work that has been completed", + 0.0, 1.0, 0.0, + G_PARAM_READWRITE)); + + g_type_class_add_private (gobject_class, sizeof (EvProgressMessageAreaPrivate)); +} + +static void +ev_progress_message_area_init (EvProgressMessageArea *area) +{ + GtkWidget *contents; + GtkWidget *vbox; + + area->priv = EV_PROGRESS_MESSAGE_AREA_GET_PRIVATE (area); + + contents = gedit_message_area_get_contents (GEDIT_MESSAGE_AREA (area)); + + vbox = gtk_vbox_new (FALSE, 6); + + area->priv->label = gtk_label_new (NULL); + gtk_label_set_use_markup (GTK_LABEL (area->priv->label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (area->priv->label), + PANGO_ELLIPSIZE_END); + gtk_misc_set_alignment (GTK_MISC (area->priv->label), 0.0, 0.5); + gtk_box_pack_start (GTK_BOX (vbox), area->priv->label, TRUE, TRUE, 0); + gtk_widget_show (area->priv->label); + + area->priv->progress_bar = gtk_progress_bar_new (); + gtk_widget_set_size_request (area->priv->progress_bar, -1, 15); + gtk_box_pack_start (GTK_BOX (vbox), area->priv->progress_bar, TRUE, FALSE, 0); + gtk_widget_show (area->priv->progress_bar); + + gtk_box_pack_start (GTK_BOX (contents), vbox, TRUE, TRUE, 0); + gtk_widget_show (vbox); +} + +static void +ev_progress_message_area_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EvProgressMessageArea *area = EV_PROGRESS_MESSAGE_AREA (object); + + switch (prop_id) { + case PROP_STATUS: + ev_progress_message_area_set_status (area, g_value_get_string (value)); + break; + case PROP_FRACTION: + ev_progress_message_area_set_fraction (area, g_value_get_double (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +ev_progress_message_area_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EvProgressMessageArea *area = EV_PROGRESS_MESSAGE_AREA (object); + + switch (prop_id) { + case PROP_STATUS: + g_value_set_string (value, gtk_label_get_label (GTK_LABEL (area->priv->label))); + break; + case PROP_FRACTION: { + gdouble fraction; + + fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (area->priv->progress_bar)); + g_value_set_double (value, fraction); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +GtkWidget * +ev_progress_message_area_new (const gchar *stock_id, + const gchar *text, + const gchar *first_button_text, + ...) +{ + GtkWidget *widget; + + widget = g_object_new (EV_TYPE_PROGRESS_MESSAGE_AREA, + "message-type", GTK_MESSAGE_OTHER, + "text", text, + NULL); + if (first_button_text) { + va_list args; + + va_start (args, first_button_text); + gedit_message_area_add_buttons_valist (GEDIT_MESSAGE_AREA (widget), + first_button_text, + args); + va_end (args); + } + + ev_message_area_set_image_from_stock (EV_MESSAGE_AREA (widget), stock_id); + + return widget; +} + +void +ev_progress_message_area_set_status (EvProgressMessageArea *area, + const gchar *str) +{ + g_return_if_fail (EV_IS_PROGRESS_MESSAGE_AREA (area)); + + gtk_label_set_text (GTK_LABEL (area->priv->label), str); + + g_object_notify (G_OBJECT (area), "status"); +} + +void +ev_progress_message_area_set_fraction (EvProgressMessageArea *area, + gdouble fraction) +{ + g_return_if_fail (EV_IS_PROGRESS_MESSAGE_AREA (area)); + + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (area->priv->progress_bar), + fraction); + g_object_notify (G_OBJECT (area), "fraction"); +} diff --git a/shell/ev-progress-message-area.h b/shell/ev-progress-message-area.h new file mode 100644 index 0000000..c53fb2a --- /dev/null +++ b/shell/ev-progress-message-area.h @@ -0,0 +1,64 @@ +/* ev-progress-message-area.h + * this file is part of evince, a gnome document viewer + * + * Copyright (C) 2008 Carlos Garcia Campos + * + * Evince 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. + * + * Evince 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. + */ + +#ifndef EV_PROGRESS_MESSAGE_AREA_H +#define EV_PROGRESS_MESSAGE_AREA_H + +#include + +#include "ev-message-area.h" + +G_BEGIN_DECLS + +#define EV_TYPE_PROGRESS_MESSAGE_AREA (ev_progress_message_area_get_type ()) +#define EV_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageArea)) +#define EV_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaClass)) +#define EV_IS_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA)) +#define EV_IS_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_PROGRESS_MESSAGE_AREA)) +#define EV_PROGRESS_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaClass)) + +typedef struct _EvProgressMessageArea EvProgressMessageArea; +typedef struct _EvProgressMessageAreaClass EvProgressMessageAreaClass; +typedef struct _EvProgressMessageAreaPrivate EvProgressMessageAreaPrivate; + +struct _EvProgressMessageArea { + EvMessageArea parent_instance; + + /*< private >*/ + EvProgressMessageAreaPrivate *priv; +}; + +struct _EvProgressMessageAreaClass { + EvMessageAreaClass parent_class; +}; + +GType ev_progress_message_area_get_type (void) G_GNUC_CONST; +GtkWidget *ev_progress_message_area_new (const gchar *stock_id, + const gchar *text, + const gchar *first_button_text, + ...); +void ev_progress_message_area_set_status (EvProgressMessageArea *area, + const gchar *str); +void ev_progress_message_area_set_fraction (EvProgressMessageArea *area, + gdouble fraction); + +G_END_DECLS + +#endif /* EV_PROGRESS_MESSAGE_AREA_H */ -- cgit v0.9.1