homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsbaseviewstate.cpp
changeset 63 52b0f64eeb51
parent 62 341166945d65
child 69 87476091b3f5
equal deleted inserted replaced
62:341166945d65 63:52b0f64eeb51
    13  *
    13  *
    14  * Description: Base for menu view states.
    14  * Description: Base for menu view states.
    15  *
    15  *
    16  */
    16  */
    17 
    17 
    18 #include <hbmessagebox.h>
    18 #include <QStateMachine>
       
    19 #include <HbMessageBox>
    19 #include <HbParameterLengthLimiter>
    20 #include <HbParameterLengthLimiter>
    20 #include <hbaction.h>
    21 #include <HbAction>
       
    22 #include <HbMenu>
       
    23 #include <HbAbstractViewItem>
       
    24 #include <HbView>
       
    25 #include <HbListView>
       
    26 
    21 #include <canotifier.h>
    27 #include <canotifier.h>
    22 
    28 
    23 #include "hsbaseviewstate.h"
    29 #include "hsbaseviewstate.h"
       
    30 #include "hsmenueventfactory.h"
       
    31 #include "hsmenudialogfactory.h"
       
    32 #include "hsmenuitemmodel.h"
       
    33 #include "hsmenumodetransition.h"
       
    34 #include "hsmainwindow.h"
       
    35 
    24 
    36 
    25 /*!
    37 /*!
    26  Constructor.
    38  Constructor.
    27  */
    39  \param mainWindow main window wrapper object.
    28 HsBaseViewState::HsBaseViewState(
    40  \param parent Owner.
       
    41  */
       
    42 HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, QState *parent):
       
    43     QState(parent),
       
    44     mNotifier(0),
       
    45     mMessageRelatedItemId(0),
       
    46     mApplicationLaunchFailMessage(0),
       
    47     mModel(0),
       
    48     mContextMenu(0),
       
    49     mContextModelIndex(),
       
    50     mBackKeyAction(0),
       
    51     mMenuView(0),
       
    52     mMenuMode(0),
       
    53     mMainWindow(mainWindow)
       
    54 {
       
    55     mBackKeyAction = new HbAction(Hb::BackNaviAction, this);
       
    56 }
       
    57 
       
    58 /*!
       
    59  Constructor.
       
    60  \param mainWindow main window wrapper object.
       
    61  \param menuMode menu mode object.
       
    62  \param parent Owner.
       
    63  */
       
    64 HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, 
       
    65     HsMenuModeWrapper& menuMode, 
    29     QState *parent):
    66     QState *parent):
    30     QState(parent),
    67     QState(parent),
    31     mNotifier(0),
    68     mNotifier(0),
    32     mMessageRelatedItemId(0),
    69     mMessageRelatedItemId(0),
    33     mApplicationLaunchFailMessage(0)    
    70     mApplicationLaunchFailMessage(0),
    34 {
    71     mModel(0),
    35     construct();
    72     mContextMenu(0),
    36 }
    73     mContextModelIndex(),
    37 
    74     mBackKeyAction(0),
    38 /*!
    75     mMenuView(0),
    39  Constructs contained objects.
    76     mMenuMode(&menuMode),
    40  */
    77     mMainWindow(mainWindow)
    41 void HsBaseViewState::construct()
    78 {
    42 {
    79     mBackKeyAction = new HbAction(Hb::BackNaviAction, this);
       
    80 }
       
    81 /*!
       
    82  Initialize contained objects.
       
    83  \param menuViewBuilder object providing widgets for menu view.
       
    84  \param viewContext state context of the view the builder is to provide widgets for.
       
    85  */
       
    86 void HsBaseViewState::initialize(HsMenuViewBuilder &menuViewBuilder, 
       
    87     HsViewContext viewContext)
       
    88 {
       
    89     mMenuView.reset(new HsMenuView(menuViewBuilder, viewContext));
       
    90     mMenuView->view()->setNavigationAction(mBackKeyAction);
       
    91 
       
    92     connect(this, SIGNAL(entered()),SLOT(stateEntered()));
       
    93     connect(this, SIGNAL(exited()),SLOT(stateExited()));
    43 }
    94 }
    44 
    95 
    45 /*!
    96 /*!
    46  Creates and open application launch fail message.
    97  Creates and open application launch fail message.
    47  \param errorCode eroor code to display.
    98  \param errorCode eroor code to display.
    48  */
    99  \param itemId id of the launched item.
    49 void HsBaseViewState::createApplicationLaunchFailMessage(int errorCode,int itemId)
   100  */
       
   101 void HsBaseViewState::createApplicationLaunchFailMessage(int errorCode,
       
   102     int itemId)
    50 {
   103 {
    51     QString message;
   104     QString message;
    52     message.append(
   105     message.append(
    53         HbParameterLengthLimiter("txt_applib_info_launching_the_application_failed").arg(
   106         HbParameterLengthLimiter("txt_applib_info_launching_the_application_failed").arg(
    54             errorCode));
   107             errorCode));
    55     
   108     
    56     mMessageRelatedItemId = itemId;
   109     mMessageRelatedItemId = itemId;
    57 
   110 
    58     // create and show message box
   111     // create and show message box
    59     mApplicationLaunchFailMessage = new HbMessageBox(HbMessageBox::MessageTypeInformation);
   112     mApplicationLaunchFailMessage = HsMenuDialogFactory().create(message, HsMenuDialogFactory::Close);
    60     mApplicationLaunchFailMessage->setAttribute(Qt::WA_DeleteOnClose);
       
    61 
       
    62     mApplicationLaunchFailMessage->setText(message);
       
    63 
       
    64     mApplicationLaunchFailMessage->clearActions();
       
    65     HbAction *mClosemAction = new HbAction(hbTrId("txt_common_button_close"),
       
    66         mApplicationLaunchFailMessage);
       
    67     mApplicationLaunchFailMessage->addAction(mClosemAction);
       
    68 
   113 
    69     mApplicationLaunchFailMessage->open(this, SLOT(applicationLaunchFailMessageFinished(HbAction*)));
   114     mApplicationLaunchFailMessage->open(this, SLOT(applicationLaunchFailMessageFinished(HbAction*)));
    70     
   115     
    71     subscribeForMemoryCardRemove();
   116     subscribeForMemoryCardRemove();
    72 }
   117 }
   113 {
   158 {
   114     mApplicationLaunchFailMessage = NULL;
   159     mApplicationLaunchFailMessage = NULL;
   115     cleanUpApplicationLaunchFailMessage();
   160     cleanUpApplicationLaunchFailMessage();
   116 }
   161 }
   117 
   162 
       
   163 
       
   164 /*!
       
   165  Slot invoked when a state is entered.
       
   166  */
       
   167 void HsBaseViewState::stateEntered()
       
   168 {
       
   169     qDebug("HsBaseViewState::stateEntered()");
       
   170     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateEntered");
       
   171 
       
   172     mMainWindow.setCurrentView(*mMenuView);
       
   173     mMenuView->activate();
       
   174 
       
   175     HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateEntered");
       
   176 }
       
   177 
   118 /*!
   178 /*!
   119  Slot invoked when a state is exited.
   179  Slot invoked when a state is exited.
   120  */
   180  */
   121 void HsBaseViewState::stateExited()
   181 void HsBaseViewState::stateExited()
   122 {
   182 {
   123     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateExited");
   183     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateExited");
       
   184     mMenuView->setSearchPanelVisible(false);
       
   185     mMenuView->disconnect(this);
       
   186     mMenuView->view()->setMenu(NULL);
       
   187     mMenuView->inactivate();
   124     cleanUpApplicationLaunchFailMessage();
   188     cleanUpApplicationLaunchFailMessage();
       
   189     if (mContextMenu){
       
   190         mContextMenu->close();
       
   191     }
   125     HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateExited");
   192     HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateExited");
   126 }
   193 }
   127 
   194 
   128 /*!
   195 /*!
       
   196  Add mode entered.
       
   197  */
       
   198 void HsBaseViewState::addModeEntered()
       
   199 {
       
   200     connect(mMenuView.data(),
       
   201             SIGNAL(activated(QModelIndex)),
       
   202             SLOT(addActivated(QModelIndex)));
       
   203     connect(mMenuView.data(),
       
   204             SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
       
   205             SLOT(addLongPressed(HbAbstractViewItem *, QPointF)));
       
   206 }
       
   207 
       
   208 /*!
       
   209  Slot invoked when add mode entered.
       
   210  */
       
   211 void HsBaseViewState::normalModeEntered()
       
   212 {
       
   213     setMenuOptions();
       
   214     connect(mMenuView.data(),
       
   215             SIGNAL(activated(QModelIndex)),
       
   216             mMenuView.data(),
       
   217             SLOT(hideSearchPanel()));
       
   218     connect(mMenuView.data(),
       
   219             SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
       
   220             SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
       
   221 }
       
   222 
       
   223 /*!
   129  Destructor.
   224  Destructor.
   130  */
   225  */
   131 HsBaseViewState::~HsBaseViewState()
   226 HsBaseViewState::~HsBaseViewState()
   132 {
   227 {
   133 }
   228     mMenuView->setModel(NULL);
       
   229     delete mModel;
       
   230 }
       
   231 
       
   232 /*!
       
   233  Slot connected to List widget in normal mode.
       
   234  \param index Model index of the activated item.
       
   235  */
       
   236 void HsBaseViewState::launchItem(const QModelIndex &index)
       
   237 {
       
   238     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::launchItem");
       
   239 
       
   240     QSharedPointer<const CaEntry> entry = mModel->entry(index);
       
   241 
       
   242     if (entry->entryTypeName() == widgetTypeName()) {
       
   243         EntryFlags flags = index.data(CaItemModel::FlagsRole).value<
       
   244                                EntryFlags> ();
       
   245         if (!(flags & UninstallEntryFlag)) {
       
   246             machine()->postEvent(
       
   247                 HsMenuEventFactory::createPreviewHSWidgetEvent(
       
   248                     entry->id(), entry->entryTypeName(), entry->attribute(
       
   249                         widgetUriAttributeName()), entry->attribute(
       
   250                         widgetLibraryAttributeName())));
       
   251 
       
   252             const int itemId = index.data(CaItemModel::IdRole).toInt();
       
   253             HsMenuService::touch(itemId);
       
   254         }
       
   255     } else {
       
   256         QVariant data = mModel->data(index, CaItemModel::IdRole);
       
   257         int errCode = HsMenuService::executeAction(data.toInt());
       
   258         if (errCode != 0) {
       
   259             createApplicationLaunchFailMessage(errCode,index.data(CaItemModel::IdRole).toInt());
       
   260         }
       
   261     }
       
   262 
       
   263     HSMENUTEST_FUNC_EXIT("HsBaseViewState::launchItem");
       
   264 }
       
   265 
       
   266 /*!
       
   267  Slot connected to List widget in normal mode.
       
   268  \param index Model index of the activated item.
       
   269  */
       
   270 void HsBaseViewState::openCollection(const QModelIndex &index)
       
   271 {
       
   272     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::openCollection");
       
   273     QVariant data = mModel->data(index, CaItemModel::IdRole);
       
   274     int id = data.toInt();
       
   275     QString collectionType =
       
   276         mModel->data(index, CaItemModel::TypeRole).toString();
       
   277     qDebug("HsBaseViewState::openCollection - MCS ID: %d",
       
   278            data.toInt());
       
   279 
       
   280     machine()->postEvent(HsMenuEventFactory::createOpenCollectionFromAppLibraryEvent(id,
       
   281                          collectionType));
       
   282     HSMENUTEST_FUNC_EXIT("HsBaseViewState::openCollection");
       
   283 }
       
   284 
       
   285 /*!
       
   286  Slot connected to List widget in normal mode.
       
   287  \param index Model index of the activated item.
       
   288  */
       
   289 void HsBaseViewState::showContextMenu(HbAbstractViewItem *item, const QPointF &coords)
       
   290 {
       
   291 
       
   292     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::showContextMenu");
       
   293 
       
   294     EntryFlags flags = item->modelIndex().data(
       
   295                            CaItemModel::FlagsRole).value<EntryFlags> ();
       
   296 
       
   297     if (!(flags & UninstallEntryFlag)) {
       
   298         mContextMenu = new HbMenu;
       
   299         setContextMenuOptions(item,flags);
       
   300         mContextModelIndex = item->modelIndex();
       
   301         mContextMenu->setPreferredPos(coords);
       
   302         mContextMenu->setAttribute(Qt::WA_DeleteOnClose);
       
   303         mContextMenu->open(this, SLOT(contextMenuAction(HbAction*)));
       
   304     }
       
   305     HSMENUTEST_FUNC_EXIT("HsBaseViewState::showContextMenu");
       
   306 
       
   307 }
       
   308 
       
   309 /*!
       
   310  Open task switcher.
       
   311  \retval true if operation is successful.
       
   312  */
       
   313 bool HsBaseViewState::openTaskSwitcher()
       
   314 {
       
   315     return HsMenuService::launchTaskSwitcher();
       
   316 }
       
   317 
       
   318 /*!
       
   319  Menu softkey back action slot
       
   320  */
       
   321 void HsBaseViewState::openAppLibrary()
       
   322 {
       
   323     machine()->postEvent(HsMenuEventFactory::createOpenAppLibraryEvent());
       
   324 }
       
   325 
       
   326 /*!
       
   327  Check software updates.
       
   328  \retval 0 if operation is successful.
       
   329  */
       
   330 int HsBaseViewState::checkSoftwareUpdates()
       
   331 {
       
   332     int errCode = HsMenuService::launchSoftwareUpdate();
       
   333     if (errCode != 0){
       
   334         createApplicationLaunchFailMessage(errCode,0);
       
   335     }
       
   336     return errCode;
       
   337 }
       
   338 /*!
       
   339  Scrolls view to first item at top
       
   340  */
       
   341 void HsBaseViewState::scrollToBeginning()
       
   342 {
       
   343     mMenuView->listView()->scrollTo(
       
   344         mModel->index(0), HbAbstractItemView::PositionAtTop);
       
   345 }
       
   346 
       
   347 /*!
       
   348  Normal mode exited dummy implementation.
       
   349  */
       
   350 void HsBaseViewState::normalModeExited()
       
   351 {
       
   352 }
       
   353 
       
   354 /*!
       
   355  Defines transitions
       
   356  */
       
   357 void HsBaseViewState::defineTransitions()
       
   358 {
       
   359     QState *initialState = new QState(this);
       
   360     setInitialState(initialState);
       
   361 
       
   362     QState *addModeState = new QState(this);
       
   363     connect(addModeState, SIGNAL(entered()),SLOT(addModeEntered()));
       
   364 
       
   365     QState *normalModeState = new QState(this);
       
   366     connect(normalModeState, SIGNAL(entered()),SLOT(normalModeEntered()));
       
   367     connect(normalModeState, SIGNAL(exited()),SLOT(normalModeExited()));
       
   368 
       
   369     initialState->addTransition(new HsMenuModeTransition(
       
   370                                     *mMenuMode, NormalHsMenuMode, normalModeState));
       
   371     initialState->addTransition(new HsMenuModeTransition(
       
   372                                     *mMenuMode, AddHsMenuMode, addModeState));
       
   373 }