diff options
author | Lauro Neto <lauro.neto@openbossa.org> | 2011-09-01 18:52:40 -0300 |
---|---|---|
committer | Lauro Neto <lauro.neto@openbossa.org> | 2011-09-01 18:52:40 -0300 |
commit | cfc698861e3016fcbbee780ca7162d6fe62e1ad2 (patch) | |
tree | 98dd74be690cde7ec69f95ea4863c87f97889c5d /mobility/feedback | |
parent | e1cd2f6675dae7ccec0f7c45cb42c356cdd14d68 (diff) |
Add qml version of haptics square.
Diffstat (limited to 'mobility/feedback')
-rw-r--r-- | mobility/feedback/MainPage.qml | 43 | ||||
-rw-r--r-- | mobility/feedback/hapticsquare-qtgui.py | 127 | ||||
-rw-r--r-- | mobility/feedback/hapticsquare.py | 136 | ||||
-rw-r--r-- | mobility/feedback/main.qml | 11 |
4 files changed, 236 insertions, 81 deletions
diff --git a/mobility/feedback/MainPage.qml b/mobility/feedback/MainPage.qml new file mode 100644 index 0000000..4678be9 --- /dev/null +++ b/mobility/feedback/MainPage.qml @@ -0,0 +1,43 @@ + + +import QtQuick 1.1 +import com.nokia.meego 1.0 + +Page { + id: mainPage + anchors.margins: rootWindow.pageMargin + + Flow { + anchors.top: parent.top + anchors.right: parent.right + anchors.left: parent.left + anchors.margins: 10 + + spacing: 10 + + Button { + id: rumble + text: "Rumble" + onClicked: effectPlayer.playRumble() + } + + Button { + id: ocean + text: "Ocean" + onClicked: effectPlayer.playOcean() + } + + Button { + id: buttonClick + text: "Button Click" + onClicked: effectPlayer.playButtonClick() + } + + Button { + id: negativeEffect + text: "Negative Effect" + onClicked: effectPlayer.playNegativeEffect() + } + } + +} diff --git a/mobility/feedback/hapticsquare-qtgui.py b/mobility/feedback/hapticsquare-qtgui.py new file mode 100644 index 0000000..0554f4d --- /dev/null +++ b/mobility/feedback/hapticsquare-qtgui.py @@ -0,0 +1,127 @@ +''' + 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): + self.clicked.emit() + + def paintEvent(self, qPaintEvent): + paint = QPainter(self) + + r = QRect(1, 1, self.width()-2, self.height()-2) + paint.drawRoundedRect(r, 10, 10) + paint.drawText(r, Qt.AlignCenter, self.m_label) + +class Dialog(QDialog): + + def __init__(self): + QDialog.__init__(self) + self.m_rumble = QFeedbackHapticsEffect() + self.m_rumble.setAttackIntensity(0.1) + self.m_rumble.setAttackTime(250) + self.m_rumble.setIntensity(1) + self.m_rumble.setDuration(1000) + self.m_rumble.setFadeTime(250) + self.m_rumble.setFadeIntensity(0.1) + + self.m_ocean = QFeedbackHapticsEffect() + self.m_ocean.setAttackIntensity(0.1) + self.m_ocean.setAttackTime(450) + self.m_ocean.setIntensity(0.8) + self.m_ocean.setDuration(6000) + 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_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.clicked.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): + if self.m_ocean.state() == QFeedbackEffect.Stopped: + 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() diff --git a/mobility/feedback/hapticsquare.py b/mobility/feedback/hapticsquare.py index 0554f4d..3206d29 100644 --- a/mobility/feedback/hapticsquare.py +++ b/mobility/feedback/hapticsquare.py @@ -1,5 +1,5 @@ ''' - Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Contact: Nokia Corporation (qt-info@nokia.com) @@ -30,77 +30,38 @@ from PySide.QtCore import * from PySide.QtGui import * +from PySide.QtDeclarative 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): - self.clicked.emit() - - def paintEvent(self, qPaintEvent): - paint = QPainter(self) - - r = QRect(1, 1, self.width()-2, self.height()-2) - paint.drawRoundedRect(r, 10, 10) - paint.drawText(r, Qt.AlignCenter, self.m_label) - -class Dialog(QDialog): - - def __init__(self): - QDialog.__init__(self) - self.m_rumble = QFeedbackHapticsEffect() - self.m_rumble.setAttackIntensity(0.1) - self.m_rumble.setAttackTime(250) - self.m_rumble.setIntensity(1) - self.m_rumble.setDuration(1000) - self.m_rumble.setFadeTime(250) - self.m_rumble.setFadeIntensity(0.1) - - self.m_ocean = QFeedbackHapticsEffect() - self.m_ocean.setAttackIntensity(0.1) - self.m_ocean.setAttackTime(450) - self.m_ocean.setIntensity(0.8) - self.m_ocean.setDuration(6000) - 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_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.clicked.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): +class EffectPlayer(QObject): + + def __init__(self, parent=None): + QObject.__init__(self, parent) + + self.m_rumble = QFeedbackHapticsEffect() + self.m_rumble.setAttackIntensity(0.1) + self.m_rumble.setAttackTime(250) + self.m_rumble.setIntensity(1) + self.m_rumble.setDuration(1000) + self.m_rumble.setFadeTime(250) + self.m_rumble.setFadeIntensity(0.1) + + self.m_ocean = QFeedbackHapticsEffect() + self.m_ocean.setAttackIntensity(0.1) + self.m_ocean.setAttackTime(450) + self.m_ocean.setIntensity(0.8) + self.m_ocean.setDuration(6000) + self.m_ocean.setFadeTime(900) + self.m_ocean.setFadeIntensity(0.05) + self.m_ocean.setPeriod(1500) + + @Slot() + def playRumble(self): + print "Starting rumble effect" + self.m_rumble.start() + + @Slot() + def playOcean(self): if self.m_ocean.state() == QFeedbackEffect.Stopped: self.m_ocean.start() print "Ocean start" @@ -108,20 +69,33 @@ class Dialog(QDialog): self.m_ocean.stop() print "Ocean stop" - def playButtonClick(self): - QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeBasicButton) - print "Play button click" + @Slot() + def playButtonClick(self): + QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeBasicButton) + print "Play button click" - def playNegativeEffect(self): - QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeNegativeTacticon) - print "Play negative button click" + @Slot() + def playNegativeEffect(self): + QFeedbackEffect.playThemeEffect(QFeedbackEffect.ThemeNegativeTacticon) + print "Play negative button click" def main(): - app = QApplication([]) - w = Dialog() - w.showMaximized() - return app.exec_() + app = QApplication([]) + view = QDeclarativeView() + player = EffectPlayer() + context = view.rootContext() + context.setContextProperty("effectPlayer", player) -if __name__ == "__main__": + url = QUrl('main.qml') + view.setSource(url) + view.show() + + app.exec_() + + +if __name__ == '__main__': main() + + + diff --git a/mobility/feedback/main.qml b/mobility/feedback/main.qml new file mode 100644 index 0000000..dd3484d --- /dev/null +++ b/mobility/feedback/main.qml @@ -0,0 +1,11 @@ + +import QtQuick 1.1 +import com.nokia.meego 1.0 + +PageStackWindow { + + id: rootWindow + showStatusBar: false + initialPage: MainPage { } + +} |