diff -r 2e2dc3d30ca8 -r 341166945d65 homescreenapp/stateplugins/hshomescreenstateplugin/src/hswallpaperselectionstate.cpp --- /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(); +}