homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsinstalledappsstate.cpp
branchRCL_3
changeset 82 5f0182e07bfb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsinstalledappsstate.cpp	Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,261 @@
+/*
+ * 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 All Applications state.
+ *
+ */
+
+#include <QStateMachine>
+#include <HbView>
+#include <HbGroupBox>
+#include <HbListView>
+#include <HbAction>
+#include <HbMenu>
+#include <HbAbstractViewItem>
+
+#include <cadefs.h>
+#include <caentry.h>
+
+#include "hsapp_defs.h"
+#include "hsmenueventfactory.h"
+#include "hsmenuitemmodel.h"
+#include "hsinstalledappsstate.h"
+#include "hsaddappstocollectionstate.h"
+#include "hsmenumodetransition.h"
+
+/*!
+ \class HsInstalledAppsState
+ \ingroup group_hsapplibrarystateplugin
+ \brief Manages displaying installed applications
+ Displays all installed packages present on the device.
+ \see StateMachine
+ \lib ?library
+ */
+
+/*!
+ Constructor.
+ \param menuViewBuilder Menu view builder.
+ \param mainWindow main window wrapper.
+ \param parent Owner.
+ */
+HsInstalledAppsState::HsInstalledAppsState(HsMenuViewBuilder &menuViewBuilder,
+        HsMainWindow &mainWindow,
+        QState *parent):
+    HsBaseViewState(mainWindow, parent),
+            mSortAttribute(Hs::OldestOnTopHsSortAttribute)
+{
+    initialize(menuViewBuilder, HsInstalledAppsContext);
+    construct();
+}
+
+/*!
+ Constructor part.
+ */
+void HsInstalledAppsState::construct()
+{
+    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::construct");
+
+    const QString parentName =
+        parent() != 0 ? parent()->objectName() : QString("");
+    setObjectName(parentName + "/installedappsstate");
+
+    connect(mBackKeyAction, SIGNAL(triggered()), SLOT(openAppLibrary()));
+
+    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::construct");
+}
+
+/*!
+ Method seting menu options.
+ */
+void HsInstalledAppsState::setMenuOptions()
+{
+    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::setMenuOptions");
+
+    mViewOptions->clearActions();
+
+    mViewOptions->addAction(hbTrId("txt_applib_opt_task_switcher"),
+                        this, SLOT(openTaskSwitcher()));
+    mViewOptions->addAction(hbTrId("txt_applib_opt_installation_log"),
+                        this, SLOT(openInstallationLog()));
+    if (mModel->rowCount() > 0) {
+        HbMenu *sortMenu = mViewOptions->addMenu(
+                               hbTrId("txt_applib_opt_sort_by"));
+        //Grouped options are exclusive by default.
+        QActionGroup *sortGroup = new QActionGroup(this);
+        sortGroup->addAction(
+            sortMenu->addAction(
+                hbTrId("txt_applib_opt_sort_by_sub_latest_on_top"),
+                this,
+                SLOT(latestOnTopMenuAction())));
+        sortGroup->addAction(
+            sortMenu->addAction(
+                hbTrId("txt_applib_opt_sort_by_sub_oldest_on_top"),
+                this,
+                SLOT(oldestOnTopMenuAction())));
+        foreach(QAction *action, sortMenu->actions()) {
+            action->setCheckable(true);
+        }
+        static const int defaultSortingPosition = 0;
+        if(mSortAttribute == Hs::LatestOnTopHsSortAttribute)
+            {
+            sortGroup->actions().at(defaultSortingPosition + 1)->setChecked(true);
+            }
+        else {
+            sortGroup->actions().at(defaultSortingPosition)->setChecked(true);
+        }
+    }
+    mMenuView->view()->setMenu(mViewOptions);
+    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::setMenuOptions");
+}
+
+/*!
+ Method seting context menu options.
+ \param item the context menu is built for.
+ \param flags of the \item.
+ */
+void HsInstalledAppsState::setContextMenuOptions(HbAbstractViewItem *item, EntryFlags flags)
+{
+    HbAction *uninstallAction = mContextMenu->addAction(
+                                hbTrId("txt_common_menu_delete"));
+    HbAction *appDetailsAction(NULL);
+    uninstallAction->setData(Hs::UninstallContextAction);
+
+    QSharedPointer<const CaEntry> entry = mModel->entry(item->modelIndex());
+
+    if (!(entry->attribute(Hs::componentIdAttributeName).isEmpty()) &&
+            (flags & RemovableEntryFlag) ) {
+        appDetailsAction = mContextMenu->addAction(hbTrId(
+                                                "txt_common_menu_details"));
+        appDetailsAction->setData(Hs::AppDetailsContextAction);
+    }
+}
+
+
+/*!
+ Destructor.
+ */
+HsInstalledAppsState::~HsInstalledAppsState()
+{
+    mMenuView->inactivate();
+    mMenuView->view()->setNavigationAction(NULL);
+}
+
+/*!
+ Slot connected to entered() signal.
+ Invoked when a state is entered.
+ */
+void HsInstalledAppsState::stateEntered()
+{
+    qDebug("AllAppsState::stateEntered()");
+    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::stateEntered");
+
+    mMenuView->viewLabel()->setHeading(
+            hbTrId("txt_applib_subtitle_installed"));
+
+    if (!mModel) {
+        mModel
+            = HsMenuService::getInstalledModel(mSortAttribute);
+    }
+
+    if (mModel->rowCount() == 0) {
+        mMenuView->reset(HsEmptyLabelContext);
+    }
+    else {
+		mMenuView->reset(HsItemViewContext);
+        mMenuView->setModel(mModel);
+        mMenuView->listView()->scrollTo(
+            mModel->index(0));
+    }
+    
+    setMenuOptions();
+
+    connect(mMenuView.data(),
+            SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
+            SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
+
+    connect(mModel, SIGNAL(empty(bool)),this,
+            SLOT(setEmptyLabelVisibility(bool)));
+
+    HsBaseViewState::stateEntered();
+
+    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::stateEntered");
+}
+
+/*!
+ Slot invoked when a state is exited.
+ */
+void HsInstalledAppsState::stateExited()
+{
+    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::stateExited");
+
+    disconnect(mModel, SIGNAL(empty(bool)),this,
+               SLOT(setEmptyLabelVisibility(bool)));
+
+    disconnect(mMenuView.data(),
+            SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), this,
+            SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
+
+    HsBaseViewState::stateExited();
+
+    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::stateExited");
+    qDebug("AllAppsState::stateExited()");
+}
+
+/*!
+ Handles button visibility.
+ \param visibility indicates whether show or not to show 'empty' label.
+ */
+void HsInstalledAppsState::setEmptyLabelVisibility(bool visibility)
+{
+    if(visibility){
+        mMenuView->reset(HsEmptyLabelContext);
+    } else {
+        mMenuView->reset(HsItemViewContext);
+        mMenuView->setModel(mModel);
+    }
+    setMenuOptions();
+    mMenuView->activate();
+}
+
+/*!
+ Open installation log.
+ */
+void HsInstalledAppsState::openInstallationLog()
+{
+    machine()->postEvent(
+        HsMenuEventFactory::createInstallationLogEvent());
+}
+
+/*!
+  A Slot called when an action for sorting (latest
+  on top) is invoked for Installed.
+ */
+void HsInstalledAppsState::latestOnTopMenuAction()
+{
+    // as we geting already reversed list from query
+    // we set it to OldestOnTopHsSortAttribute
+    mSortAttribute = Hs::OldestOnTopHsSortAttribute;
+    mModel->setSort(mSortAttribute);
+}
+
+/*!
+  A Slot called when an action for sorting (oldest
+  on top) is invoked for Installed.
+ */
+void HsInstalledAppsState::oldestOnTopMenuAction()
+{
+    // as we geting already reversed list from query
+    // we set it to LatestOnTopHsSortAttribute
+    mSortAttribute = Hs::LatestOnTopHsSortAttribute;
+    mModel->setSort(mSortAttribute);
+}