homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsinstalledappsstate.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:24:59 +0300
changeset 39 4e8ebe173323
child 46 23b5d6a29cce
permissions -rw-r--r--
Revision: 201015 Kit: 201018

/*
 * 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.h>
#include <hbview.h>
#include <hblistview.h>
#include <hbaction.h>
#include <hbmenu.h>
#include <hbabstractviewitem.h>
#include <hsmenueventfactory.h>
#include <hbinstance.h>
#include <caentry.h>
#include <hbsearchpanel.h>

#include "hsmenuitemmodel.h"
#include "hsmenuview.h"
#include "cadefs.h"
#include "hsinstalledappsstate.h"
#include "hsaddappstocollectionstate.h"
#include "hsapp_defs.h"
#include "hsmenumodetransition.h"

/*!
 \class HsInstalledAppsState
 \ingroup group_hsapplibrarystateplugin
 \brief Manages displaying installed applications
 */

/*!
 Constructor.
 \param menuView menu view.
 \param parent Pwner.
 */
HsInstalledAppsState::HsInstalledAppsState(HsMenuView &menuView, QState *parent) :
    QState(parent), mMenuView(menuView), mInstalledAppsModel(0)
{
    construct();
}

/*!
 Constructor part.
 */
void HsInstalledAppsState::construct()
{
    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::construct");

    const QString parentName =
        parent() != 0 ? parent()->objectName() : QString("");
    setObjectName(parentName + "/installedappsstate");
    connect(this, SIGNAL(entered()),SLOT(stateEntered()));
    connect(this, SIGNAL(exited()),SLOT(stateExited()));

    mSecondarySoftkeyAction = new HbAction(Hb::BackAction, this);

    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::construct");
}

/*!
 Method seting menu options.
 */
void HsInstalledAppsState::setMenuOptions()
{
    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::setMenuOptions");
    HbMenu *const mOptions = new HbMenu();
    mOptions->setParent(this);

    mOptions->addAction(hbTrId("txt_applib_opt_task_switcher"),
                        this, SLOT(openTaskSwitcher()));

    mMenuView.view()->setMenu(mOptions);
    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::setMenuOptions");
}

/*!
 Destructor.
 */
HsInstalledAppsState::~HsInstalledAppsState()
{
    delete mInstalledAppsModel;
}

/*!
 Slot connected to entered() signal.
 Invoked when a state is entered.
 */
void HsInstalledAppsState::stateEntered()
{
    qDebug("AllAppsState::stateEntered()");
    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::stateEntered");

    if (!mInstalledAppsModel) {
        mInstalledAppsModel
        = HsMenuService::getInstalledModel(AscendingNameHsSortAttribute);
    }
    mMenuView.setModel(mInstalledAppsModel);
    mMenuView.scrollTo(mInstalledAppsModel->index(0));
    setMenuOptions();

    connect(&mMenuView, SIGNAL(activated(QModelIndex)),
            SLOT(listItemActivated(QModelIndex)));
    connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
            SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF)));
    connect(mSecondarySoftkeyAction, SIGNAL(triggered()),
            SLOT(backAction()));
    mMenuView.hideToolBar();
    mOldNavigationAction = mMenuView.view()->navigationAction();
    mMenuView.view()->setNavigationAction(mSecondarySoftkeyAction);
    mMenuView.setLabelVisible(true);
    mMenuView.setLabel(hbTrId("txt_applib_subtitle_installed"));
    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::stateEntered");
}

/*!
 Slot invoked when a state is exited.
 */
void HsInstalledAppsState::stateExited()
{
    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::stateExited");
    mMenuView.setSearchPanelVisible(false);
    // revert navigation action
    mMenuView.view()->setNavigationAction(mOldNavigationAction);
    mMenuView.showToolBar();
    mMenuView.setLabelVisible(false);
    mMenuView.disconnect(this);
    mMenuView.view()->setMenu(NULL);

    disconnect(mSecondarySoftkeyAction, SIGNAL(triggered()),
               this, SLOT(backAction()));

    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::stateExited");
    qDebug("AllAppsState::stateExited()");
}

/*!
 Open task switcher.
 \retval true if operation is successful.
 */
bool HsInstalledAppsState::openTaskSwitcher()
{
    return HsMenuService::launchTaskSwitcher();
}

/*!
 Method invoked when a list item is activated.
 \param index indec of activated item.
 */
#ifdef COVERAGE_MEASUREMENT
#pragma CTC SKIP
#endif //COVERAGE_MEASUREMENT
void HsInstalledAppsState::listItemActivated(const QModelIndex &/*index*/)
{
    //no implementation yet
}
#ifdef COVERAGE_MEASUREMENT
#pragma CTC ENDSKIP
#endif //COVERAGE_MEASUREMENT

/*!
 Handles long-item-pressed event in all apps view by showing context menu
 \param item the event pertains to
 \param coords press point coordinates.
 */
#ifdef COVERAGE_MEASUREMENT
#pragma CTC SKIP
#endif //COVERAGE_MEASUREMENT
void HsInstalledAppsState::listItemLongPressed(HbAbstractViewItem *item,
        const QPointF &coords)
{
    HSMENUTEST_FUNC_ENTRY("HsInstalledAppsState::listItemLongPressed");

    // create context menu
    HbMenu *menu = new HbMenu();

    HbAction *uninstallAction = menu->addAction(
                                    hbTrId("txt_common_menu_delete"));

    // choose proper action
    if (HbAction *selectedAction = menu->exec(coords)) {
        if (selectedAction == uninstallAction) {
            const int itemId = item->modelIndex().data(
                                   CaItemModel::IdRole).toInt();
            HsMenuService::executeAction(itemId, removeActionIdentifier());
        }
        mMenuView.setSearchPanelVisible(false);
    }
    delete menu;
    HSMENUTEST_FUNC_EXIT("HsInstalledAppsState::listItemLongPressed");
}
#ifdef COVERAGE_MEASUREMENT
#pragma CTC ENDSKIP
#endif //COVERAGE_MEASUREMENT

/*!
 Slot invoked when a back action is triggered.
 */
#ifdef COVERAGE_MEASUREMENT
#pragma CTC SKIP
#endif //COVERAGE_MEASUREMENT
void HsInstalledAppsState::backAction()
{
    machine()->postEvent(HsMenuEventFactory::createOpenAppLibraryEvent());
}
#ifdef COVERAGE_MEASUREMENT
#pragma CTC ENDSKIP
#endif //COVERAGE_MEASUREMENT