detection + patterns
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Thu, 11 Aug 2011 19:03:10 +0000 (19:03 +0000)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Thu, 11 Aug 2011 19:03:10 +0000 (19:03 +0000)
git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@43 47cf9a05-e0a8-4ed5-9e9b-101a649bc004

58 files changed:
Tactons Detection/AnswerDetection.cpp [new file with mode: 0644]
Tactons Detection/AnswerDetection.h [new file with mode: 0644]
Tactons Detection/AnswerDetection.ui [new file with mode: 0644]
Tactons Detection/Frequencies.txt [new file with mode: 0644]
Tactons Detection/Tactons Detection.vcxproj [new file with mode: 0644]
Tactons Detection/main.cpp [new file with mode: 0644]
Tactons Detection/tactonsdetection.cpp [new file with mode: 0644]
Tactons Detection/tactonsdetection.h [new file with mode: 0644]
Tactons Detection/tactonsdetection.ui [new file with mode: 0644]
Tactons Experiment.sln
Tactons Experiment.suo
Tactons Experiment/Frequencies.txt
Tactons JND/Amplitudes.txt [new file with mode: 0644]
Tactons JND/Durations.txt [new file with mode: 0644]
Tactons JND/Experiments.txt [new file with mode: 0644]
Tactons JND/Frequencies.txt [new file with mode: 0644]
Tactons JND/Gestures.txt [new file with mode: 0644]
Tactons patterns/AnswerPattern.cpp [new file with mode: 0644]
Tactons patterns/AnswerPattern.h [new file with mode: 0644]
Tactons patterns/AnswerPattern.ui [new file with mode: 0644]
Tactons patterns/AnswerPatterns.ui [new file with mode: 0644]
Tactons patterns/Tactons patterns.vcxproj [new file with mode: 0644]
Tactons patterns/main.cpp [new file with mode: 0644]
Tactons patterns/placement1pattern0000.png [new file with mode: 0644]
Tactons patterns/placement1pattern0001.png [new file with mode: 0644]
Tactons patterns/placement1pattern0010.png [new file with mode: 0644]
Tactons patterns/placement1pattern0011.png [new file with mode: 0644]
Tactons patterns/placement1pattern0100.png [new file with mode: 0644]
Tactons patterns/placement1pattern0101.png [new file with mode: 0644]
Tactons patterns/placement1pattern0110.png [new file with mode: 0644]
Tactons patterns/placement1pattern0111.png [new file with mode: 0644]
Tactons patterns/placement1pattern1000.png [new file with mode: 0644]
Tactons patterns/placement1pattern1001.png [new file with mode: 0644]
Tactons patterns/placement1pattern1010.png [new file with mode: 0644]
Tactons patterns/placement1pattern1011.png [new file with mode: 0644]
Tactons patterns/placement1pattern1100.png [new file with mode: 0644]
Tactons patterns/placement1pattern1101.png [new file with mode: 0644]
Tactons patterns/placement1pattern1110.png [new file with mode: 0644]
Tactons patterns/placement1pattern1111.png [new file with mode: 0644]
Tactons patterns/placement2pattern0000.png [new file with mode: 0644]
Tactons patterns/placement2pattern0001.png [new file with mode: 0644]
Tactons patterns/placement2pattern0010.png [new file with mode: 0644]
Tactons patterns/placement2pattern0011.png [new file with mode: 0644]
Tactons patterns/placement2pattern0100.png [new file with mode: 0644]
Tactons patterns/placement2pattern0101.png [new file with mode: 0644]
Tactons patterns/placement2pattern0110.png [new file with mode: 0644]
Tactons patterns/placement2pattern0111.png [new file with mode: 0644]
Tactons patterns/placement2pattern1000.png [new file with mode: 0644]
Tactons patterns/placement2pattern1001.png [new file with mode: 0644]
Tactons patterns/placement2pattern1010.png [new file with mode: 0644]
Tactons patterns/placement2pattern1011.png [new file with mode: 0644]
Tactons patterns/placement2pattern1100.png [new file with mode: 0644]
Tactons patterns/placement2pattern1101.png [new file with mode: 0644]
Tactons patterns/placement2pattern1110.png [new file with mode: 0644]
Tactons patterns/placement2pattern1111.png [new file with mode: 0644]
Tactons patterns/tactonspatterns.cpp [new file with mode: 0644]
Tactons patterns/tactonspatterns.h [new file with mode: 0644]
Tactons patterns/tactonspatterns.ui [new file with mode: 0644]

diff --git a/Tactons Detection/AnswerDetection.cpp b/Tactons Detection/AnswerDetection.cpp
new file mode 100644 (file)
index 0000000..e6b9a40
--- /dev/null
@@ -0,0 +1,151 @@
+#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
diff --git a/Tactons Detection/AnswerDetection.h b/Tactons Detection/AnswerDetection.h
new file mode 100644 (file)
index 0000000..511470f
--- /dev/null
@@ -0,0 +1,51 @@
+#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
diff --git a/Tactons Detection/AnswerDetection.ui b/Tactons Detection/AnswerDetection.ui
new file mode 100644 (file)
index 0000000..f0f635b
--- /dev/null
@@ -0,0 +1,43 @@
+<?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
diff --git a/Tactons Detection/Frequencies.txt b/Tactons Detection/Frequencies.txt
new file mode 100644 (file)
index 0000000..0b69506
--- /dev/null
@@ -0,0 +1,6 @@
+16\r
+32\r
+64\r
+128\r
+256\r
+512
\ No newline at end of file
diff --git a/Tactons Detection/Tactons Detection.vcxproj b/Tactons Detection/Tactons Detection.vcxproj
new file mode 100644 (file)
index 0000000..fb7a808
--- /dev/null
@@ -0,0 +1,175 @@
+<?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
diff --git a/Tactons Detection/main.cpp b/Tactons Detection/main.cpp
new file mode 100644 (file)
index 0000000..9577311
--- /dev/null
@@ -0,0 +1,13 @@
+#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
diff --git a/Tactons Detection/tactonsdetection.cpp b/Tactons Detection/tactonsdetection.cpp
new file mode 100644 (file)
index 0000000..f2bf9e1
--- /dev/null
@@ -0,0 +1,23 @@
+#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
diff --git a/Tactons Detection/tactonsdetection.h b/Tactons Detection/tactonsdetection.h
new file mode 100644 (file)
index 0000000..a9d44a0
--- /dev/null
@@ -0,0 +1,24 @@
+#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
diff --git a/Tactons Detection/tactonsdetection.ui b/Tactons Detection/tactonsdetection.ui
new file mode 100644 (file)
index 0000000..9fa3a78
--- /dev/null
@@ -0,0 +1,154 @@
+<?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
index 2f5c05828dd8726eee814bfffeb8d08c22bcd004..ad560255a2fdf423b631331978ff5955a6de62f5 100644 (file)
@@ -5,6 +5,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tactons Experiment", "Tacto
 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
@@ -19,6 +23,14 @@ Global
                {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
index 50cfefd0ad93432c6a3f05dd11cd8c59ae938f7d..9e29c4bdec42595610adc05d260c55b13a26ae50 100644 (file)
Binary files a/Tactons Experiment.suo and b/Tactons Experiment.suo differ
index b5b045f45b59d010061dda236fd069c16ab89fa5..f6736ca30b6ecf532f93f23e89e6df4e0d7aff03 100644 (file)
@@ -1,6 +1,6 @@
-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
diff --git a/Tactons JND/Amplitudes.txt b/Tactons JND/Amplitudes.txt
new file mode 100644 (file)
index 0000000..137ce0b
--- /dev/null
@@ -0,0 +1,5 @@
+100\r
+80\r
+60\r
+40\r
+20
\ No newline at end of file
diff --git a/Tactons JND/Durations.txt b/Tactons JND/Durations.txt
new file mode 100644 (file)
index 0000000..601fcc4
--- /dev/null
@@ -0,0 +1,6 @@
+300\r
+250\r
+200\r
+150\r
+100\r
+50
\ No newline at end of file
diff --git a/Tactons JND/Experiments.txt b/Tactons JND/Experiments.txt
new file mode 100644 (file)
index 0000000..7fadde1
--- /dev/null
@@ -0,0 +1,3 @@
+Frequencies\r
+Amplitudes\r
+Durations\r
diff --git a/Tactons JND/Frequencies.txt b/Tactons JND/Frequencies.txt
new file mode 100644 (file)
index 0000000..c5b431b
--- /dev/null
@@ -0,0 +1 @@
+50
\ No newline at end of file
diff --git a/Tactons JND/Gestures.txt b/Tactons JND/Gestures.txt
new file mode 100644 (file)
index 0000000..9664aa6
--- /dev/null
@@ -0,0 +1,7 @@
+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
diff --git a/Tactons patterns/AnswerPattern.cpp b/Tactons patterns/AnswerPattern.cpp
new file mode 100644 (file)
index 0000000..e44ed36
--- /dev/null
@@ -0,0 +1,207 @@
+#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
diff --git a/Tactons patterns/AnswerPattern.h b/Tactons patterns/AnswerPattern.h
new file mode 100644 (file)
index 0000000..0c35a49
--- /dev/null
@@ -0,0 +1,53 @@
+#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
diff --git a/Tactons patterns/AnswerPattern.ui b/Tactons patterns/AnswerPattern.ui
new file mode 100644 (file)
index 0000000..39e580d
--- /dev/null
@@ -0,0 +1,325 @@
+<?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
diff --git a/Tactons patterns/AnswerPatterns.ui b/Tactons patterns/AnswerPatterns.ui
new file mode 100644 (file)
index 0000000..e376840
--- /dev/null
@@ -0,0 +1,51 @@
+<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
diff --git a/Tactons patterns/Tactons patterns.vcxproj b/Tactons patterns/Tactons patterns.vcxproj
new file mode 100644 (file)
index 0000000..f379766
--- /dev/null
@@ -0,0 +1,175 @@
+<?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
diff --git a/Tactons patterns/main.cpp b/Tactons patterns/main.cpp
new file mode 100644 (file)
index 0000000..4c56932
--- /dev/null
@@ -0,0 +1,10 @@
+#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
diff --git a/Tactons patterns/placement1pattern0000.png b/Tactons patterns/placement1pattern0000.png
new file mode 100644 (file)
index 0000000..11fc9b7
Binary files /dev/null and b/Tactons patterns/placement1pattern0000.png differ
diff --git a/Tactons patterns/placement1pattern0001.png b/Tactons patterns/placement1pattern0001.png
new file mode 100644 (file)
index 0000000..c313cbb
Binary files /dev/null and b/Tactons patterns/placement1pattern0001.png differ
diff --git a/Tactons patterns/placement1pattern0010.png b/Tactons patterns/placement1pattern0010.png
new file mode 100644 (file)
index 0000000..9e108cc
Binary files /dev/null and b/Tactons patterns/placement1pattern0010.png differ
diff --git a/Tactons patterns/placement1pattern0011.png b/Tactons patterns/placement1pattern0011.png
new file mode 100644 (file)
index 0000000..03c6138
Binary files /dev/null and b/Tactons patterns/placement1pattern0011.png differ
diff --git a/Tactons patterns/placement1pattern0100.png b/Tactons patterns/placement1pattern0100.png
new file mode 100644 (file)
index 0000000..b9f98bc
Binary files /dev/null and b/Tactons patterns/placement1pattern0100.png differ
diff --git a/Tactons patterns/placement1pattern0101.png b/Tactons patterns/placement1pattern0101.png
new file mode 100644 (file)
index 0000000..f3aa749
Binary files /dev/null and b/Tactons patterns/placement1pattern0101.png differ
diff --git a/Tactons patterns/placement1pattern0110.png b/Tactons patterns/placement1pattern0110.png
new file mode 100644 (file)
index 0000000..f789564
Binary files /dev/null and b/Tactons patterns/placement1pattern0110.png differ
diff --git a/Tactons patterns/placement1pattern0111.png b/Tactons patterns/placement1pattern0111.png
new file mode 100644 (file)
index 0000000..cbaedf3
Binary files /dev/null and b/Tactons patterns/placement1pattern0111.png differ
diff --git a/Tactons patterns/placement1pattern1000.png b/Tactons patterns/placement1pattern1000.png
new file mode 100644 (file)
index 0000000..7b24eee
Binary files /dev/null and b/Tactons patterns/placement1pattern1000.png differ
diff --git a/Tactons patterns/placement1pattern1001.png b/Tactons patterns/placement1pattern1001.png
new file mode 100644 (file)
index 0000000..1c2f9a4
Binary files /dev/null and b/Tactons patterns/placement1pattern1001.png differ
diff --git a/Tactons patterns/placement1pattern1010.png b/Tactons patterns/placement1pattern1010.png
new file mode 100644 (file)
index 0000000..1b3b477
Binary files /dev/null and b/Tactons patterns/placement1pattern1010.png differ
diff --git a/Tactons patterns/placement1pattern1011.png b/Tactons patterns/placement1pattern1011.png
new file mode 100644 (file)
index 0000000..376d927
Binary files /dev/null and b/Tactons patterns/placement1pattern1011.png differ
diff --git a/Tactons patterns/placement1pattern1100.png b/Tactons patterns/placement1pattern1100.png
new file mode 100644 (file)
index 0000000..1912df6
Binary files /dev/null and b/Tactons patterns/placement1pattern1100.png differ
diff --git a/Tactons patterns/placement1pattern1101.png b/Tactons patterns/placement1pattern1101.png
new file mode 100644 (file)
index 0000000..f88427d
Binary files /dev/null and b/Tactons patterns/placement1pattern1101.png differ
diff --git a/Tactons patterns/placement1pattern1110.png b/Tactons patterns/placement1pattern1110.png
new file mode 100644 (file)
index 0000000..e3721f4
Binary files /dev/null and b/Tactons patterns/placement1pattern1110.png differ
diff --git a/Tactons patterns/placement1pattern1111.png b/Tactons patterns/placement1pattern1111.png
new file mode 100644 (file)
index 0000000..0532b20
Binary files /dev/null and b/Tactons patterns/placement1pattern1111.png differ
diff --git a/Tactons patterns/placement2pattern0000.png b/Tactons patterns/placement2pattern0000.png
new file mode 100644 (file)
index 0000000..d609021
Binary files /dev/null and b/Tactons patterns/placement2pattern0000.png differ
diff --git a/Tactons patterns/placement2pattern0001.png b/Tactons patterns/placement2pattern0001.png
new file mode 100644 (file)
index 0000000..d491770
Binary files /dev/null and b/Tactons patterns/placement2pattern0001.png differ
diff --git a/Tactons patterns/placement2pattern0010.png b/Tactons patterns/placement2pattern0010.png
new file mode 100644 (file)
index 0000000..cd790dc
Binary files /dev/null and b/Tactons patterns/placement2pattern0010.png differ
diff --git a/Tactons patterns/placement2pattern0011.png b/Tactons patterns/placement2pattern0011.png
new file mode 100644 (file)
index 0000000..925478b
Binary files /dev/null and b/Tactons patterns/placement2pattern0011.png differ
diff --git a/Tactons patterns/placement2pattern0100.png b/Tactons patterns/placement2pattern0100.png
new file mode 100644 (file)
index 0000000..54d7ea1
Binary files /dev/null and b/Tactons patterns/placement2pattern0100.png differ
diff --git a/Tactons patterns/placement2pattern0101.png b/Tactons patterns/placement2pattern0101.png
new file mode 100644 (file)
index 0000000..b4457ec
Binary files /dev/null and b/Tactons patterns/placement2pattern0101.png differ
diff --git a/Tactons patterns/placement2pattern0110.png b/Tactons patterns/placement2pattern0110.png
new file mode 100644 (file)
index 0000000..1cd000a
Binary files /dev/null and b/Tactons patterns/placement2pattern0110.png differ
diff --git a/Tactons patterns/placement2pattern0111.png b/Tactons patterns/placement2pattern0111.png
new file mode 100644 (file)
index 0000000..861ec8e
Binary files /dev/null and b/Tactons patterns/placement2pattern0111.png differ
diff --git a/Tactons patterns/placement2pattern1000.png b/Tactons patterns/placement2pattern1000.png
new file mode 100644 (file)
index 0000000..1693b3f
Binary files /dev/null and b/Tactons patterns/placement2pattern1000.png differ
diff --git a/Tactons patterns/placement2pattern1001.png b/Tactons patterns/placement2pattern1001.png
new file mode 100644 (file)
index 0000000..aad85a0
Binary files /dev/null and b/Tactons patterns/placement2pattern1001.png differ
diff --git a/Tactons patterns/placement2pattern1010.png b/Tactons patterns/placement2pattern1010.png
new file mode 100644 (file)
index 0000000..a81d310
Binary files /dev/null and b/Tactons patterns/placement2pattern1010.png differ
diff --git a/Tactons patterns/placement2pattern1011.png b/Tactons patterns/placement2pattern1011.png
new file mode 100644 (file)
index 0000000..fa26912
Binary files /dev/null and b/Tactons patterns/placement2pattern1011.png differ
diff --git a/Tactons patterns/placement2pattern1100.png b/Tactons patterns/placement2pattern1100.png
new file mode 100644 (file)
index 0000000..392b862
Binary files /dev/null and b/Tactons patterns/placement2pattern1100.png differ
diff --git a/Tactons patterns/placement2pattern1101.png b/Tactons patterns/placement2pattern1101.png
new file mode 100644 (file)
index 0000000..f9874b5
Binary files /dev/null and b/Tactons patterns/placement2pattern1101.png differ
diff --git a/Tactons patterns/placement2pattern1110.png b/Tactons patterns/placement2pattern1110.png
new file mode 100644 (file)
index 0000000..86dc6e0
Binary files /dev/null and b/Tactons patterns/placement2pattern1110.png differ
diff --git a/Tactons patterns/placement2pattern1111.png b/Tactons patterns/placement2pattern1111.png
new file mode 100644 (file)
index 0000000..df5a87e
Binary files /dev/null and b/Tactons patterns/placement2pattern1111.png differ
diff --git a/Tactons patterns/tactonspatterns.cpp b/Tactons patterns/tactonspatterns.cpp
new file mode 100644 (file)
index 0000000..3f0db81
--- /dev/null
@@ -0,0 +1,24 @@
+#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
diff --git a/Tactons patterns/tactonspatterns.h b/Tactons patterns/tactonspatterns.h
new file mode 100644 (file)
index 0000000..ce249c0
--- /dev/null
@@ -0,0 +1,24 @@
+#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
diff --git a/Tactons patterns/tactonspatterns.ui b/Tactons patterns/tactonspatterns.ui
new file mode 100644 (file)
index 0000000..4c11c36
--- /dev/null
@@ -0,0 +1,107 @@
+<?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