diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddappstocollectionstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddappstocollectionstate.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,458 @@ +/* + * 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: + * + */ + +#include +#include +#include +#include +#include + +#include "hsaddappstocollectionstate.h" +#include "hsmenuevent.h" +#include "hscollectionnamedialog.h" +#include "hscollectionslistdialog.h" +#include "hsappschecklist.h" + +/*! + \class HsAddAppsToCollectionState + \ingroup group_hsmenuworkerstateplugin + \brief Manages adding to homescreen state + */ + +/*! + \fn void transitToSaveState(const QString &collectionName); + Signal emitted when collection name is selected. + \param collectionName name of collection. + */ + +/*! + \fn void transitToAppsCheckListState(const QString &collectionName); + Signal emitted when collection name is selected - version to trigger + transition to mAppCheckListState. + \param collectionName name of collection. + */ + +/*! + \fn void void transitToSaveState(int collectionId); + Signal emitted when collection id is selected. + \param collectionId id of collection. + */ + +/*! + \fn void transitToAppsCheckListState(int collectionId); + Signal emitted when collection name is selected - version to trigger + transition to mAppCheckListState. + \param collectionId id of collection. + */ + +/*! + \fn void transitToNewCollectionState(); + Signal emitted when user selects creating new collection. + */ + +/*! + \fn void transitToSaveState(const QList &appList); + Signal emitted when applications are selected. + \param appList application list. + */ + +/*! + \fn void transitToFinalState(); + Signal emitted when user selects cancel. + \param collectionName name of collection. + */ + +/*! + Constructor. + \return \a true on success, \a false otherwise. + \param parent Owner. + */ +HsAddAppsToCollectionState::HsAddAppsToCollectionState(QState *parent) : + QState(parent), mCollectionName(0), mCollectionId(0), mAppList(), + mShowConfirmation(0), mInitialState(0), mSelectCollectionState(0), + mNewCollectionState(0), mAppsCheckListState(0), mActionType( + NoActionType), mApplicationsSortAttribute(NoHsSortAttribute), + mCollectionsSortAttribute(NoHsSortAttribute), mAppsCheckList(0) +{ + construct(); +} + +/*! + Destructor. + + */ +HsAddAppsToCollectionState::~HsAddAppsToCollectionState() +{ + delete mAppsCheckList; +} + +/*! + Constructor part. + */ +void HsAddAppsToCollectionState::construct() +{ + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::construct"); + setObjectName("homescreen.nokia.com/state/addappstocollectionstate"); + createStates(); + connect(this, SIGNAL(exited()),SLOT(stateExited())); + + mAppsCheckList = new HsAppsCheckList(); + connect(mAppsCheckList, SIGNAL(commit(QList)), + SLOT(selectApplicationsDone(QList))); + + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::construct"); +} + +/*! + Creates behavioural model i.e states + */ +void HsAddAppsToCollectionState::createStates() +{ + //child states + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::createStates"); + + mInitialState = new QState(this); + QState *saveState = new QState(this); + QFinalState *finalState = new QFinalState(this); + + mSelectCollectionState = new QState(this); + mNewCollectionState = new QState(this); + mAppsCheckListState = new QState(this); + + setInitialState(mInitialState); + connect(saveState, SIGNAL(entered()),SLOT(save())); + connect(finalState, SIGNAL(entered()),SLOT(cleanData())); + connect(mNewCollectionState, SIGNAL(entered()),SLOT(newCollection())); + connect(mSelectCollectionState, SIGNAL(entered()), + SLOT(selectCollection())); + connect(mAppsCheckListState, SIGNAL(entered()), + SLOT(appsCheckListState())); + + //child states will gather needed data in parent sate + //with signals and slots communication + connect(this, SIGNAL(transitToSaveState(int)), + SLOT(setCollectionId(int))); + connect(this, SIGNAL(transitToSaveState(QString)), + SLOT(setCollectionName(QString))); + connect(this, SIGNAL(transitToAppsCheckListState(int)), + SLOT(setCollectionId(int))); + connect(this, SIGNAL(transitToAppsCheckListState(QString)), + SLOT(setCollectionName(QString))); + connect(this, SIGNAL(transitToSaveState(QList)), + SLOT(setAppList(QList))); + + // Add a specific application to an existing collection + // via item specific menu. + // Add a specific item to a collection via collection specific menu. + // Adding a new collection via the Collections view. + mSelectCollectionState->addTransition(this, + SIGNAL(transitToNewCollectionState()), mNewCollectionState); + mSelectCollectionState->addTransition(this, + SIGNAL(transitToSaveState(int)), saveState); + mNewCollectionState->addTransition(this, + SIGNAL(transitToSaveState(QString)), saveState); + + // Add one/many applications to an existing/a new collection + // via the All view options menu. + // Add items to a collection via the collection's view options menu. + mSelectCollectionState->addTransition(this, + SIGNAL(transitToAppsCheckListState(int)), mAppsCheckListState); + mNewCollectionState->addTransition(this, + SIGNAL(transitToAppsCheckListState(QString)), mAppsCheckListState); + mAppsCheckListState->addTransition(this, + SIGNAL(transitToSaveState(QList)), saveState); + + mSelectCollectionState->addTransition(this, + SIGNAL(transitToFinalState()),finalState); + mNewCollectionState->addTransition(this, + SIGNAL(transitToFinalState()), finalState); + mAppsCheckListState->addTransition(this, + SIGNAL(transitToFinalState()), finalState); + + //transition to final state after save + saveState->addTransition(finalState); + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::createStates"); + +} + +/*! + Saves data in content arsenal(selected applications in collection). + */ +void HsAddAppsToCollectionState::save() +{ + qDebug("AddAppsToCollectionState::save() - slot"); + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::save"); + //Adds new collection. + if (!mCollectionName.isEmpty()) { + mCollectionId = HsMenuService::createCollection(mCollectionName); + } + //Adds applications to colection. + if ((mCollectionId > 0) && mAppList.count()) { + HsMenuService::addApplicationsToCollection(mAppList, mCollectionId); + if (mShowConfirmation) { + showMessageAppsAdded(mCollectionId); + } + } + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::save"); +} + +/*! + Cleans data after cancel() signal. + */ +void HsAddAppsToCollectionState::cleanData() +{ + qDebug("AddAppsToCollectionState::cleanData() - slot"); + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::cleanData"); + mCollectionId = 0; + mAppList.clear(); + mCollectionName.clear(); + mShowConfirmation = false; + mActionType = NoActionType; + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::cleanData"); +} + +/*! + Derived from QState. + Method invoked when a state is entered. + \param event an event causing the entrance the state. + */ +void HsAddAppsToCollectionState::onEntry(QEvent *event) +{ + qDebug("HsAddAppsToCollectionState::onEntry()"); + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::onEntry"); + QState::onEntry(event); + HsMenuEvent *menuEvent = static_cast(event); + QVariantMap data = menuEvent->data(); + + mApplicationsSortAttribute = static_cast(data.value( + appSortOrderKey()).toInt()); + mCollectionsSortAttribute = static_cast(data.value( + collectionSortOrderKey()).toInt()); + + const int itemId = data.value(itemIdKey()).toInt(); + mCollectionId = data.value(collectionIdKey()).toInt(); + + if (itemId && (mCollectionsSortAttribute != NoHsSortAttribute + || mCollectionId)) { + //add selected app item form allAppView or collectionView + mAppList.append(itemId); + + mInitialState->addTransition(mSelectCollectionState); + + mShowConfirmation = true; + } else if (mApplicationsSortAttribute != NoHsSortAttribute + && mCollectionsSortAttribute != NoHsSortAttribute) { + //add apps from allAppView options menu + mActionType = ViaAllViewOptionMenuType; + + mInitialState->addTransition(mSelectCollectionState); + + mShowConfirmation = true; + } else if (mCollectionId) { + //add apps from collectionView options menu + mApplicationsSortAttribute = AscendingNameHsSortAttribute; + mInitialState->addTransition(mAppsCheckListState); + } + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::onEntry"); +} + +/*! + Slot invoked when a state is exited. + */ +void HsAddAppsToCollectionState::stateExited() +{ + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::stateExited"); + QList transitionsList = + mInitialState->findChildren (); + if (transitionsList.count()) { + mInitialState->removeTransition(transitionsList[0]); + } + mAppsCheckList->cleanUp(); + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::stateExited"); + qDebug("AddAppsToCollectionState::stateExited()"); +} + +/*! + Slot invoked when new collection state is entered.. + */ +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsAddAppsToCollectionState::newCollection() +{ + qDebug("HsAddAppsToCollectionState::newCollection"); + + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::newCollection"); + HsCollectionNameDialog editor; + HbAction *result = editor.exec(); + if (result == editor.primaryAction()) { + QString newName(editor.newName(editor.value().toString(), true)); + if (mActionType == ViaAllViewOptionMenuType) { + qDebug("HsAddAppsToCollectionState::newCollection() " + "- emit collectionNameSelectedCl(newName)"); + emit transitToAppsCheckListState(newName); + } else { + qDebug("HsAddAppsToCollectionState::newCollection() " + "- emit collectionNameSelected(newName)"); + emit transitToSaveState(newName); + } + } else { + qDebug( + "HsAddAppsToCollectionState::newCollection() - emit cancel()"); + emit transitToFinalState(); + } + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::newCollection"); +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + +/*! + Slot invoked when select collection state is entered. + */ +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsAddAppsToCollectionState::selectCollection() +{ + qDebug("HsAddAppsToCollectionState::selectCollection()"); + + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::selectCollection"); + HsCollectionsListDialog listView(mCollectionsSortAttribute, + mCollectionId); + if (listView.exec() != listView.secondaryAction()) { + int itemId = listView.getItemId(); + if (itemId) { + if (mActionType == ViaAllViewOptionMenuType) { + qDebug("emit collectionSelectedCl(%d)", itemId); + emit transitToAppsCheckListState(itemId); + } else { + qDebug("emit collectionSelected(%d)", itemId); + emit transitToSaveState(itemId); + } + } else { + qDebug("emit createNewCollection()"); + emit transitToNewCollectionState(); + } + } else { + qDebug("emit cancel()"); + emit transitToFinalState(); + } + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::selectCollection"); +} + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT +/*! + Slot connected to saving action of state. + It is called when new application are addend to collection. + \param id Id of collection to which applications were added. + */ +void HsAddAppsToCollectionState::showMessageAppsAdded(int id) +{ + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::showMessageAppsAdded"); + HbNotificationDialog *notificationDialog = new HbNotificationDialog(); + notificationDialog->setAttribute(Qt::WA_DeleteOnClose); + notificationDialog->setTitle(hbTrId( + "txt_applib_dpopinfo_added_to_collection_1") .arg( + HsMenuService::getName(id))); + notificationDialog->show(); + mShowConfirmation = false; + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::showMessageAppsAdded"); +} + +/*! + Slot setting collection name. + \param collectionName name of collection. + */ +void HsAddAppsToCollectionState::setCollectionName( + const QString &collectionName) +{ + qDebug() << "AddAppsToCollectionState::setCollectionName(" + << collectionName << ") - slot"; + + mCollectionName = collectionName; +} + +/*! + Slot setting collection id.. + \param collectionId id of collection. + */ +void HsAddAppsToCollectionState::setCollectionId(int collectionId) +{ + qDebug() << "AddAppsToCollectionState::setCollectionId(" + << collectionId << ") - slot"; + + mCollectionId = collectionId; +} + +/*! + Slot sets app list. + \param appList list of applications ids. + */ +void HsAddAppsToCollectionState::setAppList(const QList &appList) +{ + qDebug() << "AddAppsToCollectionState::setAppList(" << appList + << ") - slot"; + + mAppList = appList; +} + +/*! + Slot invoked when apps checklist state is entered. + */ +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsAddAppsToCollectionState::appsCheckListState() +{ + qDebug("HsAddAppsToCollectionState::appsCheckListState()"); + HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::appsCheckListState"); + if (!mAppsCheckList) { + mAppsCheckList = new HsAppsCheckList(); + } + mAppsCheckList->setSortOrder(mApplicationsSortAttribute); + mAppsCheckList->showAppsCheckboxList(mApplicationsSortAttribute); + HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::appsCheckListState"); +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT +/*! + Slot connected trrigger action of secondary soft key of check list box. + It is called when done button is selected. + */ +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsAddAppsToCollectionState::selectApplicationsDone( + const QList &appList) +{ + if (appList.count()) { + qDebug("AppsCheckListState::selectApplicationsDone() " + "- emit appsSelected(mAppList)"); + emit transitToSaveState(appList); + } else { + qDebug( + "AppsCheckListState::selectApplicationsDone() - emit cancel()"); + emit transitToFinalState(); + } +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT