homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddappstocollectionstate.cpp
changeset 35 f9ce957a272c
child 39 4e8ebe173323
equal deleted inserted replaced
5:c743ef5928ba 35:f9ce957a272c
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description:
       
    15  *
       
    16  */
       
    17 
       
    18 #include <qfinalstate.h>
       
    19 #include <QDebug>
       
    20 #include <hsmenuservice.h>
       
    21 #include <hbnotificationdialog.h>
       
    22 #include <QAbstractTransition>
       
    23 
       
    24 #include "hsaddappstocollectionstate.h"
       
    25 #include "hsmenuevent.h"
       
    26 #include "hscollectionnamedialog.h"
       
    27 #include "hscollectionslistdialog.h"
       
    28 #include "hsappschecklist.h"
       
    29 
       
    30 /*!
       
    31  \class HsAddAppsToCollectionState
       
    32  \ingroup group_hsmenuworkerstateplugin
       
    33  \brief Manages adding to homescreen state
       
    34  */
       
    35 
       
    36 /*!
       
    37  \fn void transitToSaveState(const QString &collectionName);
       
    38  Signal emitted when collection name is selected.
       
    39  \param collectionName name of collection.
       
    40  */
       
    41 
       
    42 /*!
       
    43  \fn void transitToAppsCheckListState(const QString &collectionName);
       
    44  Signal emitted when collection name is selected - version to trigger
       
    45  transition to mAppCheckListState.
       
    46  \param collectionName name of collection.
       
    47  */
       
    48 
       
    49 /*!
       
    50  \fn void void transitToSaveState(int collectionId);
       
    51  Signal emitted when collection id is selected.
       
    52  \param collectionId id of collection.
       
    53  */
       
    54 
       
    55 /*!
       
    56  \fn void transitToAppsCheckListState(int collectionId);
       
    57  Signal emitted when collection name is selected - version to trigger
       
    58  transition to mAppCheckListState.
       
    59  \param collectionId id of collection.
       
    60  */
       
    61 
       
    62 /*!
       
    63  \fn void transitToNewCollectionState();
       
    64  Signal emitted when user selects creating new collection.
       
    65  */
       
    66 
       
    67 /*!
       
    68  \fn void transitToSaveState(const QList<int> &appList);
       
    69  Signal emitted when applications are selected.
       
    70  \param appList application list.
       
    71  */
       
    72 
       
    73 /*!
       
    74  \fn void transitToFinalState();
       
    75  Signal emitted when user selects cancel.
       
    76  \param collectionName name of collection.
       
    77  */
       
    78 
       
    79 /*!
       
    80  Constructor.
       
    81  \return \a true on success, \a false otherwise.
       
    82  \param parent Owner.
       
    83  */
       
    84 HsAddAppsToCollectionState::HsAddAppsToCollectionState(QState *parent) :
       
    85     QState(parent), mCollectionName(0), mCollectionId(0), mAppList(),
       
    86     mShowConfirmation(0), mInitialState(0), mSelectCollectionState(0),
       
    87     mNewCollectionState(0), mAppsCheckListState(0), mActionType(
       
    88         NoActionType), mApplicationsSortAttribute(NoHsSortAttribute),
       
    89     mCollectionsSortAttribute(NoHsSortAttribute), mAppsCheckList(0)
       
    90 {
       
    91     construct();
       
    92 }
       
    93 
       
    94 /*!
       
    95  Destructor.
       
    96 
       
    97  */
       
    98 HsAddAppsToCollectionState::~HsAddAppsToCollectionState()
       
    99 {
       
   100     delete mAppsCheckList;
       
   101 }
       
   102 
       
   103 /*!
       
   104  Constructor part.
       
   105  */
       
   106 void HsAddAppsToCollectionState::construct()
       
   107 {
       
   108     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::construct");
       
   109     setObjectName("homescreen.nokia.com/state/addappstocollectionstate");
       
   110     createStates();
       
   111     connect(this, SIGNAL(exited()),SLOT(stateExited()));
       
   112 
       
   113     mAppsCheckList = new HsAppsCheckList();
       
   114     connect(mAppsCheckList, SIGNAL(commit(QList<int>)),
       
   115             SLOT(selectApplicationsDone(QList<int>)));
       
   116 
       
   117     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::construct");
       
   118 }
       
   119 
       
   120 /*!
       
   121  Creates behavioural model i.e states
       
   122  */
       
   123 void HsAddAppsToCollectionState::createStates()
       
   124 {
       
   125     //child states
       
   126     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::createStates");
       
   127 
       
   128     mInitialState = new QState(this);
       
   129     QState *saveState = new QState(this);
       
   130     QFinalState *finalState = new QFinalState(this);
       
   131 
       
   132     mSelectCollectionState = new QState(this);
       
   133     mNewCollectionState = new QState(this);
       
   134     mAppsCheckListState = new QState(this);
       
   135 
       
   136     setInitialState(mInitialState);
       
   137     connect(saveState, SIGNAL(entered()),SLOT(save()));
       
   138     connect(finalState, SIGNAL(entered()),SLOT(cleanData()));
       
   139     connect(mNewCollectionState, SIGNAL(entered()),SLOT(newCollection()));
       
   140     connect(mSelectCollectionState, SIGNAL(entered()),
       
   141             SLOT(selectCollection()));
       
   142     connect(mAppsCheckListState, SIGNAL(entered()),
       
   143             SLOT(appsCheckListState()));
       
   144 
       
   145     //child states will gather needed data in parent sate
       
   146     //with signals and slots communication
       
   147     connect(this, SIGNAL(transitToSaveState(int)),
       
   148             SLOT(setCollectionId(int)));
       
   149     connect(this, SIGNAL(transitToSaveState(QString)),
       
   150             SLOT(setCollectionName(QString)));
       
   151     connect(this, SIGNAL(transitToAppsCheckListState(int)),
       
   152             SLOT(setCollectionId(int)));
       
   153     connect(this, SIGNAL(transitToAppsCheckListState(QString)),
       
   154             SLOT(setCollectionName(QString)));
       
   155     connect(this, SIGNAL(transitToSaveState(QList<int>)),
       
   156             SLOT(setAppList(QList<int>)));
       
   157 
       
   158     // Add a specific application to an existing collection
       
   159     // via item specific menu.
       
   160     // Add a specific item to a collection via collection specific menu.
       
   161     // Adding a new collection via the Collections view.
       
   162     mSelectCollectionState->addTransition(this,
       
   163                                           SIGNAL(transitToNewCollectionState()), mNewCollectionState);
       
   164     mSelectCollectionState->addTransition(this,
       
   165                                           SIGNAL(transitToSaveState(int)), saveState);
       
   166     mNewCollectionState->addTransition(this,
       
   167                                        SIGNAL(transitToSaveState(QString)), saveState);
       
   168 
       
   169     // Add one/many applications to an existing/a new collection
       
   170     // via the All view options menu.
       
   171     // Add items to a collection via the collection's view options menu.
       
   172     mSelectCollectionState->addTransition(this,
       
   173                                           SIGNAL(transitToAppsCheckListState(int)), mAppsCheckListState);
       
   174     mNewCollectionState->addTransition(this,
       
   175                                        SIGNAL(transitToAppsCheckListState(QString)), mAppsCheckListState);
       
   176     mAppsCheckListState->addTransition(this,
       
   177                                        SIGNAL(transitToSaveState(QList<int>)), saveState);
       
   178 
       
   179     mSelectCollectionState->addTransition(this,
       
   180                                           SIGNAL(transitToFinalState()),finalState);
       
   181     mNewCollectionState->addTransition(this,
       
   182                                        SIGNAL(transitToFinalState()), finalState);
       
   183     mAppsCheckListState->addTransition(this,
       
   184                                        SIGNAL(transitToFinalState()), finalState);
       
   185 
       
   186     //transition to final state after save
       
   187     saveState->addTransition(finalState);
       
   188     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::createStates");
       
   189 
       
   190 }
       
   191 
       
   192 /*!
       
   193  Saves data in content arsenal(selected applications in collection).
       
   194  */
       
   195 void HsAddAppsToCollectionState::save()
       
   196 {
       
   197     qDebug("AddAppsToCollectionState::save() - slot");
       
   198     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::save");
       
   199     //Adds new collection.
       
   200     if (!mCollectionName.isEmpty()) {
       
   201         mCollectionId = HsMenuService::createCollection(mCollectionName);
       
   202     }
       
   203     //Adds applications to colection.
       
   204     if ((mCollectionId > 0) && mAppList.count()) {
       
   205         HsMenuService::addApplicationsToCollection(mAppList, mCollectionId);
       
   206         if (mShowConfirmation) {
       
   207             showMessageAppsAdded(mCollectionId);
       
   208         }
       
   209     }
       
   210     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::save");
       
   211 }
       
   212 
       
   213 /*!
       
   214  Cleans data after cancel() signal.
       
   215  */
       
   216 void HsAddAppsToCollectionState::cleanData()
       
   217 {
       
   218     qDebug("AddAppsToCollectionState::cleanData() - slot");
       
   219     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::cleanData");
       
   220     mCollectionId = 0;
       
   221     mAppList.clear();
       
   222     mCollectionName.clear();
       
   223     mShowConfirmation = false;
       
   224     mActionType = NoActionType;
       
   225     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::cleanData");
       
   226 }
       
   227 
       
   228 /*!
       
   229  Derived from QState.
       
   230  Method invoked when a state is entered.
       
   231  \param event an event causing the entrance the state.
       
   232  */
       
   233 void HsAddAppsToCollectionState::onEntry(QEvent *event)
       
   234 {
       
   235     qDebug("HsAddAppsToCollectionState::onEntry()");
       
   236     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::onEntry");
       
   237     QState::onEntry(event);
       
   238     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
       
   239     QVariantMap data = menuEvent->data();
       
   240 
       
   241     mApplicationsSortAttribute = static_cast<HsSortAttribute>(data.value(
       
   242                                      appSortOrderKey()).toInt());
       
   243     mCollectionsSortAttribute = static_cast<HsSortAttribute>(data.value(
       
   244                                     collectionSortOrderKey()).toInt());
       
   245 
       
   246     const int itemId = data.value(itemIdKey()).toInt();
       
   247     mCollectionId = data.value(collectionIdKey()).toInt();
       
   248 
       
   249     if (itemId && (mCollectionsSortAttribute != NoHsSortAttribute
       
   250                    || mCollectionId)) {
       
   251         //add selected app item form allAppView or collectionView
       
   252         mAppList.append(itemId);
       
   253 
       
   254         mInitialState->addTransition(mSelectCollectionState);
       
   255 
       
   256         mShowConfirmation = true;
       
   257     } else if (mApplicationsSortAttribute != NoHsSortAttribute
       
   258                && mCollectionsSortAttribute != NoHsSortAttribute) {
       
   259         //add apps from allAppView options menu
       
   260         mActionType = ViaAllViewOptionMenuType;
       
   261 
       
   262         mInitialState->addTransition(mSelectCollectionState);
       
   263 
       
   264         mShowConfirmation = true;
       
   265     } else if (mCollectionId) {
       
   266         //add apps from collectionView options menu
       
   267         mApplicationsSortAttribute = AscendingNameHsSortAttribute;
       
   268         mInitialState->addTransition(mAppsCheckListState);
       
   269     }
       
   270     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::onEntry");
       
   271 }
       
   272 
       
   273 /*!
       
   274  Slot invoked when a state is exited.
       
   275  */
       
   276 void HsAddAppsToCollectionState::stateExited()
       
   277 {
       
   278     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::stateExited");
       
   279     QList<QAbstractTransition *> transitionsList =
       
   280         mInitialState->findChildren<QAbstractTransition *> ();
       
   281     if (transitionsList.count()) {
       
   282         mInitialState->removeTransition(transitionsList[0]);
       
   283     }
       
   284     mAppsCheckList->cleanUp();
       
   285     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::stateExited");
       
   286     qDebug("AddAppsToCollectionState::stateExited()");
       
   287 }
       
   288 
       
   289 /*!
       
   290  Slot invoked when new collection state is entered..
       
   291  */
       
   292 #ifdef COVERAGE_MEASUREMENT
       
   293 #pragma CTC SKIP
       
   294 #endif //COVERAGE_MEASUREMENT
       
   295 void HsAddAppsToCollectionState::newCollection()
       
   296 {
       
   297     qDebug("HsAddAppsToCollectionState::newCollection");
       
   298 
       
   299     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::newCollection");
       
   300     HsCollectionNameDialog editor;
       
   301     HbAction *result = editor.exec();
       
   302     if (result == editor.primaryAction()) {
       
   303         QString newName(editor.newName(editor.value().toString(), true));
       
   304         if (mActionType == ViaAllViewOptionMenuType) {
       
   305             qDebug("HsAddAppsToCollectionState::newCollection() "
       
   306                    "- emit collectionNameSelectedCl(newName)");
       
   307             emit transitToAppsCheckListState(newName);
       
   308         } else {
       
   309             qDebug("HsAddAppsToCollectionState::newCollection() "
       
   310                    "- emit collectionNameSelected(newName)");
       
   311             emit transitToSaveState(newName);
       
   312         }
       
   313     } else {
       
   314         qDebug(
       
   315             "HsAddAppsToCollectionState::newCollection() - emit cancel()");
       
   316         emit transitToFinalState();
       
   317     }
       
   318     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::newCollection");
       
   319 }
       
   320 #ifdef COVERAGE_MEASUREMENT
       
   321 #pragma CTC ENDSKIP
       
   322 #endif //COVERAGE_MEASUREMENT
       
   323 
       
   324 /*!
       
   325  Slot invoked when select collection state is entered.
       
   326  */
       
   327 #ifdef COVERAGE_MEASUREMENT
       
   328 #pragma CTC SKIP
       
   329 #endif //COVERAGE_MEASUREMENT
       
   330 void HsAddAppsToCollectionState::selectCollection()
       
   331 {
       
   332     qDebug("HsAddAppsToCollectionState::selectCollection()");
       
   333 
       
   334     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::selectCollection");
       
   335     HsCollectionsListDialog listView(mCollectionsSortAttribute,
       
   336                                      mCollectionId);
       
   337     if (listView.exec() != listView.secondaryAction()) {
       
   338         int itemId = listView.getItemId();
       
   339         if (itemId) {
       
   340             if (mActionType == ViaAllViewOptionMenuType) {
       
   341                 qDebug("emit collectionSelectedCl(%d)", itemId);
       
   342                 emit transitToAppsCheckListState(itemId);
       
   343             } else {
       
   344                 qDebug("emit collectionSelected(%d)", itemId);
       
   345                 emit transitToSaveState(itemId);
       
   346             }
       
   347         } else {
       
   348             qDebug("emit createNewCollection()");
       
   349             emit transitToNewCollectionState();
       
   350         }
       
   351     } else {
       
   352         qDebug("emit cancel()");
       
   353         emit transitToFinalState();
       
   354     }
       
   355     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::selectCollection");
       
   356 }
       
   357 
       
   358 #ifdef COVERAGE_MEASUREMENT
       
   359 #pragma CTC ENDSKIP
       
   360 #endif //COVERAGE_MEASUREMENT
       
   361 /*!
       
   362  Slot connected to saving action of state.
       
   363  It is called when new application are addend to collection.
       
   364  \param id Id of collection to which applications were added.
       
   365  */
       
   366 void HsAddAppsToCollectionState::showMessageAppsAdded(int id)
       
   367 {
       
   368     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::showMessageAppsAdded");
       
   369     HbNotificationDialog *notificationDialog = new HbNotificationDialog();
       
   370     notificationDialog->setAttribute(Qt::WA_DeleteOnClose);
       
   371     notificationDialog->setTitle(hbTrId(
       
   372                                      "txt_applib_dpopinfo_added_to_collection_1") .arg(
       
   373                                      HsMenuService::getName(id)));
       
   374     notificationDialog->show();
       
   375     mShowConfirmation = false;
       
   376     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::showMessageAppsAdded");
       
   377 }
       
   378 
       
   379 /*!
       
   380  Slot setting collection name.
       
   381  \param collectionName name of collection.
       
   382  */
       
   383 void HsAddAppsToCollectionState::setCollectionName(
       
   384     const QString &collectionName)
       
   385 {
       
   386     qDebug() << "AddAppsToCollectionState::setCollectionName("
       
   387              << collectionName << ") - slot";
       
   388 
       
   389     mCollectionName = collectionName;
       
   390 }
       
   391 
       
   392 /*!
       
   393  Slot setting collection id..
       
   394  \param collectionId id of collection.
       
   395  */
       
   396 void HsAddAppsToCollectionState::setCollectionId(int collectionId)
       
   397 {
       
   398     qDebug() << "AddAppsToCollectionState::setCollectionId("
       
   399              << collectionId << ") - slot";
       
   400 
       
   401     mCollectionId = collectionId;
       
   402 }
       
   403 
       
   404 /*!
       
   405  Slot sets app list.
       
   406  \param appList list of applications ids.
       
   407  */
       
   408 void HsAddAppsToCollectionState::setAppList(const QList<int> &appList)
       
   409 {
       
   410     qDebug() << "AddAppsToCollectionState::setAppList(" << appList
       
   411              << ") - slot";
       
   412 
       
   413     mAppList = appList;
       
   414 }
       
   415 
       
   416 /*!
       
   417  Slot invoked when apps checklist state is entered.
       
   418  */
       
   419 #ifdef COVERAGE_MEASUREMENT
       
   420 #pragma CTC SKIP
       
   421 #endif //COVERAGE_MEASUREMENT
       
   422 void HsAddAppsToCollectionState::appsCheckListState()
       
   423 {
       
   424     qDebug("HsAddAppsToCollectionState::appsCheckListState()");
       
   425     HSMENUTEST_FUNC_ENTRY("HsAddAppsToCollectionState::appsCheckListState");
       
   426     if (!mAppsCheckList) {
       
   427         mAppsCheckList = new HsAppsCheckList();
       
   428     }
       
   429     mAppsCheckList->setSortOrder(mApplicationsSortAttribute);
       
   430     mAppsCheckList->showAppsCheckboxList(mApplicationsSortAttribute);
       
   431     HSMENUTEST_FUNC_EXIT("HsAddAppsToCollectionState::appsCheckListState");
       
   432 }
       
   433 #ifdef COVERAGE_MEASUREMENT
       
   434 #pragma CTC ENDSKIP
       
   435 #endif //COVERAGE_MEASUREMENT
       
   436 /*!
       
   437  Slot connected trrigger action of secondary soft key of check list box.
       
   438  It is called when done button is selected.
       
   439  */
       
   440 #ifdef COVERAGE_MEASUREMENT
       
   441 #pragma CTC SKIP
       
   442 #endif //COVERAGE_MEASUREMENT
       
   443 void HsAddAppsToCollectionState::selectApplicationsDone(
       
   444     const QList<int> &appList)
       
   445 {
       
   446     if (appList.count()) {
       
   447         qDebug("AppsCheckListState::selectApplicationsDone() "
       
   448                "- emit appsSelected(mAppList)");
       
   449         emit transitToSaveState(appList);
       
   450     } else {
       
   451         qDebug(
       
   452             "AppsCheckListState::selectApplicationsDone() - emit cancel()");
       
   453         emit transitToFinalState();
       
   454     }
       
   455 }
       
   456 #ifdef COVERAGE_MEASUREMENT
       
   457 #pragma CTC ENDSKIP
       
   458 #endif //COVERAGE_MEASUREMENT