diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -21,14 +21,15 @@ #include #include #include +#include #include #include #include #include +#include #include "hsmenueventfactory.h" #include "hsmenuservice.h" -#include "hswidgetdata.h" #include "hswidgethost.h" #include "hspreviewhswidgetstate.h" #include "hsmenuevent.h" @@ -43,13 +44,16 @@ #include "hsdomainmodel_global.h" #include + +const char HS_PREVIEW_HS_WIDGET_STATE[] = "HsPreviewHSWidgetState"; + /*! Constructor \param parent: parent state \retval void */ HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) : - HsMenuBaseState("HsPreviewHSWidgetState", parent), + HsMenuBaseState(HS_PREVIEW_HS_WIDGET_STATE, parent), mPopupDialog(0), mNotifier(0) { @@ -65,9 +69,6 @@ if (mNotifier) { delete mNotifier; } - if (mPopupDialog) { - delete mPopupDialog; - } } /*! @@ -94,65 +95,60 @@ const int entryId = data.value(itemIdKey()).toInt(); - QVariantMap widgetData; - widgetData.insert("library", data.value(widgetLibraryAttributeName()).toString()); - widgetData.insert("uri", data.value(widgetUriAttributeName()).toString()); - HsWidgetHost *widget = contentService()->createWidgetForPreview(widgetData); + QVariantHash widgetData; + widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString()); + widgetData.insert(URI, data.value(widgetUriAttributeName()).toString()); + QScopedPointer widget( + contentService()->createWidgetForPreview(widgetData)); if (widget) { widget->setMinimumSize(widget->preferredWidth(),widget->preferredHeight()); - HbScrollArea *scrollArea = new HbScrollArea(); - scrollArea->setClampingStyle(HbScrollArea::StrictClamping); - scrollArea->setScrollingStyle(HbScrollArea::Pan); - scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); - scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);// - scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); - scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);// - scrollArea->verticalScrollBar()->setInteractive(true); - scrollArea->horizontalScrollBar()->setInteractive(true); - // this sets up the scroll area to scroll in both directions - scrollArea->setScrollDirections(Qt::Vertical | Qt::Horizontal); - scrollArea->setContentWidget(widget); //ownership transferred - scrollArea->setAlignment(Qt::AlignCenter); + + HbDocumentLoader loader; - // Instantiate a popup - mPopupDialog = new HbDialog(); - - // Set dismiss policy that determines what tap events will cause the dialog - // to be dismissed - mPopupDialog->setDismissPolicy(HbDialog::NoDismiss); - mPopupDialog->setTimeout(HbDialog::NoTimeout); - - // Set content widget - mPopupDialog->setContentWidget(scrollArea); //ownership transferred + bool loadStatusOk = false; + mObjectList = + loader.load(HS_WIDGET_PREVIEW_DIALOG_LAYOUT, &loadStatusOk); + Q_ASSERT_X(loadStatusOk, + HS_WIDGET_PREVIEW_DIALOG_LAYOUT, + "Error while loading docml file."); - // Sets the primary action and secondary action - mPopupDialog->setPrimaryAction(new HbAction(hbTrId("txt_applib_button_add_to_homescreen"),mPopupDialog)); - mPopupDialog->setSecondaryAction(new HbAction(hbTrId("txt_common_button_close"),mPopupDialog)); - - subscribeForMemoryCardRemove(entryId); - widget->initializeWidget(); - widget->showWidget(); - // Launch popup syncronously - HbAction *result = mPopupDialog->exec(); - - disconnect(mNotifier, - SIGNAL(entryChanged(const CaEntry &, ChangeType)), - this, SLOT(memoryCardRemoved())); - - if (result == mPopupDialog->primaryAction()) { - // take it back from scrollarea + mPopupDialog = + qobject_cast( + loader.findWidget(HS_WIDGET_PREVIEW_DIALOG_NAME)); + + HbScrollArea *const scrollArea( + qobject_cast( + loader.findWidget(HS_WIDGET_PREVIEW_SCROLL_AREA_NAME))); + + if (mPopupDialog != NULL && scrollArea != NULL) { + mPopupDialog->setContentWidget(scrollArea); //ownership transferred + mPopupDialog->setTimeout(HbPopup::NoTimeout); + scrollArea->verticalScrollBar()->setInteractive(true); + scrollArea->horizontalScrollBar()->setInteractive(true); + scrollArea->setContentWidget(widget.data()); scrollArea->takeContentWidget(); - widget->hideWidget(); - widget->uninitializeWidget(); - HsScene::instance()->activePage()->addNewWidget(widget); - } else { - widget->deleteFromDatabase(); + + subscribeForMemoryCardRemove(entryId); + widget->initializeWidget(); + widget->showWidget(); + // Launch popup syncronously + const HbAction *const action(mPopupDialog->exec()); + + disconnect(mNotifier, + SIGNAL(entryChanged(CaEntry,ChangeType)), + this, SLOT(memoryCardRemoved())); + + if (action == mPopupDialog->primaryAction()) { + widget->hideWidget(); + HsScene::instance()->activePage()->addNewWidget( + widget.take()); // ownership transferred + } else { + widget->uninitializeWidget(); + widget->deleteFromDatabase(); + } } - delete result; - result = NULL; - } else { showMessageWidgetCorrupted(entryId); } @@ -171,15 +167,14 @@ { HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::stateExited"); - if (mNotifier) { - delete mNotifier; - mNotifier = NULL; - } + + delete mNotifier; + mNotifier = NULL; - if (mPopupDialog) { - delete mPopupDialog; - mPopupDialog = NULL; - } + qDeleteAll(mObjectList); + mObjectList.clear(); + + mPopupDialog = NULL; HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::stateExited"); qDebug("HsPreviewHSWidgetState::stateExited()"); @@ -210,7 +205,7 @@ mNotifier = CaService::instance()->createNotifier(filter); mNotifier->setParent(this); connect(mNotifier, - SIGNAL(entryChanged(const CaEntry &, ChangeType)), + SIGNAL(entryChanged(CaEntry,ChangeType)), SLOT(memoryCardRemoved())); }