[gnome-photos/wip/search: 27/27] Add a new mode for search



commit ca59e61729b65931fc1ad00001a71692628ff336
Author: Debarshi Ray <debarshir gnome org>
Date:   Sat Jan 25 11:19:58 2014 +0100

    Add a new mode for search

 src/photos-embed.c            |   83 ++++++++++++++++++++++++++++++++++++++++-
 src/photos-load-more-button.c |    7 +++-
 src/photos-mode-controller.h  |    5 +-
 src/photos-view-container.c   |   10 ++++-
 src/photos-view-model.c       |    5 ++
 5 files changed, 104 insertions(+), 6 deletions(-)
---
diff --git a/src/photos-embed.c b/src/photos-embed.c
index e159573..4fd8de6 100644
--- a/src/photos-embed.c
+++ b/src/photos-embed.c
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012, 2013 Red Hat, Inc.
+ * Copyright © 2012, 2013, 2014 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
@@ -40,8 +40,11 @@
 #include "photos-notification-manager.h"
 #include "photos-offset-overview-controller.h"
 #include "photos-preview-view.h"
+#include "photos-search-controller.h"
 #include "photos-selection-toolbar.h"
 #include "photos-spinner-box.h"
+#include "photos-source.h"
+#include "photos-source-manager.h"
 #include "photos-tracker-change-monitor.h"
 #include "photos-tracker-overview-controller.h"
 #include "photos-view-container.h"
@@ -58,16 +61,20 @@ struct _PhotosEmbedPrivate
   GtkWidget *ntfctn_mngr;
   GtkWidget *overview;
   GtkWidget *preview;
+  GtkWidget *search;
   GtkWidget *selection_toolbar;
   GtkWidget *spinner_box;
   GtkWidget *stack;
   GtkWidget *stack_overlay;
   GtkWidget *toolbar;
   PhotosBaseManager *item_mngr;
+  PhotosBaseManager *src_mngr;
   PhotosModeController *mode_cntrlr;
   PhotosOffsetController *offset_cntrlr;
+  PhotosSearchController *srch_cntrlr;
   PhotosTrackerChangeMonitor *monitor;
   PhotosTrackerController *trk_ovrvw_cntrlr;
+  PhotosWindowMode old_mode;
   guint load_show_id;
 };
 
@@ -242,6 +249,10 @@ photos_embed_restore_last_page (PhotosEmbed *self)
       page = "preview";
       break;
 
+    case PHOTOS_WINDOW_MODE_SEARCH:
+      page = "search";
+      break;
+
     default:
       g_assert_not_reached ();
       break;
@@ -372,6 +383,24 @@ photos_embed_prepare_for_overview (PhotosEmbed *self)
 
 
 static void
+photos_embed_prepare_for_search (PhotosEmbed *self)
+{
+  PhotosEmbedPrivate *priv = self->priv;
+
+  photos_base_manager_set_active_object (priv->item_mngr, NULL);
+
+  if (priv->loader_cancellable != NULL)
+    {
+      g_cancellable_cancel (priv->loader_cancellable);
+      g_clear_object (&priv->loader_cancellable);
+    }
+
+  photos_spinner_box_stop (PHOTOS_SPINNER_BOX (priv->spinner_box));
+  gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), "search");
+}
+
+
+static void
 photos_embed_set_error (PhotosEmbed *self, const gchar *primary, const gchar *secondary)
 {
   PhotosEmbedPrivate *priv = self->priv;
@@ -407,6 +436,40 @@ photos_embed_query_status_changed (PhotosEmbed *self, gboolean querying)
 
 
 static void
+photos_embed_search_string_changed (PhotosEmbed *self, const gchar *str)
+{
+  PhotosEmbedPrivate *priv = self->priv;
+  PhotosWindowMode mode;
+
+  if (str == NULL || str [0] == '\0')
+    mode = priv->old_mode;
+  else
+    mode = PHOTOS_WINDOW_MODE_SEARCH;
+
+  photos_mode_controller_set_window_mode (priv->mode_cntrlr, mode);
+}
+
+
+static void
+photos_embed_source_active_changed (PhotosEmbed *self, GObject *object)
+{
+  PhotosEmbedPrivate *priv = self->priv;
+  PhotosWindowMode mode;
+  gchar *id;
+
+  g_object_get (object, "id", &id, NULL);
+
+  if (g_strcmp0 (id, PHOTOS_SOURCE_STOCK_ALL) == 0)
+    mode = priv->old_mode;
+  else
+    mode = PHOTOS_WINDOW_MODE_SEARCH;
+
+  photos_mode_controller_set_window_mode (priv->mode_cntrlr, mode);
+  g_free (id);
+}
+
+
+static void
 photos_embed_window_mode_changed (PhotosModeController *mode_cntrlr,
                                   PhotosWindowMode mode,
                                   PhotosWindowMode old_mode,
@@ -414,12 +477,16 @@ photos_embed_window_mode_changed (PhotosModeController *mode_cntrlr,
 {
   PhotosEmbed *self = PHOTOS_EMBED (user_data);
 
+  self->priv->old_mode = old_mode;
+
   if (mode == PHOTOS_WINDOW_MODE_COLLECTIONS)
     photos_embed_prepare_for_collections (self);
   else if (mode == PHOTOS_WINDOW_MODE_FAVORITES)
     photos_embed_prepare_for_favorites (self);
   else if (mode == PHOTOS_WINDOW_MODE_OVERVIEW)
     photos_embed_prepare_for_overview (self);
+  else if (mode == PHOTOS_WINDOW_MODE_SEARCH)
+    photos_embed_prepare_for_search (self);
   else
     photos_embed_prepare_for_preview (self);
 }
@@ -438,6 +505,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->srch_cntrlr);
   g_clear_object (&priv->trk_ovrvw_cntrlr);
 
   /* GdStack triggers notify::visible-child during dispose and this means that
@@ -509,6 +577,9 @@ photos_embed_init (PhotosEmbed *self)
   priv->favorites = photos_view_container_new (PHOTOS_WINDOW_MODE_FAVORITES);
   gtk_stack_add_titled (GTK_STACK (priv->stack), priv->favorites, "favorites", _("Favorites"));
 
+  priv->search = photos_view_container_new (PHOTOS_WINDOW_MODE_SEARCH);
+  gtk_stack_add_named (GTK_STACK (priv->stack), priv->search, "search");
+
   priv->preview = photos_preview_view_new (GTK_OVERLAY (priv->stack_overlay));
   gtk_stack_add_named (GTK_STACK (priv->stack), priv->preview, "preview");
 
@@ -529,6 +600,7 @@ photos_embed_init (PhotosEmbed *self)
                            self, G_CONNECT_SWAPPED);
 
   priv->mode_cntrlr = photos_mode_controller_dup_singleton ();
+  priv->old_mode = PHOTOS_WINDOW_MODE_NONE;
   g_signal_connect (priv->mode_cntrlr,
                     "window-mode-changed",
                     G_CALLBACK (photos_embed_window_mode_changed),
@@ -551,9 +623,18 @@ photos_embed_init (PhotosEmbed *self)
   priv->item_mngr = photos_item_manager_dup_singleton ();
   g_signal_connect (priv->item_mngr, "active-changed", G_CALLBACK (photos_embed_active_changed), self);
 
+  priv->src_mngr = photos_source_manager_dup_singleton ();
+  g_signal_connect_swapped (priv->src_mngr, "active-changed", G_CALLBACK 
(photos_embed_source_active_changed), self);
+
   querying = photos_tracker_controller_get_query_status (priv->trk_ovrvw_cntrlr);
   photos_embed_query_status_changed (self, querying);
 
+  priv->srch_cntrlr = photos_search_controller_dup_singleton ();
+  g_signal_connect_swapped (priv->srch_cntrlr,
+                            "search-string-changed",
+                            G_CALLBACK (photos_embed_search_string_changed),
+                            self);
+
   priv->monitor = photos_tracker_change_monitor_dup_singleton (NULL, NULL);
 
   gtk_widget_show (GTK_WIDGET (self));
diff --git a/src/photos-load-more-button.c b/src/photos-load-more-button.c
index 365856e..fe38d37 100644
--- a/src/photos-load-more-button.c
+++ b/src/photos-load-more-button.c
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012, 2013 Red Hat, Inc.
+ * Copyright © 2012, 2013, 2014 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
@@ -34,6 +34,7 @@
 #include "photos-offset-collections-controller.h"
 #include "photos-offset-favorites-controller.h"
 #include "photos-offset-overview-controller.h"
+#include "photos-offset-search-controller.h"
 
 
 struct _PhotosLoadMoreButtonPrivate
@@ -113,6 +114,10 @@ photos_load_more_button_constructed (GObject *object)
       priv->offset_cntrlr = photos_offset_overview_controller_dup_singleton ();
       break;
 
+    case PHOTOS_WINDOW_MODE_SEARCH:
+      priv->offset_cntrlr = photos_offset_search_controller_dup_singleton ();
+      break;
+
     default:
       g_assert_not_reached ();
       break;
diff --git a/src/photos-mode-controller.h b/src/photos-mode-controller.h
index a86913e..b072fb1 100644
--- a/src/photos-mode-controller.h
+++ b/src/photos-mode-controller.h
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012, 2013 Red Hat, Inc.
+ * Copyright © 2012, 2013, 2014 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
@@ -57,7 +57,8 @@ typedef enum
   PHOTOS_WINDOW_MODE_COLLECTIONS,
   PHOTOS_WINDOW_MODE_FAVORITES,
   PHOTOS_WINDOW_MODE_OVERVIEW,
-  PHOTOS_WINDOW_MODE_PREVIEW
+  PHOTOS_WINDOW_MODE_PREVIEW,
+  PHOTOS_WINDOW_MODE_SEARCH
 } PhotosWindowMode;
 
 typedef struct _PhotosModeController        PhotosModeController;
diff --git a/src/photos-view-container.c b/src/photos-view-container.c
index c398c91..cff092a 100644
--- a/src/photos-view-container.c
+++ b/src/photos-view-container.c
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012, 2013 Red Hat, Inc.
+ * Copyright © 2012, 2013, 2014 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
@@ -35,6 +35,7 @@
 #include "photos-tracker-collections-controller.h"
 #include "photos-tracker-favorites-controller.h"
 #include "photos-tracker-overview-controller.h"
+#include "photos-tracker-search-controller.h"
 #include "photos-utils.h"
 #include "photos-view-container.h"
 #include "photos-view-model.h"
@@ -234,7 +235,8 @@ photos_view_container_window_mode_changed (PhotosModeController *mode_cntrlr,
 
   if (mode == PHOTOS_WINDOW_MODE_COLLECTIONS
       || mode == PHOTOS_WINDOW_MODE_FAVORITES
-      || mode == PHOTOS_WINDOW_MODE_OVERVIEW)
+      || mode == PHOTOS_WINDOW_MODE_OVERVIEW
+      || mode == PHOTOS_WINDOW_MODE_SEARCH)
     photos_view_container_connect_view (self);
 }
 
@@ -305,6 +307,10 @@ photos_view_container_constructed (GObject *object)
       priv->trk_cntrlr = photos_tracker_overview_controller_dup_singleton ();
       break;
 
+    case PHOTOS_WINDOW_MODE_SEARCH:
+      priv->trk_cntrlr = photos_tracker_search_controller_dup_singleton ();
+      break;
+
     default:
       g_assert_not_reached ();
       break;
diff --git a/src/photos-view-model.c b/src/photos-view-model.c
index 59db41f..c9a3a4a 100644
--- a/src/photos-view-model.c
+++ b/src/photos-view-model.c
@@ -31,6 +31,7 @@
 #include "photos-offset-collections-controller.h"
 #include "photos-offset-favorites-controller.h"
 #include "photos-offset-overview-controller.h"
+#include "photos-offset-search-controller.h"
 #include "photos-view-model.h"
 
 
@@ -302,6 +303,10 @@ photos_view_model_constructed (GObject *object)
       priv->offset_cntrlr = photos_offset_overview_controller_dup_singleton ();
       break;
 
+    case PHOTOS_WINDOW_MODE_SEARCH:
+      priv->offset_cntrlr = photos_offset_search_controller_dup_singleton ();
+      break;
+
     default:
       g_assert_not_reached ();
       break;


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