homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp
changeset 39 4e8ebe173323
parent 36 cdae8c6c3876
child 46 23b5d6a29cce
equal deleted inserted replaced
36:cdae8c6c3876 39:4e8ebe173323
    53  \retval void
    53  \retval void
    54  */
    54  */
    55 HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) :
    55 HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) :
    56     HsMenuBaseState(HS_PREVIEW_HS_WIDGET_STATE, parent),
    56     HsMenuBaseState(HS_PREVIEW_HS_WIDGET_STATE, parent),
    57     mPopupDialog(0),
    57     mPopupDialog(0),
    58     mNotifier(0)
    58     mNotifier(0),
       
    59     mScrollArea(0),
       
    60     mWidget(0),
       
    61     mEntryId(0)
    59 {
    62 {
    60     requestServices(QList<QVariant> () << CONTENT_SERVICE_KEY);
    63     requestServices(QList<QVariant> () << CONTENT_SERVICE_KEY);
    61     connect(this, SIGNAL(exited()),SLOT(stateExited()));
       
    62 }
    64 }
    63 
    65 
    64 /*!
    66 /*!
    65  Destructor.
    67  Destructor.
    66  */
    68  */
    91     HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::onEntry");
    93     HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::onEntry");
    92     HsMenuBaseState::onEntry(event);
    94     HsMenuBaseState::onEntry(event);
    93     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
    95     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
    94     QVariantMap data = menuEvent->data();
    96     QVariantMap data = menuEvent->data();
    95 
    97 
    96     const int entryId = data.value(itemIdKey()).toInt();
    98     mEntryId = data.value(itemIdKey()).toInt();
    97 
    99 
    98     QVariantHash widgetData;
   100     QVariantHash widgetData;
    99     widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString());
   101     widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString());
   100     widgetData.insert(URI, data.value(widgetUriAttributeName()).toString());
   102     widgetData.insert(URI, data.value(widgetUriAttributeName()).toString());
   101     QScopedPointer<HsWidgetHost> widget(
   103 
   102         contentService()->createWidgetForPreview(widgetData));
   104     QScopedPointer<HsWidgetHost> widget(contentService()->createWidgetForPreview(widgetData));
   103 
   105 
   104     if (widget) {
   106     if (widget) {
   105         widget->setMinimumSize(widget->preferredWidth(),widget->preferredHeight());
   107         widget->setMinimumSize(widget->preferredWidth(),widget->preferredHeight());
   106 
   108 
   107         HbDocumentLoader loader;
   109         HbDocumentLoader loader;
   114                "Error while loading docml file.");
   116                "Error while loading docml file.");
   115 
   117 
   116         mPopupDialog = 
   118         mPopupDialog = 
   117             qobject_cast<HbDialog*>(
   119             qobject_cast<HbDialog*>(
   118                 loader.findWidget(HS_WIDGET_PREVIEW_DIALOG_NAME));
   120                 loader.findWidget(HS_WIDGET_PREVIEW_DIALOG_NAME));
   119         
   121 
   120         HbScrollArea *const scrollArea( 
   122         mScrollArea =
   121             qobject_cast<HbScrollArea*>(
   123             qobject_cast<HbScrollArea*>(
   122                 loader.findWidget(HS_WIDGET_PREVIEW_SCROLL_AREA_NAME)));
   124                 loader.findWidget(HS_WIDGET_PREVIEW_SCROLL_AREA_NAME));
   123         
   125 
   124         if (mPopupDialog != NULL && scrollArea != NULL) {
   126         // set parent to actions to delete them together with dialog
   125             mPopupDialog->setContentWidget(scrollArea); //ownership transferred
   127         mPopupDialog->primaryAction()->setParent(mPopupDialog);
       
   128         mPopupDialog->secondaryAction()->setParent(mPopupDialog);
       
   129 
       
   130         if (mPopupDialog != NULL && mScrollArea != NULL) {
       
   131             mPopupDialog->setContentWidget(mScrollArea); // ownership transferred
   126             mPopupDialog->setTimeout(HbPopup::NoTimeout);
   132             mPopupDialog->setTimeout(HbPopup::NoTimeout);
   127             scrollArea->verticalScrollBar()->setInteractive(true);
   133             mPopupDialog->setAttribute(Qt::WA_DeleteOnClose, true);
   128             scrollArea->horizontalScrollBar()->setInteractive(true);
   134             mScrollArea->verticalScrollBar()->setInteractive(true);
   129             scrollArea->setContentWidget(widget.data());
   135             mScrollArea->horizontalScrollBar()->setInteractive(true);
   130             scrollArea->takeContentWidget();
   136             mWidget = widget.take(); // ownership transfered
       
   137             mScrollArea->setContentWidget(mWidget); // ownership transferred
   131             
   138             
   132             subscribeForMemoryCardRemove(entryId);
   139             subscribeForMemoryCardRemove();
   133             widget->initializeWidget();
   140             mWidget->initializeWidget();
   134             widget->showWidget();
   141             mWidget->showWidget();
   135             // Launch popup syncronously
   142             // Launch popup asyncronously
   136             const HbAction *const action(mPopupDialog->exec());
   143             mPopupDialog->open(this, SLOT(previewDialogFinished(HbAction*)));    
   137     
       
   138             disconnect(mNotifier,
       
   139                        SIGNAL(entryChanged(CaEntry,ChangeType)),
       
   140                        this, SLOT(memoryCardRemoved()));
       
   141     
       
   142             if (action == mPopupDialog->primaryAction()) {
       
   143                 widget->hideWidget();
       
   144                 HsScene::instance()->activePage()->addNewWidget(
       
   145                     widget.take()); // ownership transferred
       
   146             } else {
       
   147                 widget->uninitializeWidget();
       
   148                 widget->deleteFromDatabase();
       
   149             }
       
   150         }
   144         }
   151 
   145 
   152     } else {
   146     } else {
   153         showMessageWidgetCorrupted(entryId);
   147         showMessageWidgetCorrupted();
   154     }
   148     }
   155 
   149 
   156     HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::onEntry");
   150     HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::onEntry");
   157 }
   151 }
   158 #ifdef COVERAGE_MEASUREMENT
   152 #ifdef COVERAGE_MEASUREMENT
   159 #pragma CTC ENDSKIP
   153 #pragma CTC ENDSKIP
   160 #endif //COVERAGE_MEASUREMENT
   154 #endif //COVERAGE_MEASUREMENT
   161 
   155 
   162 /*!
       
   163  State exited.
       
   164  \retval void
       
   165  */
       
   166 void HsPreviewHSWidgetState::stateExited()
       
   167 {
       
   168     HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::stateExited");
       
   169 
       
   170 
       
   171     delete mNotifier;
       
   172     mNotifier = NULL;
       
   173 
       
   174     qDeleteAll(mObjectList);
       
   175     mObjectList.clear();
       
   176     
       
   177     mPopupDialog = NULL;
       
   178 
       
   179     HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::stateExited");
       
   180     qDebug("HsPreviewHSWidgetState::stateExited()");
       
   181 }
       
   182 
   156 
   183 /*!
   157 /*!
   184  Memory card with instaled widget was removed.
   158  Memory card with instaled widget was removed.
   185  \retval void
   159  \retval void
   186  */
   160  */
   190         mPopupDialog->close();
   164         mPopupDialog->close();
   191     }
   165     }
   192 }
   166 }
   193 
   167 
   194 /*!
   168 /*!
       
   169  Slot launched on dismissing the preview dialog
       
   170  \retval void
       
   171  */
       
   172 void HsPreviewHSWidgetState::previewDialogFinished(HbAction* finishedAction)
       
   173 {
       
   174     if (mPopupDialog != NULL) { 
       
   175         // (work-around for crash if more then one action is selected in HbDialog)
       
   176         disconnect(mNotifier,
       
   177                    SIGNAL(entryChanged(CaEntry,ChangeType)),
       
   178                    this, SLOT(memoryCardRemoved()));
       
   179 
       
   180         if (finishedAction == mPopupDialog->primaryAction()) {
       
   181             mWidget->hideWidget();
       
   182             mScrollArea->takeContentWidget();
       
   183             HsScene::instance()->activePage()->addNewWidget(
       
   184                 mWidget); // ownership transferred
       
   185         } else {
       
   186             mWidget->uninitializeWidget();
       
   187             mWidget->deleteFromDatabase();
       
   188         }
       
   189         mPopupDialog = NULL;
       
   190         mScrollArea = NULL;
       
   191         mWidget = NULL;
       
   192 
       
   193         delete mNotifier;
       
   194         mNotifier = NULL;
       
   195 
       
   196     } else {
       
   197         // (work-around for crash if more then one action is selected in HbDialog)
       
   198         qWarning("Another signal finished was emited.");
       
   199         }
       
   200 }
       
   201 
       
   202 
       
   203 
       
   204 /*!
   195  Subscribe for memory card remove.
   205  Subscribe for memory card remove.
   196  \param entryId: HSWidget id.
   206  \retval void
   197  \retval void
   207  */
   198  */
   208 void HsPreviewHSWidgetState::subscribeForMemoryCardRemove()
   199 void HsPreviewHSWidgetState::subscribeForMemoryCardRemove(int entryId)
       
   200 {
   209 {
   201     CaNotifierFilter filter;
   210     CaNotifierFilter filter;
   202     QList<int> entryIds;
   211     QList<int> entryIds;
   203     entryIds.append(entryId);
   212     entryIds.append(mEntryId);
   204     filter.setIds(entryIds);
   213     filter.setIds(entryIds);
   205     mNotifier = CaService::instance()->createNotifier(filter);
   214     mNotifier = CaService::instance()->createNotifier(filter);
   206     mNotifier->setParent(this);
   215     mNotifier->setParent(this);
   207     connect(mNotifier,
   216     connect(mNotifier,
   208             SIGNAL(entryChanged(CaEntry,ChangeType)),
   217             SIGNAL(entryChanged(CaEntry,ChangeType)),
   210 }
   219 }
   211 
   220 
   212 
   221 
   213 /*!
   222 /*!
   214  Shows message about corrupted widget library. Deletes widget eventually
   223  Shows message about corrupted widget library. Deletes widget eventually
   215  \param itemId entryId of widget (needed to delete it)
       
   216  \retval void
   224  \retval void
   217  */
   225  */
   218 #ifdef COVERAGE_MEASUREMENT
   226 #ifdef COVERAGE_MEASUREMENT
   219 #pragma CTC SKIP
   227 #pragma CTC SKIP
   220 #endif //COVERAGE_MEASUREMENT
   228 #endif //COVERAGE_MEASUREMENT
   221 void HsPreviewHSWidgetState::showMessageWidgetCorrupted(int itemId)
   229 void HsPreviewHSWidgetState::showMessageWidgetCorrupted()
   222 {
   230 {
   223     HSMENUTEST_FUNC_ENTRY("HsCollectionState::showMessageWidgetCorrupted");
   231     HSMENUTEST_FUNC_ENTRY("HsCollectionState::showMessageWidgetCorrupted");
       
   232 
   224     QString message(hbTrId("txt_applib_dialog_file_corrupted_unable_to_use_wi"));
   233     QString message(hbTrId("txt_applib_dialog_file_corrupted_unable_to_use_wi"));
   225     if (HbMessageBox::question(message,hbTrId(
   234     HbMessageBox::question(message, this,
   226                                    "txt_common_button_ok"), hbTrId("txt_common_button_cancel"))) {
   235                 SLOT(messageWidgetCorruptedFinished(HbAction*)),
   227         HsMenuService::executeAction(itemId, removeActionIdentifier());
   236                 hbTrId("txt_common_button_ok"), hbTrId("txt_common_button_cancel"));
   228     }
   237 
   229     HSMENUTEST_FUNC_EXIT("HsCollectionState::showMessageWidgetCorrupted");
   238     HSMENUTEST_FUNC_EXIT("HsCollectionState::showMessageWidgetCorrupted");
   230 }
   239 }
   231 #ifdef COVERAGE_MEASUREMENT
   240 #ifdef COVERAGE_MEASUREMENT
   232 #pragma CTC ENDSKIP
   241 #pragma CTC ENDSKIP
   233 #endif //COVERAGE_MEASUREMENT
   242 #endif //COVERAGE_MEASUREMENT
   234 
   243 
       
   244 
       
   245 /*!
       
   246  Slot launched on dismissing the corrupted widget error note
       
   247  \retval void
       
   248  */
       
   249 void HsPreviewHSWidgetState::messageWidgetCorruptedFinished(HbAction* finishedAction)
       
   250 {
       
   251     if (finishedAction && qobject_cast<HbMessageBox*>(finishedAction->parent())->primaryAction() == finishedAction) {
       
   252         HsMenuService::executeAction(mEntryId, removeActionIdentifier());
       
   253     }
       
   254 }