hswidgetmodel/src/hswidget.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:33:40 +0300
changeset 103 b99b84bcd2d1
parent 60 f62f87b200ec
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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:  Base class for all homescreen widgets.
*
*/
#include <QGraphicsDropShadowEffect>

#include "hswidget.h"
#include "hswidget_p.h"
#include "ihswidgetpreferenceservice.h"

/*DEPRECATED
    \ingroup group_hswidgetmodel group_widget_api_candidates
    \class HsWidget
    \brief Base class for all home screen widgets.

    Widget base class declares automata for derived widget. It also overwrites
    mouse event functions to enable all mouse events.
*/

/*!
    \enum HsWidget::StartResult
    
    Return values for onStart() method.
*/

/*!
    \enum HsWidget::StopResult
    
    Return values for onSuspend() method.
*/
/*!
    \enum HsWidget::SuspendResult
    
    Return values for onSuspend() method.
*/

/*!
    \enum HsWidget::ResumeResult
    
    Return values for onResume() method.
*/


const char WIDGET_PREFERENCE_SERVICE_KEY[]="http://homescreen.nokia.com/runtimeservices/widgetpreferenceservice";


HsWidgetPrivate::HsWidgetPrivate(HsWidget* handle): 
    mPublic(handle),
    mState(WidgetStateConstructed)
{

}

HsWidgetPrivate::~HsWidgetPrivate()
{

}

void HsWidgetPrivate::start()
{
    switch(mState)
    {
    case WidgetStateConstructed:
    case WidgetStateFinished:
        break;

    default:
        return;
    }

    switch(mPublic->onStart())
    {
    case HsWidget::StartResultRunning:
        mState = WidgetStateRunning;
        break;

    case HsWidget::StartResultFinished:
        mState = WidgetStateFinished;
        emit mPublic->succeeded();
        break;

    case HsWidget::StartResultFaulted:
        mState = WidgetStateFinished;
        emit mPublic->faulted();
        break;
    }
}


void HsWidgetPrivate::stop()
{
    switch(mState)
    {
    case WidgetStateRunning:
    case WidgetStateSuspended:
        break;

    default:
        return;
    }

    switch(mPublic->onStop())
    {
    case HsWidget::StopResultFinished:
        mState = WidgetStateFinished;
        emit mPublic->stopped();
        break;

    case HsWidget::StopResultFinishing:
        mState = WidgetStateFinishing;
        break;

    case HsWidget::StopResultFaulted:
        mState = WidgetStateFinished;
        emit mPublic->faulted();
        break;

    case HsWidget::StopResultFaulting:
        mState = WidgetStateFaulting;
        break;
    }
}


void HsWidgetPrivate::suspend()
{
    switch(mState)
    {
    case WidgetStateRunning:
        break;

    default:
        return;
    }

    switch(mPublic->onSuspend())
    {
    case HsWidget::SuspendResultSuspended:
        mState = WidgetStateSuspended;
        break;

    case HsWidget::SuspendResultFaulted:
        mState = WidgetStateFinished;
        emit mPublic->faulted();
        break;

    case HsWidget::SuspendResultFaulting:
        mState = WidgetStateFaulting;
        break;
    }
}

void HsWidgetPrivate::resume()
{
    switch(mState)
    {
    case WidgetStateSuspended:
        break;

    default:
        return;
    }

    switch(mPublic->onResume())
    {
    case HsWidget::ResumeResultRunning:
        mState = WidgetStateRunning;
        break;

    case HsWidget::ResumeResultFaulted:
        mState = WidgetStateFinished;
        emit mPublic->faulted();
        break;

    case HsWidget::ResumeResultFaulting:
        mState = WidgetStateFaulting;
        break;
    }
}


void HsWidgetPrivate::setFinished()
{
    switch(mState)
    {
    case WidgetStateConstructed:
    case WidgetStateFinished:
        return;

    case WidgetStateRunning:
        mState = WidgetStateFinished;
        emit mPublic->succeeded();
        break;

    case WidgetStateSuspended:
        mState = WidgetStateFinished;
        emit mPublic->succeeded();
        break;

    case WidgetStateFinishing:
        mState = WidgetStateFinished;
        emit mPublic->stopped();
        break;

    case WidgetStateFaulting:
        mState = WidgetStateFinished;
        emit mPublic->faulted();
        break;
    }
}


void HsWidgetPrivate::setFaulted()
{
    switch(mState)
    {
    case WidgetStateConstructed:
    case WidgetStateFinished:
        return;

    default:
        break;
    }

    mState = WidgetStateFinished;
    emit mPublic->faulted();
}


void HsWidgetPrivate::setFaulting()
{
    switch(mState)
    {
    case WidgetStateConstructed:
    case WidgetStateFinished:
    case WidgetStateFaulting:
        return;

    default:
        break;
    }

    mState = WidgetStateFaulting;
}
/*!
    Constructs a widget which is a child of \a parent, with widget flags set to \a flags.
    
*/
HsWidget::HsWidget(QGraphicsItem *parent, Qt::WindowFlags flags)
    : HbWidget(parent, flags),mD(new HsWidgetPrivate(this))
{   
}

/*!
    Destructor
    
*/
HsWidget::~HsWidget()
{
    delete mD;
}
/*!
    Convenience method that returns the widget preference service from dynamically
    added meta object property.
*/

IHsWidgetPreferenceService* HsWidget::widgetPreferenceService() const
{
    return property(WIDGET_PREFERENCE_SERVICE_KEY).
        value<IHsWidgetPreferenceService*>();
}

/*!
    Widget runtime starts widget
*/
void HsWidget::start()
{
    mD->start();
}

/*!
    Widget runtime stops widget
*/
void HsWidget::stop()
{
    mD->stop();
}

/*!
    Widget runtime suspends widget
*/
void HsWidget::suspend()
{
    mD->suspend();
}

/*!
    Widget runtime resumes widget
*/
void HsWidget::resume()
{
    mD->resume();
}

/*!
    \fn void HsWidget::succeeded()
  
    Emitted after this widget has succesfully done its job
*/

/*!
    \fn void HsWidget::stopped()
    
    Emitted after this widget has stopped
*/

/*!
    \fn void HsWidget::faulted()
  
    Emitted after this widget has faulted
*/

/*!
    \fn virtual StartResult HsWidget::onStart() = 0
    
    WIdget can now e.g restore preferences
*/

/*!
    \fn virtual StopResult HsWidget::onStop() = 0
    
    Release resources. Widget will be destroyed.
*/

/*!
    Called by the widget runtime. Suspends this widget.
*/
HsWidget::SuspendResult HsWidget::onSuspend()
{
    return SuspendResultSuspended;
}

/*!
    Called by the widget runtime. Resumes this widget.
*/
HsWidget::ResumeResult HsWidget::onResume()
{
    return ResumeResultRunning;
}

/*!
    Indicates to the widget runtime that this widget should
    transition to the Finished state.
*/
void HsWidget::setFinished()
{
    mD->setFinished();
}

/*!
    Indicates to the widget runtime that this widget should
    transition to the Faulted state.
*/
void HsWidget::setFaulted()
{
    mD->setFaulted();
}

/*!
    Indicates to the widget runtime that this widget should
    transition to the Faulting state.
*/
void HsWidget::setFaulting()
{
    mD->setFaulting();
}