homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp
changeset 77 4b195f3bea29
parent 60 30f14686fb04
child 85 35368b604b28
--- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp	Tue Jul 06 14:06:53 2010 +0300
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp	Wed Aug 18 09:40:07 2010 +0300
@@ -15,7 +15,6 @@
  *
 */
 
-
 #include <hblabel.h>
 #include <hbmessagebox.h>
 #include <qstatemachine.h>
@@ -35,10 +34,12 @@
 #include "hswidgethost.h"
 #include "hspreviewhswidgetstate.h"
 #include "hsmenuevent.h"
+#include "hsmenudialogfactory.h"
 #include "hsapp_defs.h"
 #include "hsscene.h"
 #include "hspage.h"
 
+
 #include "canotifier.h"
 #include "canotifierfilter.h"
 #include "caservice.h"
@@ -63,10 +64,12 @@
 HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) :
     QState(parent),
     mPreviewDialog(0),
-    mNotifier(0),
-    mWidget(0),
     mEntryId(0),
-    mCorruptedMessage(0)
+    mCorruptedMessage(0),
+    mConfirmRemovalAction(0),
+    mAddToHomescreenAction(0),
+    mToken(),
+    mUri()
 {
     setObjectName("/HsPreviewHSWidgetState");
     if (this->parent()) {
@@ -100,34 +103,27 @@
     HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::onEntry");
     QState::onEntry(event);
     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
+   
     QVariantMap data = menuEvent->data();
-
     mEntryId = data.value(itemIdKey()).toInt();
-
-    QVariantHash widgetData;
-    widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString());
-    widgetData.insert(URI, data.value(widgetUriAttributeName()).toString());
-
-    mWidget.reset(
-        HsContentService::instance()->createWidgetForPreview(widgetData));
-
-    if (!mWidget.isNull()) {
+    mToken = data.value(HOMESCREENDATA);
+    
         
-        QSharedPointer<CaEntry> entry = 
-            CaService::instance()->getEntry(mEntryId);
-        
-        mPreviewDialog = buildPreviewDialog(*entry);
+    QSharedPointer<CaEntry> entry =
+        CaService::instance()->getEntry(mEntryId);
+    mUri = entry->attribute(widgetUriAttributeName());
+    mPreviewDialog = buildPreviewDialog(*entry);
+    mAddToHomescreenAction = mPreviewDialog->actions().value(0);
+    
+    if (mPreviewDialog != NULL) {
+        // Launch popup asyncronously
         
-        if (mPreviewDialog != NULL) {
-            subscribeForMemoryCardRemove();
-            // Launch popup asyncronously
-            mPreviewDialog->open(this, SLOT(previewDialogFinished(HbAction*)));    
-        }
-    } else {
-        subscribeForMemoryCardRemove();
-        showMessageWidgetCorrupted();
+        mEntryObserver.reset(
+            new HsMenuEntryRemovedHandler(mEntryId, this, SIGNAL(exit())));
+        
+        mPreviewDialog->open(this, SLOT(previewDialogFinished(HbAction*)));
     }
-
+    
     HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::onEntry");
 }
 
@@ -137,29 +133,19 @@
  */
 void HsPreviewHSWidgetState::cleanUp()
 {
-    // Close popups if App key was pressed or memory card removed
-    if (mPreviewDialog) {
-        disconnect(mPreviewDialog, SIGNAL(finished(HbAction*)), 
-            this, SLOT(previewDialogFinished(HbAction*)));
-        mPreviewDialog->close();
+    if (mPreviewDialog != NULL) {
+        mPreviewDialog->disconnect();
+        mPreviewDialog ->close();
         mPreviewDialog = NULL;
     }
-
-    if (mCorruptedMessage) {
-        disconnect(mCorruptedMessage, SIGNAL(finished(HbAction*)), 
-            this, SLOT(messageWidgetCorruptedFinished(HbAction*)));
+    
+    if (mCorruptedMessage != NULL) {
+        mCorruptedMessage->disconnect();
         mCorruptedMessage->close();
         mCorruptedMessage = NULL;
     }
-
-    mWidget.reset();
-
-    disconnect(mNotifier,
-               SIGNAL(entryChanged(CaEntry,ChangeType)),
-               this, SIGNAL(exit()));
-
-    delete mNotifier;
-    mNotifier = NULL;
+    
+    mToken = NULL;
 }
 
 /*!
@@ -168,38 +154,30 @@
  */
 void HsPreviewHSWidgetState::previewDialogFinished(HbAction* finishedAction)
 {
-    if (finishedAction == mPreviewDialog->actions().value(0)) {
+    mPreviewDialog = NULL;
+
+    if (finishedAction == mAddToHomescreenAction) {
 
-        HsScene::instance()->activePage()->addNewWidget(
-            mWidget.take()); // ownership transferred
-        HbNotificationDialog *notificationDialog = new HbNotificationDialog();
-        notificationDialog->setAttribute(Qt::WA_DeleteOnClose);
-        notificationDialog->setTitle(hbTrId(
-                                     "txt_applib_dpophead_added_to_homescreen") );
-        notificationDialog->show();
+        QVariantHash widgetData;
+        widgetData[URI] = mUri;
+        widgetData[HOMESCREENDATA] = mToken;
+        
+        bool success = HsContentService::instance()->createWidget(widgetData);
+        
+        if (success) {
+            HbNotificationDialog *notificationDialog = new HbNotificationDialog();
+            notificationDialog->setAttribute(Qt::WA_DeleteOnClose);
+            notificationDialog->setTitle(hbTrId("txt_applib_dpophead_added_to_homescreen"));
+            notificationDialog->show();
+            emit exit();
+        }
+        else {
+            showMessageWidgetCorrupted();            
+        }
     } else {
-            mWidget->remove();
-            mWidget.take();   
-            mWidget.reset();
+        emit exit();
     }
-    emit exit();
-}
-
-/*!
- Subscribe for memory card remove.
- \retval void
- */
-void HsPreviewHSWidgetState::subscribeForMemoryCardRemove()
-{
-    CaNotifierFilter filter;
-    QList<int> entryIds;
-    entryIds.append(mEntryId);
-    filter.setIds(entryIds);
-    mNotifier = CaService::instance()->createNotifier(filter);
-    mNotifier->setParent(this);
-    connect(mNotifier,
-            SIGNAL(entryChanged(CaEntry,ChangeType)),
-            SIGNAL(exit()));
+    mAddToHomescreenAction = 0;
 }
 
 /*!
@@ -210,20 +188,13 @@
 {
     HSMENUTEST_FUNC_ENTRY("HsCollectionState::showMessageWidgetCorrupted");
 
-    mCorruptedMessage = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
-    mCorruptedMessage->setAttribute(Qt::WA_DeleteOnClose);
-
-    QString message(hbTrId("txt_applib_dialog_file_corrupted_unable_to_use_wi"));
-    mCorruptedMessage->setText(message);
+    mCorruptedMessage = HsMenuDialogFactory().create(
+            hbTrId("txt_applib_dialog_file_corrupted_unable_to_use_wi"));
 
-    mCorruptedMessage->clearActions();
-    HbAction *primaryAction = new HbAction(hbTrId("txt_common_button_ok"), mCorruptedMessage);
-    mCorruptedMessage->addAction(primaryAction);
+    mConfirmRemovalAction = mCorruptedMessage->actions().value(0);
+    mCorruptedMessage
+        ->open(this, SLOT(messageWidgetCorruptedFinished(HbAction*)));
 
-    HbAction *secondaryAction = new HbAction(hbTrId("txt_common_button_cancel"), mCorruptedMessage);
-    mCorruptedMessage->addAction(secondaryAction);
-
-    mCorruptedMessage->open(this, SLOT(messageWidgetCorruptedFinished(HbAction*)));
     HSMENUTEST_FUNC_EXIT("HsCollectionState::showMessageWidgetCorrupted");
 }
 
@@ -233,10 +204,14 @@
  */
 void HsPreviewHSWidgetState::messageWidgetCorruptedFinished(HbAction* finishedAction)
 {
-    if (finishedAction == mCorruptedMessage->actions().value(0)) {
+    mCorruptedMessage = NULL;
+	
+    if (static_cast<QAction*>(finishedAction) == mConfirmRemovalAction) {
         HsMenuService::executeAction(mEntryId, removeActionIdentifier());
     }
     emit exit();
+    
+    mConfirmRemovalAction = NULL;
 }
 
 /*!
@@ -260,7 +235,7 @@
     HbLabel *const iconBox =
         qobject_cast<HbLabel*>(
             loader.findWidget(HS_WIDGET_PREVIEW_ICON_BOX_NAME));
-    
+
     loadStatusOk = loadStatusOk && (previewDialog != NULL)
         && (headingLabel != NULL) && (iconBox != NULL);
     
@@ -269,8 +244,8 @@
            "Cannot initialize widgets based on docml file.");
     
     if (loadStatusOk) {
-        previewDialog->actions()[0]->setParent(previewDialog);
-        previewDialog->actions()[1]->setParent(previewDialog);
+        previewDialog->actions().value(0)->setParent(previewDialog);
+        previewDialog->actions().value(1)->setParent(previewDialog);
         
         previewDialog->setTimeout(HbPopup::NoTimeout);
         previewDialog->setAttribute(Qt::WA_DeleteOnClose, true);
@@ -283,6 +258,8 @@
         if (!previewImageName.isEmpty()) {
             const HbIcon previewImage(previewImageName);
             if (previewImage.size().isValid()) {
+                iconBox->setMinimumHeight(previewImage.height());
+                iconBox->setMaximumHeight(previewImage.height());
                 iconBox->setIcon(previewImage);
             }
         }