homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp
changeset 62 341166945d65
parent 57 2e2dc3d30ca8
child 63 52b0f64eeb51
--- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp	Thu Jun 24 13:11:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,348 +0,0 @@
-/*
-* Copyright (c) 2010 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 <QAction>
-#include <QApplication>
-#include <QDir>
-#include <QFileInfo>
-
-#include <HbMainWindow>
-#include <HbProgressDialog>
-
-#include "hsselectbackgroundstate.h"
-#include "hsscene.h"
-#include "hsdomainmodeldatastructures.h"
-#include "hswallpaper.h"
-#include "hsdatabase.h"
-#include "hshomescreenstatecommon.h"
-#include "hsconfiguration.h"
-
-#ifdef Q_OS_SYMBIAN
-#include "hsimagefetcherclient.h"
-#else
-#include "xqaiwgetimageclient.h"
-#include "xqaiwcommon.h"
-#endif
-
-const char hsLocTextId_ProgressDialog_WallpaperLoading[] =
-            "txt_homescreen_dpopinfo_loading_wallpaper";
-
-/*! 
-    \class HsSelectBackgroundState
-    \ingroup group_hshomescreenstateprovider
-    \brief Implements imagefetcher event listening and handles those events.
-
-    \sa StateMachine
-*/
-
-/*!
-    Constructor.         
-    \a parent Owner.
-*/
-HsSelectBackgroundState::HsSelectBackgroundState(QState *parent):
-    QState(parent),
-    mImageFetcher(0),
-    mSourceView(0),
-    mPortraitWallpaperImageReader(0),
-    mLandscapeWallpaperImageReader(0),
-    mProgressDialog(0),
-    mRunningThreadAmount(0),
-    mShowAnimation(false)
-{
-#ifdef Q_OS_SYMBIAN
-    mImageFetcher = new HsImageFetcherClient(this);
-#else    
-    mImageFetcher = new XQAIWGetImageClient;
-#endif
-
-    connect(this, SIGNAL(entered()), SLOT(action_selectWallpaper()));
-    connect(this, SIGNAL(exited()), SLOT(action_disconnectImageFetcher()));
-    connect(this, SIGNAL(handleError()), SLOT(onHandleError()));
-}
-
-/*!
-    Destructor.
-    
-*/
-HsSelectBackgroundState::~HsSelectBackgroundState()
-{
-    delete mImageFetcher;
-    delete mPortraitWallpaperImageReader;
-    delete mLandscapeWallpaperImageReader;
-}
-
-/*!
-    \internal
-    Connects to image fetcher and launches "remote" ui from photos
-    from which user can select background image
-*/
-void HsSelectBackgroundState::action_selectWallpaper()
-{
-    mSourceView = HsScene::mainWindow()->currentView();
-
-    mRunningThreadAmount = 0;
-    mShowAnimation = false;
-
-#ifdef Q_OS_SYMBIAN
-    connect(mImageFetcher, SIGNAL(fetchCompleted(const QString&)),
-            this, SLOT(fetchCompleted(const QString&)));
-    connect(mImageFetcher, SIGNAL(fetchFailed(int, const QString&)),
-            this, SLOT(fetchFailed(int, const QString&)));
-    mImageFetcher->fetch();
-#else
-    connect(mImageFetcher, SIGNAL(fetchComplete(QStringList)),
-            SLOT(onFetchComplete(QStringList)));
-    connect(mImageFetcher, SIGNAL(fetchFailed(int)),
-            SLOT(onFetchFailed(int)));
-    mImageFetcher->fetch(QVariantMap(), SelectionSingle);
-#endif
-}
-
-/*!
-    \internal
-    disconnects photos image fetcher services slots.
-*/
-void HsSelectBackgroundState::action_disconnectImageFetcher()
-{
-    HsScene::mainWindow()->setCurrentView(mSourceView);
-    mImageFetcher->disconnect(this);
-}
-
-/*!
-    \internal
-    Called when user has selected an image 
-*/
-void HsSelectBackgroundState::onFetchComplete(QStringList imageStringList)
-{
-    // start animation immediately
-    onShowAnimation();
-
-    // check that sceneData is available
-    HsDatabase *db = HsDatabase::instance();
-    Q_ASSERT(db);
-    HsSceneData sceneData;
-    if (!db->scene(sceneData)) {
-        emit handleError();
-        return;
-    }
-
-    // clean thread instances
-    delete mPortraitWallpaperImageReader;
-    delete mLandscapeWallpaperImageReader;
-    mPortraitWallpaperImageReader = NULL;
-    mLandscapeWallpaperImageReader = NULL;
-
-    mPortraitWallpaperImageReader = new HsWallpaperImageReader();
-    mLandscapeWallpaperImageReader = new HsWallpaperImageReader();
-
-    mRunningThreadAmount = 2;
-
-    // delete old wallpapers
-    QFile::remove(sceneData.portraitWallpaper);
-    QFile::remove(sceneData.landscapeWallpaper);
-
-    QString wallpaperDir = HsWallpaper::wallpaperDirectory();            
-    QDir dir(wallpaperDir);
-    if (!dir.exists()) {
-        dir.mkpath(wallpaperDir);
-    }
-
-    // left empty to signal we want to use full size image as source
-    QRect sourceRect;
-
-    // Initialize portrait image threading
-    QRect targetRectPortrait(0, 0, (2 * 360) + HsConfiguration::bounceEffect(), 640);
-    mPortraitWallpaperImageReader->setSourcePath(imageStringList.first());
-    mPortraitWallpaperImageReader->setSourceRect(sourceRect);
-    mPortraitWallpaperImageReader->setTargetRect(targetRectPortrait);
-    mPortraitWallpaperImageReader->setCenterTarget(true);
-
-    connect(mPortraitWallpaperImageReader,
-            SIGNAL(finished()),
-            SLOT(onImageProcessed()));
-
-    // Initialize landscape image threading
-    QRect targetRectLandscape(0, 0, (2 * 640) + HsConfiguration::bounceEffect(), 360);
-    mLandscapeWallpaperImageReader->setSourcePath(imageStringList.first());
-    mLandscapeWallpaperImageReader->setSourceRect(sourceRect);
-    mLandscapeWallpaperImageReader->setTargetRect(targetRectLandscape);
-    mLandscapeWallpaperImageReader->setCenterTarget(true);
-
-    connect(mLandscapeWallpaperImageReader,
-            SIGNAL(finished()),
-            SLOT(onImageProcessed()));
-  
-    // start image processing in thread
-    mPortraitWallpaperImageReader->start();
-    mLandscapeWallpaperImageReader->start();
-}
-
-/*!
-    \internal
-    Called when selection of background image fails  
-*/
-void HsSelectBackgroundState::onFetchFailed(int error)
-{
-    Q_UNUSED(error)
-    emit handleError();
-}
-
-/*!
-    \internal
-    Called when image processing is finished in thread  
-*/
-void HsSelectBackgroundState::onImageProcessed()
-{
-    mRunningThreadAmount--;
-
-    HsDatabase *db = HsDatabase::instance();
-    Q_ASSERT(db);
-    HsSceneData sceneData;
-    if (!db->scene(sceneData)) {
-        emit handleError();
-        return;
-    }
-
-    QFileInfo fileInfo;
-    // get image path
-    if (sender() == mPortraitWallpaperImageReader) {
-        fileInfo = mPortraitWallpaperImageReader->sourcePath();
-    } else {
-        fileInfo = mLandscapeWallpaperImageReader->sourcePath();
-    }
-    // suffix is same for both orientations
-    QString fileExtension("");
-    if (!fileInfo.suffix().isEmpty()) {
-        fileExtension = fileInfo.suffix();
-    }
-
-    QImage image;
-    // set portrait image path to sceneData
-    QString portraitPath(HsWallpaper::wallpaperPath(Qt::Vertical, QString(),
-                                                    fileExtension));
-    // we need to set this always as image to be activated can be either orientation
-    sceneData.portraitWallpaper = portraitPath;
-    QString landscapePath(HsWallpaper::wallpaperPath(Qt::Horizontal, QString(),
-                                                     fileExtension));
-    sceneData.landscapeWallpaper = landscapePath;
-
-    if (sender() == mPortraitWallpaperImageReader) {
-        // get image from thread
-        image = mPortraitWallpaperImageReader->processedImage();
-        // save image
-        image.save(portraitPath);
-    } else {
-        image = mLandscapeWallpaperImageReader->processedImage();
-        image.save(landscapePath);
-    }
-
-    if (image.isNull()) {
-        emit handleError();
-        return;
-    }
-    // update scenedata and set new image to background
-    if (db->updateScene(sceneData)) {
-        HsScene *scene = HsScene::instance();
-        // set image to wallpaper (don't activate yet)
-        if (sender() == mPortraitWallpaperImageReader) {
-            scene->wallpaper()->setPortraitImage(portraitPath, false);
-        } else {
-            scene->wallpaper()->setLandscapeImage(landscapePath, false);
-        }
-        // if last thread running
-        if (mRunningThreadAmount == 0) {
-            // if current orientation matches -> set to active wallpaper
-            if (HsScene::orientation() == Qt::Vertical) {
-                scene->wallpaper()->setPortraitImage(portraitPath, true);
-            } else {
-                scene->wallpaper()->setLandscapeImage(landscapePath, true);
-            }
-            // finish progress bar
-            if (mShowAnimation) {
-                mProgressDialog->setProgressValue(3);
-            }
-            // let user control again homescreen
-            emit event_waitInput();
-        } else {
-            // update progress information
-            if (mShowAnimation) {
-                mProgressDialog->setProgressValue(2);
-            }
-        }
-    }     
-}
-
-/*!
-    \internal
-    Shows animation for longer processing
-*/
-void HsSelectBackgroundState::onShowAnimation()
-{
-    delete mProgressDialog;
-    mProgressDialog = new HbProgressDialog(HbProgressDialog::ProgressDialog);
-    /* TODO: workaround to remove cancel button (setPrimaryAction(0) is deprecated).
-     * clearActions does the same but crashes, fix should be in wk16, check orbit list
-     */
-    QList<QAction*> actions = mProgressDialog->actions();
-    actions[0]->setVisible(false);
-    mProgressDialog->setIcon(HbIcon("note_info"));
-    mProgressDialog->setText(hbTrId(hsLocTextId_ProgressDialog_WallpaperLoading));
-    mProgressDialog->setMinimum(0);
-    mProgressDialog->setMaximum(3);
-    mProgressDialog->setBackgroundFaded(true);
-    mProgressDialog->setAutoClose(true);
-    // set initial value to appear as loading
-    mProgressDialog->setProgressValue(1);
-    mProgressDialog->show();
-    mShowAnimation = true;
-}
-
-/*!
-    \internal
-    Called when error occurs during image processing  
-*/
-void HsSelectBackgroundState::onHandleError()
-{
-    if (mShowAnimation) {
-        mProgressDialog->close();
-    }
-    emit event_waitInput();
-}
-
-/*!
-    \internal
-    Called when user has selected an image on emulator or HW
-*/
-#ifdef Q_OS_SYMBIAN
-void HsSelectBackgroundState::fetchCompleted(const QString& imageFileName)
-{
-    QStringList imageFileNameAsList(imageFileName);
-    onFetchComplete(imageFileNameAsList);
-}
-#endif
-
-/*!
-    \internal
-    Called when selection of background image fails on emulator or HW
-*/
-#ifdef Q_OS_SYMBIAN
-void HsSelectBackgroundState::fetchFailed(int error, const QString& errorString)
-{
-    Q_UNUSED(errorString)
-    onFetchFailed(error);        
-}
-#endif