--- /dev/null
+#include "TMenu.h"\r
+\r
+\r
+TMenu::TMenu(TactonPlayer *tactonPlayer, QWidget *parent)\r
+:QMenu(parent), _tactonPlayer(tactonPlayer)\r
+{\r
+ this->setStyleSheet(" QMenu {\\r
+ background-color: #bbbbbb;\\r
+ border: 1px solid black;\\r
+ font-size: 30pt;\\r
+ }\\r
+ QMenu::item {\\r
+ background-color: transparent;\\r
+ padding: 10px 50px 10px 50px;\\r
+ }\\r
+ QMenu::item:selected {\\r
+ background-color: #eeeeee;\\r
+ }");\r
+}\r
+\r
+\r
+TMenu::~TMenu(void)\r
+{\r
+}\r
+\r
+void TMenu::mouseReleaseEvent(QMouseEvent * event)\r
+{\r
+ QAction *a;\r
+ if ((a = activeAction()) != NULL)\r
+ a->trigger();\r
+ close();\r
+}
\ No newline at end of file
--- /dev/null
+#ifndef __TMENU__\r
+#define __TMENU__\r
+\r
+#include <QMenu.h>\r
+\r
+#include <TactonPlayer/TactonPlayer.hpp>\r
+\r
+\r
+class TMenu : public QMenu\r
+{\r
+ public:\r
+ TMenu(TactonPlayer *_tactonPlayer, QWidget *parent=NULL);\r
+ ~TMenu();\r
+\r
+ void mouseReleaseEvent(QMouseEvent * event);\r
+\r
+ private:\r
+ TactonPlayer *_tactonPlayer;\r
+};\r
+\r
+#endif\r
--- /dev/null
+#include "TactileMenus.h"\r
+\r
+#include <QMouseEvent>\r
+#include <QDebug>\r
+\r
+TactileMenus::TactileMenus(QWidget *parent, Qt::WFlags flags)\r
+ : QMainWindow(parent, flags), _menu(NULL)\r
+{\r
+ setupUi(this);\r
+ QWidget::showMaximized();\r
+ \r
+ try\r
+ {\r
+ _tactonPlayer = new TactonPlayer("COM8");\r
+ }\r
+ catch(...)\r
+ {\r
+ qDebug() << "Cannot find the touchscreen or the wristband";\r
+ _tactonPlayer = NULL;\r
+ }\r
+\r
+ _menu = new TMenu(_tactonPlayer, this);\r
+\r
+ _signalMapper = new QSignalMapper(this);\r
+\r
+ for (int i = 1 ; i < 8 ; i++) \r
+ {\r
+ QAction *a = new QAction(QString::number(i), this);\r
+ _menu->addAction(a);\r
+ connect(a, SIGNAL(triggered()), _signalMapper, SLOT(map()));\r
+ connect(a, SIGNAL(hovered()), this, SLOT(pouet()));\r
+ _signalMapper->setMapping(a, i);\r
+ }\r
+\r
+ connect(_signalMapper, SIGNAL(mapped(int)), this, SLOT(execute(int)));\r
+}\r
+\r
+\r
+\r
+TactileMenus::~TactileMenus()\r
+{\r
+ if (_tactonPlayer)\r
+ delete _tactonPlayer;\r
+}\r
+\r
+void TactileMenus::mousePressEvent(QMouseEvent *evt)\r
+{\r
+ //pouet();\r
+ _menu->exec(evt->globalPos());\r
+}\r
+\r
+void TactileMenus::execute(int val)\r
+{\r
+ if (_tactonPlayer)\r
+ _tactonPlayer->play(Tacton(0x0f, 15, 250, 255));\r
+ _text->setText(QString::number(val));\r
+}\r
+\r
+void TactileMenus::pouet()\r
+{\r
+ if (_tactonPlayer)\r
+ _tactonPlayer->play(Tacton(0x0f, 10, 100, 150));\r
+}
\ No newline at end of file
--- /dev/null
+#ifndef TACTILEMENUS_H\r
+#define TACTILEMENUS_H\r
+\r
+#include <QtGui/QMainWindow>\r
+#include "ui_tactilemenus.h"\r
+#include "TMenu.h"\r
+#include <QSignalMApper>\r
+\r
+#include <TactonPlayer/TactonPlayer.hpp>\r
+\r
+class TactileMenus : public QMainWindow, public Ui::TactileMenusClass\r
+{\r
+ Q_OBJECT\r
+\r
+ public:\r
+ TactileMenus(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~TactileMenus();\r
+\r
+ void mousePressEvent(QMouseEvent * event);\r
+ //void mouseReleaseEvent(QMouseEvent * event);\r
+\r
+ public slots:\r
+ void execute(int);\r
+ void pouet();\r
+\r
+ signals:\r
+ void selected(int);\r
+\r
+ private:\r
+ TMenu *_menu;\r
+ QSignalMapper *_signalMapper;\r
+ TactonPlayer *_tactonPlayer;\r
+};\r
+\r
+#endif // TACTILEMENUS_H\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <ItemGroup Label="ProjectConfigurations">\r
+ <ProjectConfiguration Include="Debug|Win32">\r
+ <Configuration>Debug</Configuration>\r
+ <Platform>Win32</Platform>\r
+ </ProjectConfiguration>\r
+ <ProjectConfiguration Include="Release|Win32">\r
+ <Configuration>Release</Configuration>\r
+ <Platform>Win32</Platform>\r
+ </ProjectConfiguration>\r
+ </ItemGroup>\r
+ <PropertyGroup Label="Globals">\r
+ <ProjectGuid>{49223BDA-A1D1-4CAB-A637-3028D969EB2F}</ProjectGuid>\r
+ <Keyword>Qt4VSv1.0</Keyword>\r
+ </PropertyGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+ <ConfigurationType>Application</ConfigurationType>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+ <ConfigurationType>Application</ConfigurationType>\r
+ </PropertyGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+ <ImportGroup Label="ExtensionSettings">\r
+ </ImportGroup>\r
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+ </ImportGroup>\r
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+ </ImportGroup>\r
+ <PropertyGroup Label="UserMacros" />\r
+ <PropertyGroup>\r
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+ </PropertyGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+ <Optimization>Disabled</Optimization>\r
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+ <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+ </ClCompile>\r
+ <Link>\r
+ <SubSystem>Windows</SubSystem>\r
+ <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+ <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+ <GenerateDebugInformation>true</GenerateDebugInformation>\r
+ <AdditionalDependencies>TactonPlayerd.lib;qtmaind.lib;QtCored4.lib;QtGuid4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+ </Link>\r
+ </ItemDefinitionGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+ <DebugInformationFormat>\r
+ </DebugInformationFormat>\r
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+ <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+ </ClCompile>\r
+ <Link>\r
+ <SubSystem>Windows</SubSystem>\r
+ <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+ <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+ <GenerateDebugInformation>false</GenerateDebugInformation>\r
+ <AdditionalDependencies>TactonPlayer.lib;qtmain.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+ </Link>\r
+ </ItemDefinitionGroup>\r
+ <ItemGroup>\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_TactileMenus.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\qrc_tactilemenus.cpp">\r
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ </PrecompiledHeader>\r
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+ </PrecompiledHeader>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Release\moc_TactileMenus.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="main.cpp" />\r
+ <ClCompile Include="TMenu.cpp" />\r
+ <ClCompile Include="TactileMenus.cpp" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="TactileMenus.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing TactileMenus.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing TactileMenus.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactilemenus.ui">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ClInclude Include="GeneratedFiles\ui_tactilemenus.h" />\r
+ <ClInclude Include="TMenu.h" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactilemenus.qrc">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Rcc%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Rcc%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+ <ImportGroup Label="ExtensionTargets">\r
+ </ImportGroup>\r
+ <ProjectExtensions>\r
+ <VisualStudio>\r
+ <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" QtVersion_x0020_Win32="4.8.2" />\r
+ </VisualStudio>\r
+ </ProjectExtensions>\r
+</Project>
\ No newline at end of file
--- /dev/null
+#include "TactileMenus.h"\r
+#include <QtGui/QApplication>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+ QApplication a(argc, argv);\r
+ TactileMenus w;\r
+ w.show();\r
+ return a.exec();\r
+}\r
--- /dev/null
+<RCC>\r
+ <qresource prefix="TactileMenus">\r
+ </qresource>\r
+</RCC>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>TactileMenusClass</class>\r
+ <widget class="QMainWindow" name="TactileMenusClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>600</width>\r
+ <height>400</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>TactileMenus</string>\r
+ </property>\r
+ <widget class="QWidget" name="centralWidget">\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <widget class="QLabel" name="_text">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>60</pointsize>\r
+ <weight>75</weight>\r
+ <bold>true</bold>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Press me</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignCenter</set>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="verticalSpacer">\r
+ <property name="orientation">\r
+ <enum>Qt::Vertical</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>20</width>\r
+ <height>40</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ <layoutdefault spacing="6" margin="11"/>\r
+ <resources>\r
+ <include location="tactilemenus.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r
EndProject\r
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AngularPosition", "AngularPosition\AngularPosition.vcxproj", "{002CBB10-B3C0-490E-BB15-02827293648A}"\r
EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Touchscreen Buttons Experiment", "Touchscreen Buttons Experiment\Touchscreen Buttons Experiment.vcxproj", "{9466E3E8-496E-4DDF-BCE6-20DD992504C1}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TactileMenus", "TactileMenus\TactileMenus.vcxproj", "{49223BDA-A1D1-4CAB-A637-3028D969EB2F}"\r
+EndProject\r
Global\r
GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
Debug|Win32 = Debug|Win32\r
{002CBB10-B3C0-490E-BB15-02827293648A}.Debug|Win32.Build.0 = Debug|Win32\r
{002CBB10-B3C0-490E-BB15-02827293648A}.Release|Win32.ActiveCfg = Release|Win32\r
{002CBB10-B3C0-490E-BB15-02827293648A}.Release|Win32.Build.0 = Release|Win32\r
+ {9466E3E8-496E-4DDF-BCE6-20DD992504C1}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {9466E3E8-496E-4DDF-BCE6-20DD992504C1}.Debug|Win32.Build.0 = Debug|Win32\r
+ {9466E3E8-496E-4DDF-BCE6-20DD992504C1}.Release|Win32.ActiveCfg = Release|Win32\r
+ {9466E3E8-496E-4DDF-BCE6-20DD992504C1}.Release|Win32.Build.0 = Release|Win32\r
+ {49223BDA-A1D1-4CAB-A637-3028D969EB2F}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {49223BDA-A1D1-4CAB-A637-3028D969EB2F}.Debug|Win32.Build.0 = Debug|Win32\r
+ {49223BDA-A1D1-4CAB-A637-3028D969EB2F}.Release|Win32.ActiveCfg = Release|Win32\r
+ {49223BDA-A1D1-4CAB-A637-3028D969EB2F}.Release|Win32.Build.0 = Release|Win32\r
EndGlobalSection\r
GlobalSection(SolutionProperties) = preSolution\r
HideSolutionNode = FALSE\r
--- /dev/null
+#include "SetupGUI.h"\r
+\r
+\r
+SetupGUI::SetupGUI(QWidget *parent, Qt::WFlags flags)\r
+:QMainWindow(parent, flags), _expwindow(NULL)\r
+{\r
+ setupUi(this);\r
+\r
+ connect(_start, SIGNAL(clicked()), this, SLOT(init()));\r
+}\r
+\r
+\r
+SetupGUI::~SetupGUI()\r
+{\r
+ if (_expwindow)\r
+ delete _expwindow;\r
+}\r
+\r
+void SetupGUI::init()\r
+{\r
+ _expwindow = new TouchscreenButtonsExperiment();\r
+ _expwindow->init(_user->text(), _effects->text(), _repetitions->value());\r
+ _expwindow->show();\r
+ this->hide();\r
+}\r
--- /dev/null
+#ifndef __SETUPGUI__\r
+#define __SETUPGUI__\r
+\r
+#include <QtGui/QMainWindow>\r
+#include "ui_setupgui.h"\r
+\r
+#include "TouchscreenButtonsExperiment.h"\r
+\r
+class SetupGUI : public QMainWindow, public Ui::SetupGUI\r
+{\r
+ Q_OBJECT\r
+\r
+ public:\r
+ SetupGUI(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~SetupGUI();\r
+\r
+ public slots:\r
+ void init();\r
+\r
+ private:\r
+ TouchscreenButtonsExperiment *_expwindow;\r
+};\r
+\r
+#endif\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <ItemGroup Label="ProjectConfigurations">\r
+ <ProjectConfiguration Include="Debug|Win32">\r
+ <Configuration>Debug</Configuration>\r
+ <Platform>Win32</Platform>\r
+ </ProjectConfiguration>\r
+ <ProjectConfiguration Include="Release|Win32">\r
+ <Configuration>Release</Configuration>\r
+ <Platform>Win32</Platform>\r
+ </ProjectConfiguration>\r
+ </ItemGroup>\r
+ <PropertyGroup Label="Globals">\r
+ <ProjectGuid>{9466E3E8-496E-4DDF-BCE6-20DD992504C1}</ProjectGuid>\r
+ <Keyword>Qt4VSv1.0</Keyword>\r
+ </PropertyGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+ <ConfigurationType>Application</ConfigurationType>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+ <ConfigurationType>Application</ConfigurationType>\r
+ </PropertyGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+ <ImportGroup Label="ExtensionSettings">\r
+ </ImportGroup>\r
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+ </ImportGroup>\r
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+ </ImportGroup>\r
+ <PropertyGroup Label="UserMacros" />\r
+ <PropertyGroup>\r
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+ </PropertyGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+ <Optimization>Disabled</Optimization>\r
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+ <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+ </ClCompile>\r
+ <Link>\r
+ <SubSystem>Windows</SubSystem>\r
+ <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+ <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+ <GenerateDebugInformation>true</GenerateDebugInformation>\r
+ <AdditionalDependencies>tactonplayerd.lib;hidapid.lib;qtmaind.lib;QtCored4.lib;QtGuid4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+ </Link>\r
+ </ItemDefinitionGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+ <DebugInformationFormat>\r
+ </DebugInformationFormat>\r
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+ <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+ </ClCompile>\r
+ <Link>\r
+ <SubSystem>Windows</SubSystem>\r
+ <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+ <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+ <GenerateDebugInformation>false</GenerateDebugInformation>\r
+ <AdditionalDependencies>tactonplayer.lib;hidapi.lib;qtmain.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+ </Link>\r
+ </ItemDefinitionGroup>\r
+ <ItemGroup>\r
+ <ClCompile Include="..\..\dwell\TouchscreenButton\USBHIDImmersionTouchscreen.cpp" />\r
+ <ClCompile Include="..\..\dwell\TouchscreenButton\Wristband.cpp" />\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_SetupGUI.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_TouchscreenButtonsExperiment.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\qrc_touchscreenbuttonsexperiment.cpp">\r
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ </PrecompiledHeader>\r
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+ </PrecompiledHeader>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Release\moc_SetupGUI.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Release\moc_TouchscreenButtonsExperiment.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="main.cpp" />\r
+ <ClCompile Include="SetupGUI.cpp" />\r
+ <ClCompile Include="TouchscreenButtonsExperiment.cpp" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="TouchscreenButtonsExperiment.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing TouchscreenButtonsExperiment.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing TouchscreenButtonsExperiment.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="touchscreenbuttonsexperiment.ui">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ClInclude Include="..\..\dwell\TouchscreenButton\USBHIDImmersionTouchscreen.h" />\r
+ <ClInclude Include="..\..\dwell\TouchscreenButton\Wristband.h" />\r
+ <ClInclude Include="GeneratedFiles\ui_setupgui.h" />\r
+ <ClInclude Include="GeneratedFiles\ui_touchscreenbuttonsexperiment.h" />\r
+ <ClInclude Include="GeneratedFiles\ui_touchscreenbuttonsexperimenten.h" />\r
+ <CustomBuild Include="SetupGUI.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing SetupGUI.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing SetupGUI.h...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(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.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="touchscreenbuttonsexperiment.qrc">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Rcc%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Rcc%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="setupgui.ui">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="ClassDiagram1.cd" />\r
+ <CustomBuild Include="touchscreenbuttonsexperimenten.ui">\r
+ <FileType>Document</FileType>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>\r
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+ <ImportGroup Label="ExtensionTargets">\r
+ </ImportGroup>\r
+ <ProjectExtensions>\r
+ <VisualStudio>\r
+ <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" QtVersion_x0020_Win32="4.8.2" />\r
+ </VisualStudio>\r
+ </ProjectExtensions>\r
+</Project>
\ No newline at end of file
--- /dev/null
+#include "TouchscreenButtonsExperiment.h"\r
+\r
+#include <QDateTime>\r
+#include <QDebug>\r
+\r
+TouchscreenButtonsExperiment::TouchscreenButtonsExperiment(QWidget *parent, Qt::WFlags flags)\r
+: QMainWindow(parent, flags), _current(0)\r
+{\r
+ setupUi(this);\r
+\r
+ try\r
+ {\r
+ _touchscreen = new USBHIDImmersionTouchscreen();\r
+ }\r
+ catch(...)\r
+ {\r
+ qDebug() << "Cannot find the touchscreen";\r
+ _touchscreen = NULL;\r
+ }\r
+\r
+ try\r
+ {\r
+ _wristband = new Wristband();\r
+ }\r
+ catch(...)\r
+ {\r
+ qDebug() << "Cannot find the wristband";\r
+ _wristband = NULL;\r
+ }\r
+\r
+ connect(_play, SIGNAL(pressed()), this, SLOT(pressWristband()));\r
+ connect(_play, SIGNAL(released()), this, SLOT(releaseWristband()));\r
+ connect(_play, SIGNAL(pressed()), this, SLOT(pressTouchscreen()));\r
+\r
+ connect(_answer1, SIGNAL(actionTriggered(int)), this, SLOT(slider1Action(int)));\r
+ connect(_answer2, SIGNAL(actionTriggered(int)), this, SLOT(slider2Action(int)));\r
+\r
+\r
+ connect(_validate, SIGNAL(pressed()), this, SLOT(answer()));\r
+}\r
+\r
+TouchscreenButtonsExperiment::~TouchscreenButtonsExperiment()\r
+{\r
+ if (_logfile)\r
+ fclose(_logfile);\r
+ if (_touchscreen)\r
+ delete _touchscreen;\r
+ if (_wristband)\r
+ delete _wristband;\r
+ hid_exit();\r
+}\r
+\r
+void TouchscreenButtonsExperiment::init(QString user, QString effects, int repetitions)\r
+{\r
+ _user = user;\r
+ QStringList effectlist = effects.split(";");\r
+ _effects = new int[effectlist.length()];\r
+ for (unsigned int i = 0 ; i < effectlist.length() ; i++)\r
+ _effects[i] = effectlist[i].toInt();\r
+ _repetitions = repetitions;\r
+\r
+ //create log file\r
+ QString date = QDate::currentDate().toString("yyyy-MM-dd") + "-" + QTime::currentTime().toString("HH-mm-ss");\r
+ QString logfilename = user + "-" + QString::number(repetitions) + "-" + date + ".csv";\r
+ _logfile = fopen(logfilename.toStdString().c_str(), "w");\r
+ qDebug() << "log: " << logfilename;\r
+ if (_logfile)\r
+ fprintf(_logfile, "Time,User,Condition,Effect,NbPress,Answer1,Answer2\n");\r
+\r
+ //Prepare trials\r
+ for (int i = 0 ; i < _repetitions ; i++)\r
+ {\r
+ QList<QPair<unsigned char,int> > temp;\r
+ //generate the block\r
+ for (int j = 0 ; j < NBCONDITIONS ; j++)\r
+ for (int k = 0 ; k < effectlist.length() ; k++)\r
+ temp.push_back(QPair<unsigned char,int>(k, j));\r
+ //shuffle\r
+ for (int j = 0; j < temp.count(); j++)\r
+ temp.swap(j, (rand() % (temp.count() - j)) + j);\r
+ //add the block to the trial\r
+ _trials.append(temp);\r
+ }\r
+\r
+ //run trial\r
+ _timer.start();\r
+ runTrial();\r
+}\r
+\r
+void TouchscreenButtonsExperiment::runTrial()\r
+{\r
+ if (_current >= _trials.count())\r
+ {\r
+ _validate->setText("Terminé");\r
+ _validate->setDisabled(true);\r
+ _play->setDisabled(true);\r
+\r
+ disconnect(_play, SIGNAL(pressed()), this, SLOT(pressWristband()));\r
+ disconnect(_play, SIGNAL(released()), this, SLOT(releaseWristband()));\r
+ disconnect(_play, SIGNAL(pressed()), this, SLOT(pressTouchscreen()));\r
+ return;\r
+ }\r
+\r
+ //reset stats\r
+ _presses = 0;\r
+ _validate->setDisabled(true);\r
+ _answer1->setValue((_answer1->minimum() + _answer1->maximum()) / 2);\r
+ _answer2->setValue((_answer2->minimum() + _answer2->maximum()) / 2);\r
+}\r
+\r
+\r
+void TouchscreenButtonsExperiment::answer()\r
+{\r
+ //write answer in the log file\r
+ log();\r
+\r
+ _current++;\r
+\r
+ //run next trial\r
+ runTrial();\r
+}\r
+\r
+void TouchscreenButtonsExperiment::log()\r
+{\r
+ if (_logfile)\r
+ fprintf(_logfile, "%lld,%s,%d,%d,%d,%d,%d\n",\r
+ _timer.elapsed(),\r
+ _user.toStdString().c_str(),\r
+ _trials.at(_current).second,\r
+ _trials.at(_current).first,\r
+ _presses,\r
+ _answer1->value(),\r
+ _answer2->value());\r
+}\r
+\r
+void TouchscreenButtonsExperiment::pressWristband()\r
+{\r
+ switch (_trials.at(_current).second)\r
+ {\r
+ case WRISTBAND:\r
+ _wristband->playEffect(_trials.at(_current).first, 1);\r
+ break;\r
+ case WRISTBANDTIME: case BOTH:\r
+ _wristband->playEffect(_trials.at(_current).first, 2);\r
+ break;\r
+ default:\r
+ break;\r
+ } _validate->setEnabled(true);\r
+}\r
+\r
+void TouchscreenButtonsExperiment::releaseWristband()\r
+{\r
+ if (_trials.at(_current).second == WRISTBAND)\r
+ _wristband->playEffect(_trials.at(_current).first, 1);\r
+\r
+ _presses++;\r
+}\r
+\r
+void TouchscreenButtonsExperiment::pressTouchscreen()\r
+{\r
+ if (_trials.at(_current).second == TOUCHSCREEN || _trials.at(_current).second == BOTH)\r
+ _touchscreen->playEffect(_trials.at(_current).first, 1);\r
+\r
+ _validate->setEnabled(true);\r
+}\r
+\r
+void TouchscreenButtonsExperiment::slider1Action(int action)\r
+{\r
+ // prevents the wlider from moving when pressing the sides of the handle\r
+ if (action != QAbstractSlider::SliderMove)\r
+ _answer1->setSliderPosition(_answer1->value());\r
+}\r
+\r
+void TouchscreenButtonsExperiment::slider2Action(int action)\r
+{\r
+ // prevents the wlider from moving when pressing the sides of the handle\r
+ if (action != QAbstractSlider::SliderMove)\r
+ _answer2->setSliderPosition(_answer2->value());\r
+}\r
--- /dev/null
+#ifndef TOUCHSCREENBUTTONSEXPERIMENT_H\r
+#define TOUCHSCREENBUTTONSEXPERIMENT_H\r
+\r
+#include <QtGui/QMainWindow>\r
+#include <QElapsedTimer>\r
+#include "ui_touchscreenbuttonsexperimenten.h"\r
+\r
+#include "..\..\dwell\TouchscreenButton\Wristband.h"\r
+#include "..\..\dwell\TouchscreenButton\USBHIDImmersionTouchscreen.h"\r
+\r
+class TouchscreenButtonsExperiment : public QMainWindow, public Ui::TouchscreenButtonsExperimentClass\r
+{\r
+ Q_OBJECT\r
+\r
+ public:\r
+ TouchscreenButtonsExperiment(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~TouchscreenButtonsExperiment();\r
+\r
+ void init(QString user, QString effects, int repetitions);\r
+\r
+ void log();\r
+\r
+\r
+ void runTrial();\r
+\r
+ public slots:\r
+ void answer();\r
+ void pressWristband();\r
+ void releaseWristband();\r
+ void pressTouchscreen();\r
+\r
+ void slider1Action(int);\r
+ void slider2Action(int);\r
+\r
+ private:\r
+\r
+ enum Condition { \r
+ NOEFFECT,\r
+ WRISTBAND, \r
+ WRISTBANDTIME,\r
+ TOUCHSCREEN,\r
+ BOTH,\r
+ NBCONDITIONS\r
+ };\r
+\r
+ USBHIDImmersionTouchscreen *_touchscreen;\r
+ Wristband *_wristband;\r
+\r
+ QString _user;\r
+ int *_effects;\r
+ int _repetitions;\r
+ int _presses;\r
+\r
+ //each trial is a pair of <effect, condition>\r
+ QList<QPair<unsigned char, int> > _trials;\r
+ int _current;\r
+ QElapsedTimer _timer;\r
+\r
+ FILE *_logfile;\r
+};\r
+\r
+#endif // TOUCHSCREENBUTTONSEXPERIMENT_H\r
--- /dev/null
+#include "SetupGUI.h"\r
+#include <QtGui/QApplication>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+ QApplication a(argc, argv);\r
+ SetupGUI w;\r
+ w.show();\r
+ return a.exec();\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>SetupGUI</class>\r
+ <widget class="QMainWindow" name="SetupGUI">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>236</width>\r
+ <height>121</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Touchscreen buttons experiment</string>\r
+ </property>\r
+ <property name="windowOpacity">\r
+ <double>1.000000000000000</double>\r
+ </property>\r
+ <widget class="QWidget" name="Layout">\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <layout class="QFormLayout" name="formLayout">\r
+ <item row="0" column="0">\r
+ <widget class="QLabel" name="userLabel">\r
+ <property name="text">\r
+ <string>User: </string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="0" column="1">\r
+ <widget class="QLineEdit" name="_user"/>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QLabel" name="effectsLabel">\r
+ <property name="text">\r
+ <string>Effects: </string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="1">\r
+ <widget class="QLineEdit" name="_effects">\r
+ <property name="text">\r
+ <string>3;8;12;13</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="0">\r
+ <widget class="QLabel" name="repetitionsLabel">\r
+ <property name="text">\r
+ <string>Repetitions: </string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="1">\r
+ <widget class="QSpinBox" name="_repetitions">\r
+ <property name="minimum">\r
+ <number>1</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>3</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="_start">\r
+ <property name="text">\r
+ <string>Start</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ <resources/>\r
+ <connections/>\r
+</ui>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>SetupGUI</class>\r
+ <widget class="QDialog" name="SetupGUI">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>222</width>\r
+ <height>123</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Dialog</string>\r
+ </property>\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <layout class="QVBoxLayout" name="verticalLayout_2">\r
+ <property name="spacing">\r
+ <number>6</number>\r
+ </property>\r
+ <property name="margin">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <layout class="QFormLayout" name="formLayout">\r
+ <property name="fieldGrowthPolicy">\r
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>\r
+ </property>\r
+ <item row="0" column="0">\r
+ <widget class="QLabel" name="_luser">\r
+ <property name="text">\r
+ <string>User:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="0" column="1">\r
+ <widget class="QLineEdit" name="_user"/>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QLabel" name="effectsLabel">\r
+ <property name="text">\r
+ <string>Effects:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="1">\r
+ <widget class="QLineEdit" name="_effects">\r
+ <property name="text">\r
+ <string>0;1;2</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="0">\r
+ <widget class="QLabel" name="repetitionsLabel">\r
+ <property name="text">\r
+ <string>Repetitions:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="1">\r
+ <widget class="QSpinBox" name="_repetitions">\r
+ <property name="maximum">\r
+ <number>10</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>3</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="_start">\r
+ <property name="text">\r
+ <string>Start</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <resources/>\r
+ <connections>\r
+ <connection>\r
+ <sender>_start</sender>\r
+ <signal>clicked()</signal>\r
+ <receiver>SetupGUI</receiver>\r
+ <slot>accept()</slot>\r
+ <hints>\r
+ <hint type="sourcelabel">\r
+ <x>278</x>\r
+ <y>253</y>\r
+ </hint>\r
+ <hint type="destinationlabel">\r
+ <x>96</x>\r
+ <y>254</y>\r
+ </hint>\r
+ </hints>\r
+ </connection>\r
+ </connections>\r
+</ui>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>TouchscreenButtonsExperimentClass</class>\r
+ <widget class="QMainWindow" name="TouchscreenButtonsExperimentClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>740</width>\r
+ <height>588</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>TouchscreenButtonsExperiment</string>\r
+ </property>\r
+ <widget class="QWidget" name="centralWidget">\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <spacer name="verticalSpacer_2">\r
+ <property name="orientation">\r
+ <enum>Qt::Vertical</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>20</width>\r
+ <height>40</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="_play">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>50</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="styleSheet">\r
+ <string notr="true">QPushButton {\r
+ border: 2px solid #8f8f91;\r
+ border-radius: 6px;\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0 #d6d7da, stop: 1 #babbbe);\r
+ min-width: 80px;\r
+ }\r
+\r
+ QPushButton:hover {\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0#f6f7fa , stop: 1 #dadbde);\r
+ }\r
+\r
+ QPushButton:hover:pressed {\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0 #babbbe, stop: 1 #f6f7fa);\r
+ }\r
+\r
+ QPushButton:flat {\r
+ border: none; /* no border for a flat push button */\r
+ }\r
+\r
+ QPushButton:default {\r
+ border-color: navy; /* make the default button prominent */\r
+ }</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>Play</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="verticalSpacer">\r
+ <property name="orientation">\r
+ <enum>Qt::Vertical</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>20</width>\r
+ <height>40</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="label">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>A quel point avez-vous l'impression de presser un bouton ?</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout">\r
+ <item>\r
+ <widget class="QLabel" name="label_2">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Pas du tout</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QSlider" name="_answer1">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>50</width>\r
+ <height>50</height>\r
+ </size>\r
+ </property>\r
+ <property name="styleSheet">\r
+ <string notr="true">QSlider { height: 100px}\r
+\r
+QSlider::groove:horizontal {\r
+ border:2px solid #999999;\r
+ height:60px;\r
+ margin: 0 0 0 0;\r
+}\r
+\r
+QSlider::handle:horizontal {\r
+ background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\r
+ border: 1px solid #5c5c5c;\r
+ width:70px;\r
+ margin: -10px 0 -10px 0;\r
+ border-radius: 3px;\r
+}\r
+</string>\r
+ </property>\r
+ <property name="minimum">\r
+ <number>1</number>\r
+ </property>\r
+ <property name="maximum">\r
+ <number>100</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>50</number>\r
+ </property>\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="label_3">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Beaucoup</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="label_4">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Est-ce que le ressenti du bouton est agréable ?</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_2">\r
+ <item>\r
+ <widget class="QLabel" name="label_6">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Pas du tout</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QSlider" name="_answer2">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>0</width>\r
+ <height>50</height>\r
+ </size>\r
+ </property>\r
+ <property name="styleSheet">\r
+ <string notr="true">QSlider { height: 100px}\r
+\r
+QSlider::groove:horizontal {\r
+ border:2px solid #999999;\r
+ height:60px;\r
+ margin: 0 0 0 0;\r
+}\r
+\r
+QSlider::handle:horizontal {\r
+ background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\r
+ border: 1px solid #5c5c5c;\r
+ width:70px;\r
+ margin: -10px 0 -10px 0;\r
+ border-radius: 3px;\r
+}\r
+</string>\r
+ </property>\r
+ <property name="minimum">\r
+ <number>1</number>\r
+ </property>\r
+ <property name="maximum">\r
+ <number>100</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>50</number>\r
+ </property>\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="label_5">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>12</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Beaucoup</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="_validate">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>50</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="styleSheet">\r
+ <string notr="true">QPushButton {\r
+ border: 2px solid #8f8f91;\r
+ border-radius: 6px;\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0 #d6d7da, stop: 1 #babbbe);\r
+ min-width: 80px;\r
+ }\r
+\r
+ QPushButton:hover {\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0#f6f7fa , stop: 1 #dadbde);\r
+ }\r
+\r
+ QPushButton:hover:pressed {\r
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\r
+ stop: 0 #babbbe, stop: 1 #f6f7fa);\r
+ }\r
+\r
+ QPushButton:flat {\r
+ border: none; /* no border for a flat push button */\r
+ }\r
+\r
+ QPushButton:default {\r
+ border-color: navy; /* make the default button prominent */\r
+ }</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>Valider</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ <layoutdefault spacing="6" margin="11"/>\r
+ <resources>\r
+ <include location="touchscreenbuttonsexperiment.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r