diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuviewbuilder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuviewbuilder.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,330 @@ +/* + * 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 "hsmenuviewbuilder.h" +#include "hsmenustates_global.h" + +/*! + \class HsMenuViewBuilder + \ingroup group_hsmenustateplugin + + \brief Menu View Builder + + Reads UI object from Application Library docml + + \sa HsMenuView +*/ + +/*! + Sets view label visible or hidden. + \param visible When true label is set visible, invisible otherwise. + \return \a true on success, \a false otherwise. + */ +bool HsMenuViewBuilder::setLabelVisible(bool visible) +{ + bool result(true); + + if (visible != mViewOptions.testFlag(Label)) { + mViewOptions ^= ViewOptions(Label); + result = parseSection(mSections[mViewOptions]); + } + return result; +} + + +/*! + Sets search panel visible or hidden. + \param visible When true search panel is set visible, + invisible otherwise. + \return \a true on success, \a false otherwise. + */ +bool HsMenuViewBuilder::setSearchPanelVisible(bool visible) +{ + bool result(true); + + if (visible != mViewOptions.testFlag(Search)) { + mViewOptions ^= ViewOptions(Search); + result = parseSection(mSections[mViewOptions]); + + if (visible) { + HbLineEdit *const lineEdit(searchPanelLineEdit()); + + lineEdit->setText(""); + } + } + + return result; +} + +/*! + \return \a true when label is visible, \a false otherwise. + */ +bool HsMenuViewBuilder::isLabelVisible() const +{ + return mViewOptions.testFlag(Label); +} + +/*! + \return \a true when search panel is visible, \a false otherwise. + */ +bool HsMenuViewBuilder::isSearchPanelVisible() const +{ + return mViewOptions.testFlag(Search); +} + +/*! + \return pointer to the main view. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbView *HsMenuViewBuilder::view() const +{ + return qobject_cast(mDocumentLoader.findWidget(VIEW_NAME)); +} + +/*! + \return pointer to the list item view. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbListView *HsMenuViewBuilder::listView() const +{ + return qobject_cast( + mDocumentLoader.findWidget(LIST_VIEW_NAME)); +} + +/*! + \return pointer to the label. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbGroupBox *HsMenuViewBuilder::label() const +{ + return qobject_cast( + mDocumentLoader.findWidget(LABEL_NAME)); +} + +/*! + \return pointer to the searchPanel. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbSearchPanel *HsMenuViewBuilder::searchPanel() const +{ + return qobject_cast(mDocumentLoader.findWidget( + SEARCH_PANEL_NAME)); +} + +/*! + \return pointer to All Applications Action. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::allAppsAction() const +{ + return qobject_cast(mDocumentLoader.findObject( + ALL_APPS_ACTION_NAME)); +} + +/*! + \return pointer to All Collections Action. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::allCollectionsAction() const +{ + return qobject_cast(mDocumentLoader.findObject( + ALL_COLLECTIONS_ACTION_NAME)); +} + +/*! + \return pointer to Search Action. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::searchAction() const +{ + return qobject_cast(mDocumentLoader.findObject( + SEARCH_ACTION_NAME)); +} + +/*! + \return pointer to Ovi Store Action. + The pointer is valid until the HsMenuViewBuilder instance is destroyed. + Memory ownership is not changed. + */ +HbAction *HsMenuViewBuilder::oviStoreAction() const +{ + return qobject_cast(mDocumentLoader.findObject( + OVI_STORE_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 qobject_cast( + mDocumentLoader.findWidget(TOOL_BAR_NAME)); +} + +/*! + Constructor. + Makes object be initialized with with hidden but existing + search panel and view label. + */ +HsMenuViewBuilder::HsMenuViewBuilder(): + mViewOptions(0), + DOCUMENT_FILE_NAME(":/xml/applibrary.docml"), + ALL_APPS_ACTION_NAME("allAppsAction"), + ALL_COLLECTIONS_ACTION_NAME("allCollectionsAction"), + SEARCH_ACTION_NAME("searchAction"), + OVI_STORE_ACTION_NAME("oviStoreAction"), + VIEW_NAME("view"), + CONTAINER_NAME("container"), + LIST_VIEW_NAME("listView"), + TOOL_BAR_NAME("toolBar"), + SEARCH_PANEL_NAME("searchPanel"), + LABEL_NAME("label"), + LIST_VIEW_SECTION_NAME("list_view"), + LIST_LABELED_VIEW_SECTION_NAME("list_labeled_view"), + LIST_SEARCH_VIEW_SECTION_NAME("list_search_view"), + LIST_SEARCH_LABELED_VIEW_SECTION_NAME("list_search_labeled_view") +{ + buildSectionKeyMap(); + + // parse common section and the one specified by view options + bool result = parseSection("") && parseSection(mSections[mViewOptions]); + + Q_ASSERT_X(result, + "HsMenuViewBuilder::HsMenuViewBuilder()", + "construction failed"); +} + +/*! + Destructor. + Deletes list view, search panel, view label, All Applications + Action, All Collections Action, Search Action, Ovi Store Action, container + widget, main view toolbar and the main view. + + The destructor needs to be checked agains any change in related docml file. + */ +HsMenuViewBuilder::~HsMenuViewBuilder() +{ + QObjectList objectList; + + objectList << listView(); + + objectList << searchPanel(); + + objectList << label(); + + objectList << allAppsAction(); + objectList << allCollectionsAction(); + objectList << searchAction(); + objectList << mDocumentLoader.findWidget(CONTAINER_NAME); + objectList << toolBar(); + objectList << view(); + + foreach(QObject *obj, objectList) { + obj->deleteLater(); + } +} + +/*! + Parses requested docml file section and reflects its contents in the + object state. + \param sectionName Name of the section to parse. + \retval \a true on success, \a false otherwise. + */ +bool HsMenuViewBuilder::parseSection(const QString §ionName) +{ + HSMENUTEST_FUNC_ENTRY("HsMenuViewBuilder::parseSection"); + + bool loadStatusOk = false; + + QObjectList loadedObjects = mDocumentLoader.load(DOCUMENT_FILE_NAME, + sectionName, + &loadStatusOk); + + Q_ASSERT_X(loadStatusOk, + DOCUMENT_FILE_NAME.toLatin1().data(), + "Error while loading docml file."); + HSMENUTEST_FUNC_EXIT("HsMenuViewBuilder::parseSection"); + + return loadStatusOk; +} + +/*! + \retval Line edit of the searchPanel on success, 0 otherwise. + */ +HbLineEdit *HsMenuViewBuilder::searchPanelLineEdit() const +{ + HSMENUTEST_FUNC_ENTRY("HsMenuViewBuilder::searchPanelLineEdit"); + + HbLineEdit *result(0); + + foreach(QGraphicsItem *obj, searchPanel()->childItems()) { + + QGraphicsWidget *const widget = + static_cast(obj); + + if (widget != NULL) { + + HbLineEdit *const lineEdit = qobject_cast(widget); + + if (lineEdit != NULL) { + result = lineEdit; + break; + } + } + } + HSMENUTEST_FUNC_EXIT("HsMenuViewBuilder::searchPanelLineEdit"); + + return result; +} + +/*! + Sets up mapping between ViewOptions and section names. + */ +void HsMenuViewBuilder::buildSectionKeyMap() +{ + mSections[ViewOptions()] = + LIST_VIEW_SECTION_NAME; + + mSections[ViewOptions(Search)] = + LIST_SEARCH_VIEW_SECTION_NAME; + + mSections[ViewOptions(Label)] = + LIST_LABELED_VIEW_SECTION_NAME; + + mSections[ViewOptions(Label | Search)] = + LIST_SEARCH_LABELED_VIEW_SECTION_NAME; +}