diff -r 594d59766373 -r 7d48bed6ce0c cbs/cbsui/src/cbsuiviewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/cbsui/src/cbsuiviewmanager.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,193 @@ +/* +* 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 +#include +#include +#include + +#include "cbsuiviewmanager.h" +#include "cbsuitopiclistview.h" +#include "cbsuitopicview.h" +#include "mcbs.h" +#include "cbslog.h" + +const char *CBS_APP_XML = ":/xml/cbs_app.docml"; +const char *CBS_TOPIC_VIEW_XML = ":/xml/cbs_topic_view.docml"; +const char *CBS_MAIN_VIEW = "t:view"; +const char *CBS_TOPIC_VIEW ="t:view2"; + +// ======== MEMBER FUNCTIONS ================================================== +// ---------------------------------------------------------------------------- +// CbsUiViewManager::CbsUiViewManager +// ---------------------------------------------------------------------------- +// +CbsUiViewManager::CbsUiViewManager(HbMainWindow *window, MCbs &server) + :mMainWindow(window), + mServer(server), + mTopicListView(NULL), + mTopicView(NULL), + mLoader(NULL), + mSoftKeyBackAction(NULL), + mSoftKeyExitAction(NULL) +{ + LOG(NORMAL,"CBSUI: CbsUiViewManager::CbsUiViewManager IN"); + + // SYMBIAN CODE: + //mTopicMonitor = CCbsUiTopicListMonitor::NewL(mServer); not in use at the moment + + bool ok = false; + mLoader = new CbsUiDocumentLoader(); + // ownership of the objects are transferred to caller + mObjects = mLoader->load(CBS_APP_XML, &ok); + if (ok) { + activateMainView(); + } else { + LOG(NORMAL,"CBSUI: CbsUiViewManager::CbsUiViewManager DocML failure!"); + } + + LOG(NORMAL,"CBSUI: CbsUiViewManager::CbsUiViewManager OUT"); +} + +// ---------------------------------------------------------------------------- +// CbsUiViewManager::~CbsUiViewManager +// ---------------------------------------------------------------------------- +// +CbsUiViewManager::~CbsUiViewManager() +{ + LOG(NORMAL,"CBSUI: CbsUiViewManager::~CbsUiViewManager IN"); + //delete mTopicMonitor; not in use at the moment + delete mLoader; + // delete all objects created from DocML. + while (!mObjects.isEmpty()) { + LOG(NORMAL,"CBSUI: CbsUiViewManager::~CbsUiViewManager deleting..."); + delete mObjects.takeFirst(); + } + LOG(NORMAL,"CBSUI: CbsUiViewManager::~CbsUiViewManager OUT"); +} + +// ---------------------------------------------------------------------------- +// CbsUiViewManager::activateTopicView +// ---------------------------------------------------------------------------- +// +void CbsUiViewManager::activateTopicView(TCbsTopicNumber topicNumber) +{ + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateTopicView IN"); + if (!mTopicView) { + bool ok = false; + // ownership of the objects are transferred to caller + mObjects += mLoader->load(CBS_TOPIC_VIEW_XML, &ok); + if (ok) { + mTopicView = + qobject_cast(mLoader->findWidget(CBS_TOPIC_VIEW)); + mTopicView->init(mServer, *this); + } else { + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateTopicView DocML failure!"); + } + } + + if (mTopicView != mMainWindow->currentView()) { + if (!mSoftKeyBackAction) { + mSoftKeyBackAction = new HbAction(Hb::BackAction,mTopicView); + LOG2(NORMAL,"CBSUI: CbsUiViewManager::activateTopicView \ + mSoftKeyBackAction==%d", mSoftKeyBackAction); + } + + mTopicView->reloadMessages(topicNumber); + mMainWindow->addSoftKeyAction(Hb::SecondarySoftKey,mSoftKeyBackAction); + bool ret = connect(mSoftKeyBackAction, SIGNAL(triggered()), + this, SLOT(activateMainView())); + HbView* view = mMainWindow->currentView(); + mMainWindow->removeView(view); + // just temp implement + mTopicListView = 0; + mMainWindow->addView(mTopicView); + LOG2(NORMAL,"CBSUI: CbsUiViewManager::activateTopicView\ + mTopicView=%d", mTopicView); + } + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateTopicView OUT"); +} + +// ---------------------------------------------------------------------------- +// CbsUiViewManager::activateMainView +// ---------------------------------------------------------------------------- +// +void CbsUiViewManager::activateMainView() +{ + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateMainView IN"); + if (!mTopicListView) { + // First time called + mTopicListView = qobject_cast + (mLoader->findWidget(CBS_MAIN_VIEW)); + mTopicListView->init(mServer, *this); + // Connect signal to change view + bool ret = connect(mTopicListView, + SIGNAL(topicSelected(TCbsTopicNumber)), this, + SLOT(activateTopicView(TCbsTopicNumber))); + LOG2(NORMAL,"CBSUI: CbsUiViewManager::activateMainView ret=%d", ret); + } else { + HbView *view = mMainWindow->currentView(); + mMainWindow->removeView(view); + // just temp implement + mTopicView = 0; + } + + if (!mSoftKeyExitAction) { + mSoftKeyExitAction = new HbAction(Hb::QuitAction, mTopicListView); + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateMainView add quit action"); + } + if ( mSoftKeyBackAction ) { + mMainWindow->removeSoftKeyAction(Hb::SecondarySoftKey, mSoftKeyBackAction); + mSoftKeyBackAction = 0; + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateMainView remove back action"); + } + + mMainWindow->addSoftKeyAction(Hb::SecondarySoftKey,mSoftKeyExitAction); + bool ret = connect(mSoftKeyExitAction, SIGNAL(triggered()), + mMainWindow, SLOT(close())); + LOG2(NORMAL,"CBSUI: CbsUiViewManager::activateMainView connect exit=%d", ret); + mMainWindow->addView(mTopicListView); + mMainWindow->setCurrentView(mTopicListView); + LOG(NORMAL,"CBSUI: CbsUiViewManager::activateMainView OUT"); +} + +// ---------------------------------------------------------------------------- +// CbsUiDocumentLoader::createObject +// For DocML usage: +// ---------------------------------------------------------------------------- +// +QObject *CbsUiDocumentLoader::createObject( + const QString& type, const QString &name) +{ + LOG(NORMAL,"CBSUI: CbsUiViewManager::createObject IN"); + if (type == CbsUiTopicListView::staticMetaObject.className()) { + QObject *object = new CbsUiTopicListView; + object->setObjectName(name); + LOG(NORMAL,"CBSUI: CbsUiViewManager::createObject:CbsUiTopicListView OUT"); + return object; + } else if (type == CbsUiTopicView::staticMetaObject.className()) { + QObject *object = new CbsUiTopicView; + object->setObjectName(name); + LOG(NORMAL,"CBSUI: CbsUiViewManager::createObject:CbsUiTopicView OUT"); + return object; + } + LOG2(NORMAL,"CBSUI: CbsUiViewManager::createObject: \ + object name = %s",name.utf16()); + return HbDocumentLoader::createObject(type, name); +} + +// End of file