summaryrefslogtreecommitdiff
path: root/src/customcellrendererprogress.c
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@yahoo.com>2011-11-12 11:34:07 +0100
committerJoel Klinghed <the_jk@yahoo.com>2011-11-12 11:34:07 +0100
commit3411ddd3e6f9ee43e4eaa0c74935f1af8f36ee9d (patch)
tree5c4b1e34b8f7268096282c6376baaef1f2b966f6 /src/customcellrendererprogress.c
Initial commit
Diffstat (limited to 'src/customcellrendererprogress.c')
-rw-r--r--src/customcellrendererprogress.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/customcellrendererprogress.c b/src/customcellrendererprogress.c
new file mode 100644
index 0000000..04912e7
--- /dev/null
+++ b/src/customcellrendererprogress.c
@@ -0,0 +1,139 @@
+#include "common.h"
+
+#include "customcellrendererprogress.h"
+
+static void custom_cell_renderer_progress_get_property(GObject* object,
+ guint param_id,
+ GValue* value,
+ GParamSpec* pspec);
+static void custom_cell_renderer_progress_set_property(GObject* object,
+ guint param_id,
+ const GValue* value,
+ GParamSpec* pspec);
+
+static void update_progress(CustomCellRendererProgress* cell_progress,
+ gfloat downloaded, gfloat seeded);
+
+enum {
+ PROP_0,
+ PROP_DOWNLOADED,
+ PROP_SEEDED,
+};
+
+G_DEFINE_TYPE(CustomCellRendererProgress, custom_cell_renderer_progress, GTK_TYPE_CELL_RENDERER_PROGRESS)
+
+static void custom_cell_renderer_progress_init(CustomCellRendererProgress* cell_progress)
+{
+ update_progress(cell_progress,
+ cell_progress->downloaded, cell_progress->seeded);
+}
+
+static void custom_cell_renderer_progress_class_init(CustomCellRendererProgressClass *cell_progress_class)
+{
+ GObjectClass *object_class;
+ /* GtkCellRendererClass *cell_renderer_class; */
+
+ object_class = G_OBJECT_CLASS(cell_progress_class);
+ /* cell_renderer_class = GTK_CELL_RENDERER_CLASS(cell_progress_class); */
+
+ object_class->set_property = custom_cell_renderer_progress_set_property;
+ object_class->get_property = custom_cell_renderer_progress_get_property;
+
+ g_object_class_install_property(object_class,
+ PROP_DOWNLOADED,
+ g_param_spec_float("downloaded",
+ "Percent downloaded",
+ "Percent of torrent that has been downloaded",
+ 0.0,
+ 100.0,
+ 0,
+ G_PARAM_READABLE | G_PARAM_WRITABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_SEEDED,
+ g_param_spec_float("seeded",
+ "Seeded ratio",
+ "Seeded ratio",
+ 0.0,
+ G_MAXFLOAT,
+ 0,
+ G_PARAM_READABLE | G_PARAM_WRITABLE));
+}
+
+GtkCellRenderer* custom_cell_renderer_progress_new(void)
+{
+ return g_object_new(CUSTOM_TYPE_CELL_RENDERER_PROGRESS, NULL);
+}
+
+void custom_cell_renderer_progress_get_property(GObject* object,
+ guint param_id,
+ GValue* value,
+ GParamSpec* pspec)
+{
+ CustomCellRendererProgress* progress = CUSTOM_CELL_RENDERER_PROGRESS(object);
+
+ switch (param_id)
+ {
+ case PROP_DOWNLOADED:
+ g_value_set_float(value, progress->downloaded);
+ break;
+ case PROP_SEEDED:
+ g_value_set_float(value, progress->seeded);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
+ }
+}
+
+void custom_cell_renderer_progress_set_property(GObject* object,
+ guint param_id,
+ const GValue* value,
+ GParamSpec* pspec)
+{
+ CustomCellRendererProgress* progress = CUSTOM_CELL_RENDERER_PROGRESS(object);
+ gboolean changed = FALSE;
+
+ switch (param_id)
+ {
+ case PROP_DOWNLOADED:
+ {
+ gfloat downloaded = g_value_get_float(value);
+
+ if (progress->downloaded != downloaded)
+ {
+ progress->downloaded = downloaded;
+ changed = TRUE;
+ }
+ break;
+ }
+ case PROP_SEEDED:
+ {
+ gfloat seeded = g_value_get_float(value);
+
+ if (progress->seeded != seeded)
+ {
+ progress->seeded = seeded;
+ changed = TRUE;
+ }
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
+ }
+
+ if (changed)
+ {
+ update_progress(progress, progress->downloaded, progress->seeded);
+ }
+}
+
+void update_progress(CustomCellRendererProgress* cell_progress,
+ gfloat downloaded, gfloat seeded)
+{
+ g_snprintf(cell_progress->buffer, sizeof(cell_progress->buffer),
+ "%2.2f", seeded);
+ g_object_set(cell_progress,
+ "value", (gint)downloaded,
+ "text", cell_progress->buffer,
+ NULL);
+}