From 9da1835648aa50936a50c30b79960e1270c98fac Mon Sep 17 00:00:00 2001 From: Luciano Wolf Date: Thu, 3 Feb 2011 20:02:56 -0300 Subject: Feedback example. --- mobility/feedback/hapticsquare.py | 136 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 mobility/feedback/hapticsquare.py (limited to 'mobility') diff --git a/mobility/feedback/hapticsquare.py b/mobility/feedback/hapticsquare.py new file mode 100644 index 0000000..94767cf --- /dev/null +++ b/mobility/feedback/hapticsquare.py @@ -0,0 +1,136 @@ +''' + Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + All rights reserved. + Contact: Nokia Corporation (qt-info@nokia.com) + + This file is part of the Qt Mobility Components. + + $QT_BEGIN_LICENSE:LGPL$ + No Commercial Usage + This file contains pre-release code and may not be distributed. + You may use this file in accordance with the terms and conditions + contained in the Technology Preview License Agreement accompanying + this package. + + GNU Lesser General Public License Usage + Alternatively, 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 qt-info@nokia.com. +''' + +from PySide.QtCore import * +from PySide.QtGui import * +from QtMobility.Feedback import * + +class HapticButton(QWidget): + clicked = Signal() + toggled = Signal(bool) + + def __init__(self, label): + QWidget.__init__(self, None) + self.m_label = label + self.m_checked = False + self.m_checkable = False + + self.setMinimumSize(100, 100) + + def mousePressEvent(self, qMouseEvent): + if self.m_checkable: + self.m_checked = not self.m_checked + self.toggled.emit(self.m_checked) + else: + self.clicked.emit() + + def paintEvent(self, qPaintEvent): + paint = QPainter(self) + + r = QRect(0, 0, self.width()-1, self.height()-1) + paint.drawRoundedRect(r, 10, 10) + paint.drawText(r, Qt.AlignCenter, self.m_label) + + def setCheckable(self, isCheckable): + self.m_checkable = isCheckable + + +class Dialog(QDialog): + + def __init__(self): + QDialog.__init__(self) + self.m_rumble = QFeedbackHapticsEffect() + self.m_rumble.setAttackIntensity(0) + self.m_rumble.setAttackTime(250) + self.m_rumble.setIntensity(1) + self.m_rumble.setDuration(100) + self.m_rumble.setFadeTime(250) + self.m_rumble.setFadeIntensity(0) + + self.m_ocean = QFeedbackHapticsEffect() + self.m_ocean.setAttackIntensity(0) + self.m_ocean.setAttackTime(450) + self.m_ocean.setIntensity(0.8) + self.m_ocean.setDuration(150) + self.m_ocean.setFadeTime(900) + self.m_ocean.setFadeIntensity(0.05) + self.m_ocean.setPeriod(1500) + + self.m_btnRumble = HapticButton("Rumble!") + self.m_btnOcean = HapticButton("Ocean") + self.m_btnOcean.setCheckable(True) + self.m_btnButtonClick = HapticButton("Click") + self.m_btnNegativeEffect = HapticButton("Oops!") + self.topLayout = QGridLayout(self) + self.topLayout.addWidget(self.m_btnRumble, 0, 0) + self.topLayout.addWidget(self.m_btnOcean, 0, 1) + self.topLayout.addWidget(self.m_btnButtonClick, 1, 0) + self.topLayout.addWidget(self.m_btnNegativeEffect, 1, 1) + + self.m_btnRumble.clicked.connect(self.playRumble) + self.m_btnOcean.toggled[bool].connect(self.playOcean) + self.m_btnButtonClick.clicked.connect(self.playButtonClick) + self.m_btnNegativeEffect.clicked.connect(self.playNegativeEffect) + + def __del__(self): + del self.m_btnRumble + del self.m_btnOcean + del self.m_btnButtonClick + del self.m_btnNegativeEffect + + def playRumble(self): + self.m_rumble.start() + print "Play rumble" + + def playOcean(self, toggleState): + if toggleState: + self.m_ocean.start() + print "Ocean start" + else: + self.m_ocean.stop() + print "Ocean stop" + + def playButtonClick(self): + QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeBasicButton) + print "Play button click" + + def playNegativeEffect(self): + QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeNegativeTacticon) + print "Play negative button click" + + +def main(): + app = QApplication([]) + w = Dialog() + w.showMaximized() + return app.exec_() + +if __name__ == "__main__": + main() -- cgit v1.2.3