ginebra2/ViewController.cpp
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ViewController.cpp	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "ViewController.h"
+#include <QDebug>
+
+namespace GVA {
+    
+  ViewController::ViewController()
+    : m_viewMap() {
+    m_current = m_viewMap.begin();
+  }
+
+  ViewController::~ViewController() {
+    foreach(ControllableViewBase *view, m_viewMap) {
+      delete view;
+    }
+  }
+
+  void ViewController::addView(ControllableViewBase *controllableView) {
+    assert(controllableView);
+    qDebug() << "ViewController::addView: adding " << controllableView
+             << " jsObject=" << controllableView->jsObject();
+    QString key;
+    // Set up parent/child link for javascript access to the view.
+    if(controllableView->jsObject()) {
+      // Use the view's javascript object.
+      controllableView->jsObject()->setParent(this);
+      key = controllableView->jsObject()->objectName();
+    }
+    else {
+      // Use the view itself.
+      controllableView->setParent(this);
+      key = controllableView->objectName();
+    }
+    if(key.isNull()) {
+      qWarning("ViewController::addView: missing objectName.");
+    }
+    m_viewMap.insert(key, controllableView);
+  }
+
+  QObjectList ViewController::getViews() {
+    QObjectList *result = new QObjectList;
+    foreach(ControllableViewBase *view, m_viewMap) {
+      result->append(view);
+    }
+    return *result;
+  }
+  
+  void ViewController::showCurrent() {
+      qDebug() << "ViewController::showCurrent: " << m_current.value();
+      ControllableViewBase *currentView = m_current.value();
+      if(!currentView) return;
+
+      if(!currentView->isActive()) {
+          emit currentViewChanging();
+          // Activate the current view.
+          currentView->activate();
+          currentView->show();
+
+          // Deactivate all others.
+          foreach(ControllableViewBase *view, m_viewMap) {
+              if(view && view->isActive() && view != currentView) {
+                  view->hide();
+                  view->deactivate();
+              }
+          }
+          emit currentViewChanged();
+      }
+  }
+  
+  void ViewController::showView(const QString &name) {
+      ViewMap::iterator it = m_viewMap.find(name);
+      if(it != m_viewMap.end()) {
+          m_current = it;
+          showCurrent();
+      }
+  }
+  
+  void ViewController::freezeView() {
+      if(!m_viewMap.isEmpty() ) {
+          m_current.value()->freeze();
+      }
+  }
+  
+  void ViewController::unfreezeView() {
+      if(!m_viewMap.isEmpty() ) {
+          m_current.value()->unfreeze();
+      }
+  }
+
+  void ViewController::dump() {
+    qDebug() << "ViewController::dump:"
+        << " count=" << m_viewMap.count()
+        << " current=" << m_current.value();
+    foreach(ControllableViewBase *view, m_viewMap) {
+      qDebug() << "  " << view;
+    }
+  }
+
+  void ViewController::viewChanged() {
+      emit currentViewChanged();
+  }
+  
+  ControllableViewBase* ViewController::currentView() {
+      if(!m_viewMap.isEmpty())
+          return m_current.value();
+      else
+          return NULL;
+  }
+
+}
+