diff -r c743ef5928ba -r f9ce957a272c homescreenapp/hsdomainmodel/src/hsscene.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsdomainmodel/src/hsscene.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,234 @@ +/* +* Copyright (c) 2009 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 "hsscene.h" +#include "hsscene_p.h" +#include "hsscenedata.h" +#include "hspage.h" +#include "hspagedata.h" +#include "hswidgethost.h" +#include "hsdatabase.h" +#include "hswallpaper.h" +#ifndef Q_OS_SYMBIAN +#include "hsipcconnectiondispatcher.h" +#endif + +HsScenePrivate::HsScenePrivate() + : mDatabaseId(-1), + mIsOnline(true), + mWallpaper(0), + mActivePage(0), + mActiveWidget(0) +#ifndef Q_OS_SYMBIAN + ,mIpcConnectionDispatcher(0) +#endif +{ + mWallpaper = new HsWallpaper; +} + +HsScenePrivate::~HsScenePrivate() +{ + delete mWallpaper; + qDeleteAll(mPages); +} + +HsScene::~HsScene() +{ +} + +int HsScene::databaseId() const +{ + return mD->mDatabaseId; +} + +bool HsScene::load() +{ + HsDatabase *db = HsDatabase::instance(); + Q_ASSERT(db); + + HsSceneData sceneData; + if (!db->scene(sceneData)) { + return false; + } + + if (sceneData.portraitWallpaper().isEmpty()) { + mD->mWallpaper->setImagesById(); + } else { + mD->mWallpaper->setImagesByPaths( + sceneData.landscapeWallpaper(), + sceneData.portraitWallpaper()); + } + + QList pageDatas; + if (!db->pages(pageDatas) || pageDatas.empty()) { + return false; + } + + HsPage *page = 0; + foreach (HsPageData pageData, pageDatas) { + page = new HsPage; + page->setDatabaseId(pageData.id()); + if (page->load()) { + mD->mPages << page; + } else { + qDebug() << "HsScene: Page loading failed."; + // TODO + } + } + + int defaultPageIndex = sceneData.defaultPage().index(); + if(defaultPageIndex > -1){ + mD->mActivePage = mD->mPages[defaultPageIndex]; + mD->mActivePage->setRemovable(false); + } +#ifndef Q_OS_SYMBIAN + mD->mIpcConnectionDispatcher = new HsIpcConnectionDispatcher("hs_content_publish"); + mD->mIpcConnectionDispatcher->setParent(this); + return mD->mIpcConnectionDispatcher->start(); +#endif +} + +HsWallpaper *HsScene::wallpaper() const +{ + return mD->mWallpaper; +} + +QList HsScene::pages() const +{ + return mD->mPages; +} + +bool HsScene::addPage(HsPage *page) +{ + if (!page) { + return false; + } + + if (mD->mPages.contains(page)) { + return true; + } + + HsDatabase *db = HsDatabase::instance(); + + HsPageData pageData; + if (!db->page(page->databaseId(), pageData, false)) { + return false; + } + int index = mD->mPages.count(); + if (pageData.index() != index) { + pageData.setIndex(index); + if (!db->updatePage(pageData, false)) { + return false; + } + } + + mD->mPages << page; + return true; +} + +bool HsScene::removePage(HsPage *page) +{ + if (!page) { + return false; + } + return mD->mPages.removeOne(page); +} + +bool HsScene::setActivePage(HsPage *page) +{ + if (!page) { + return false; + } + + if (!mD->mPages.contains(page)) { + return false; + } + + mD->mActivePage = page; + return true; +} + +bool HsScene::setActivePageIndex(int index) +{ + if (index < 0 || mD->mPages.count() <= index) { + return false; + } + return setActivePage(mD->mPages[index]); +} + +HsPage *HsScene::activePage() const +{ + return mD->mActivePage; +} + +int HsScene::activePageIndex() const +{ + return mD->mPages.indexOf(mD->mActivePage); +} + +void HsScene::setActiveWidget(HsWidgetHost *widget) +{ + mD->mActiveWidget = widget; +} + +HsWidgetHost *HsScene::activeWidget() const +{ + return mD->mActiveWidget; +} +/*! + Toggle application online state. Defaults + to true. +*/ +void HsScene::setOnline(bool online) +{ + mD->mIsOnline = online; + foreach (HsPage *page, mD->mPages) { + page->setOnline(online); + } +} + +bool HsScene::isOnline()const +{ + return mD->mIsOnline; +} + +HsScene *HsScene::instance() +{ + if (mInstance.isNull()) { + mInstance.reset(new HsScene); + } + return mInstance.data(); +} + +Qt::Orientation HsScene::orientation() +{ + return hbInstance->orientation(); +} + +HbMainWindow *HsScene::mainWindow() +{ + return hbInstance->allMainWindows().first(); +} + +HsScene::HsScene(QObject *parent) + : QObject(parent) +{ + mD.reset(new HsScenePrivate); +} + +QScopedPointer HsScene::mInstance(0);