--- /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;
+ }
+
+}
+