diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuviewbuilder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuviewbuilder.cpp Tue Aug 31 15:06:34 2010 +0300 @@ -0,0 +1,343 @@ +/* + * 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: Menu View Builder + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hsmenuviewbuilder.h" +#include "hsmenustates_global.h" + +static const char* DOCUMENT_BASE_NAME_MAP + [InvalidStateContext][InvalidOperationalContext] = + /*HsItemViewContext, HsButtonContext, HsEmptyLabelContext*/ +{ +/*HsAllAppsContext*/ {"listview", "listview", "listview"}, +/*HsAllCollectionsContext*/ {"listview", "listview", "listview"}, +/*HsInstalledAppsContext*/ {"labeledlistview", "labeledlistview", + "emptylabeledview"}, +/*HsCollectionContext*/ {"labeledlistview", "addcontentlabeledview", + "emptylabeledview"} +}; + +static const QString DOCUMENT_NAME_PREFIX(QLatin1String(":/xml/")); +static const QString DOCUMENT_NAME_EXT(QLatin1String(".docml")); +static const QString COMMON_OBJECTS_DOCUMENT_BASE_NAME( + QLatin1String("common_objects")); +static const QString VIEW_NAME(QLatin1String("view")); +static const QString LIST_VIEW_NAME(QLatin1String("listView")); +static const QString VIEW_LABEL_NAME(QLatin1String("label")); +static const QString ADD_CONTENT_BUTTON_NAME(QLatin1String("addContentButton")); + +/*! + \class HsMenuViewBuilder + \ingroup group_hsmenustateplugin + + \brief Menu View Builder + + Reads UI object from Application Library docml + + \sa HsMenuView +*/ + + + + +/*! + \return Pointer to the view resulting from last \a build call or NULL if + the \a build has not yet been called. + Memory ownership is not changed. + */ +HbView *HsMenuViewBuilder::currentView() +{ + HbView *const view = + qobject_cast(currentLoader()->findWidget(VIEW_NAME)); + + if (view != NULL && mStateContext != HsInstalledAppsContext) { + view->setToolBar(mToolBar); + } + return view; +} + +/*! + \return Pointer to list view resulting from last \a build call or NULL if + the \a build has not yet been called. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbListView *HsMenuViewBuilder::currentListView() +{ + HbListView *const listView = + qobject_cast( + currentLoader()->findWidget(LIST_VIEW_NAME)); + + return listView; +} + +/*! + \return Pointer to the view label resulting from last \a build call. It is + guaranteed to be not NULL if the \a build was called for the context + related to view including label. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbGroupBox *HsMenuViewBuilder::currentViewLabel() +{ + HbGroupBox *viewLabel = + qobject_cast( + currentLoader()->findWidget(VIEW_LABEL_NAME)); + + return viewLabel; +} + +/*! + \return Pointer to the 'Add content' button resulting from last + \a build call. It is + guaranteed to be not NULL if the \a build was called for the context + related to view including label. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbPushButton *HsMenuViewBuilder::currentAddContentButton() +{ + HbPushButton *pushButton = + qobject_cast(currentLoader()->findWidget( + ADD_CONTENT_BUTTON_NAME)); + return pushButton; +} + +/*! + \return Pointer to All Applications Action. Guaranteed to be not NULL. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::allAppsAction() const +{ + return qobject_cast(mCommonObjectsLoader->findObject( + ALL_APPS_ACTION_NAME)); +} + +/*! + \return Pointer to All Collections Action. Guaranteed to be not NULL. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::allCollectionsAction() const +{ + return qobject_cast(mCommonObjectsLoader->findObject( + ALL_COLLECTIONS_ACTION_NAME)); +} + +/*! + \return Pointer to Search Action. Guaranteed to be not NULL. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::searchAction() const +{ + return qobject_cast(mCommonObjectsLoader->findObject( + SEARCH_ACTION_NAME)); +} + +/*! + \return Pointer to Ovi Store Action. Guaranteed to be not NULL. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::oviStoreAction() const +{ + return qobject_cast(mCommonObjectsLoader->findObject( + OVI_STORE_ACTION_NAME)); +} + +/*! + \return Pointer to Operator Action. Guaranteed to be not NULL. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::operatorAction() const +{ + return qobject_cast(mCommonObjectsLoader->findObject( + OPERATOR_ACTION_NAME)); +} + +/*! + \return Pointer to the main view toolbar. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbToolBar *HsMenuViewBuilder::toolBar() const +{ + return mToolBar; +} + +/*! + \return Pointer to the toolbar extension. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbToolBarExtension *HsMenuViewBuilder::toolBarExtension() const +{ + return mToolBarExtension; +} + +/*! + \return Action group for \a allAppsState and \a allCollectionsState action. + */ +QActionGroup *HsMenuViewBuilder::toolBarActionGroup() const +{ + return mToolBarActionGroup; +} + +/*! + Reads docml configuration corresponding to current context. + \return Shared pointer to loader serving current context. + */ +QSharedPointer HsMenuViewBuilder::currentLoader() +{ + if (!mLoaderMap.contains(context())) { + QSharedPointer loader = + readContextConfiguration(); + mLoaderMap.insert(context(), loader); + } + + return mLoaderMap[context()]; +} + + +/*! + Loads non-context sensitive objects. + */ +HsMenuViewBuilder::HsMenuViewBuilder(): + ALL_APPS_ACTION_NAME("allAppsAction"), + ALL_COLLECTIONS_ACTION_NAME("allCollectionsAction"), + SEARCH_ACTION_NAME("searchAction"), + OVI_STORE_ACTION_NAME("oviStoreAction"), + OPERATOR_ACTION_NAME("operatorAction"), + mToolBar(new HbToolBar), + mToolBarExtension(new HbToolBarExtension), + mStateContext(HsAllAppsContext), + mOperationalContext(HsItemViewContext) +{ + mCommonObjectsLoader = parseDocument(COMMON_OBJECTS_DOCUMENT_BASE_NAME); + + mToolBar->addAction(allAppsAction()); + mToolBar->addAction(allCollectionsAction()); + mToolBar->addAction(searchAction()); + + mToolBarActionGroup = new QActionGroup(allAppsAction()); + + allAppsAction()->setActionGroup(mToolBarActionGroup); + allCollectionsAction()->setActionGroup(mToolBarActionGroup); +} + +/*! + Deletes loaded objects. + */ +HsMenuViewBuilder::~HsMenuViewBuilder() +{ + delete mToolBarExtension; + delete mToolBar; + qDeleteAll(mLoadedObjects); +} + +/*! + Parses requested docml file section and reflects its contents in the + object state. + \param documentName Identifies document to parse. + \return Document loader instance containing parsed + objects for requested \documentName. + */ +QSharedPointer HsMenuViewBuilder::parseDocument( + const QString &documentBaseName) +{ + HSMENUTEST_FUNC_ENTRY("HsMenuViewBuilder::parseDocument"); + + bool loadStatusOk = false; + + QSharedPointer loader(new HbDocumentLoader()); + + const QString documentFullName = DOCUMENT_NAME_PREFIX + + documentBaseName + + DOCUMENT_NAME_EXT; + const QObjectList loadedObjects = + loader->load(documentFullName, &loadStatusOk); + + mLoadedObjects |= loadedObjects.toSet(); + + Q_ASSERT_X(loadStatusOk, + documentFullName.toLatin1().data(), + "Error while loading docml file."); + + HSMENUTEST_FUNC_EXIT("HsMenuViewBuilder::parseDocument"); + + return loader; +} + +/*! + Sets view context. Not reflected in widgets returned by the builder + until \a build is not run. + */ +void HsMenuViewBuilder::setStateContext(HsStateContext stateContext) +{ + mStateContext = stateContext; +} + +/*! + Sets operational context. Not reflected in widgets returned by the builder + until \a build is not run. + */ +void HsMenuViewBuilder::setOperationalContext( + HsOperationalContext operationalContext) +{ + mOperationalContext = operationalContext; +} + +/*! + Reads configuration for requested context and ensures search panel and corresponding + vkb host are managed properly. + \return Document loader with objects for current context. + */ +QSharedPointer HsMenuViewBuilder::readContextConfiguration() +{ + const QLatin1String documentName( + DOCUMENT_BASE_NAME_MAP[mStateContext][mOperationalContext]); + + QSharedPointer loader = + parseDocument(QString(documentName)); + + return loader; +} + +/*! + \return Current context. + */ +HsMenuViewBuilder::Context HsMenuViewBuilder::context() const +{ + return Context(mStateContext, mOperationalContext); +}