Change copyrights from Nokia to Digia
[qt:qtfeedback.git] / src / imports / feedback / qdeclarativehapticseffect.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 "qdeclarativehapticseffect_p.h"
43 /*!
44     \qmltype HapticsEffect
45     \brief The HapticsEffect element represents a custom haptic feedback effect.
46     \ingroup qml-feedback-api
47     \inherits FeedbackEffect
48
49     This class closely corresponds to the C++ \l QFeedbackHapticsEffect class.
50
51     \snippet doc/src/snippets/declarative/declarative-feedback.qml Haptics Effect
52
53     \sa Actuator, {QFeedbackHapticsEffect}
54 */
55 QDeclarativeHapticsEffect::QDeclarativeHapticsEffect(QObject *parent)
56     : QDeclarativeFeedbackEffect(parent), m_actuator(0)
57 {
58     d = new QFeedbackHapticsEffect(this);
59     setFeedbackEffect(d);
60
61     QFeedbackActuator* fa = d->actuator();
62
63     QList<QFeedbackActuator*> actuators = QFeedbackActuator::actuators();
64     foreach (QFeedbackActuator* actuator, actuators) {
65         QDeclarativeFeedbackActuator* dfa;
66         dfa = new QDeclarativeFeedbackActuator(this, actuator);
67         if (fa && *fa == *actuator) {
68             m_actuator = dfa;
69         }
70         m_actuators.push_back(dfa);
71     }
72 }
73
74 void QDeclarativeHapticsEffect::setDuration(int msecs)
75 {
76     if (msecs != d->duration()) {
77         d->setDuration(msecs);
78         emit durationChanged();
79     }
80 }
81
82 int QDeclarativeHapticsEffect::duration() const
83 {
84     return d->duration();
85 }
86 /*!
87     \qmlproperty double HapticsEffect::intensity
88
89     The intensity of the main part of the haptics effect, from 0.0 to 1.0.
90 */
91 void QDeclarativeHapticsEffect::setIntensity(qreal intensity)
92 {
93     if (!qFuzzyCompare(intensity, d->intensity())) {
94         d->setIntensity(intensity);
95         emit intensityChanged();
96     }
97 }
98
99 qreal QDeclarativeHapticsEffect::intensity() const
100 {
101     return d->intensity();
102 }
103
104 /*!
105     \qmlproperty int HapticsEffect::attackTime
106
107     The duration of the attack (fade-in) part of the haptics effect.
108 */
109
110 void QDeclarativeHapticsEffect::setAttackTime(int msecs)
111 {
112     if (msecs != d->attackTime()) {
113         d->setAttackTime(msecs);
114         emit attackTimeChanged();
115     }
116 }
117
118 int QDeclarativeHapticsEffect::attackTime() const
119 {
120     return d->attackTime();
121 }
122 /*!
123     \qmlproperty double HapticsEffect::attackIntensity
124
125     The intensity of the attack (fade-in) part of the haptics effect, from 0.0 to 1.0.
126 */
127 void QDeclarativeHapticsEffect::setAttackIntensity(qreal intensity)
128 {
129     if (!qFuzzyCompare(intensity, d->attackIntensity())) {
130         d->setAttackIntensity(intensity);
131         emit intensityChanged();
132     }
133 }
134
135 qreal QDeclarativeHapticsEffect::attackIntensity() const
136 {
137     return d->attackIntensity();
138 }
139 /*!
140     \qmlproperty int HapticsEffect::fadeTime
141
142     The duration of the fade-out part of the haptics effect.
143 */
144
145 void QDeclarativeHapticsEffect::setFadeTime(int msecs)
146 {
147     if (msecs != d->fadeTime()) {
148         d->setFadeTime(msecs);
149         emit fadeTimeChanged();
150     }
151 }
152
153 int QDeclarativeHapticsEffect::fadeTime() const
154 {
155     return d->fadeTime();
156 }
157
158 void QDeclarativeHapticsEffect::setFadeIntensity(qreal intensity)
159 {
160     if (!qFuzzyCompare(intensity, d->fadeIntensity())) {
161         d->setFadeIntensity(intensity);
162         emit fadeIntensityChanged();
163     }
164 }
165 /*!
166     \qmlproperty double HapticsEffect::fadeIntensity
167
168     The intensity of the fade-out part of the haptics effect, from 0.0 to 1.0.
169 */
170 qreal QDeclarativeHapticsEffect::fadeIntensity() const
171 {
172     return d->fadeIntensity();
173 }
174 /*!
175     \qmlproperty int HapticsEffect::period
176
177     The period of the haptics effect.  If the period is zero, the effect will
178     not repeat.  If it is non-zero, the effect will repeat every period milliseconds.
179 */
180
181 void QDeclarativeHapticsEffect::setPeriod(int msecs)
182 {
183     if (msecs != d->period()) {
184         d->setPeriod(msecs);
185         emit periodChanged();
186     }
187 }
188
189 int QDeclarativeHapticsEffect::period() const
190 {
191     return d->period();
192 }
193
194 /*!
195     \qmlproperty Actuator HapticsEffect::actuator
196
197     The actuator that is used for playing this effect.
198     \sa Actuator
199 */
200 void QDeclarativeHapticsEffect::setActuator(QDeclarativeFeedbackActuator *actuator)
201 {
202     if (actuator != m_actuator) {
203         if (!actuator
204          || !m_actuator
205          || !(*(actuator->feedbackActuator()) == *(m_actuator->feedbackActuator()))) {
206             m_actuator = actuator;
207             d->setActuator(m_actuator ? m_actuator->feedbackActuator() : 0);
208             emit actuatorChanged();
209         }
210     }
211 }
212
213 QDeclarativeFeedbackActuator* QDeclarativeHapticsEffect::actuator() const
214 {
215     return m_actuator;
216 }
217 /*!
218     \qmlproperty list<Actuator> HapticsEffect::availableActuators
219
220     This property holds a list of available actuators.
221     This property is read only.
222     \sa Actuator
223 */
224 QQmlListProperty<QDeclarativeFeedbackActuator> QDeclarativeHapticsEffect::availableActuators() {
225     return QQmlListProperty<QDeclarativeFeedbackActuator>(this,
226                                                                   0,
227                                                                   0 /*appending actuators are not allowed*/,
228                                                                   actuator_count,
229                                                                   actuator_at,
230                                                                   0 /*removing actuators are not allowed*/);
231 }
232
233 int QDeclarativeHapticsEffect::actuator_count(QQmlListProperty<QDeclarativeFeedbackActuator> *prop)
234 {
235     return static_cast<QDeclarativeHapticsEffect*>(prop->object)->m_actuators.size();
236 }
237 QDeclarativeFeedbackActuator* QDeclarativeHapticsEffect::actuator_at(QQmlListProperty<QDeclarativeFeedbackActuator> *prop, int index)
238 {
239     return static_cast<QDeclarativeHapticsEffect*>(prop->object)->m_actuators.at(index);
240 }