homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuviewbuilder.cpp
changeset 35 f9ce957a272c
child 39 4e8ebe173323
--- /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 <QDebug>
+#include <QGraphicsWidget>
+#include <HbAction>
+#include <HbGroupBox>
+#include <HbListView>
+#include <HbLineEdit>
+#include <HbSearchPanel>
+#include <HbToolBar>
+#include <HbView>
+#include <HbWidget>
+
+#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<HbView *>(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<HbListView *>(
+               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<HbGroupBox *>(
+               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<HbSearchPanel *>(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<HbAction *>(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<HbAction *>(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<HbAction *>(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<HbAction *>(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<HbToolBar *>(
+               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 &sectionName)
+{
+    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<QGraphicsWidget *>(obj);
+
+        if (widget != NULL) {
+
+            HbLineEdit *const lineEdit = qobject_cast<HbLineEdit *>(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;
+}