Change copyrights from Nokia to Digia
[qt:qtfeedback.git] / src / imports / feedback / qdeclarativefeedbackeffect.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtFeedback module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.  For licensing terms and
14 ** conditions see http://qt.digia.com/licensing.  For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights.  These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file.  Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qdeclarativefeedbackeffect_p.h"
43
44 /*!
45     \qmltype FeedbackEffect
46     \instantiates QDeclarativeFeedbackEffect
47     \brief The FeedbackEffect element is the base class for all feedback effects.
48     \ingroup qml-feedback-api
49
50     You can't create one of these elements directly, but several other elements
51     inherit the methods and properties of these elements.
52
53     There are several predefined enumerations and constants provided in this class:
54
55     1. Duration
56     This enum describes the possible predefined duration types. Generally a specific
57     value in milliseconds can be supplied instead of one of these values.
58     \list
59     \li Feedback.Infinite - Infinite effect duration
60     \endlist
61
62     2. State
63     This enum describes the state of the effect. An effect will be in one of these states.
64     \list
65     \li Feedback.Stopped - The effect is not running. This is the initial state.
66     \li Feedback.Paused  - The effect is paused.
67     \li Feedback.Running - The effect is running.
68     \li Feedback.Loading - The effect is loading.
69     \endlist
70
71     3. ErrorType
72     This enum describes the possible errors happening on the effect.
73     \list
74     \li Feedback.UnknownError - An unknown error occurred.
75     \li Feedback.DeviceBusy - The feedback could not start because the device is busy,
76        the device could be busy if a higher-priority client is using the haptics/actuator device.
77     \endlist
78
79
80     \sa FileEffect, ThemeEffect, HapticsEffect, {QFeedbackEffect}
81 */
82
83 QDeclarativeFeedbackEffect::QDeclarativeFeedbackEffect(QObject *parent)
84     : QObject(parent), m_running(false), m_paused(false), m_error(UnknownError)
85 {
86 }
87
88 void QDeclarativeFeedbackEffect::setFeedbackEffect(QFeedbackEffect* effect)
89 {
90     m_effect = effect;
91     QObject::connect(m_effect, SIGNAL(stateChanged()), this, SLOT(updateState()));
92     QObject::connect(m_effect, SIGNAL(error(QFeedbackEffect::ErrorType)), this, SLOT(_error(QFeedbackEffect::ErrorType)));
93 }
94 QFeedbackEffect* QDeclarativeFeedbackEffect::feedbackEffect()
95 {
96     return m_effect;
97 }
98
99 /*!
100   \qmlproperty bool FeedbackEffect::running
101
102   This property is true if this feedback effect is running.
103   */
104 bool QDeclarativeFeedbackEffect::isRunning() const
105 {
106     return m_running;
107 }
108 void QDeclarativeFeedbackEffect::setRunning(bool running)
109 {
110     QDeclarativeFeedbackEffect::State currentState = static_cast<QDeclarativeFeedbackEffect::State>(m_effect->state());
111     if (currentState != QDeclarativeFeedbackEffect::Running && running) {
112         m_running = true;
113         m_effect->start();
114         emit runningChanged();
115     } else if (currentState != QDeclarativeFeedbackEffect::Stopped && !running) {
116         m_running = false;
117         m_effect->stop();
118         emit runningChanged();
119     }
120 }
121
122 /*!
123   \qmlproperty bool FeedbackEffect::paused
124
125   This property is true if this feedback effect is paused.
126   */
127 bool QDeclarativeFeedbackEffect::isPaused() const
128 {
129     return m_paused;
130 }
131 void QDeclarativeFeedbackEffect::setPaused(bool paused)
132 {
133     QDeclarativeFeedbackEffect::State currentState = static_cast<QDeclarativeFeedbackEffect::State>(m_effect->state());
134     if (currentState == QDeclarativeFeedbackEffect::Paused && !paused) {
135         m_paused = true;
136         m_effect->start();
137         emit pausedChanged();
138     } else if (currentState == QDeclarativeFeedbackEffect::Running && paused) {
139         paused = false;
140         m_effect->pause();
141         emit pausedChanged();
142     }
143 }
144
145
146 /*!
147   \qmlproperty int FeedbackEffect::duration
148
149   The duration of the effect, in milliseconds.  This is 0 for effects of unknown
150   duration, or Feedback.Infinite for effects that don't stop.
151   \sa Feedback
152   */
153 int QDeclarativeFeedbackEffect::duration() const
154 {
155     return m_effect->duration();
156 }
157 void QDeclarativeFeedbackEffect::setDuration(int newDuration)
158 {
159     Q_UNUSED(newDuration)
160     //default do nothing
161 }
162
163 /*!
164   \qmlproperty FeedbackEffect::State FeedbackEffect::state
165
166   This is the current state of the effect.  It is one of:
167   \list
168   \li Feedback.Stopped - the effect is not playing.
169   \li Feedback.Loading - the effect is being loaded.
170   \li Feedback.Running - the effect is playing.
171   \li Feedback.Paused - the effect was being played, but is now paused.
172   \endlist
173   \sa Feedback
174   */
175 QDeclarativeFeedbackEffect::State QDeclarativeFeedbackEffect::state() const
176 {
177     return static_cast<QDeclarativeFeedbackEffect::State>(m_effect->state());
178 }
179
180 void QDeclarativeFeedbackEffect::setState(QDeclarativeFeedbackEffect::State newState)
181 {
182     Q_UNUSED(newState)
183     //default do nothing
184 }
185 /*!
186   \qmlproperty Feedback::ErrorType FeedbackEffect::error
187
188   This property holds the error status of the FeedbackEffect.
189   The error is one of the following values:
190   \list
191   \li Feedback.UnknownError - An unknown error occurred.
192   \li Feedback.DeviceBusy - The device resource is already being used.
193   \endlist
194
195   \sa Feedback, QFeedbackEffect::ErrorType
196   */
197 QDeclarativeFeedbackEffect::ErrorType QDeclarativeFeedbackEffect::error() const
198 {
199     return m_error;
200 }
201
202 /*!
203     \qmlmethod  Feedback::updateState()
204
205      updates the state of the effect.
206 */
207 void QDeclarativeFeedbackEffect::updateState() {
208     bool running = m_effect->state() == QFeedbackEffect::Running;
209     bool paused = m_effect->state() == QFeedbackEffect::Paused;
210     if (running != m_running) {
211         m_running = running;
212         emit runningChanged();
213     }
214     if (paused != m_paused) {
215         m_paused = paused;
216         emit pausedChanged();
217     }
218     emit stateChanged();
219 }
220
221 /*!
222     \qmlmethod  Feedback::start()
223
224     makes sure that the effect associated with the feedback object is started.
225     \sa QFeedbackEffect::start()
226 */
227 void QDeclarativeFeedbackEffect::start() {
228     m_effect->start();
229 }
230
231 /*!
232     \qmlmethod  Feedback::stop()
233
234     makes sure that the effect associated with the feedback object is stoped.
235     \sa QFeedbackEffect::stop()
236 */
237 void QDeclarativeFeedbackEffect::stop() {
238     m_effect->stop();
239 }
240
241 /*!
242     \qmlmethod  Feedback::pause()
243
244     makes sure that the effect associated with the feedback object is paused.
245     \sa QFeedbackEffect::pause()
246 */
247 void QDeclarativeFeedbackEffect::pause() {
248     m_effect->pause();
249 }
250
251 void QDeclarativeFeedbackEffect::_error(QFeedbackEffect::ErrorType err)
252 {
253     if (static_cast<ErrorType>(err) != m_error) {
254         m_error = static_cast<ErrorType>(err);
255         emit errorChanged();
256     }
257 }