--- 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);
}
}