[gnome-documents/wip/rishi/split-view: 6/15] trackerController: Split it so that each view can have its own



commit f6af484293cc951d6b3cc384c4ea9afdb93b127c
Author: Debarshi Ray <debarshir gnome org>
Date:   Thu Oct 16 13:41:01 2014 +0200

    trackerController: Split it so that each view can have its own
    
    When we have multiple views, each of them would be showing different
    kinds of items, and they will be reacting differently to changes in
    search criteria. eg., the documents and collections views will always
    show only documents and collections, while the search view will show a
    mix of items depending on the current search criteria.
    
    Therefore, we need to allow each view to have its own implementation.
    
    Currently the only implementation is TrackerOverviewController, which
    is the same as the unified TrackerController that we had.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=686461

 src/application.js       |    2 +-
 src/trackerController.js |   73 +++++++++++++++++++++++++++++++--------------
 2 files changed, 51 insertions(+), 24 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index 8d3a97f..4fc61fa 100644
--- a/src/application.js
+++ b/src/application.js
@@ -474,7 +474,7 @@ const Application = new Lang.Class({
         Search.initSearch(imports.shellSearchProvider);
 
         modeController = new WindowMode.ModeController();
-        trackerController = new TrackerController.TrackerController();
+        trackerController = new TrackerController.TrackerOverviewController();
         selectionController = new Selections.SelectionController();
 
         this._actionEntries = [
diff --git a/src/trackerController.js b/src/trackerController.js
index d21553e..38e374c 100644
--- a/src/trackerController.js
+++ b/src/trackerController.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013 Red Hat, Inc.
+ * Copyright (c) 2011, 2013, 2014 Red Hat, Inc.
  *
  * Gnome Documents is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by the
@@ -111,9 +111,10 @@ const RefreshFlags = {
 const TrackerController = new Lang.Class({
     Name: 'TrackerController',
 
-    _init: function() {
+    _init: function(windowMode) {
         this._currentQuery = null;
         this._cancellable = new Gio.Cancellable();
+        this._mode = windowMode;
         this._queryQueued = false;
         this._queryQueuedFlags = RefreshFlags.NONE;
         this._querying = false;
@@ -125,22 +126,19 @@ const TrackerController = new Lang.Class({
 
         Application.sourceManager.connect('item-added', Lang.bind(this, this._onSourceAddedRemoved));
         Application.sourceManager.connect('item-removed', Lang.bind(this, this._onSourceAddedRemoved));
-        Application.sourceManager.connect('active-changed', Lang.bind(this, this._refreshForObject));
 
         Application.modeController.connect('window-mode-changed', Lang.bind(this,
             function(object, newMode) {
-                if (this._refreshPending && newMode == WindowMode.WindowMode.OVERVIEW)
+                if (this._refreshPending && newMode == this._mode)
                     this._refreshForSource();
             }));
 
-        Application.offsetController.connect('offset-changed', Lang.bind(this, this._performCurrentQuery));
-
-        Application.documentManager.connect('active-collection-changed', Lang.bind(this, 
this._refreshForObject));
-        Application.searchController.connect('search-string-changed', Lang.bind(this, 
this._refreshForObject));
-        Application.searchCategoryManager.connect('active-changed', Lang.bind(this, this._refreshForObject));
-        Application.searchTypeManager.connect('active-changed', Lang.bind(this, this._refreshForObject));
+        this._offsetController = this.getOffsetController();
+        this._offsetController.connect('offset-changed', Lang.bind(this, this._performCurrentQuery));
+    },
 
-        Application.searchMatchManager.connect('active-changed', Lang.bind(this, 
this._onSearchMatchChanged));
+    getOffsetController: function() {
+        log('Error: TrackerController implementations must override getOffsetController');
     },
 
     _setQueryStatus: function(status) {
@@ -159,6 +157,10 @@ const TrackerController = new Lang.Class({
         this.emit('query-status-changed', this._querying);
     },
 
+    getQuery: function() {
+        log('Error: TrackerController implementations must override getQuery');
+    },
+
     getQueryStatus: function() {
         return this._querying;
     },
@@ -177,7 +179,7 @@ const TrackerController = new Lang.Class({
         if (exception)
             this._onQueryError(exception);
         else
-            Application.offsetController.resetItemCount();
+            this._offsetController.resetItemCount();
 
         if (this._queryQueued) {
             this._queryQueued = false;
@@ -220,7 +222,7 @@ const TrackerController = new Lang.Class({
     },
 
     _performCurrentQuery: function() {
-        this._currentQuery = Application.queryBuilder.buildGlobalQuery();
+        this._currentQuery = this.getQuery();
         this._cancellable.reset();
 
         Application.connectionQueue.add(this._currentQuery.sparql,
@@ -231,7 +233,7 @@ const TrackerController = new Lang.Class({
         this._isStarted = true;
 
         if (flags & RefreshFlags.RESET_OFFSET)
-            Application.offsetController.resetOffset();
+            this._offsetController.resetOffset();
 
         if (this.getQueryStatus()) {
             this._cancellable.cancel();
@@ -245,7 +247,7 @@ const TrackerController = new Lang.Class({
         this._performCurrentQuery();
     },
 
-    _refreshForObject: function(_object, _item) {
+    refreshForObject: function(_object, _item) {
         this._refreshInternal(RefreshFlags.RESET_OFFSET);
     },
 
@@ -261,17 +263,10 @@ const TrackerController = new Lang.Class({
         this._refreshPending = false;
     },
 
-    _onSearchMatchChanged: function() {
-        // when the "match" search setting changes, refresh only if
-        // the search string is not empty
-        if (Application.searchController.getString() != '')
-            this._refreshInternal(RefreshFlags.RESET_OFFSET);
-    },
-
     _onSourceAddedRemoved: function(manager, item) {
         let mode = Application.modeController.getWindowMode();
 
-        if (mode == WindowMode.WindowMode.OVERVIEW)
+        if (mode == this._mode)
             this._refreshForSource();
         else
             this._refreshPending = true;
@@ -285,3 +280,35 @@ const TrackerController = new Lang.Class({
     }
 });
 Signals.addSignalMethods(TrackerController.prototype);
+
+const TrackerOverviewController = new Lang.Class({
+    Name: 'TrackerOverviewController',
+    Extends: TrackerController,
+
+    _init: function() {
+        this.parent(WindowMode.WindowMode.OVERVIEW);
+
+        Application.sourceManager.connect('active-changed', Lang.bind(this, this.refreshForObject));
+        Application.documentManager.connect('active-collection-changed', Lang.bind(this, 
this.refreshForObject));
+        Application.searchController.connect('search-string-changed', Lang.bind(this, 
this.refreshForObject));
+        Application.searchCategoryManager.connect('active-changed', Lang.bind(this, this.refreshForObject));
+        Application.searchTypeManager.connect('active-changed', Lang.bind(this, this.refreshForObject));
+
+        Application.searchMatchManager.connect('active-changed', Lang.bind(this, 
this._onSearchMatchChanged));
+    },
+
+    _onSearchMatchChanged: function() {
+        // when the "match" search setting changes, refresh only if
+        // the search string is not empty
+        if (Application.searchController.getString() != '')
+            this.refreshForObject();
+    },
+
+    getOffsetController: function() {
+        return Application.offsetController;
+    },
+
+    getQuery: function() {
+        return Application.queryBuilder.buildGlobalQuery();
+    },
+});


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