homescreenapp/stateplugins/hshomescreenstateplugin/src/hswallpaperselectionstate.cpp
changeset 62 341166945d65
child 90 3ac3aaebaee5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hswallpaperselectionstate.cpp	Fri Jun 25 19:19:22 2010 +0300
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "hswallpaperselectionstate.h"
+#include "hsspinnerdialog.h"
+#include "hsscene.h"
+#include "hspage.h"
+#include "hswallpaper.h"
+#include "hsconfiguration.h"
+
+#ifdef Q_OS_SYMBIAN
+#include "hsimagefetcherclient.h"
+#else
+#include "xqaiwgetimageclient.h"
+#endif
+
+// Helper macros for connecting state entry and exit actions.
+#define ENTRY_ACTION(state, action) \
+    connect(state, SIGNAL(entered()), SLOT(action()));
+#define EXIT_ACTION(state, action) \
+    connect(state, SIGNAL(exited()), SLOT(action()));
+
+/*!
+    \class HsWallpaperSelectionState
+    \ingroup group_hshomescreenstateplugin
+    \brief 
+*/
+
+/*!
+
+*/
+HsWallpaperSelectionState::HsWallpaperSelectionState(QState *parent)
+  : QState(parent),    
+    mImageFetcher(0),
+    mWallpaper(0),    
+    mWaitDialog(0)
+{
+    setupStates();
+}
+
+/*!
+
+*/
+HsWallpaperSelectionState::~HsWallpaperSelectionState()
+{
+
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::setupStates()
+{
+    // States
+    
+    QState *state_processing = new QState(this);
+    QState *state_selectingImage = new QState(state_processing);
+    QState *state_assigningImage = new QState(state_processing);
+    QState *state_errorMessage = new QState(this);
+    
+    setInitialState(state_processing);
+    state_processing->setInitialState(state_selectingImage);
+    
+    // Transitions
+
+    state_selectingImage->addTransition(
+        this, SIGNAL(event_assignImage()), state_assigningImage);
+    
+    state_processing->addTransition(
+        this, SIGNAL(event_error()), state_errorMessage);
+
+    // Actions
+
+    ENTRY_ACTION(state_selectingImage, action_selectingImage_start)
+    EXIT_ACTION(state_selectingImage, action_selectingImage_cleanup)
+
+    ENTRY_ACTION(state_assigningImage, action_assigningImage_showWaitDialog)
+    ENTRY_ACTION(state_assigningImage, action_assigningImage_start)
+    EXIT_ACTION(state_assigningImage, action_assigningImage_cleanup)
+    EXIT_ACTION(state_assigningImage, action_assigningImage_hideWaitDialog)
+
+    ENTRY_ACTION(state_errorMessage, action_errorMessage_show)
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::action_selectingImage_start()
+{
+#ifdef Q_OS_SYMBIAN
+    mImageFetcher = new HsImageFetcherClient;
+#else    
+    mImageFetcher = new XQAIWGetImageClient;
+#endif
+
+    connect(mImageFetcher, SIGNAL(fetchCompleted(const QString&)),
+            this, SLOT(onFetchCompleted(const QString&)));
+    connect(mImageFetcher, SIGNAL(fetchFailed(int, const QString&)),
+            this, SLOT(onFetchFailed(int, const QString&)));
+
+    mImageFetcher->fetch();
+}
+ 
+/*!
+
+*/
+void HsWallpaperSelectionState::action_selectingImage_cleanup()
+{
+    mImageFetcher->disconnect(this);
+    mImageFetcher->deleteLater();
+    mImageFetcher = 0;
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::action_assigningImage_showWaitDialog()
+{
+    mWaitDialog = new HsSpinnerDialog;
+    mWaitDialog->start();
+}
+  
+/*!
+
+*/
+void HsWallpaperSelectionState::action_assigningImage_start()
+{
+    HsScene *scene = HsScene::instance();
+
+    if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::SceneWallpaper) {
+        mWallpaper = scene->wallpaper();
+    } else {
+        mWallpaper = scene->activePage()->wallpaper();
+    }
+
+    connect(mWallpaper, SIGNAL(imageSet()), SLOT(onImageSet()));
+    connect(mWallpaper, SIGNAL(imageSetFailed()), SLOT(onImageSetFailed()));
+    
+    mWallpaper->setImage(mImagePath);
+}
+ 
+/*!
+
+*/
+void HsWallpaperSelectionState::action_assigningImage_cleanup()
+{
+    mWallpaper->disconnect(this);
+    mWallpaper = 0;
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::action_assigningImage_hideWaitDialog()
+{
+    mWaitDialog->stop();
+    mWaitDialog = 0;
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::action_errorMessage_show()
+{
+    // TODO: Waiting for UX decision.
+    emit event_waitInput();
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::onFetchCompleted(const QString &imagePath)
+{
+    mImagePath = imagePath;
+    emit event_assignImage();
+}
+ 
+/*!
+
+*/
+void HsWallpaperSelectionState::onFetchFailed(int errorCode, const QString &errorMessage)
+{
+    Q_UNUSED(errorCode)
+    Q_UNUSED(errorMessage)
+    emit event_error();
+}
+
+/*!
+
+*/
+void HsWallpaperSelectionState::onImageSet()
+{
+    emit event_waitInput();
+}
+ 
+/*!
+
+*/
+void HsWallpaperSelectionState::onImageSetFailed()
+{
+    emit event_error();
+}