src/hbfeedback/player/hbcontinuousfeedback.cpp
changeset 0 16d8024aca5e
child 1 f7ac710697a9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbfeedback/player/hbcontinuousfeedback.cpp	Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,219 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbFeedback module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include "hbcontinuousfeedback.h"
+
+#include <QGraphicsItem>
+#include <QGraphicsView>
+#include <QDebug>
+
+class HbContinuousFeedbackPrivate
+{
+public:
+    HbContinuousFeedbackPrivate() : cEffect(HbFeedback::ContinuousSmooth),
+        cTimeout(HbFeedback::StandardFeedbackTimeout),
+        cIntensity(HbFeedback::IntensityFull)
+    {
+    };
+
+    ~HbContinuousFeedbackPrivate() {};
+
+public:
+    HbFeedback::ContinuousEffect cEffect;
+    int cTimeout;
+    int cIntensity;
+};
+
+/*!
+    @beta
+    @hbfeedback
+
+    \class HbContinuousFeedback
+
+    \brief Tool class for continuous feedback effects.
+
+    Continuous feedbacks are used to play sound and haptic effects that last as long as the user is touching the screen,
+    for example when dragging an interface object, scrolling a list or a slider. Continuous feedback
+    effects need to be started, updated and cancelled during the life time of the feedback using methods
+    HbFeedbackPlayer::startContinuousFeedback(), HbFeedbackPlayer::updateContinuousFeedback() and
+    HbFeedbackPlayer::cancelContinuousFeedback(). The effect intensity can be varied during the feedback.
+*/
+
+
+/*!
+    \fn void HbContinuousFeedback::setContinuousEffect(HbFeedback::ContinuousEffect effect)
+
+    Sets the continuous effect that determines what kind of continuous haptic and sound effects will
+    be played when calling HbFeedbackPlayer::startContinuousFeedback(). The actual effects are
+    defined in the device themes.
+*/
+
+void HbContinuousFeedback::setContinuousEffect(HbFeedback::ContinuousEffect effect)
+{
+    d->cEffect = effect;
+}
+
+/*!
+    \fn void HbFeedback::ContinuousEffect HbContinuousFeedback::continuousEffect() const
+
+    Returns the continuous effect of the continuous feedback object. Continuous effect is used to determine what kind of continuous
+    haptic and sound effects will be played when calling HbFeedbackPlayer::startContinuousFeedback(). The actual effects are
+    defined in the device themes.
+*/
+
+HbFeedback::ContinuousEffect HbContinuousFeedback::continuousEffect() const
+{
+    return d->cEffect;
+}
+
+/*!
+    \fn int HbContinuousFeedback::timeout() const
+
+    The timeout value of the feedback in milliseconds. Continuous feedback is
+    automatically cancelled if previously started continuous feedback hasn't been
+    updated within the timeout.
+*/
+
+int HbContinuousFeedback::timeout() const {
+    return d->cTimeout;
+}
+
+/*!
+    \fn int HbContinuousFeedback::intensity() const
+
+    The intensity of the continuous feedback effect. Intensity
+    can be varied between values zero and HbFeedback::IntensityFull = 100.
+*/
+
+int HbContinuousFeedback::intensity() const {
+    return d->cIntensity;
+}
+
+/*!
+    \fn HbFeedback::Type HbContinuousFeedback::type() const
+
+    Returns HbFeedback::TypeContinuous.
+*/
+
+/*!
+    Constructor.
+*/
+HbContinuousFeedback::HbContinuousFeedback() :d(new HbContinuousFeedbackPrivate)
+{
+}
+
+/*!
+    Constructor.
+
+    \param effect continuous feedback to be played
+    \param widget used to determine the window where continuous feedback is active.
+           There can only be one ongoing continuous feedback per application window.
+*/
+HbContinuousFeedback::HbContinuousFeedback(HbFeedback::ContinuousEffect effect, const QWidget *widget) : d(new HbContinuousFeedbackPrivate)
+{
+    d->cEffect = effect;
+    setOwningWindow(widget);
+}
+
+/*!
+    Destructor.
+*/
+HbContinuousFeedback::~HbContinuousFeedback()
+{
+    delete d;
+}
+
+/*!
+    Sets the timeout value in milliseconds. Continuous feedback is automatically cancelled
+    if the continuous feedback hasn't been updated within the timeout.
+*/
+void HbContinuousFeedback::setTimeout(int msecTimeout)
+{
+    if (msecTimeout > 0) {
+        d->cTimeout = msecTimeout;
+    }
+}
+
+/*!
+    Sets the intensity of the continuous feedback effect. The intensity
+    has to always be between zero and HbFeedback::IntensityFull = 100.
+*/
+void HbContinuousFeedback::setIntensity(int intensity)
+{
+    if (intensity >= 0 && intensity <= HbFeedback::IntensityFull) {
+        d->cIntensity = intensity;
+    }
+}
+
+/*!
+    Continuous feedback is valid if the feedback effect is not set to HbFeedback::ContinuousNone
+    and if the owning window has been defined. There can only be one ongoing continuous feedback effect
+    per one application window.
+*/
+bool HbContinuousFeedback::isValid() const
+{
+    switch(d->cEffect) {
+    case HbFeedback::NoContinuousOverride :
+        return false;
+    default:
+        return d->cEffect != HbFeedback::ContinuousNone && window();
+    }
+};
+
+
+/*!
+    Assigns a copy of the feedback \a feedback to this feedback, and returns a
+    reference to it.
+*/
+HbContinuousFeedback &HbContinuousFeedback::operator=(const HbContinuousFeedback &feedback)
+{
+    HbAbstractFeedback::operator =(feedback);
+    setContinuousEffect(feedback.continuousEffect());
+    setTimeout(feedback.timeout());
+    setIntensity(feedback.intensity());
+    return *this;
+}
+
+/*!
+    Returns true if the continuous feedbacks have the same parent window,
+    area rect, continuous effect, timeout and intensity.
+*/
+bool HbContinuousFeedback::operator==(const HbContinuousFeedback &feedback) const
+{
+    return (rect() == feedback.rect()
+            && window() == feedback.window()
+            && d->cEffect == feedback.continuousEffect()
+            && d->cTimeout == feedback.timeout()
+            && d->cIntensity == feedback.intensity());
+}
+
+/*!
+    Returns true if the continuous feedbacks have different parent window,
+    area rect, continuous effect, timeout or intensity.
+*/
+bool HbContinuousFeedback::operator!=(const HbContinuousFeedback &feedback) const
+{
+    return !(*this == feedback);
+}