[gnome-photos/wip/favorites: 7/7] tracker-controller: Make it an abstract type with a pluggable query
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/favorites: 7/7] tracker-controller: Make it an abstract type with a pluggable query
- Date: Wed, 12 Dec 2012 06:04:04 +0000 (UTC)
commit 174a63444a4926209f53bc6940cfd5b766e1e876
Author: Debarshi Ray <debarshir gnome org>
Date: Wed Dec 12 01:38:24 2012 +0530
tracker-controller: Make it an abstract type with a pluggable query
This way we can reuse most of it for the Favorites mode, but plug in a
different query by implementing the get_current_query virtual method.
PhotosTrackerOverviewController implements get_current_query for the
overview mode.
src/Makefile.am | 2 +
src/photos-embed.c | 16 +++---
src/photos-tracker-controller.c | 33 +----------
src/photos-tracker-controller.h | 8 ++-
src/photos-tracker-overview-controller.c | 86 ++++++++++++++++++++++++++++++
src/photos-tracker-overview-controller.h | 73 +++++++++++++++++++++++++
src/photos-view-container.c | 4 +-
7 files changed, 180 insertions(+), 42 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 43c35f4..fa7d5a2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -122,6 +122,8 @@ gnome_photos_SOURCES = \
photos-tracker-change-monitor.h \
photos-tracker-controller.c \
photos-tracker-controller.h \
+ photos-tracker-overview-controller.c \
+ photos-tracker-overview-controller.h \
photos-tracker-queue.c \
photos-tracker-queue.h \
photos-utils.c \
diff --git a/src/photos-embed.c b/src/photos-embed.c
index b42d352..14af2fa 100644
--- a/src/photos-embed.c
+++ b/src/photos-embed.c
@@ -41,7 +41,7 @@
#include "photos-selection-toolbar.h"
#include "photos-spinner-box.h"
#include "photos-tracker-change-monitor.h"
-#include "photos-tracker-controller.h"
+#include "photos-tracker-overview-controller.h"
#include "photos-view-container.h"
@@ -70,7 +70,7 @@ struct _PhotosEmbedPrivate
PhotosModeController *mode_cntrlr;
PhotosOffsetController *offset_cntrlr;
PhotosTrackerChangeMonitor *monitor;
- PhotosTrackerController *trk_cntrlr;
+ PhotosTrackerController *trk_ovrvw_cntrlr;
gint preview_page;
gint view_page;
gulong no_results_change_id;
@@ -322,7 +322,7 @@ photos_embed_dispose (GObject *object)
g_clear_object (&priv->mode_cntrlr);
g_clear_object (&priv->offset_cntrlr);
g_clear_object (&priv->monitor);
- g_clear_object (&priv->trk_cntrlr);
+ g_clear_object (&priv->trk_ovrvw_cntrlr);
G_OBJECT_CLASS (photos_embed_parent_class)->dispose (object);
}
@@ -488,9 +488,9 @@ photos_embed_init (PhotosEmbed *self)
G_CALLBACK (photos_embed_fullscreen_changed),
self);
- priv->trk_cntrlr = photos_tracker_controller_new ();
- g_signal_connect_swapped (priv->trk_cntrlr, "query-error", G_CALLBACK (photos_embed_query_error), self);
- g_signal_connect (priv->trk_cntrlr,
+ priv->trk_ovrvw_cntrlr = photos_tracker_overview_controller_new ();
+ g_signal_connect_swapped (priv->trk_ovrvw_cntrlr, "query-error", G_CALLBACK (photos_embed_query_error), self);
+ g_signal_connect (priv->trk_ovrvw_cntrlr,
"query-status-changed",
G_CALLBACK (photos_embed_query_status_changed),
self);
@@ -501,8 +501,8 @@ photos_embed_init (PhotosEmbed *self)
priv->item_mngr = photos_item_manager_new ();
g_signal_connect (priv->item_mngr, "active-changed", G_CALLBACK (photos_embed_active_changed), self);
- querying = photos_tracker_controller_get_query_status (priv->trk_cntrlr);
- photos_embed_query_status_changed (priv->trk_cntrlr, querying, self);
+ querying = photos_tracker_controller_get_query_status (priv->trk_ovrvw_cntrlr);
+ photos_embed_query_status_changed (priv->trk_ovrvw_cntrlr, querying, self);
priv->monitor = photos_tracker_change_monitor_new ();
diff --git a/src/photos-tracker-controller.c b/src/photos-tracker-controller.c
index cda6429..11bbeaf 100644
--- a/src/photos-tracker-controller.c
+++ b/src/photos-tracker-controller.c
@@ -62,7 +62,7 @@ enum
static guint signals[LAST_SIGNAL] = { 0 };
-G_DEFINE_TYPE (PhotosTrackerController, photos_tracker_controller, G_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE (PhotosTrackerController, photos_tracker_controller, G_TYPE_OBJECT);
typedef enum
@@ -169,7 +169,8 @@ photos_tracker_controller_perform_current_query (PhotosTrackerController *self)
if (priv->current_query != NULL)
photos_query_free (priv->current_query);
- priv->current_query = photos_query_builder_global_query ();
+ priv->current_query = PHOTOS_TRACKER_CONTROLLER_GET_CLASS (self)->get_current_query ();
+ g_message ("photos_tracker_controller_perform_current_query: %s", priv->current_query->sparql);
g_cancellable_reset (priv->cancellable);
photos_tracker_queue_select (priv->queue,
@@ -254,26 +255,6 @@ photos_tracker_controller_source_object_removed (PhotosBaseManager *manager, GOb
}
-static GObject *
-photos_tracker_controller_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- static GObject *self = NULL;
-
- if (self == NULL)
- {
- self = G_OBJECT_CLASS (photos_tracker_controller_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- g_object_add_weak_pointer (self, (gpointer) &self);
- return self;
- }
-
- return g_object_ref (self);
-}
-
-
static void
photos_tracker_controller_dispose (GObject *object)
{
@@ -342,7 +323,6 @@ photos_tracker_controller_class_init (PhotosTrackerControllerClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
- object_class->constructor = photos_tracker_controller_constructor;
object_class->dispose = photos_tracker_controller_dispose;
object_class->finalize = photos_tracker_controller_finalize;
@@ -375,13 +355,6 @@ photos_tracker_controller_class_init (PhotosTrackerControllerClass *class)
}
-PhotosTrackerController *
-photos_tracker_controller_new (void)
-{
- return g_object_new (PHOTOS_TYPE_TRACKER_CONTROLLER, NULL);
-}
-
-
void
photos_tracker_controller_start (PhotosTrackerController *self)
{
diff --git a/src/photos-tracker-controller.h b/src/photos-tracker-controller.h
index 1662899..96ebaf7 100644
--- a/src/photos-tracker-controller.h
+++ b/src/photos-tracker-controller.h
@@ -27,6 +27,8 @@
#include <glib-object.h>
+#include "photos-query.h"
+
G_BEGIN_DECLS
#define PHOTOS_TYPE_TRACKER_CONTROLLER (photos_tracker_controller_get_type ())
@@ -65,14 +67,16 @@ struct _PhotosTrackerControllerClass
{
GObjectClass parent_class;
+ /* virtual methods */
+ PhotosQuery *(*get_current_query) (void);
+
+ /* signals */
void (*query_error) (PhotosTrackerController *self, const gchar *primary, const gchar *secondary);
void (*query_status_changed) (PhotosTrackerController *self, gboolean querying);
};
GType photos_tracker_controller_get_type (void) G_GNUC_CONST;
-PhotosTrackerController *photos_tracker_controller_new (void);
-
gboolean photos_tracker_controller_get_query_status (PhotosTrackerController *self);
void photos_tracker_controller_start (PhotosTrackerController *self);
diff --git a/src/photos-tracker-overview-controller.c b/src/photos-tracker-overview-controller.c
new file mode 100644
index 0000000..78f2c86
--- /dev/null
+++ b/src/photos-tracker-overview-controller.c
@@ -0,0 +1,86 @@
+/*
+ * Photos - access, organize and share your photos on GNOME
+ * Copyright  2012 Red Hat, Inc.
+ *
+ * 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 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/* Based on code from:
+ * + Documents
+ */
+
+
+#include "config.h"
+
+#include "photos-query-builder.h"
+#include "photos-tracker-overview-controller.h"
+
+
+G_DEFINE_TYPE (PhotosTrackerOverviewController, photos_tracker_overview_controller, PHOTOS_TYPE_TRACKER_CONTROLLER);
+
+
+static PhotosQuery *
+photos_tracker_overview_controller_get_current_query (void)
+{
+ PhotosQuery *query;
+ query = photos_query_builder_global_query ();
+ g_message ("%s", query->sparql);
+ return query;
+}
+
+
+static GObject *
+photos_tracker_overview_controller_constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ static GObject *self = NULL;
+
+ if (self == NULL)
+ {
+ self = G_OBJECT_CLASS (photos_tracker_overview_controller_parent_class)->constructor (type,
+ n_construct_params,
+ construct_params);
+ g_object_add_weak_pointer (self, (gpointer) &self);
+ return self;
+ }
+
+ return g_object_ref (self);
+}
+
+
+static void
+photos_tracker_overview_controller_init (PhotosTrackerOverviewController *self)
+{
+}
+
+
+static void
+photos_tracker_overview_controller_class_init (PhotosTrackerOverviewControllerClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ PhotosTrackerControllerClass *tracker_controller_class = PHOTOS_TRACKER_CONTROLLER_CLASS (class);
+
+ object_class->constructor = photos_tracker_overview_controller_constructor;
+ tracker_controller_class->get_current_query = photos_tracker_overview_controller_get_current_query;
+}
+
+
+PhotosTrackerController *
+photos_tracker_overview_controller_new (void)
+{
+ return g_object_new (PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, NULL);
+}
diff --git a/src/photos-tracker-overview-controller.h b/src/photos-tracker-overview-controller.h
new file mode 100644
index 0000000..3bcf201
--- /dev/null
+++ b/src/photos-tracker-overview-controller.h
@@ -0,0 +1,73 @@
+/*
+ * Photos - access, organize and share your photos on GNOME
+ * Copyright  2012 Red Hat, Inc.
+ *
+ * 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 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/* Based on code from:
+ * + Documents
+ */
+
+#ifndef PHOTOS_TRACKER_OVERVIEW_CONTROLLER_H
+#define PHOTOS_TRACKER_OVERVIEW_CONTROLLER_H
+
+#include "photos-tracker-controller.h"
+
+G_BEGIN_DECLS
+
+#define PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER (photos_tracker_overview_controller_get_type ())
+
+#define PHOTOS_TRACKER_OVERVIEW_CONTROLLER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, PhotosTrackerOverviewController))
+
+#define PHOTOS_TRACKER_OVERVIEW_CONTROLLER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, PhotosTrackerOverviewControllerClass))
+
+#define PHOTOS_IS_TRACKER_OVERVIEW_CONTROLLER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER))
+
+#define PHOTOS_IS_TRACKER_OVERVIEW_CONTROLLER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER))
+
+#define PHOTOS_TRACKER_OVERVIEW_CONTROLLER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, PhotosTrackerOverviewControllerClass))
+
+typedef struct _PhotosTrackerOverviewController PhotosTrackerOverviewController;
+typedef struct _PhotosTrackerOverviewControllerClass PhotosTrackerOverviewControllerClass;
+
+struct _PhotosTrackerOverviewController
+{
+ PhotosTrackerController parent_instance;
+};
+
+struct _PhotosTrackerOverviewControllerClass
+{
+ PhotosTrackerControllerClass parent_class;
+};
+
+GType photos_tracker_overview_controller_get_type (void) G_GNUC_CONST;
+
+PhotosTrackerController *photos_tracker_overview_controller_new (void);
+
+G_END_DECLS
+
+#endif /* PHOTOS_TRACKER_OVERVIEW_CONTROLLER_H */
diff --git a/src/photos-view-container.c b/src/photos-view-container.c
index 8bf2312..90285cd 100644
--- a/src/photos-view-container.c
+++ b/src/photos-view-container.c
@@ -30,7 +30,7 @@
#include "photos-load-more-button.h"
#include "photos-mode-controller.h"
#include "photos-selection-controller.h"
-#include "photos-tracker-controller.h"
+#include "photos-tracker-overview-controller.h"
#include "photos-utils.h"
#include "photos-view-container.h"
#include "photos-view-model.h"
@@ -300,7 +300,7 @@ photos_view_container_init (PhotosViewContainer *self)
G_CALLBACK (photos_view_container_window_mode_changed),
self);
- priv->trk_cntrlr = photos_tracker_controller_new ();
+ priv->trk_cntrlr = photos_tracker_overview_controller_new ();
g_signal_connect (priv->trk_cntrlr,
"query-status-changed",
G_CALLBACK (photos_view_container_query_status_changed),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]