[libgd/wip/rishi/main-box: 1/9] Add GdMainBoxItem



commit ba5de0c2c3e668e12d5438f06b59f34ae6e17c6b
Author: Debarshi Ray <debarshir gnome org>
Date:   Wed Nov 23 14:43:08 2016 +0100

    Add GdMainBoxItem
    
    This is the interface that a GObject must implement to get rendered
    by a GdMainBox.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=774914

 libgd/gd-main-box-item.c |  245 ++++++++++++++++++++++++++++++++++++++++++++++
 libgd/gd-main-box-item.h |   55 ++++++++++
 2 files changed, 300 insertions(+), 0 deletions(-)
---
diff --git a/libgd/gd-main-box-item.c b/libgd/gd-main-box-item.c
new file mode 100644
index 0000000..6dbbdfc
--- /dev/null
+++ b/libgd/gd-main-box-item.c
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2016 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser General Public 
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Debarshi Ray <debarshir gnome org>
+ *
+ */
+
+#include <cairo-gobject.h>
+
+#include "gd-main-box-item.h"
+
+G_DEFINE_INTERFACE (GdMainBoxItem, gd_main_box_item, G_TYPE_OBJECT)
+
+static void
+gd_main_box_item_default_init (GdMainBoxItemInterface *iface)
+{
+  GParamSpec *pspec;
+
+  /**
+   * GdMainBoxItem:id:
+   *
+   * A unique ID to identify the #GdMainBoxItem object.
+   */
+  pspec = g_param_spec_string ("id",
+                               "ID",
+                               "A unique ID to identify the item",
+                               NULL,
+                               G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:uri:
+   *
+   * A URI corresponding to the #GdMainBoxItem object.
+   */
+  pspec = g_param_spec_string ("uri",
+                               "URI",
+                               "A URI corresponding to the item",
+                               NULL,
+                               G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:primary-text:
+   *
+   * Some text to describe the #GdMainBoxItem object.
+   */
+  pspec = g_param_spec_string ("primary-text",
+                               "Primary Text",
+                               "Some text to describe the item",
+                               NULL,
+                               G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:secondary-text:
+   *
+   * Some additional text to describe the #GdMainBoxItem object.
+   */
+  pspec = g_param_spec_string ("secondary-text",
+                               "Secondary Text",
+                               "Some additional text to describe the item",
+                               NULL,
+                               G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:icon:
+   *
+   * An icon to visually identify the #GdMainBoxItem object.
+   */
+  pspec = g_param_spec_boxed ("icon",
+                              "Icon",
+                              "An icon to visually identify the item",
+                              CAIRO_GOBJECT_TYPE_SURFACE,
+                              G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:mtime:
+   *
+   * The time when the #GdMainBoxItem object was last modified.
+   */
+  pspec = g_param_spec_int64 ("mtime",
+                              "Modification time",
+                              "The time when the item was last modified",
+                              -1,
+                              G_MAXINT64,
+                              -1,
+                              G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+
+  /**
+   * GdMainBoxItem:pulse:
+   *
+   * Whether to show a progress indicator.
+   */
+  pspec = g_param_spec_boolean ("pulse",
+                                "Pulse",
+                                "Whether to show a progress indicator",
+                                FALSE,
+                                G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_interface_install_property (iface, pspec);
+}
+
+/**
+ * gd_main_box_item_get_id:
+ * @self:
+ *
+ * Returns: (transfer none): The ID
+ */
+const gchar *
+gd_main_box_item_get_id (GdMainBoxItem *self)
+{
+  GdMainBoxItemInterface *iface;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), NULL);
+
+  iface = GD_MAIN_BOX_ITEM_GET_IFACE (self);
+
+  return (* iface->get_id) (self);
+}
+
+/**
+ * gd_main_box_item_get_uri:
+ * @self:
+ *
+ * Returns: (transfer none): The URI
+ */
+const gchar *
+gd_main_box_item_get_uri (GdMainBoxItem *self)
+{
+  GdMainBoxItemInterface *iface;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), NULL);
+
+  iface = GD_MAIN_BOX_ITEM_GET_IFACE (self);
+
+  return (* iface->get_uri) (self);
+}
+
+/**
+ * gd_main_box_item_get_primary_text:
+ * @self:
+ *
+ * Returns: (transfer none): The primary text
+ */
+const gchar *
+gd_main_box_item_get_primary_text (GdMainBoxItem *self)
+{
+  GdMainBoxItemInterface *iface;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), NULL);
+
+  iface = GD_MAIN_BOX_ITEM_GET_IFACE (self);
+
+  return (* iface->get_primary_text) (self);
+}
+
+/**
+ * gd_main_box_item_get_secondary_text:
+ * @self:
+ *
+ * Returns: (transfer none): The secondary text
+ */
+const gchar *
+gd_main_box_item_get_secondary_text (GdMainBoxItem *self)
+{
+  GdMainBoxItemInterface *iface;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), NULL);
+
+  iface = GD_MAIN_BOX_ITEM_GET_IFACE (self);
+
+  return (* iface->get_secondary_text) (self);
+}
+
+/**
+ * gd_main_box_item_get_icon:
+ * @self:
+ *
+ * Returns: (transfer none): The icon
+ */
+cairo_surface_t *
+gd_main_box_item_get_icon (GdMainBoxItem *self)
+{
+  cairo_surface_t *icon;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), NULL);
+
+  g_object_get (self, "icon", &icon, NULL);
+
+  if (icon != NULL)
+    g_boxed_free (CAIRO_GOBJECT_TYPE_SURFACE, icon);
+
+  return icon;
+}
+
+/**
+ * gd_main_box_item_get_mtime:
+ * @self:
+ *
+ * Returns: (transfer none): The modification time
+ */
+gint64
+gd_main_box_item_get_mtime (GdMainBoxItem *self)
+{
+  gint64 mtime;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), -1);
+
+  g_object_get (self, "mtime", &mtime, NULL);
+  return mtime;
+}
+
+/**
+ * gd_main_box_item_get_pulse:
+ * @self:
+ *
+ * Returns: (transfer none): Whether to show a progress indicator
+ */
+gboolean
+gd_main_box_item_get_pulse (GdMainBoxItem *self)
+{
+  gboolean pulse;
+
+  g_return_val_if_fail (GD_IS_MAIN_BOX_ITEM (self), FALSE);
+
+  g_object_get (self, "pulse", &pulse, NULL);
+  return pulse;
+}
diff --git a/libgd/gd-main-box-item.h b/libgd/gd-main-box-item.h
new file mode 100644
index 0000000..b087f3d
--- /dev/null
+++ b/libgd/gd-main-box-item.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser General Public 
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Debarshi Ray <debarshir gnome org>
+ *
+ */
+
+#ifndef __GD_MAIN_BOX_ITEM_H__
+#define __GD_MAIN_BOX_ITEM_H__
+
+#include <cairo.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GD_TYPE_MAIN_BOX_ITEM gd_main_box_item_get_type()
+G_DECLARE_INTERFACE (GdMainBoxItem, gd_main_box_item, GD, MAIN_BOX_ITEM, GObject)
+
+struct _GdMainBoxItemInterface
+{
+  GTypeInterface base_iface;
+
+  /* vtable */
+  const gchar  * (* get_id)              (GdMainBoxItem *self);
+  const gchar  * (* get_uri)             (GdMainBoxItem *self);
+  const gchar  * (* get_primary_text)    (GdMainBoxItem *self);
+  const gchar  * (* get_secondary_text)  (GdMainBoxItem *self);
+  gboolean       (* get_pulse)           (GdMainBoxItem *self);
+};
+
+const gchar      * gd_main_box_item_get_id              (GdMainBoxItem *self);
+const gchar      * gd_main_box_item_get_uri             (GdMainBoxItem *self);
+const gchar      * gd_main_box_item_get_primary_text    (GdMainBoxItem *self);
+const gchar      * gd_main_box_item_get_secondary_text  (GdMainBoxItem *self);
+cairo_surface_t  * gd_main_box_item_get_icon            (GdMainBoxItem *self);
+gint64             gd_main_box_item_get_mtime           (GdMainBoxItem *self);
+gboolean           gd_main_box_item_get_pulse           (GdMainBoxItem *self);
+
+G_END_DECLS
+
+#endif /* __GD_MAIN_BOX_ITEM_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]