[nautilus-sendto] plugins: Add a progress bar helper widget
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-sendto] plugins: Add a progress bar helper widget
- Date: Thu, 4 Nov 2010 17:06:15 +0000 (UTC)
commit dc5c23e30e1115fbb7d7fd52a279272bc7bc92b9
Author: Bastien Nocera <hadess hadess net>
Date: Thu Nov 4 16:32:59 2010 +0000
plugins: Add a progress bar helper widget
src/plugins/Makefile.am | 8 +-
src/plugins/nautilus-sendto-progress.c | 197 ++++++++++++++++++++++++++++++++
src/plugins/nautilus-sendto-progress.h | 48 ++++++++
src/plugins/test-progress.c | 19 +++
4 files changed, 271 insertions(+), 1 deletions(-)
---
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index 2eca8fa..919539b 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -2,8 +2,13 @@ SUBDIRS = . removable-devices evolution socialweb
#SUBDIRS = . $(PLUGINS)
DIST_SUBDIRS = $(ALL_PLUGINS)
+noinst_PROGRAMS = test-progress
+test_progress_SOURCES = test-progress.c
+test_progress_CFLAGS = $(NAUTILUS_SENDTO_CFLAGS)
+test_progress_LDADD = $(NAUTILUS_SENDTO_LIBS) libnautilussendto-1.0.la
+
nautilus_sendto_includedir = $(includedir)/nautilus-sendto/
-nautilus_sendto_include_HEADERS = nautilus-sendto-plugin.h nst-common.h nautilus-sendto-packer.h nautilus-sendto-filelist.h
+nautilus_sendto_include_HEADERS = nautilus-sendto-plugin.h nst-common.h nautilus-sendto-packer.h nautilus-sendto-filelist.h nautilus-sendto-progress.h
MARSHALFILES = nst-plugin-marshal.c nst-plugin-marshal.h
BUILT_SOURCES = $(MARSHALFILES)
@@ -19,6 +24,7 @@ libnautilussendto_1_0_la_SOURCES = \
nst-common.c \
nautilus-sendto-packer.c \
nautilus-sendto-filelist.c \
+ nautilus-sendto-progress.c \
nst-enum-types.h \
nst-enum-types.c \
$(nautilus_sendto_include_HEADERS) \
diff --git a/src/plugins/nautilus-sendto-progress.c b/src/plugins/nautilus-sendto-progress.c
new file mode 100644
index 0000000..7becb00
--- /dev/null
+++ b/src/plugins/nautilus-sendto-progress.c
@@ -0,0 +1,197 @@
+/*
+ *
+ * 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 av.
+ *
+ * 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Author: Bastien Nocera <hadess hadess net>
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <glib/gi18n-lib.h>
+#include "nautilus-sendto-progress.h"
+
+struct NstProgressBarPrivate {
+ GtkWidget *label;
+ GtkWidget *progress_bar;
+ GtkWidget *cancel;
+
+ guint64 total_size;
+ guint64 uploaded;
+};
+
+G_DEFINE_TYPE (NstProgressBar, nst_progress_bar, GTK_TYPE_INFO_BAR)
+#define NST_PROGRESS_BAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), NST_TYPE_PROGRESS_BAR, NstProgressBarPrivate))
+
+enum {
+ PROP_0,
+ PROP_TOTAL_SIZE,
+ PROP_UPLOADED,
+ PROP_LABEL
+};
+
+void
+nst_progress_bar_set_uploaded (NstProgressBar *bar,
+ guint64 uploaded)
+{
+ g_return_if_fail (NST_IS_PROGRESS_BAR (bar));
+
+ bar->priv->uploaded = uploaded;
+ if (bar->priv->total_size > 0)
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar->priv->progress_bar),
+ (double) uploaded / bar->priv->total_size);
+ else
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar->priv->progress_bar), 0);
+}
+
+void
+nst_progress_bar_set_total_size (NstProgressBar *bar,
+ guint total_size)
+{
+ g_return_if_fail (NST_IS_PROGRESS_BAR (bar));
+
+ bar->priv->total_size = total_size;
+ if (bar->priv->total_size > 0)
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar->priv->progress_bar),
+ (double) bar->priv->uploaded / total_size);
+ else
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar->priv->progress_bar), 0);
+}
+
+void
+nst_progress_bar_set_label (NstProgressBar *bar,
+ const char *label)
+{
+ g_return_if_fail (NST_IS_PROGRESS_BAR (bar));
+
+ gtk_label_set_label (GTK_LABEL (bar->priv->label), label);
+}
+
+static void
+nst_progress_bar_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NstProgressBar *bar;
+
+ bar = NST_PROGRESS_BAR (object);
+
+ switch (property_id) {
+ case PROP_TOTAL_SIZE:
+ nst_progress_bar_set_total_size (bar, g_value_get_uint64 (value));
+ break;
+ case PROP_UPLOADED:
+ nst_progress_bar_set_uploaded (bar, g_value_get_uint64 (value));
+ break;
+ case PROP_LABEL:
+ nst_progress_bar_set_label (bar, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+nst_progress_bar_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NstProgressBar *bar;
+
+ bar = NST_PROGRESS_BAR (object);
+
+ switch (property_id) {
+ case PROP_TOTAL_SIZE:
+ g_value_set_uint64 (value, bar->priv->total_size);
+ break;
+ case PROP_UPLOADED:
+ g_value_set_uint64 (value, bar->priv->uploaded);
+ break;
+ case PROP_LABEL:
+ g_value_set_string (value, gtk_label_get_label (GTK_LABEL (bar->priv->label)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+nst_progress_bar_class_init (NstProgressBarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = nst_progress_bar_get_property;
+ object_class->set_property = nst_progress_bar_set_property;
+
+ g_object_class_install_property (object_class, PROP_TOTAL_SIZE,
+ g_param_spec_uint64 ("total-size", "Total size", "The total size of the upload.",
+ 0, G_MAXUINT64, 0, G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_UPLOADED,
+ g_param_spec_uint64 ("uploaded", "Uploaded", "Size uploaded so far.",
+ 0, G_MAXUINT64, 0, G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_LABEL,
+ g_param_spec_string ("label", "Label", "Label.",
+ NULL, G_PARAM_READWRITE));
+
+ g_type_class_add_private (klass, sizeof (NstProgressBarPrivate));
+}
+
+static void
+nst_progress_bar_init (NstProgressBar *bar)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *content;
+
+ bar->priv = NST_PROGRESS_BAR_GET_PRIVATE (bar);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show (vbox);
+
+ hbox = gtk_hbox_new (FALSE, 4);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+ bar->priv->label = gtk_label_new ("");
+ gtk_widget_show (bar->priv->label);
+ gtk_box_pack_start (GTK_BOX (hbox), bar->priv->label, TRUE, TRUE, 0);
+ gtk_label_set_use_markup (GTK_LABEL (bar->priv->label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0, 0.5);
+ gtk_label_set_ellipsize (GTK_LABEL (bar->priv->label),
+ PANGO_ELLIPSIZE_END);
+
+ bar->priv->progress_bar = gtk_progress_bar_new ();
+ gtk_widget_show (bar->priv->progress_bar);
+ gtk_box_pack_start (GTK_BOX (vbox), bar->priv->progress_bar, TRUE, FALSE, 0);
+ gtk_widget_set_size_request (bar->priv->progress_bar, -1, 15);
+
+ content = gtk_info_bar_get_content_area (GTK_INFO_BAR (bar));
+ gtk_container_add (GTK_CONTAINER (content), vbox);
+
+ bar->priv->cancel = gtk_info_bar_add_button (GTK_INFO_BAR (bar),
+ _("_Cancel"), GTK_RESPONSE_CANCEL);
+ gtk_widget_hide (bar->priv->cancel);
+ gtk_widget_set_no_show_all (bar->priv->cancel, TRUE);
+}
+
+GtkWidget *
+nst_progress_bar_new (void)
+{
+ return g_object_new (NST_TYPE_PROGRESS_BAR, NULL);
+}
+
diff --git a/src/plugins/nautilus-sendto-progress.h b/src/plugins/nautilus-sendto-progress.h
new file mode 100644
index 0000000..060e2bb
--- /dev/null
+++ b/src/plugins/nautilus-sendto-progress.h
@@ -0,0 +1,48 @@
+/*
+ * 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 av.
+ *
+ * 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Author: Maxim Ermilov <ermilov maxim gmail com>
+ * Bastien Nocera <hadess hadess net>
+ */
+
+#include <gtk/gtk.h>
+
+#define NST_TYPE_PROGRESS_BAR (nst_progress_bar_get_type ())
+#define NST_PROGRESS_BAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NST_TYPE_PROGRESS_BAR, NstProgressBar))
+#define NST_PROGRESS_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NST_TYPE_PROGRESS_BAR, NstProgressBar))
+#define NST_IS_PROGRESS_BAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NST_TYPE_PROGRESS_BAR))
+#define NST_IS_PROGRESS_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NST_TYPE_PROGRESS_BAR))
+#define NST_PROGRESS_BAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NST_TYPE_PROGRESS_BAR, NstProgressBarClass))
+
+typedef struct NstProgressBarPrivate NstProgressBarPrivate;
+
+typedef struct {
+ GtkInfoBar parent;
+ NstProgressBarPrivate *priv;
+} NstProgressBar;
+
+typedef struct {
+ GtkInfoBarClass parent;
+} NstProgressBarClass;
+
+GType nst_progress_bar_get_type (void);
+GtkWidget *nst_progress_bar_new (void);
+void nst_progress_bar_set_total_size (NstProgressBar *bar,
+ guint total_size);
+void nst_progress_bar_set_uploaded (NstProgressBar *bar,
+ guint64 uploaded);
+void nst_progress_bar_set_label (NstProgressBar *bar,
+ const char *label);
diff --git a/src/plugins/test-progress.c b/src/plugins/test-progress.c
new file mode 100644
index 0000000..7c62bf3
--- /dev/null
+++ b/src/plugins/test-progress.c
@@ -0,0 +1,19 @@
+#include "nautilus-sendto-progress.h"
+
+int main (int argc, char **argv)
+{
+ GtkWidget *progress;
+ GtkWidget *window;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ progress = nst_progress_bar_new ();
+ nst_progress_bar_set_label (NST_PROGRESS_BAR (progress), "TEST TEST TEST TEST AGAIN");
+ gtk_container_add (GTK_CONTAINER (window), progress);
+
+ gtk_widget_show_all (window);
+ gtk_main ();
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]