From a55e4f46ba39fd4f4289e5b23d32e827913c5ea4 Mon Sep 17 00:00:00 2001 From: Thomas Pietrzak Date: Wed, 1 Aug 2012 15:37:57 +0000 Subject: [PATCH] Push buttons demo git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@84 47cf9a05-e0a8-4ed5-9e9b-101a649bc004 --- DwellCursor/DwellCursor.vcxproj | 66 ++--- DwellCursor/DwellWidget.cpp | 11 +- DwellCursor/DwellWidget.h | 2 +- .../GeneratedFiles/qrc_dwellcursor.cpp | 4 +- .../GeneratedFiles/ui_ExperimentSetup.h | 4 +- DwellCursor/GeneratedFiles/ui_dwellcursor.h | 4 +- DwellCursor/MainScene.h | 2 +- DwellCursor/dwellcursor.h | 1 - DwellCursor/main.cpp | 1 + PushButtons/ExperimentSetup.cpp | 26 ++ PushButtons/ExperimentSetup.h | 23 ++ PushButtons/ExperimentSetup.ui | 235 +++++++++++++++++ PushButtons/KinectInput.cpp | 99 +++++++ PushButtons/KinectInput.h | 29 +++ PushButtons/MainScene.cpp | Bin 0 -> 6115 bytes PushButtons/MainScene.h | 69 +++++ PushButtons/MainView.cpp | 18 ++ PushButtons/MainView.h | 22 ++ PushButtons/PushButton.cpp | 79 ++++++ PushButtons/PushButton.h | 46 ++++ PushButtons/PushButtons.vcxproj | 243 ++++++++++++++++++ PushButtons/main.cpp | 11 + PushButtons/pushbuttons.cpp | 35 +++ PushButtons/pushbuttons.h | 34 +++ PushButtons/pushbuttons.qrc | 4 + PushButtons/pushbuttons.ui | 23 ++ TactileButtons.sln | 26 ++ TactileButtons.suo | Bin 0 -> 70656 bytes 28 files changed, 1071 insertions(+), 46 deletions(-) create mode 100644 PushButtons/ExperimentSetup.cpp create mode 100644 PushButtons/ExperimentSetup.h create mode 100644 PushButtons/ExperimentSetup.ui create mode 100644 PushButtons/KinectInput.cpp create mode 100644 PushButtons/KinectInput.h create mode 100644 PushButtons/MainScene.cpp create mode 100644 PushButtons/MainScene.h create mode 100644 PushButtons/MainView.cpp create mode 100644 PushButtons/MainView.h create mode 100644 PushButtons/PushButton.cpp create mode 100644 PushButtons/PushButton.h create mode 100644 PushButtons/PushButtons.vcxproj create mode 100644 PushButtons/main.cpp create mode 100644 PushButtons/pushbuttons.cpp create mode 100644 PushButtons/pushbuttons.h create mode 100644 PushButtons/pushbuttons.qrc create mode 100644 PushButtons/pushbuttons.ui create mode 100644 TactileButtons.sln create mode 100644 TactileButtons.suo diff --git a/DwellCursor/DwellCursor.vcxproj b/DwellCursor/DwellCursor.vcxproj index b4d3a4d..ec90726 100644 --- a/DwellCursor/DwellCursor.vcxproj +++ b/DwellCursor/DwellCursor.vcxproj @@ -44,7 +44,7 @@ - UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions) + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;QT_DLL;%(PreprocessorDefinitions) $(KINECTSDK10_DIR)\inc;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;.\;%(AdditionalIncludeDirectories) Disabled ProgramDatabase @@ -61,7 +61,7 @@ - UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions) + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_DLL;%(PreprocessorDefinitions) $(KINECTSDK10_DIR)\inc;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;.\;%(AdditionalIncludeDirectories) @@ -139,11 +139,11 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "dwellcursor.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "dwellcursor.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." @@ -165,62 +165,62 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "ExperimentSetup.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "ExperimentSetup.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainView.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "MainView.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainView.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "MainView.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "DwellWidget.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "DwellWidget.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing DwellButton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "DwellButton.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing DwellButton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "DwellButton.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing KinectInput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "KinectInput.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing KinectInput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "KinectInput.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainScene.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "MainScene.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." + $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainScene.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "MainScene.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." @@ -254,7 +254,7 @@ - + \ No newline at end of file diff --git a/DwellCursor/DwellWidget.cpp b/DwellCursor/DwellWidget.cpp index 16dcb37..1408921 100644 --- a/DwellCursor/DwellWidget.cpp +++ b/DwellCursor/DwellWidget.cpp @@ -87,14 +87,17 @@ DwellWidget::DwellWidget(QGraphicsItem * parent) DwellWidget::~DwellWidget() { if (_tactonplayer) + { _tactonplayer->stop(); + delete _tactonplayer; + } } void DwellWidget::init() { try { - _tactonplayer = new TactonPlayer("COM4"); + _tactonplayer = new TactonPlayer("COM6"); } catch (...) { @@ -105,11 +108,11 @@ void DwellWidget::init() //hover tacton if (_tactonplayer) { - _tactonplayer->regist(Tacton(0x0f, _hoverduration / 2, 100, 255)); + _tactonplayer->regist(Tacton(0x0f, _hoverduration, 50, 255)); //activation tacton _tactonplayer->regist(Tacton(0x0f, _activationduration / 2, 250, 255)); //progression tacton - unsigned char animpatterns[8] = {POS2_UP, 0x00, POS2_RIGHT, 0x00, POS2_DOWN, 0x00, POS2_LEFT, 0x00}; + unsigned char animpatterns[8] = {POS2_UP, 0x00, POS2_UP | POS2_RIGHT, 0x00, POS2_UP | POS2_RIGHT | POS2_DOWN, 0x00, POS2_UP | POS2_RIGHT | POS2_DOWN | POS2_LEFT, 0x00}; unsigned int animdurations[8] = {_dwellduration / 8, _dwellduration / 8, _dwellduration / 8, _dwellduration / 8, _dwellduration / 8, _dwellduration / 8, _dwellduration / 8, _dwellduration / 8}; unsigned int animfrequencies[8] = {250, 250, 250, 250, 250, 250, 250, 250}; @@ -188,4 +191,4 @@ void DwellWidget::reset() _center.setBrush(QBrush(_colornormal)); _progress.setSpanAngle(0); this->update(); -} \ No newline at end of file +} diff --git a/DwellCursor/DwellWidget.h b/DwellCursor/DwellWidget.h index 07bb1a4..af5ab64 100644 --- a/DwellCursor/DwellWidget.h +++ b/DwellCursor/DwellWidget.h @@ -56,4 +56,4 @@ class DwellWidget: public QObject, public QGraphicsItemGroup void progress(int v); }; -#endif \ No newline at end of file +#endif diff --git a/DwellCursor/GeneratedFiles/qrc_dwellcursor.cpp b/DwellCursor/GeneratedFiles/qrc_dwellcursor.cpp index 14226e5..913cbe3 100644 --- a/DwellCursor/GeneratedFiles/qrc_dwellcursor.cpp +++ b/DwellCursor/GeneratedFiles/qrc_dwellcursor.cpp @@ -1,8 +1,8 @@ /**************************************************************************** ** Resource object code ** -** Created: Wed 7. Mar 11:50:38 2012 -** by: The Resource Compiler for Qt version 4.7.3 +** Created: Wed 1. Aug 17:16:43 2012 +** by: The Resource Compiler for Qt version 4.8.2 ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ diff --git a/DwellCursor/GeneratedFiles/ui_ExperimentSetup.h b/DwellCursor/GeneratedFiles/ui_ExperimentSetup.h index 20434de..8513b83 100644 --- a/DwellCursor/GeneratedFiles/ui_ExperimentSetup.h +++ b/DwellCursor/GeneratedFiles/ui_ExperimentSetup.h @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading UI file 'ExperimentSetup.ui' ** -** Created: Wed 7. Mar 11:50:38 2012 -** by: Qt User Interface Compiler version 4.7.3 +** Created: Wed 1. Aug 17:16:43 2012 +** by: Qt User Interface Compiler version 4.8.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/DwellCursor/GeneratedFiles/ui_dwellcursor.h b/DwellCursor/GeneratedFiles/ui_dwellcursor.h index fe63b60..5f9f9ff 100644 --- a/DwellCursor/GeneratedFiles/ui_dwellcursor.h +++ b/DwellCursor/GeneratedFiles/ui_dwellcursor.h @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading UI file 'dwellcursor.ui' ** -** Created: Wed 7. Mar 11:50:37 2012 -** by: Qt User Interface Compiler version 4.7.3 +** Created: Wed 1. Aug 17:16:42 2012 +** by: Qt User Interface Compiler version 4.8.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/DwellCursor/MainScene.h b/DwellCursor/MainScene.h index 41c640c..b48b065 100644 --- a/DwellCursor/MainScene.h +++ b/DwellCursor/MainScene.h @@ -55,4 +55,4 @@ class MainScene: public QGraphicsScene void buttonClicked(int n); }; -#endif \ No newline at end of file +#endif diff --git a/DwellCursor/dwellcursor.h b/DwellCursor/dwellcursor.h index 5fe27fd..5cc7a19 100644 --- a/DwellCursor/dwellcursor.h +++ b/DwellCursor/dwellcursor.h @@ -30,7 +30,6 @@ private: int _nbx, _nby; float _bsx, _bsy; float _spacex, _spacey; - }; #endif // DWELLCURSOR_H diff --git a/DwellCursor/main.cpp b/DwellCursor/main.cpp index 5eaf6de..02238e8 100644 --- a/DwellCursor/main.cpp +++ b/DwellCursor/main.cpp @@ -6,5 +6,6 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); ExperimentSetup w; w.show(); + w.raise(); return a.exec(); } \ No newline at end of file diff --git a/PushButtons/ExperimentSetup.cpp b/PushButtons/ExperimentSetup.cpp new file mode 100644 index 0000000..1959a9e --- /dev/null +++ b/PushButtons/ExperimentSetup.cpp @@ -0,0 +1,26 @@ +#include "ExperimentSetup.h" + +ExperimentSetup::ExperimentSetup(QWidget *parent, Qt::WFlags flags) + : QMainWindow(parent, flags) +{ + setupUi(this); + + this->layout()->setSizeConstraint(QLayout::SetFixedSize); + + QObject::connect(buttonstart, SIGNAL(clicked()), this, SLOT(runBlock())); +} + +ExperimentSetup::~ExperimentSetup() +{ + +} + +void ExperimentSetup::runBlock(void) +{ + this->hide(); + w.init(username->text(), condition->currentText(), repetitions->value(), + nbx->value(), nby->value(), + buttonssizex->value(), buttonssizey->value(), + spacex->value(), spacey->value()); + w.show(); +} diff --git a/PushButtons/ExperimentSetup.h b/PushButtons/ExperimentSetup.h new file mode 100644 index 0000000..766c0af --- /dev/null +++ b/PushButtons/ExperimentSetup.h @@ -0,0 +1,23 @@ +#ifndef EXPERIMENTSETUP_H +#define EXPERIMENTSETUP_H + +#include +#include "ui_experimentsetup.h" + +#include "pushbuttons.h" +class ExperimentSetup : public QMainWindow, Ui::ExperimentSetupClass +{ + Q_OBJECT + +public: + ExperimentSetup(QWidget *parent = 0, Qt::WFlags flags = 0); + ~ExperimentSetup(); + +private: + PushButtons w; + +private slots: + void runBlock(); +}; + +#endif diff --git a/PushButtons/ExperimentSetup.ui b/PushButtons/ExperimentSetup.ui new file mode 100644 index 0000000..fcec084 --- /dev/null +++ b/PushButtons/ExperimentSetup.ui @@ -0,0 +1,235 @@ + + + ExperimentSetupClass + + + Qt::NonModal + + + + 0 + 0 + 324 + 277 + + + + Dwell Widgets + + + + + + + + + + + + User: + + + + + + + + + + Repetitions: + + + + + + + 1 + + + 100 + + + 1 + + + + + + + Space x: + + + + + + + Condition: + + + + + + + Nb x: + + + + + + + Nb y: + + + + + + + BtSize x: + + + + + + + BtSize y: + + + + + + + Space y: + + + + + + + 1 + + + 10 + + + 4 + + + + + + + 1 + + + 10 + + + 4 + + + + + + + + Visual only + + + + + Tactile + visual + + + + + + + + 1 + + + 0.100000000000000 + + + 1.600000000000000 + + + 0.100000000000000 + + + 0.200000000000000 + + + + + + + 1 + + + 0.100000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + 1 + + + 10.000000000000000 + + + 0.100000000000000 + + + 1.600000000000000 + + + + + + + 1 + + + 10.000000000000000 + + + 0.100000000000000 + + + 1.000000000000000 + + + + + + + + + + + + Start experiment + + + + + + + + + + + + diff --git a/PushButtons/KinectInput.cpp b/PushButtons/KinectInput.cpp new file mode 100644 index 0000000..15bcd9d --- /dev/null +++ b/PushButtons/KinectInput.cpp @@ -0,0 +1,99 @@ +#include "KinectInput.h" + +#include + +#define TIMEOUT 100 + +KinectInput::KinectInput() +:_running(false), _skeletonid(-1) +{ + //creates the kinect sensor (id 0) + if(FAILED(NuiCreateSensorByIndex(0, &_kinect))) + { + qDebug() << "Cannot find a KINECT sensor" << endl; + //I should do something else, sucha as an exception + return; + } + + if (_kinect->NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | NUI_INITIALIZE_FLAG_USES_SKELETON) == E_NUI_SKELETAL_ENGINE_BUSY) + { + qDebug() << "Cannot initialize the KINECT sensor" << endl; + return; + } + + //initialize the skeleton tracking + _skeletonEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if(!HasSkeletalEngine(_kinect) || FAILED(_kinect->NuiSkeletonTrackingEnable(_skeletonEvent, 0))) + { + qDebug() << "Cannot Initialize skeleton tracking" << endl; + return; + } +} + +KinectInput::~KinectInput() +{ + NuiShutdown(); + if( _skeletonEvent && ( _skeletonEvent != INVALID_HANDLE_VALUE ) ) + CloseHandle( _skeletonEvent ); +} + +//thread that manages the kinect events +void KinectInput::run() +{ + _running = true; + while(_running) + { + //wait for an event + if (WaitForSingleObject(_skeletonEvent, TIMEOUT) != 0) + continue; + + //get skeleton values + NUI_SKELETON_FRAME SkeletonFrame; + HRESULT hr = _kinect->NuiSkeletonGetNextFrame( 0, &SkeletonFrame ); +// qDebug() << "Kinect frame " << SkeletonFrame.dwFrameNumber; + + //if no skeleton already identified or not tracked anymore, search for one + if (_skeletonid < 0 || SkeletonFrame.SkeletonData[_skeletonid].eTrackingState != NUI_SKELETON_TRACKED) + { + for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) + { + if(SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED) + { + _skeletonid = i; + break; + } + } + } + + //no skeleton found + if (_skeletonid < 0) + continue; + + //retrieve information on the skeleton + NUI_SKELETON_DATA &data = SkeletonFrame.SkeletonData[_skeletonid]; + + //checking if we have a skeleton +/* if (data.eTrackingState != NUI_SKELETON_TRACKED) + continue;*/ + + //smooth out the skeleton data + _kinect->NuiTransformSmooth(&SkeletonFrame, NULL); + + + if (data.eSkeletonPositionTrackingState[NUI_SKELETON_POSITION_HAND_RIGHT] == NUI_SKELETON_NOT_TRACKED) + continue; //right hand not detected + else + { +/* float posx, posy; + NuiTransformSkeletonToDepthImageF(data.SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT], &posx, &posy); + emit rightHandMove(posx, posy,0);*/ + Vector4 &skelpos = data.SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT]; + emit rightHandMove(skelpos.x, skelpos.y, skelpos.z); + } + } +} + +void KinectInput::stop() +{ + _running = false; +} diff --git a/PushButtons/KinectInput.h b/PushButtons/KinectInput.h new file mode 100644 index 0000000..b4bf077 --- /dev/null +++ b/PushButtons/KinectInput.h @@ -0,0 +1,29 @@ +#ifndef __KINECTINPUT__ +#define __KINECTINPUT__ + +#include +#include +#include +#include + +class KinectInput: public QThread +{ + Q_OBJECT + public: + KinectInput(); + ~KinectInput(); + + void run(); + void stop(); + + private: + INuiSensor* _kinect; + HANDLE _skeletonEvent; + bool _running; + int _skeletonid; + + signals: + void rightHandMove(float x, float y, float z); +}; + +#endif diff --git a/PushButtons/MainScene.cpp b/PushButtons/MainScene.cpp new file mode 100644 index 0000000000000000000000000000000000000000..08ecd6a52eae625fae73696b85ff411bba72f1d3 GIT binary patch literal 6115 zcmeHLTW{OQ74EAH_&-dwa5}OjQFfCTUj#T=XA{6)TkA9h>NNz497(iklFJ#{qO;rI z-tU|lQq(1Zvwi79jYJY>&Yb)C<{bVIB|$t3m1ti0QF0xqM0Kal?XB&tAIhEM!H;S* zoAhZhN{kqWPb!X0^q|Cv*zfgvN3^rORWUd`tbWSD<>*cYM(m2r&sAbt+gpc&pK?E& zMuBE=(rvWGF!r^HjCx2PRW5)2$N71yy}dOY&5TJC?H0r^8M&3Y?6q*JdM@m9Fw04j z$s<3uD>|Aae*EBP8TguMr0E#QbehXvThPC5Z{L1G!7tle4WjDw{V@CpedH@g-GZqN z_q(f=`PXMZo+$|@tnOT?L=O1lZ9daeIe3@GkTx)fhojgJ?psg+LJwMW5KMzKN#G|) zx{v6GRtdCgi|da+{d{^Z^Jp?PAN(Y|fN$hDPJPp^eG)e?VXblI{PL3wBb~*5L1(T~ z9hoRiHl14&U-wldo?RD8M4u#)Z=4hxiFa`n+$*xo7Eld66 zXY#HsWR6TlO6>?)Cl?)Y*P`$`fu0BKTDVM@lph!r;XfoD!K3aHCW0TaDl-||(OAfm zLPyWY4bc}pa%ZE2;~Tes)4RRx^nrz^fr)@k%mr~op>=b`-z$|}FYPt_5DBDwDOIRL zx#*vWWt~``T$x#(Afh;f%#zK3z^K_42{7Ioc|(X@T?x0WAz7G+lZxdk4Y-jO4EEL0 zy*L7{$608V7#;46v zwv!9@umMz=O8_3K`Q`X6U*z%%#bJMn-BC+0KO6InRlO*-_0n@SZu8aZqHm&GitEV6 zz@~?YC~)p~XTMZ))z8RctJrCt`vv36-1@a>3%+iJ#)A7*t&J9oBV9P>*VR4|bCSPU zDgZ47FFB?0O!rIOH8*5#aSJLObs{rAP;<~qJx9S40c5v?C*&NZzt5RnBPB6X7a%Q| zv|!SrBqhF^aCE+co)u9Y5!aE=3eHmKb|SP@bq~P23mwWQR<{E$Lg#}nb&idOGY$ty zUnV6L@2Z3JM2>|WAgLX!uqbl$1wy~#NJ$E{1#w5Z(obS#1ur*w8@Lf2tLS-xam7{x zFAeLR5;cPtz*2N5aswYEQK_L7E%1lL=az3Hz3cl}DAgfq?bVV**MOlj!)8s-u~H%3 zJerk!i3|XV%AJf_Ysbs)9XBTf!FmbDEKeuEer+4hm6oyGtXOm2SQ}o*zwVWq#u>@1 z*nStsSdDS#!pSvuvGO0)8arzBzJ}8eDS9I6(9Z~+Xp_emM(*vcRZ!$}SLE9N-YV(} zR=R=OHL=Mg3n~@pR+#%-`K@eDjhY)&zk8I;o&8^vodf*;d$ZN`^NF0>ufl#kQ_Yau z=^Xj{6TZ<0&5bK2&!ah%yCxeH1im)nX((WzR~CbpDuH##3;nLzF8)QF7WXUY{7(dVpZsl)FevK3!=F;;;-c@^^bPV zHNw;%Nm3IB!vfPn6bu85_Q!S8`*JtJG)ZiD(uZdnjS)tjdyBcm#PV2sOew$-tGL2GAQO+JdIDMFMN{ms&A3>4Ql zx==e8EFGw&13`_7wGwq-ED_^A_k^Z#j9q1>ej-K+aiuA-L2I4#|s z1fqKN%h~mHJjuxL@>JlVgHNty z0 +#include +#include +#include +#include +#include + +#include + +#include "KinectInput.h" +#include "PushButton.h" + +#include + +class MainScene: public QGraphicsScene +{ + Q_OBJECT + + public: + MainScene(QObject * parent = 0); + ~MainScene(); + + void init(QString user, QString condition, int repetitions); + + void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent); + void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent); + + void setButtonArray(int x, int y, float sx, float sy, float bsx, float bsy); + + void log(const QString &event, int button, int answer); + int indexOfButton(PushButton *b) const; + + public slots: + // feedback when the cursor gets on the button + void enterFeedback(); + // feedback according to the hand's position, between 0.0 and 1.0 + void progressFeedback(float pos); + // feedback when the button is pressed + void pressFeedback(); + // feedback when the cursor leaves the button + void leaveFeedback(); + + private: + KinectInput _kinectsensor; + TactonPlayer *_tactonplayer; + + QGraphicsEllipseItem _cursor; + + PushButton *_lastitemover; + PushButton **_buttons; + int _nbbuttonsx, _nbbuttonsy; + QSignalMapper _signalmapper; + + //experiment stuff + FILE *_logfile; + QTime _start; + QList _trials; + int _currenttrial; + + + private slots: + void displayHandPosition(float x, float y, float z); + void buttonClicked(int n); +}; + +#endif diff --git a/PushButtons/MainView.cpp b/PushButtons/MainView.cpp new file mode 100644 index 0000000..2e8c15a --- /dev/null +++ b/PushButtons/MainView.cpp @@ -0,0 +1,18 @@ +#include "MainView.h" + +MainView::MainView(float sx, float sy, MainScene * scene, QWidget *parent) +:QGraphicsView(scene, parent), _width(sx), _height(sy) +{ + setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); + setMouseTracking(true); + setSceneRect(-sx / 2.0, -sy / 2.0, sx, sy); +} + +MainView::~MainView() +{ +} + +void MainView::resizeEvent(QResizeEvent * event) +{ + fitInView(-_width / 2.0, -_height / 2.0, _width, _height, Qt::KeepAspectRatio); +} diff --git a/PushButtons/MainView.h b/PushButtons/MainView.h new file mode 100644 index 0000000..0c6aaaa --- /dev/null +++ b/PushButtons/MainView.h @@ -0,0 +1,22 @@ +#ifndef __MAINVIEW__ +#define __MAINVIEW__ + +#include + +#include "MainScene.h" + +class MainView: public QGraphicsView +{ + Q_OBJECT + + public: + MainView(float sx, float sy, MainScene * scene, QWidget * parent=0); + ~MainView(); + + private: + void resizeEvent(QResizeEvent * event); + + float _width, _height; +}; + +#endif diff --git a/PushButtons/PushButton.cpp b/PushButtons/PushButton.cpp new file mode 100644 index 0000000..1dd7051 --- /dev/null +++ b/PushButtons/PushButton.cpp @@ -0,0 +1,79 @@ +#include "PushButton.h" + +#include + +QColor PushButton::_bgcolor = Qt::gray; +QColor PushButton::_hovercolor = Qt::lightGray; +QColor PushButton::_validatedcolor = Qt::red; +QColor PushButton::_targetcolor = Qt::green; +QColor PushButton::_targethovercolor = Qt::yellow; + +const float PushButton::_pushdistance = 0.1; + + +PushButton::PushButton(QGraphicsItem *parent) +:QGraphicsRectItem(parent), _active(false), _pressed(false) +{ + setBrush(QBrush(_bgcolor)); + setZValue(0); +} + +PushButton::PushButton(float posx, float posy, float width, float height, QGraphicsItem *parent) +:QGraphicsRectItem(posx, posy, width, height, parent), _active(false) +{ + setBrush(QBrush(_bgcolor)); + setZValue(0); +} + +PushButton::PushButton(QRect pos, QGraphicsItem *parent) +:QGraphicsRectItem(pos, parent), _active(false) +{ + setBrush(QBrush(_bgcolor)); + setZValue(0); +} + +void PushButton::setActive() +{ + _active = true; + setBrush(QBrush(_targetcolor)); +} + +void PushButton::enter(float z) +{ + if (_active) + setBrush(QBrush(_targethovercolor)); + else + setBrush(QBrush(_hovercolor)); + _enteredposition = z; + emit entered(); +} + +void PushButton::hover(float z) +{ + if (_enteredposition - z >= _pushdistance) + { + _pressed = true; + press(); + } + else + emit progress((_enteredposition - z) / _pushdistance); +} + +void PushButton::press() +{ + setBrush(QBrush(_validatedcolor)); + emit clicked(); + _active = false; + _pressed = true; + //disconnect(this); +} + +void PushButton::leave() +{ + if (_active) + setBrush(QBrush(_targetcolor)); + else + setBrush(QBrush(_bgcolor)); + _pressed = false; + emit(left()); +} diff --git a/PushButtons/PushButton.h b/PushButtons/PushButton.h new file mode 100644 index 0000000..f9517fb --- /dev/null +++ b/PushButtons/PushButton.h @@ -0,0 +1,46 @@ +#ifndef __PUSHBUTTON__ +#define __PUSHBUTTON__ + +#include +#include + +class PushButton: public QObject, public QGraphicsRectItem +{ + Q_OBJECT + + public: + PushButton(QGraphicsItem *parent = 0); + PushButton(float posx, float posy, float width, float height, QGraphicsItem *parent = 0); + PushButton(QRect pos, QGraphicsItem *parent = 0); + + void setActive(); + + bool isPressed() { return _pressed; } + + private: + static QColor _bgcolor, _hovercolor, _validatedcolor, _targetcolor, _targethovercolor; + bool _active, _pressed; + float _enteredposition; + + const static float _pushdistance; + + public slots: + void enter(float z); + void hover(float z); + void press(); + void leave(); + + private slots: + + signals: + // the cursor entered this button + void entered(); + // preogress of the push, between 0.0 and 1.0 + void progress(float pos); + // the button has been clicked + void clicked(); + // the cursor left the button + void left(); +}; + +#endif diff --git a/PushButtons/PushButtons.vcxproj b/PushButtons/PushButtons.vcxproj new file mode 100644 index 0000000..cf336bd --- /dev/null +++ b/PushButtons/PushButtons.vcxproj @@ -0,0 +1,243 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {19428315-091A-4F1A-B5FE-D9327FBB715E} + Qt4VSv1.0 + + + + Application + + + Application + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions) + $(KINECTSDK10_DIR)\inc;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories) + Disabled + ProgramDatabase + MultiThreadedDebugDLL + false + + + Windows + $(OutDir)\$(ProjectName).exe + $(KINECTSDK10_DIR)\lib\x86;$(QTDIR)\lib;%(AdditionalLibraryDirectories) + true + TactonPlayerd.lib;Kinect10.lib;qtmaind.lib;QtCored4.lib;QtGuid4.lib;%(AdditionalDependencies) + + + + + UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions) + $(KINECTSDK10_DIR)\inc;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories) + + + MultiThreadedDLL + false + + + Windows + $(OutDir)\$(ProjectName).exe + $(KINECTSDK10_DIR)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories) + false + TactonPlayer.lib;Kinect10.lib;qtmain.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies) + + + + + true + + + true + + + true + + + true + + + + + true + + + true + + + true + + + true + + + + + + + + + true + + + true + + + true + + + true + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing pushbuttons.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing pushbuttons.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + + + Document + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\GeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\GeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing PushButton.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing PushButton.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainScene.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainScene.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing KinectInput.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing KinectInput.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainView.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing MainView.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing ExperimentSetup.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing ExperimentSetup.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I$(KINECTSDK10_DIR)\inc" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" + + + + + + + Document + %(FullPath);%(AdditionalInputs) + Rcc%27ing %(Identity)... + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp + %(FullPath);%(AdditionalInputs) + Rcc%27ing %(Identity)... + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp + + + + + Document + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\GeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" + $(QTDIR)\bin\uic.exe;%(AdditionalInputs) + Uic%27ing %(Identity)... + .\GeneratedFiles\ui_%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" + + + + + + + + + + + \ No newline at end of file diff --git a/PushButtons/main.cpp b/PushButtons/main.cpp new file mode 100644 index 0000000..02238e8 --- /dev/null +++ b/PushButtons/main.cpp @@ -0,0 +1,11 @@ +#include "ExperimentSetup.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + ExperimentSetup w; + w.show(); + w.raise(); + return a.exec(); +} \ No newline at end of file diff --git a/PushButtons/pushbuttons.cpp b/PushButtons/pushbuttons.cpp new file mode 100644 index 0000000..3836bcc --- /dev/null +++ b/PushButtons/pushbuttons.cpp @@ -0,0 +1,35 @@ +#include "pushbuttons.h" + +PushButtons::PushButtons(QWidget *parent, Qt::WFlags flags) + : QMainWindow(parent, flags) +{ + setupUi(this); +} + +PushButtons::~PushButtons() +{ + +} + +void PushButtons::init(QString user, QString condition, int repetitions, int nbx, int nby, float bsx, float bsy,float spacex, float spacey) +{ + _user = user; + _condition = condition; + _repetitions = repetitions; + _nbx = nbx; + _nby = nby; + _bsx = bsx; + _bsy = bsy; + _spacex = spacex; + _spacey = spacey; + + /*if (_sound) + _sound->play();*/ + + _scene = new MainScene(); + _scene->setButtonArray(nbx, nby, spacex, spacey, bsx, bsy); + _scene->init(user, condition, repetitions); + + _view = new MainView(spacex, spacey, _scene); + setCentralWidget(_view); +} diff --git a/PushButtons/pushbuttons.h b/PushButtons/pushbuttons.h new file mode 100644 index 0000000..a22e3c3 --- /dev/null +++ b/PushButtons/pushbuttons.h @@ -0,0 +1,34 @@ +#ifndef PUSHBUTTONS_H +#define PUSHBUTTONS_H + +#include +#include "ui_pushbuttons.h" +//#include +#include "MainScene.h" +#include "MainView.h" + + +class PushButtons : public QMainWindow, Ui::PushButtonsClass +{ + Q_OBJECT + + public: + PushButtons(QWidget *parent = 0, Qt::WFlags flags = 0); + ~PushButtons(); + + void init(QString user, QString condition, int repetitions, int nbx, int nby, float bsx, float bsy,float spacex, float spacey); + void log(QString answer); + + private: + MainScene *_scene; + QGraphicsView *_view; + // QSound *_sound; + + QString _user, _condition; + int _repetitions; + int _nbx, _nby; + float _bsx, _bsy; + float _spacex, _spacey; +}; + +#endif // PUSHBUTTONS_H diff --git a/PushButtons/pushbuttons.qrc b/PushButtons/pushbuttons.qrc new file mode 100644 index 0000000..d44530f --- /dev/null +++ b/PushButtons/pushbuttons.qrc @@ -0,0 +1,4 @@ + + + + diff --git a/PushButtons/pushbuttons.ui b/PushButtons/pushbuttons.ui new file mode 100644 index 0000000..3e02c90 --- /dev/null +++ b/PushButtons/pushbuttons.ui @@ -0,0 +1,23 @@ + + + PushButtonsClass + + + + 0 + 0 + 600 + 400 + + + + PushButtons + + + + + + + + + diff --git a/TactileButtons.sln b/TactileButtons.sln new file mode 100644 index 0000000..c7b7611 --- /dev/null +++ b/TactileButtons.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PushButtons", "PushButtons\PushButtons.vcxproj", "{19428315-091A-4F1A-B5FE-D9327FBB715E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DwellCursor", "DwellCursor\DwellCursor.vcxproj", "{2928B2FC-98F8-427E-B0D2-2CEA2DA1FFC9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {19428315-091A-4F1A-B5FE-D9327FBB715E}.Debug|Win32.ActiveCfg = Debug|Win32 + {19428315-091A-4F1A-B5FE-D9327FBB715E}.Debug|Win32.Build.0 = Debug|Win32 + {19428315-091A-4F1A-B5FE-D9327FBB715E}.Release|Win32.ActiveCfg = Release|Win32 + {19428315-091A-4F1A-B5FE-D9327FBB715E}.Release|Win32.Build.0 = Release|Win32 + {2928B2FC-98F8-427E-B0D2-2CEA2DA1FFC9}.Debug|Win32.ActiveCfg = Debug|Win32 + {2928B2FC-98F8-427E-B0D2-2CEA2DA1FFC9}.Debug|Win32.Build.0 = Debug|Win32 + {2928B2FC-98F8-427E-B0D2-2CEA2DA1FFC9}.Release|Win32.ActiveCfg = Release|Win32 + {2928B2FC-98F8-427E-B0D2-2CEA2DA1FFC9}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TactileButtons.suo b/TactileButtons.suo new file mode 100644 index 0000000000000000000000000000000000000000..a914ffb1936113823fa2d850d9923995e1b7d215 GIT binary patch literal 70656 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 literal 0 HcmV?d00001 -- 2.30.2