[gnome-photos] base-manager: Store any type of object that has a property called "id"



commit 90ea2eba4761eb3d43fe599b8e7715578a840d39
Author: Debarshi Ray <debarshir gnome org>
Date:   Tue May 1 04:14:49 2012 +0200

    base-manager: Store any type of object that has a property called "id"

 src/photos-base-manager.c              |  135 ++++++++++++++++---------------
 src/photos-base-manager.h              |   30 ++++----
 src/photos-main-toolbar.c              |   12 ++--
 src/photos-organize-collection-model.c |   12 ++--
 4 files changed, 96 insertions(+), 93 deletions(-)
---
diff --git a/src/photos-base-manager.c b/src/photos-base-manager.c
index f9728c7..0a118a8 100644
--- a/src/photos-base-manager.c
+++ b/src/photos-base-manager.c
@@ -28,15 +28,15 @@
 
 struct _PhotosBaseManagerPrivate
 {
-  GHashTable *items;
-  PhotosBaseItem *active_item;
+  GHashTable *objects;
+  GObject *active_object;
 };
 
 enum
 {
   ACTIVE_CHANGED,
-  ITEM_ADDED,
-  ITEM_REMOVED,
+  OBJECT_ADDED,
+  OBJECT_REMOVED,
   LAST_SIGNAL
 };
 
@@ -52,13 +52,13 @@ photos_base_manager_dispose (GObject *object)
   PhotosBaseManager *self = PHOTOS_BASE_MANAGER (object);
   PhotosBaseManagerPrivate *priv = self->priv;
 
-  if (priv->items != NULL)
+  if (priv->objects != NULL)
     {
-      g_hash_table_unref (priv->items);
-      priv->items = NULL;
+      g_hash_table_unref (priv->objects);
+      priv->objects = NULL;
     }
 
-  g_clear_object (&priv->active_item);
+  g_clear_object (&priv->active_object);
 
   G_OBJECT_CLASS (photos_base_manager_parent_class)->dispose (object);
 }
@@ -72,7 +72,7 @@ photos_base_manager_init (PhotosBaseManager *self)
   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, PHOTOS_TYPE_BASE_MANAGER, PhotosBaseManagerPrivate);
   priv = self->priv;
 
-  priv->items = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+  priv->objects = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 }
 
 
@@ -93,44 +93,46 @@ photos_base_manager_class_init (PhotosBaseManagerClass *class)
                                           g_cclosure_marshal_VOID__OBJECT,
                                           G_TYPE_NONE,
                                           1,
-                                          PHOTOS_TYPE_BASE_ITEM);
-
-  signals[ITEM_ADDED] = g_signal_new ("item-added",
-                                      G_TYPE_FROM_CLASS (class),
-                                      G_SIGNAL_RUN_LAST,
-                                      G_STRUCT_OFFSET (PhotosBaseManagerClass,
-                                                       item_added),
-                                      NULL, /*accumulator */
-                                      NULL, /* accu_data */
-                                      g_cclosure_marshal_VOID__OBJECT,
-                                      G_TYPE_NONE,
-                                      1,
-                                      PHOTOS_TYPE_BASE_ITEM);
-
-  signals[ITEM_REMOVED] = g_signal_new ("item-removed",
+                                          G_TYPE_OBJECT);
+
+  signals[OBJECT_ADDED] = g_signal_new ("object-added",
                                         G_TYPE_FROM_CLASS (class),
                                         G_SIGNAL_RUN_LAST,
                                         G_STRUCT_OFFSET (PhotosBaseManagerClass,
-                                                         item_removed),
+                                                         object_added),
                                         NULL, /*accumulator */
-                                        NULL, /*accu_data */
+                                        NULL, /* accu_data */
                                         g_cclosure_marshal_VOID__OBJECT,
                                         G_TYPE_NONE,
                                         1,
-                                        PHOTOS_TYPE_BASE_ITEM);
+                                        G_TYPE_OBJECT);
+
+  signals[OBJECT_REMOVED] = g_signal_new ("object-removed",
+                                          G_TYPE_FROM_CLASS (class),
+                                          G_SIGNAL_RUN_LAST,
+                                          G_STRUCT_OFFSET (PhotosBaseManagerClass,
+                                                           object_removed),
+                                          NULL, /*accumulator */
+                                          NULL, /*accu_data */
+                                          g_cclosure_marshal_VOID__OBJECT,
+                                          G_TYPE_NONE,
+                                          1,
+                                          G_TYPE_OBJECT);
 
   g_type_class_add_private (class, sizeof (PhotosBaseManagerPrivate));
 }
 
 
 void
-photos_base_manager_add_item (PhotosBaseManager *self, PhotosBaseItem *item)
+photos_base_manager_add_object (PhotosBaseManager *self, GObject *object)
 {
-  const gchar *id = photos_base_item_get_id (item);
+  gchar *id;
+
+  g_object_get (object, "id", &id, NULL);
 
-  g_object_ref (item);
-  g_hash_table_insert (self->priv->items, (gpointer) id, item);
-  g_signal_emit (self, signals[ITEM_ADDED], 0, item);
+  g_object_ref (object);
+  g_hash_table_insert (self->priv->objects, (gpointer) id, object);
+  g_signal_emit (self, signals[OBJECT_ADDED], 0, object);
 }
 
 
@@ -139,39 +141,39 @@ photos_base_manager_clear (PhotosBaseManager *self)
 {
   PhotosBaseManagerPrivate *priv = self->priv;
 
-  g_hash_table_remove_all (priv->items);
-  g_clear_object (&priv->active_item);
+  g_hash_table_remove_all (priv->objects);
+  g_clear_object (&priv->active_object);
 }
 
 
-PhotosBaseItem *
-photos_base_manager_get_active_item (PhotosBaseManager *self)
+GObject *
+photos_base_manager_get_active_object (PhotosBaseManager *self)
 {
-  return self->priv->active_item;
+  return self->priv->active_object;
 }
 
 
-PhotosBaseItem *
-photos_base_manager_get_item_by_id (PhotosBaseManager *self, const gchar *id)
+GObject *
+photos_base_manager_get_object_by_id (PhotosBaseManager *self, const gchar *id)
 {
-  return g_hash_table_lookup (self->priv->items, id);
+  return g_hash_table_lookup (self->priv->objects, id);
 }
 
 
 GHashTable *
-photos_base_manager_get_items (PhotosBaseManager *self)
+photos_base_manager_get_objects (PhotosBaseManager *self)
 {
-  return self->priv->items;
+  return self->priv->objects;
 }
 
 
 guint
-photos_base_manager_get_items_count (PhotosBaseManager *self)
+photos_base_manager_get_objects_count (PhotosBaseManager *self)
 {
   GList *keys;
   guint count;
 
-  keys = g_hash_table_get_keys (self->priv->items);
+  keys = g_hash_table_get_keys (self->priv->objects);
   count = g_list_length (keys);
   g_list_free (keys);
   return count;
@@ -179,52 +181,55 @@ photos_base_manager_get_items_count (PhotosBaseManager *self)
 
 
 void
-photos_base_manager_remove_item (PhotosBaseManager *self, PhotosBaseItem *item)
+photos_base_manager_remove_object (PhotosBaseManager *self, GObject *object)
 {
-  const gchar *id = photos_base_item_get_id (item);
-  photos_base_manager_remove_item_by_id (self, id);
+  gchar *id;
+
+  g_object_get (object, "id", &id, NULL);
+  photos_base_manager_remove_object_by_id (self, id);
+  g_free (id);
 }
 
 
 void
-photos_base_manager_remove_item_by_id (PhotosBaseManager *self, const gchar *id)
+photos_base_manager_remove_object_by_id (PhotosBaseManager *self, const gchar *id)
 {
-  PhotosBaseItem *item;
+  GObject *object;
 
-  item = photos_base_manager_get_item_by_id (self, id);
-  if (item == NULL)
+  object = photos_base_manager_get_object_by_id (self, id);
+  if (object == NULL)
     return;
 
-  g_signal_emit (self, signals[ITEM_REMOVED], 0, item);
-  g_hash_table_remove (self->priv->items, id);
+  g_signal_emit (self, signals[OBJECT_REMOVED], 0, object);
+  g_hash_table_remove (self->priv->objects, id);
 }
 
 
 gboolean
-photos_base_manager_set_active_item (PhotosBaseManager *self, PhotosBaseItem *item)
+photos_base_manager_set_active_object (PhotosBaseManager *self, GObject *object)
 {
   PhotosBaseManagerPrivate *priv = self->priv;
 
-  if (item == priv->active_item)
+  if (object == priv->active_object)
     return FALSE;
 
-  if (priv->active_item != NULL)
-    g_object_unref (priv->active_item);
+  if (priv->active_object != NULL)
+    g_object_unref (priv->active_object);
 
-  if (item != NULL)
-    g_object_ref (item);
+  if (object != NULL)
+    g_object_ref (object);
 
-  priv->active_item = item;
-  g_signal_emit (self, signals[ACTIVE_CHANGED], 0, item);
+  priv->active_object = object;
+  g_signal_emit (self, signals[ACTIVE_CHANGED], 0, object);
   return TRUE;
 }
 
 
 gboolean
-photos_base_manager_set_active_item_by_id (PhotosBaseManager *self, const gchar *id)
+photos_base_manager_set_active_object_by_id (PhotosBaseManager *self, const gchar *id)
 {
-  PhotosBaseItem *item;
+  GObject *object;
 
-  item = photos_base_manager_get_item_by_id (self, id);
-  return photos_base_manager_set_active_item (self, item);
+  object = photos_base_manager_get_object_by_id (self, id);
+  return photos_base_manager_set_active_object (self, object);
 }
diff --git a/src/photos-base-manager.h b/src/photos-base-manager.h
index d654768..126141d 100644
--- a/src/photos-base-manager.h
+++ b/src/photos-base-manager.h
@@ -23,8 +23,6 @@
 
 #include <glib-object.h>
 
-#include "photos-base-item.h"
-
 G_BEGIN_DECLS
 
 #define PHOTOS_TYPE_BASE_MANAGER (photos_base_manager_get_type ())
@@ -62,32 +60,32 @@ struct _PhotosBaseManagerClass
 {
   GObjectClass parent_class;
 
-  void (*active_changed) (PhotosBaseManager *self);
-  void (*item_added)     (PhotosBaseManager *self);
-  void (*item_removed)   (PhotosBaseManager *self);
+  void (*active_changed)   (PhotosBaseManager *self);
+  void (*object_added)     (PhotosBaseManager *self);
+  void (*object_removed)   (PhotosBaseManager *self);
 };
 
-GType               photos_base_manager_get_type               (void) G_GNUC_CONST;
+GType               photos_base_manager_get_type                 (void) G_GNUC_CONST;
 
-void                photos_base_manager_add_item               (PhotosBaseManager *self, PhotosBaseItem *item);
+void                photos_base_manager_add_object               (PhotosBaseManager *self, GObject *object);
 
-void                photos_base_manager_clear                  (PhotosBaseManager *self);
+void                photos_base_manager_clear                    (PhotosBaseManager *self);
 
-PhotosBaseItem     *photos_base_manager_get_active_item        (PhotosBaseManager *self);
+GObject            *photos_base_manager_get_active_object        (PhotosBaseManager *self);
 
-PhotosBaseItem     *photos_base_manager_get_item_by_id         (PhotosBaseManager *self, const gchar *id);
+GObject            *photos_base_manager_get_object_by_id         (PhotosBaseManager *self, const gchar *id);
 
-GHashTable         *photos_base_manager_get_items              (PhotosBaseManager *self);
+GHashTable         *photos_base_manager_get_objects              (PhotosBaseManager *self);
 
-guint               photos_base_manager_get_items_count        (PhotosBaseManager *self);
+guint               photos_base_manager_get_objects_count        (PhotosBaseManager *self);
 
-void                photos_base_manager_remove_item            (PhotosBaseManager *self, PhotosBaseItem *item);
+void                photos_base_manager_remove_object            (PhotosBaseManager *self, GObject *object);
 
-void                photos_base_manager_remove_item_by_id      (PhotosBaseManager *self, const gchar *id);
+void                photos_base_manager_remove_object_by_id      (PhotosBaseManager *self, const gchar *id);
 
-gboolean            photos_base_manager_set_active_item        (PhotosBaseManager *self, PhotosBaseItem *item);
+gboolean            photos_base_manager_set_active_object        (PhotosBaseManager *self, GObject *object);
 
-gboolean            photos_base_manager_set_active_item_by_id  (PhotosBaseManager *self, const gchar *id);
+gboolean            photos_base_manager_set_active_object_by_id  (PhotosBaseManager *self, const gchar *id);
 
 G_END_DECLS
 
diff --git a/src/photos-main-toolbar.c b/src/photos-main-toolbar.c
index 30acfb4..a0ab35a 100644
--- a/src/photos-main-toolbar.c
+++ b/src/photos-main-toolbar.c
@@ -68,11 +68,11 @@ photos_main_toolbar_set_toolbar_title (PhotosMainToolbar *self)
 
 
 static void
-photos_main_toolbar_active_changed (PhotosBaseManager *manager, PhotosBaseItem *item, gpointer user_data)
+photos_main_toolbar_active_changed (PhotosBaseManager *manager, GObject *object, gpointer user_data)
 {
   PhotosMainToolbar *self = PHOTOS_MAIN_TOOLBAR (user_data);
 
-  gd_main_toolbar_set_back_visible (GD_MAIN_TOOLBAR (self->priv->widget), item != NULL);
+  gd_main_toolbar_set_back_visible (GD_MAIN_TOOLBAR (self->priv->widget), object != NULL);
   photos_main_toolbar_set_toolbar_title (self);
 }
 
@@ -130,7 +130,7 @@ photos_main_toolbar_go_back_request (GdMainToolbar *toolbar, gpointer user_data)
   if (mode == PHOTOS_WINDOW_MODE_PREVIEW)
     photos_mode_controller_set_window_mode (priv->mode_cntrlr, PHOTOS_WINDOW_MODE_OVERVIEW);
   else
-    photos_base_manager_set_active_item (priv->col_mngr, NULL);
+    photos_base_manager_set_active_object (priv->col_mngr, NULL);
 }
 
 
@@ -138,7 +138,7 @@ static void
 photos_main_toolbar_populate_for_overview (PhotosMainToolbar *self)
 {
   PhotosMainToolbarPrivate *priv = self->priv;
-  PhotosBaseItem *item;
+  GObject *object;
 
   gd_main_toolbar_set_mode (GD_MAIN_TOOLBAR (priv->widget), GD_MAIN_TOOLBAR_MODE_OVERVIEW);
   priv->collection_id = g_signal_connect (priv->col_mngr,
@@ -146,8 +146,8 @@ photos_main_toolbar_populate_for_overview (PhotosMainToolbar *self)
                                           G_CALLBACK (photos_main_toolbar_active_changed),
                                           self);
 
-  item = photos_base_manager_get_active_item (priv->col_mngr);
-  photos_main_toolbar_active_changed (priv->col_mngr, item, self);
+  object = photos_base_manager_get_active_object (priv->col_mngr);
+  photos_main_toolbar_active_changed (priv->col_mngr, object, self);
 
   gtk_widget_show_all (priv->widget);
 }
diff --git a/src/photos-organize-collection-model.c b/src/photos-organize-collection-model.c
index 83094c9..b146080 100644
--- a/src/photos-organize-collection-model.c
+++ b/src/photos-organize-collection-model.c
@@ -38,13 +38,13 @@ G_DEFINE_TYPE (PhotosOrganizeCollectionModel, photos_organize_collection_model,
 
 
 static void
-photos_organize_collection_model_item_added (PhotosBaseManager *manager, GObject *item, gpointer user_data)
+photos_organize_collection_model_object_added (PhotosBaseManager *manager, GObject *object, gpointer user_data)
 {
 }
 
 
 static void
-photos_organize_collection_model_item_removed (PhotosBaseManager *manager, GObject *item, gpointer user_data)
+photos_organize_collection_model_object_removed (PhotosBaseManager *manager, GObject *object, gpointer user_data)
 {
 }
 
@@ -93,12 +93,12 @@ photos_organize_collection_model_init (PhotosOrganizeCollectionModel *self)
 
   priv->manager = photos_collection_manager_new ();
   priv->coll_added_id = g_signal_connect (priv->manager,
-                                          "item-added",
-                                          G_CALLBACK (photos_organize_collection_model_item_added),
+                                          "object-added",
+                                          G_CALLBACK (photos_organize_collection_model_object_added),
                                           self);
   priv->coll_removed_id = g_signal_connect (priv->manager,
-                                            "item-removed",
-                                            G_CALLBACK (photos_organize_collection_model_item_removed),
+                                            "object-removed",
+                                            G_CALLBACK (photos_organize_collection_model_object_removed),
                                             self);
 
   /* TODO: populate the model */



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