--- /dev/null
+#include "AnswerDetection.h"\r
+\r
+#include <QTimer>\r
+#include <QDate>\r
+#include <QDebug>\r
+#include <TactonPlayer/Tacton.hpp>\r
+#include <cmath>\r
+\r
+AnswerDetection::AnswerDetection(QWidget *parent, Qt::WFlags flags)\r
+:QDialog(parent, flags),\r
+_logfile(NULL), _tactonPlayer("COM3"), _current(0), _currentvalue(0)\r
+{\r
+ //init the window\r
+ setupUi(this);\r
+ this->layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+\r
+ //init buttons\r
+ QObject::connect(now, SIGNAL(clicked()), this, SLOT(answer()));\r
+}\r
+\r
+AnswerDetection::~AnswerDetection()\r
+{\r
+ if (_logfile)\r
+ fclose(_logfile);\r
+ //reset the wristband\r
+ _tactonPlayer.stop();\r
+}\r
+\r
+void AnswerDetection::init(QString user, unsigned int repetitions, unsigned int step, unsigned int delay, QString order, QString gesture)\r
+{\r
+ _user = user;\r
+ _repetitions = repetitions;\r
+ _step = step;\r
+ _delay = delay;\r
+ _order = order;\r
+ _gesture = gesture;\r
+\r
+ _timer = new QTimer(this);\r
+ connect(_timer, SIGNAL(timeout()), this, SLOT(play()));\r
+\r
+ //create log file\r
+ QString date = QDate::currentDate().toString("yyyy-MM-dd") + "-" + QTime::currentTime().toString("HH-mm-ss");\r
+ QString logfilename = user + "-" + "-" + gesture + "-" + date;\r
+ if (_logfile = fopen(logfilename.toStdString().c_str(), "w"))\r
+ fprintf(_logfile, "DIRECTION,FREQUENCY,LOCATION,VALUE\n");\r
+\r
+ //load icons\r
+ FILE *f = fopen("Frequencies.txt", "r");\r
+ if (f)\r
+ {\r
+ char buffer[256];\r
+ QList<QPair<unsigned char, unsigned int> > temp;\r
+ while ((fgets(buffer, 256, f)) != NULL)\r
+ {\r
+ unsigned int val = atoi(buffer);\r
+ _values.push_back(val);\r
+ temp.push_back(QPair<unsigned char, unsigned int>(1,val));\r
+ temp.push_back(QPair<unsigned char, unsigned int>(2,val));\r
+ temp.push_back(QPair<unsigned char, unsigned int>(4,val));\r
+ temp.push_back(QPair<unsigned char, unsigned int>(8,val));\r
+ }\r
+ fclose(f);\r
+ for (int i = 0 ; i < _repetitions ; i++)\r
+ {\r
+ //shuffle\r
+ for (int i = 0; i < temp.count(); i++)\r
+ temp.swap(i, (rand() % (temp.count() - i)) + i);\r
+ _trials.append(temp);\r
+ }\r
+ }\r
+ runTrial();\r
+}\r
+\r
+void AnswerDetection::log() const\r
+{\r
+ if (_logfile == NULL)\r
+ return;\r
+ QString direction;\r
+ if (isAscending())\r
+ direction = "Ascending";\r
+ else\r
+ direction = "Descending";\r
+ fprintf(_logfile, "%s,%d,%d,%d\n", direction.toAscii().constData(), _trials.at(_current).second, _trials.at(_current).first, _currentvalue);\r
+}\r
+\r
+void AnswerDetection::runTrial()\r
+{\r
+ if (_current >= _trials.count())\r
+ {\r
+ now->setEnabled(false);\r
+ return;\r
+ }\r
+\r
+ //set label and amplitude\r
+ if (isAscending())\r
+ {\r
+ label->setText("Click when you feel a vibration");\r
+ _currentvalue = 0;\r
+ qDebug() << "f=" << QString::number(_trials.at(_current).second);\r
+ }\r
+ else\r
+ {\r
+ label->setText("Click when you stop feeling the vibration");\r
+ _currentvalue = 20;\r
+ qDebug() << "f=" << QString::number(_trials.at(_current).second);\r
+ }\r
+\r
+ //play\r
+ _timer->start(_delay);\r
+}\r
+\r
+void AnswerDetection::answer()\r
+{\r
+ _timer->stop();\r
+ log();\r
+ _current++;\r
+ \r
+ runTrial();\r
+}\r
+\r
+bool AnswerDetection::isAscending() const\r
+{\r
+ if (_order == "Ascending / Descending")\r
+ return _current % 2 == 0;\r
+ else\r
+ return _current % 2 != 0;\r
+}\r
+\r
+void AnswerDetection::play()\r
+{\r
+ Tacton t(_trials.at(_current).first, _delay, _trials.at(_current).second, _currentvalue);\r
+ _tactonPlayer.play(t);\r
+ \r
+ char buffer[256];\r
+ memset(buffer, 0, 256);\r
+ _tactonPlayer.debugRead(buffer, 256);\r
+ qDebug() << "Read: " << buffer;\r
+\r
+ if (isAscending())\r
+ {\r
+ if (_currentvalue + _step > 255)\r
+ return;\r
+ _currentvalue += _step;\r
+ }\r
+ else\r
+ {\r
+ if (_currentvalue < _step)\r
+ return;\r
+ _currentvalue -= _step;\r
+ }\r
+}\r
--- /dev/null
+#ifndef _ANSWERDETECTION_\r
+#define _ANSWERDETECTION_\r
+\r
+#include <TactonPlayer/TactonPlayer.hpp>\r
+\r
+#include <QDialog>\r
+#include <QString>\r
+#include <QList>\r
+#include "ui_AnswerDetection.h"\r
+\r
+\r
+class AnswerDetection : public QDialog, Ui::AnswerDetectionClass\r
+{\r
+ Q_OBJECT\r
+\r
+public:\r
+ AnswerDetection(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~AnswerDetection();\r
+\r
+ void init(QString user, unsigned int repetitions, unsigned int step, unsigned int delay, QString order, QString gesture);\r
+ bool isAscending() const;\r
+\r
+private:\r
+ void log() const;\r
+\r
+ FILE *_logfile;\r
+ TactonPlayer _tactonPlayer;\r
+\r
+ //exp parameters\r
+ QString _user;\r
+ unsigned int _repetitions, _step, _delay;\r
+ QString _order;\r
+ QString _gesture;\r
+\r
+ //exp data\r
+ QList<unsigned int> _values;\r
+ QList<QPair<unsigned char, unsigned int> > _trials;\r
+\r
+ //exp status\r
+ unsigned int _current;\r
+ unsigned char _currentvalue;\r
+\r
+ QTimer *_timer;\r
+\r
+private slots:\r
+ void runTrial();\r
+ void answer();\r
+ void play();\r
+};\r
+\r
+#endif\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>AnswerDetectionClass</class>\r
+ <widget class="QDialog" name="AnswerDetectionClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>400</width>\r
+ <height>165</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Dialog</string>\r
+ </property>\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <widget class="QLabel" name="label">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>20</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>Click when you feel a vibration</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignCenter</set>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="now">\r
+ <property name="text">\r
+ <string>Now!</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <resources/>\r
+ <connections/>\r
+</ui>\r
--- /dev/null
+16\r
+32\r
+64\r
+128\r
+256\r
+512
\ No newline at end of file
--- /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>{EC926972-4F08-4721-A572-B278203C092D}</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.40219.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)$(ConfigurationName)</OutDir>\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(ConfigurationName)</OutDir>\r
+ </PropertyGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(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>TactonPlayer.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_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(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="AnswerDetection.cpp" />\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_AnswerDetection.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_tactonsdetection.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\qrc_tactonsdetection.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_AnswerDetection.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Release\moc_tactonsdetection.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="main.cpp" />\r
+ <ClCompile Include="tactonsdetection.cpp" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonsdetection.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</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" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "tactonsdetection.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing %(Identity)...</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" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "tactonsdetection.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonsdetection.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
+ <CustomBuild Include="AnswerDetection.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</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_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing %(Identity)...</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_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>\r
+ </CustomBuild>\r
+ <ClInclude Include="GeneratedFiles\ui_AnswerDetection.h" />\r
+ <ClInclude Include="GeneratedFiles\ui_tactonsdetection.h" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonsdetection.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="AnswerDetection.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.7.3" />\r
+ </VisualStudio>\r
+ </ProjectExtensions>\r
+</Project>
\ No newline at end of file
--- /dev/null
+#include "tactonsdetection.h"\r
+#include <QtGui/QApplication>\r
+\r
+#include <ctime>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+ srand(time(NULL));\r
+ QApplication a(argc, argv);\r
+ TactonsDetection w;\r
+ w.show();\r
+ return a.exec();\r
+}\r
--- /dev/null
+#include "tactonsdetection.h"\r
+\r
+TactonsDetection::TactonsDetection(QWidget *parent, Qt::WFlags flags)\r
+ : QMainWindow(parent, flags)\r
+{\r
+ setupUi(this);\r
+\r
+ this->layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+\r
+ QObject::connect(buttonstart, SIGNAL(clicked()), this, SLOT(runBlock()));\r
+}\r
+\r
+TactonsDetection::~TactonsDetection()\r
+{\r
+\r
+}\r
+\r
+void TactonsDetection::runBlock(void)\r
+{\r
+ this->hide();\r
+ w.init(username->text(), repetitions->value(), step->value(), delay->value(), order->currentText(), gesture->currentText());\r
+ w.show();\r
+}\r
--- /dev/null
+#ifndef TACTONSDETECTION_H\r
+#define TACTONSDETECTION_H\r
+\r
+#include <QtGui/QMainWindow>\r
+#include "ui_tactonsdetection.h"\r
+\r
+#include "AnswerDetection.h"\r
+\r
+class TactonsDetection : public QMainWindow, Ui::TactonsDetectionClass\r
+{\r
+ Q_OBJECT\r
+\r
+public:\r
+ TactonsDetection(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~TactonsDetection();\r
+\r
+private:\r
+ AnswerDetection w;\r
+\r
+private slots:\r
+ void runBlock();\r
+};\r
+\r
+#endif // TACTONSDETECTION_H\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>TactonsDetectionClass</class>\r
+ <widget class="QMainWindow" name="TactonsDetectionClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>223</width>\r
+ <height>201</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>TactonsDetection</string>\r
+ </property>\r
+ <widget class="QWidget" name="centralWidget">\r
+ <layout class="QGridLayout" name="gridLayout_3">\r
+ <item row="1" column="0">\r
+ <widget class="QPushButton" name="buttonstart">\r
+ <property name="locale">\r
+ <locale language="English" country="Canada"/>\r
+ </property>\r
+ <property name="text">\r
+ <string>Start experiment</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="0" column="0">\r
+ <layout class="QGridLayout" name="gridLayout_2">\r
+ <item row="1" column="0">\r
+ <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0">\r
+ <item row="0" column="0">\r
+ <widget class="QLabel" name="labeluser">\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="username"/>\r
+ </item>\r
+ <item row="1" column="1">\r
+ <widget class="QSpinBox" name="repetitions">\r
+ <property name="minimum">\r
+ <number>1</number>\r
+ </property>\r
+ <property name="maximum">\r
+ <number>50</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>1</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QLabel" name="labelrepetitions">\r
+ <property name="text">\r
+ <string>Repetitions:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="0">\r
+ <widget class="QLabel" name="labelstep">\r
+ <property name="text">\r
+ <string>Step:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="1">\r
+ <widget class="QSpinBox" name="step">\r
+ <property name="minimum">\r
+ <number>1</number>\r
+ </property>\r
+ <property name="maximum">\r
+ <number>30</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>1</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="5" column="1">\r
+ <widget class="QComboBox" name="gesture">\r
+ <item>\r
+ <property name="text">\r
+ <string>Rest</string>\r
+ </property>\r
+ </item>\r
+ </widget>\r
+ </item>\r
+ <item row="4" column="1">\r
+ <widget class="QComboBox" name="order">\r
+ <item>\r
+ <property name="text">\r
+ <string>Ascending / Descending</string>\r
+ </property>\r
+ </item>\r
+ <item>\r
+ <property name="text">\r
+ <string>Descending / Ascending</string>\r
+ </property>\r
+ </item>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="1">\r
+ <widget class="QSpinBox" name="delay">\r
+ <property name="minimum">\r
+ <number>10</number>\r
+ </property>\r
+ <property name="maximum">\r
+ <number>10000</number>\r
+ </property>\r
+ <property name="singleStep">\r
+ <number>10</number>\r
+ </property>\r
+ <property name="value">\r
+ <number>1000</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="5" column="0">\r
+ <widget class="QLabel" name="labelgesture">\r
+ <property name="text">\r
+ <string>Gesture:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="4" column="0">\r
+ <widget class="QLabel" name="labelorder">\r
+ <property name="text">\r
+ <string>Order:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="0">\r
+ <widget class="QLabel" name="labeldelay">\r
+ <property name="text">\r
+ <string>Delay:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ <layoutdefault spacing="6" margin="11"/>\r
+ <resources>\r
+ <include location="tactonsdetection.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r
EndProject\r
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tactons JND", "Tactons JND\Tactons JND.vcxproj", "{454A6651-24D2-4DBA-A579-FDACD5CAC68C}"\r
EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tactons patterns", "Tactons patterns\Tactons patterns.vcxproj", "{3978B08B-EFB4-443A-9B39-035F6796DDEE}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tactons Detection", "Tactons Detection\Tactons Detection.vcxproj", "{EC926972-4F08-4721-A572-B278203C092D}"\r
+EndProject\r
Global\r
GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
Debug|Win32 = Debug|Win32\r
{454A6651-24D2-4DBA-A579-FDACD5CAC68C}.Debug|Win32.Build.0 = Debug|Win32\r
{454A6651-24D2-4DBA-A579-FDACD5CAC68C}.Release|Win32.ActiveCfg = Release|Win32\r
{454A6651-24D2-4DBA-A579-FDACD5CAC68C}.Release|Win32.Build.0 = Release|Win32\r
+ {3978B08B-EFB4-443A-9B39-035F6796DDEE}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {3978B08B-EFB4-443A-9B39-035F6796DDEE}.Debug|Win32.Build.0 = Debug|Win32\r
+ {3978B08B-EFB4-443A-9B39-035F6796DDEE}.Release|Win32.ActiveCfg = Release|Win32\r
+ {3978B08B-EFB4-443A-9B39-035F6796DDEE}.Release|Win32.Build.0 = Release|Win32\r
+ {EC926972-4F08-4721-A572-B278203C092D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {EC926972-4F08-4721-A572-B278203C092D}.Debug|Win32.Build.0 = Debug|Win32\r
+ {EC926972-4F08-4721-A572-B278203C092D}.Release|Win32.ActiveCfg = Release|Win32\r
+ {EC926972-4F08-4721-A572-B278203C092D}.Release|Win32.Build.0 = Release|Win32\r
EndGlobalSection\r
GlobalSection(SolutionProperties) = preSolution\r
HideSolutionNode = FALSE\r
-1;1111;200;50;100\r
-1;1111;200;100;100\r
-1;1111;200;150;100\r
-1;1111;200;200;100\r
+1;1111;200;15;100\r
+1;1111;200;31;100\r
+1;1111;200;62;100\r
+1;1111;200;125;100\r
1;1111;200;250;100\r
-1;1111;200;300;100\r
+1;1111;200;500;100\r
--- /dev/null
+100\r
+80\r
+60\r
+40\r
+20
\ No newline at end of file
--- /dev/null
+300\r
+250\r
+200\r
+150\r
+100\r
+50
\ No newline at end of file
--- /dev/null
+Frequencies\r
+Amplitudes\r
+Durations\r
--- /dev/null
+50
\ No newline at end of file
--- /dev/null
+Rest\r
+Arm up\r
+Arm right\r
+Arm left\r
+Arm down\r
+Circle side\r
+Circle front
\ No newline at end of file
--- /dev/null
+#include "AnswerPattern.h"\r
+\r
+#include <TactonPlayer\Tacton.hpp>\r
+\r
+#include <QString>\r
+#include <QLayout>\r
+#include <QTimer>\r
+#include <QDate>\r
+\r
+#define VIBRATIONDURATION 500\r
+\r
+AnswerPattern::AnswerPattern(QWidget *parent, Qt::WFlags flags)\r
+: QDialog(parent, flags), _logfile(NULL), _tactonPlayer("COM3"), _current(0)\r
+{\r
+ //init the window\r
+ setupUi(this);\r
+ this->layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+}\r
+\r
+AnswerPattern::~AnswerPattern()\r
+{\r
+ if (_logfile)\r
+ fclose(_logfile);\r
+ //reset the wristband\r
+ _tactonPlayer.stop();\r
+}\r
+\r
+void AnswerPattern::init(QString user, int repetitions, QString placement, QString gesture)\r
+{\r
+ _user = user;\r
+ _repetitions = repetitions;\r
+ _placement = placement;\r
+ _gesture = gesture;\r
+\r
+ if (placement == "placement1")\r
+ {\r
+ setPicture(answer1, "placement1pattern0001.png");\r
+ setPicture(answer2, "placement1pattern0011.png");\r
+ setPicture(answer3, "placement1pattern0010.png");\r
+ setPicture(answer4, "placement1pattern1010.png");\r
+ setPicture(answer5, "placement1pattern1000.png");\r
+ setPicture(answer6, "placement1pattern1100.png");\r
+ setPicture(answer7, "placement1pattern0100.png");\r
+ setPicture(answer8, "placement1pattern0101.png");\r
+ setPicture(answer9, "placement1pattern0111.png");\r
+ setPicture(answer10, "placement1pattern0000.png");\r
+ setPicture(answer11, "placement1pattern1011.png");\r
+ setPicture(answer12, "placement1pattern1111.png");\r
+ setPicture(answer13, "placement1pattern1110.png");\r
+ setPicture(answer14, "placement1pattern0110.png");\r
+ setPicture(answer15, "placement1pattern1101.png");\r
+ setPicture(answer16, "placement1pattern1001.png");\r
+ //init buttons\r
+ QObject::connect(answer1, SIGNAL(clicked()), this, SLOT(press0001()));\r
+ QObject::connect(answer2, SIGNAL(clicked()), this, SLOT(press0011()));\r
+ QObject::connect(answer3, SIGNAL(clicked()), this, SLOT(press0010()));\r
+ QObject::connect(answer4, SIGNAL(clicked()), this, SLOT(press1010()));\r
+ QObject::connect(answer5, SIGNAL(clicked()), this, SLOT(press1000()));\r
+ QObject::connect(answer6, SIGNAL(clicked()), this, SLOT(press1100()));\r
+ QObject::connect(answer7, SIGNAL(clicked()), this, SLOT(press0100()));\r
+ QObject::connect(answer8, SIGNAL(clicked()), this, SLOT(press0101()));\r
+ QObject::connect(answer9, SIGNAL(clicked()), this, SLOT(press0111()));\r
+ QObject::connect(answer10, SIGNAL(clicked()), this, SLOT(press0000()));\r
+ QObject::connect(answer11, SIGNAL(clicked()), this, SLOT(press1011()));\r
+ QObject::connect(answer12, SIGNAL(clicked()), this, SLOT(press1111()));\r
+ QObject::connect(answer13, SIGNAL(clicked()), this, SLOT(press1110()));\r
+ QObject::connect(answer14, SIGNAL(clicked()), this, SLOT(press0110()));\r
+ QObject::connect(answer15, SIGNAL(clicked()), this, SLOT(press1101()));\r
+ QObject::connect(answer16, SIGNAL(clicked()), this, SLOT(press1001()));\r
+ }\r
+ else if (placement == "placement2")\r
+ {\r
+ setPicture(answer1, "placement2pattern0011.png");\r
+ setPicture(answer2, "placement2pattern0010.png");\r
+ setPicture(answer3, "placement2pattern0110.png");\r
+ setPicture(answer4, "placement2pattern0100.png");\r
+ setPicture(answer5, "placement2pattern1100.png");\r
+ setPicture(answer6, "placement2pattern1000.png");\r
+ setPicture(answer7, "placement2pattern1001.png");\r
+ setPicture(answer8, "placement2pattern0001.png");\r
+ setPicture(answer9, "placement2pattern1010.png");\r
+ setPicture(answer10, "placement2pattern0111.png");\r
+ setPicture(answer11, "placement2pattern0000.png");\r
+ setPicture(answer12, "placement2pattern1110.png");\r
+ setPicture(answer13, "placement2pattern0101.png");\r
+ setPicture(answer14, "placement2pattern1101.png");\r
+ setPicture(answer15, "placement2pattern1111.png");\r
+ setPicture(answer16, "placement2pattern1011.png");\r
+ //init buttons\r
+ QObject::connect(answer1, SIGNAL(clicked()), this, SLOT(press0011()));\r
+ QObject::connect(answer2, SIGNAL(clicked()), this, SLOT(press0010()));\r
+ QObject::connect(answer3, SIGNAL(clicked()), this, SLOT(press0110()));\r
+ QObject::connect(answer4, SIGNAL(clicked()), this, SLOT(press0100()));\r
+ QObject::connect(answer5, SIGNAL(clicked()), this, SLOT(press1100()));\r
+ QObject::connect(answer6, SIGNAL(clicked()), this, SLOT(press1000()));\r
+ QObject::connect(answer7, SIGNAL(clicked()), this, SLOT(press1001()));\r
+ QObject::connect(answer8, SIGNAL(clicked()), this, SLOT(press0001()));\r
+ QObject::connect(answer9, SIGNAL(clicked()), this, SLOT(press1010()));\r
+ QObject::connect(answer10, SIGNAL(clicked()), this, SLOT(press0111()));\r
+ QObject::connect(answer11, SIGNAL(clicked()), this, SLOT(press0000()));\r
+ QObject::connect(answer12, SIGNAL(clicked()), this, SLOT(press1110()));\r
+ QObject::connect(answer13, SIGNAL(clicked()), this, SLOT(press0101()));\r
+ QObject::connect(answer14, SIGNAL(clicked()), this, SLOT(press1101()));\r
+ QObject::connect(answer15, SIGNAL(clicked()), this, SLOT(press1111()));\r
+ QObject::connect(answer16, SIGNAL(clicked()), this, SLOT(press1011()));\r
+ }\r
+\r
+ //create log file\r
+ QString date = QDate::currentDate().toString("yyyy-MM-dd") + "-" + QTime::currentTime().toString("HH-mm-ss");\r
+ QString logfilename = user + "-" + placement + "-" + gesture + "-" + date;\r
+ _logfile = fopen(logfilename.toStdString().c_str(), "w");\r
+\r
+ //generate the block\r
+ for (int i = 0 ; i < _repetitions ; i++)\r
+ {\r
+ QList<QString> temp;\r
+ //generate the block\r
+ for (int j = 1 ; j < 16 ; j++)\r
+ {\r
+ QString s;\r
+ s.setNum(j, 2);\r
+ while (s.length() < 4)\r
+ s = "0" + s;\r
+ temp.push_back(s);\r
+ }\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
+ toggleButtons();\r
+ QTimer::singleShot(VIBRATIONDURATION, this, SLOT(runTrial()));\r
+}\r
+\r
+void AnswerPattern::runTrial()\r
+{\r
+ Tacton t(_trials.at(_current).toStdString().c_str(), VIBRATIONDURATION, 250, 255);\r
+ _tactonPlayer.play(t);\r
+ //enable buttons after <duration>\r
+ QTimer::singleShot(VIBRATIONDURATION, this, SLOT(toggleButtons()));\r
+\r
+}\r
+\r
+void AnswerPattern::toggleButtons()\r
+{\r
+ answer1->setEnabled(!answer1->isEnabled());\r
+ answer2->setEnabled(!answer2->isEnabled());\r
+ answer3->setEnabled(!answer3->isEnabled());\r
+ answer4->setEnabled(!answer4->isEnabled());\r
+ answer5->setEnabled(!answer5->isEnabled());\r
+ answer6->setEnabled(!answer6->isEnabled());\r
+ answer7->setEnabled(!answer7->isEnabled());\r
+ answer8->setEnabled(!answer8->isEnabled());\r
+ answer9->setEnabled(!answer9->isEnabled());\r
+ answer10->setEnabled(!answer10->isEnabled());\r
+ answer11->setEnabled(!answer11->isEnabled());\r
+ answer12->setEnabled(!answer12->isEnabled());\r
+ answer13->setEnabled(!answer13->isEnabled());\r
+ answer14->setEnabled(!answer14->isEnabled());\r
+ answer15->setEnabled(!answer15->isEnabled());\r
+ answer16->setEnabled(!answer16->isEnabled());\r
+}\r
+\r
+void AnswerPattern::setPicture(QPushButton *button, QString picture)\r
+{\r
+ QIcon icon;\r
+ icon.addPixmap(QPixmap(picture), QIcon::Normal, QIcon::Off);\r
+ button->setIcon(icon);\r
+}\r
+\r
+void AnswerPattern::log(QString answer)\r
+{\r
+ if (_logfile == NULL)\r
+ return;\r
+ fprintf(_logfile, "%d,%s,%s\n", _current, _trials.at(_current).toAscii().constData(), answer.toAscii().constData());\r
+}\r
+\r
+void AnswerPattern::press0000() { setAnswer("0000"); }\r
+void AnswerPattern::press0001() { setAnswer("0001"); }\r
+void AnswerPattern::press0010() { setAnswer("0010"); }\r
+void AnswerPattern::press0011() { setAnswer("0011"); }\r
+void AnswerPattern::press0100() { setAnswer("0100"); }\r
+void AnswerPattern::press0101() { setAnswer("0101"); }\r
+void AnswerPattern::press0110() { setAnswer("0110"); }\r
+void AnswerPattern::press0111() { setAnswer("0111"); }\r
+void AnswerPattern::press1000() { setAnswer("1000"); }\r
+void AnswerPattern::press1001() { setAnswer("1001"); }\r
+void AnswerPattern::press1010() { setAnswer("1010"); }\r
+void AnswerPattern::press1011() { setAnswer("1011"); }\r
+void AnswerPattern::press1100() { setAnswer("1100"); }\r
+void AnswerPattern::press1101() { setAnswer("1101"); }\r
+void AnswerPattern::press1110() { setAnswer("1110"); }\r
+void AnswerPattern::press1111() { setAnswer("1111"); }\r
+\r
+void AnswerPattern::setAnswer(QString answer)\r
+{\r
+ log(answer);\r
+ _current++;\r
+\r
+ //disable buttons\r
+ toggleButtons();\r
+\r
+ if (_current < _trials.count())\r
+ runTrial();\r
+}
\ No newline at end of file
--- /dev/null
+#ifndef _ANSWERPATTERN_\r
+#define _ANSWERPATTERN_\r
+\r
+#include <QDialog>\r
+#include "ui_AnswerPattern.h"\r
+\r
+#include <TactonPlayer\TactonPlayer.hpp>\r
+\r
+class AnswerPattern : public QDialog, Ui::AnswerPatternClass\r
+{\r
+ Q_OBJECT\r
+\r
+public:\r
+ AnswerPattern(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~AnswerPattern();\r
+\r
+ void init(QString user, int repetitions, QString placement, QString gesture);\r
+\r
+private:\r
+ void setPicture(QPushButton *button, QString picture);\r
+ void log(QString answer);\r
+ void setAnswer(QString answer);\r
+\r
+ FILE *_logfile;\r
+ TactonPlayer _tactonPlayer;\r
+ QString _user;\r
+ int _repetitions;\r
+ QString _placement;\r
+ QString _gesture;\r
+ QList<QString> _trials; \r
+ int _current;\r
+private slots:\r
+ void toggleButtons();\r
+ void runTrial();\r
+ void press0000();\r
+ void press0001();\r
+ void press0010();\r
+ void press0011();\r
+ void press0100();\r
+ void press0101();\r
+ void press0110();\r
+ void press0111();\r
+ void press1000();\r
+ void press1001();\r
+ void press1010();\r
+ void press1011();\r
+ void press1100();\r
+ void press1101();\r
+ void press1110();\r
+ void press1111();\r
+};\r
+\r
+#endif\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>AnswerPatternClass</class>\r
+ <widget class="QDialog" name="AnswerPatternClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>1042</width>\r
+ <height>589</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Pattern recognition</string>\r
+ </property>\r
+ <layout class="QGridLayout" name="gridLayout">\r
+ <item row="6" column="1">\r
+ <widget class="QPushButton" name="answer5">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="2">\r
+ <widget class="QPushButton" name="answer2">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="6" column="2">\r
+ <widget class="QPushButton" name="answer6">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="1">\r
+ <widget class="QPushButton" name="answer4">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="0">\r
+ <widget class="QPushButton" name="answer12">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="4">\r
+ <widget class="QPushButton" name="answer16">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="3">\r
+ <widget class="QPushButton" name="answer8">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="2">\r
+ <widget class="QPushButton" name="answer10">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="7" column="2">\r
+ <widget class="QPushButton" name="answer14">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="1">\r
+ <widget class="QPushButton" name="answer3">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="3">\r
+ <widget class="QPushButton" name="answer1">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="6" column="3">\r
+ <widget class="QPushButton" name="answer7">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QPushButton" name="answer11">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="4">\r
+ <widget class="QPushButton" name="answer9">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="7" column="0">\r
+ <widget class="QPushButton" name="answer13">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="7" column="4">\r
+ <widget class="QPushButton" name="answer15">\r
+ <property name="minimumSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="iconSize">\r
+ <size>\r
+ <width>200</width>\r
+ <height>100</height>\r
+ </size>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <resources/>\r
+ <connections/>\r
+</ui>\r
--- /dev/null
+<ui version="4.0" >\r
+ <author></author>\r
+ <comment></comment>\r
+ <exportmacro></exportmacro>\r
+ <class>MainWindow</class>\r
+ <widget class="QMainWindow" name="MainWindow" >\r
+ <property name="geometry" >\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>800</width>\r
+ <height>600</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle" >\r
+ <string>MainWindow</string>\r
+ </property>\r
+ <widget class="QWidget" name="centralwidget" >\r
+ <property name="geometry" >\r
+ <rect>\r
+ <x>0</x>\r
+ <y>21</y>\r
+ <width>800</width>\r
+ <height>560</height>\r
+ </rect>\r
+ </property>\r
+ </widget>\r
+ <widget class="QMenuBar" name="menubar" >\r
+ <property name="geometry" >\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>800</width>\r
+ <height>21</height>\r
+ </rect>\r
+ </property>\r
+ </widget>\r
+ <widget class="QStatusBar" name="statusbar" >\r
+ <property name="geometry" >\r
+ <rect>\r
+ <x>0</x>\r
+ <y>581</y>\r
+ <width>800</width>\r
+ <height>19</height>\r
+ </rect>\r
+ </property>\r
+ </widget>\r
+ </widget>\r
+ <pixmapfunction></pixmapfunction>\r
+ <connections/>\r
+</ui>\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>{3978B08B-EFB4-443A-9B39-035F6796DDEE}</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.40219.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)$(ConfigurationName)</OutDir>\r
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(ConfigurationName)</OutDir>\r
+ </PropertyGroup>\r
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+ <ClCompile>\r
+ <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(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>tactonplayer.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_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+ <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(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="AnswerPattern.cpp" />\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_AnswerPattern.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Debug\moc_tactonspatterns.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\qrc_tactonspatterns.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_AnswerPattern.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="GeneratedFiles\Release\moc_tactonspatterns.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
+ <ClCompile Include="main.cpp" />\r
+ <ClCompile Include="tactonspatterns.cpp" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonspatterns.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</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" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "tactonspatterns.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing %(Identity)...</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" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I." "tactonspatterns.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+ </CustomBuild>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonspatterns.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
+ <CustomBuild Include="AnswerPattern.h">\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</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_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>\r
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing %(Identity)...</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_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>\r
+ </CustomBuild>\r
+ <ClInclude Include="GeneratedFiles\ui_AnswerPattern.h" />\r
+ <ClInclude Include="GeneratedFiles\ui_tactonspatterns.h" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <CustomBuild Include="tactonspatterns.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="AnswerPattern.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.7.3" />\r
+ </VisualStudio>\r
+ </ProjectExtensions>\r
+</Project>
\ No newline at end of file
--- /dev/null
+#include "tactonspatterns.h"\r
+#include <QtGui/QApplication>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+ QApplication a(argc, argv);\r
+ Tactonspatterns w;\r
+ w.show();\r
+ return a.exec();\r
+}\r
--- /dev/null
+#include "tactonspatterns.h"\r
+\r
+Tactonspatterns::Tactonspatterns(QWidget *parent, Qt::WFlags flags)\r
+ : QMainWindow(parent, flags)\r
+{\r
+ setupUi(this);\r
+\r
+ this->layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+\r
+ QObject::connect(buttonstart, SIGNAL(clicked()), this, SLOT(runBlock()));\r
+}\r
+\r
+Tactonspatterns::~Tactonspatterns()\r
+{\r
+\r
+}\r
+\r
+void Tactonspatterns::runBlock(void)\r
+{\r
+ this->hide();\r
+ w.init(username->text(), repetitions->value(), placement->currentText(), gesture->currentText());\r
+ w.show();\r
+}\r
+\r
--- /dev/null
+#ifndef TACTONSPATTERNS_H\r
+#define TACTONSPATTERNS_H\r
+\r
+#include <QtGui/QMainWindow>\r
+#include "ui_tactonspatterns.h"\r
+\r
+#include "AnswerPattern.h"\r
+\r
+class Tactonspatterns : public QMainWindow, Ui::TactonspatternsClass\r
+{\r
+ Q_OBJECT\r
+\r
+public:\r
+ Tactonspatterns(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+ ~Tactonspatterns();\r
+\r
+private:\r
+ AnswerPattern w;\r
+\r
+private slots:\r
+ void runBlock();\r
+};\r
+\r
+#endif // TACTONSPATTERNS_H\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>TactonspatternsClass</class>\r
+ <widget class="QMainWindow" name="TactonspatternsClass">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>234</width>\r
+ <height>188</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Tactonspatterns</string>\r
+ </property>\r
+ <widget class="QWidget" name="centralWidget">\r
+ <layout class="QGridLayout" name="gridLayout_2">\r
+ <item row="0" column="0">\r
+ <layout class="QGridLayout" name="gridLayout">\r
+ <item row="0" column="0">\r
+ <widget class="QLabel" name="labeluser">\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="username"/>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QLabel" name="labelrepetitions">\r
+ <property name="text">\r
+ <string>Repetitions:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="1" column="1">\r
+ <widget class="QSpinBox" name="repetitions">\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>1</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="0">\r
+ <widget class="QLabel" name="labelplacement">\r
+ <property name="text">\r
+ <string>Placement:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="2" column="1">\r
+ <widget class="QComboBox" name="placement">\r
+ <item>\r
+ <property name="text">\r
+ <string>placement1</string>\r
+ </property>\r
+ </item>\r
+ <item>\r
+ <property name="text">\r
+ <string>placement2</string>\r
+ </property>\r
+ </item>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="0">\r
+ <widget class="QLabel" name="labelGesture">\r
+ <property name="text">\r
+ <string>Gesture:</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="1">\r
+ <widget class="QComboBox" name="gesture">\r
+ <item>\r
+ <property name="text">\r
+ <string>Rest</string>\r
+ </property>\r
+ </item>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item row="1" column="0">\r
+ <widget class="QPushButton" name="buttonstart">\r
+ <property name="locale">\r
+ <locale language="English" country="Canada"/>\r
+ </property>\r
+ <property name="text">\r
+ <string>Start experiment</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ <layoutdefault spacing="6" margin="11"/>\r
+ <resources>\r
+ <include location="tactonspatterns.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r