diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsapplibrarystate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsapplibrarystate.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,249 @@ +/* + * 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 Application Library state. + * + */ +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hstest_global.h" +#include "hsapplibrarystate.h" +#include "hsallappsstate.h" +#include "hsallcollectionsstate.h" +#include "hscollectionstate.h" +#include "hsovistorehandler.h" +#include "hsmenuview.h" +#include "hsmenumodetransition.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +HsAppLibraryState::HsAppLibraryState(QState *parent) : + QState(parent), mSecondarySoftkeyAction(0), mAllAppsState(0), + mHistoryTransaction(0), mAllCollectionsState(0), mCollectionState(0), + mMenuView(HbInstance::instance()->allMainWindows().value(0)) +{ + construct(); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +HsAppLibraryState::~HsAppLibraryState() +{ + HbMainWindow *const hbW = + HbInstance::instance()->allMainWindows().value(0); + + if (hbW) { + hbW->removeView(mMenuView.view()); + hbW->removeSoftKeyAction(Hb::SecondarySoftKey, + mSecondarySoftkeyAction); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::construct() +{ + HSMENUTEST_FUNC_ENTRY("HsAppLibraryState::construct"); + setObjectName("homescreen.nokia.com/state/applibrarystate"); + + mSecondarySoftkeyAction = new HbAction(Hb::BackAction, this); + connect(mSecondarySoftkeyAction, SIGNAL(triggered()), + SIGNAL(toHomescreenState())); + + mAllAppsState = new HsAllAppsState(mMenuView, this); + connect(this, SIGNAL(entered()),mAllAppsState, SLOT(scrollToBeginning())); + + mAllCollectionsState = new HsAllCollectionsState(mMenuView, this); + connect(this, SIGNAL(entered()), + mAllCollectionsState, SLOT(scrollToBeginning())); + + QState *initialState = new QState(this); + setInitialState(initialState); + + mHistoryTransaction = new HsMenuModeTransition( + mMenuView, NormalHsMenuMode, mAllAppsState); + initialState->addTransition(mHistoryTransaction); + initialState->addTransition(new HsMenuModeTransition( + mMenuView, AddHsMenuMode, mAllAppsState)); + + mCollectionState = new HsCollectionState(mMenuView, this); + connect(mCollectionState, SIGNAL(entered()),SLOT(clearToolbarLatch())); + + HsMenuEventTransition *eventTransition = + new HsMenuEventTransition(HsMenuEvent::OpenCollection, + mAllCollectionsState, mCollectionState); + mAllCollectionsState->addTransition(eventTransition); + + HsMenuEventTransition *collectionDeletedTransition = + new HsMenuEventTransition(HsMenuEvent::CollectionDeleted, + mCollectionState, mAllCollectionsState); + mCollectionState->addTransition(collectionDeletedTransition); + + //transition for returning from collection + HsMenuEventTransition *collectionToAppLibTransition = + new HsMenuEventTransition(HsMenuEvent::OpenApplicationLibrary, + mCollectionState, mAllCollectionsState); + mCollectionState->addTransition(collectionToAppLibTransition); + + constructToolbar(); + + connect(this, SIGNAL(entered()),SLOT(stateEntered())); + connect(this, SIGNAL(exited()),SLOT(stateExited())); + connect(mAllCollectionsState, SIGNAL(sortOrderChanged(HsSortAttribute)), + mAllAppsState, SLOT(collectionsSortOrder(HsSortAttribute))); + connect(mAllCollectionsState, SIGNAL(sortOrderChanged(HsSortAttribute)), + mCollectionState, SLOT(collectionsSortOrder(HsSortAttribute))); + + connect(mAllAppsState, SIGNAL(entered()), + this, SLOT(allAppsStateEntered())); + connect(mAllCollectionsState, SIGNAL(entered()), + this, SLOT(allCollectionsStateEntered())); + + HSMENUTEST_FUNC_EXIT("HsAppLibraryState::construct"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::onEntry(QEvent *event) +{ + qDebug("HsCollectionState::onEntry()"); + HSMENUTEST_FUNC_ENTRY("HsAppLibraryState::onEntry"); + QState::onEntry(event); + + if (event->type() == HsMenuEvent::eventType()) { + HsMenuEvent *menuEvent = static_cast(event); + QVariantMap data = menuEvent->data(); + mMenuView.setHsMenuMode( + static_cast(data.value(menuModeType()).toInt())); + } else { + mMenuView.setHsMenuMode(NormalHsMenuMode); + } + + HSMENUTEST_FUNC_EXIT("HsAppLibraryState::onEntry"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::stateEntered() +{ + HSTEST_FUNC_ENTRY("AppLibraryState::stateEntered"); + HbMainWindow *hbW = HbInstance::instance()->allMainWindows().value(0); + if (!hbW->views().contains(mMenuView.view())) { + hbW->addView(mMenuView.view()); + } + hbW->addSoftKeyAction(Hb::SecondarySoftKey, mSecondarySoftkeyAction); + hbW->setCurrentView(mMenuView.view()); + HSTEST_FUNC_EXIT("AppLibraryState::stateEntered"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::stateExited() +{ + HSTEST_FUNC_ENTRY("AppLibraryState::stateExited"); + HbMainWindow *hbW = HbInstance::instance()->allMainWindows().value(0); + + //when exiting the pointer can be NULL + if (hbW) { + hbW->removeSoftKeyAction(Hb::SecondarySoftKey, + mSecondarySoftkeyAction); + } + HSTEST_FUNC_EXIT("AppLibraryState::stateExited"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::constructToolbar() +{ + HSMENUTEST_FUNC_ENTRY("HsAppLibraryState::constructToolbar"); + + HsOviStoreHandler *const oviStoreHandler = new HsOviStoreHandler(this); + + HbAction *const oviStoreAction(mMenuView.oviStoreAction()); + + oviStoreAction->setIcon(HbIcon(oviStoreHandler->icon())); + connect(mMenuView.oviStoreAction(), SIGNAL(triggered()), + oviStoreHandler, SLOT(action())); + + HbAction *const allCollectionsAction(mMenuView.allCollectionsAction()); + + mAllAppsState->addTransition(allCollectionsAction, SIGNAL(triggered()), + mAllCollectionsState); + mCollectionState->addTransition(allCollectionsAction, + SIGNAL(triggered()), mAllCollectionsState); + + HbAction *const allAppsAction(mMenuView.allAppsAction()); + + mAllCollectionsState->addTransition(allAppsAction, + SIGNAL(triggered()), mAllAppsState); + mCollectionState->addTransition(allAppsAction, SIGNAL(triggered()), + mAllAppsState); + + mAllAppsState->assignProperty( + allAppsAction, "checked", true); + mAllCollectionsState->assignProperty( + allCollectionsAction, "checked", true); + HSMENUTEST_FUNC_EXIT("HsAppLibraryState::constructToolbar"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::clearToolbarLatch() +{ + HSMENUTEST_FUNC_ENTRY("HsAppLibraryState::clearToolbarLatch"); + QAction *const checkedAction = + mMenuView.toolBarActionGroup()->checkedAction(); + + if (checkedAction != NULL) { + checkedAction->setChecked(false); + } + HSMENUTEST_FUNC_EXIT("HsAppLibraryState::clearToolbarLatch"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::allAppsStateEntered() +{ + if (mMenuView.getHsMenuMode() == NormalHsMenuMode) { + mHistoryTransaction->setTargetState(mAllAppsState); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsAppLibraryState::allCollectionsStateEntered() +{ + if (mMenuView.getHsMenuMode() == NormalHsMenuMode) { + mHistoryTransaction->setTargetState(mAllCollectionsState); + } +}