From 1d33c32315c4cc372c34b5825fb5180d45ddfdec Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Fri, 9 Apr 2010 15:05:08 +0000 Subject: [PATCH] dokk (the docking game): -works without spnav input device git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1962 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- examples/dokk/glwin.py | 47 +++++++++++++++++++++++++----------- examples/dokk/name_enter.py | 40 ++++++++++++++++++++++++------ examples/dokk/spnav_input.py | 13 ++++++---- 3 files changed, 73 insertions(+), 27 deletions(-) diff --git a/examples/dokk/glwin.py b/examples/dokk/glwin.py index 8a1dda065..f57b52cd5 100644 --- a/examples/dokk/glwin.py +++ b/examples/dokk/glwin.py @@ -113,21 +113,40 @@ class DokkGLCanvas(QGLWidget): self.update() def keyReleaseEvent(self, event): + self.emit(SIGNAL("KeyPressed"),event) if event.key() == Qt.Key_Escape: QApplication.exit() + elif event.key() == Qt.Key_P: + self.dokk.PreviousLevel() + elif event.key() == Qt.Key_N: + self.dokk.NextLevel() + elif event.key() == Qt.Key_Space: + self.dokk.GetLevel().Begin() if not self._lock_input: if event.key() == Qt.Key_Left or event.key() == Qt.Key_A: self.OnTransform(gfx.INPUT_COMMAND_TRANSX,0, gfx.TRANSFORM_VIEW, -TRANS_VAL) - if event.key() == Qt.Key_Right or event.key() == Qt.Key_D: + elif event.key() == Qt.Key_Right or event.key() == Qt.Key_D: self.OnTransform(gfx.INPUT_COMMAND_TRANSX,0, gfx.TRANSFORM_VIEW, TRANS_VAL) - if event.key() == Qt.Key_Down or event.key() == Qt.Key_S: + elif event.key() == Qt.Key_Down or event.key() == Qt.Key_S: self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0, gfx.TRANSFORM_VIEW, TRANS_VAL) - if event.key() == Qt.Key_Up or event.key() == Qt.Key_W: + elif event.key() == Qt.Key_Up or event.key() == Qt.Key_W: self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0, gfx.TRANSFORM_VIEW, -TRANS_VAL) + + elif event.key() == Qt.Key_Backspace: + self.dokk.GetLevel().Reset() + + elif event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return: + self.dokk.GetLevel().Finished() + + elif event.key() == Qt.Key_E: + self.dokk.GetLevel().Solve() + + elif event.key() == Qt.Key_R: + self.dokk.GetLevel().ResetPos() def SetLockInput(self, lock): self._lock_input = lock @@ -140,38 +159,38 @@ class DokkGLWin(gfx.GLWinBase): return fmt def __init__(self,dokk): - gfx.GLWinBase.__init__(self) - self.canvas_=DokkGLCanvas(self._CreateFormat(),dokk) + gfx.GLWinBase.__init__(self) + self.canvas=DokkGLCanvas(self._CreateFormat(),dokk) def DoRefresh(self): self.refresh_=True def SetLevel(self, level): - self.canvas_.SetLevel(level) + self.canvas.SetLevel(level) def Show(self, fullscreen): if fullscreen: - self.canvas_.showFullScreen() + self.canvas.showFullScreen() else: - self.canvas_.show() + self.canvas.show() def SetStereo(): pass def SetLockInput(self, lock): - self.canvas_.SetLockInput(lock) + self.canvas.SetLockInput(lock) def Width(self): - return self.canvas_.width() + return self.canvas.width() def Height(self): - return self.canvas_.height() + return self.canvas.height() def ClearHUDObjects(self): - self.canvas_.hud.Clear() + self.canvas.hud.Clear() def RemoveHUDObject(self, hud_object): - self.canvas_.hud.Remove(hud_object) + self.canvas.hud.Remove(hud_object) def AddHUDObject(self, hud_object): - self.canvas_.hud.Add(hud_object) + self.canvas.hud.Add(hud_object) diff --git a/examples/dokk/name_enter.py b/examples/dokk/name_enter.py index c0090a993..6eaa046bb 100644 --- a/examples/dokk/name_enter.py +++ b/examples/dokk/name_enter.py @@ -11,9 +11,13 @@ NAME_BREAK = 8000 class NameEnter(QtCore.QObject): def __init__(self, parent=None): QtCore.QObject.__init__(self, parent) - self.spnav = gui.SpnavInput.GetQThread() - self.spnav.start() - + try: + self._spnav = gui.SpnavInput.GetQThread() + self._spnav.start() + except AttributeError: + self._spnav = None + + self.Reset() def Reset(self): @@ -43,6 +47,22 @@ class NameEnter(QtCore.QObject): elif(self.letter_score < -LETTER_BREAK): self.letter_pos -=1 self.__SetLetterPos() + + def KeyPressed(self, event): + if event.key() == Qt.Key_Right: + self.name_pos +=1 + self.__SetNamePos() + elif event.key() == Qt.Key_Left: + self.name_pos -=1 + self.__SetNamePos() + elif event.key() == Qt.Key_Up: + self.letter_pos +=1 + self.__SetLetterPos() + elif event.key() == Qt.Key_Down: + self.letter_pos -=1 + self.__SetLetterPos() + elif event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return: + self.emit(QtCore.SIGNAL("Finished()")) def ToggleInputMode(self, button): if button == 10: @@ -53,13 +73,17 @@ class NameEnter(QtCore.QObject): def Start(self): self.Reset() - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + if self._spnav: + QtCore.QObject.connect(self._spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) + QtCore.QObject.connect(self._spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + self.connect(dokk.Dokk().gl_win.canvas, QtCore.SIGNAL("KeyPressed"),self.KeyPressed) def Stop(self): - QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) - QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) - + if self._spnav: + QtCore.QObject.disconnect(self._spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) + QtCore.QObject.disconnect(self._spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + self.disconnect(dokk.Dokk().gl_win.canvas, QtCore.SIGNAL("KeyPressed"),self.KeyPressed) + def __SetLetterPos(self): self.letter_pos = self.letter_pos % self.al_len self.__SetName() diff --git a/examples/dokk/spnav_input.py b/examples/dokk/spnav_input.py index 82b873d74..b0eed4b54 100644 --- a/examples/dokk/spnav_input.py +++ b/examples/dokk/spnav_input.py @@ -9,11 +9,14 @@ class SpnavInputDevice(QtCore.QObject): def __init__(self, gfx_win, parent=None): QtCore.QObject.__init__(self, parent) self.refresh_rate_ = DEFAULT_REFRESHRATE - self.spnav = gui.SpnavInput.GetQThread() - self.spnav.start() - self.gfx_win = gfx_win - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + try: + self.spnav = gui.SpnavInput.GetQThread() + self.spnav.start() + self.gfx_win = gfx_win + QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) + QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + except AttributeError: + pass #No SpaceNav Support self.trans = True self.rot = True -- GitLab