diff --git a/AudioGameGUI.pro b/AudioGameGUI.pro
index 63227a5..ec63ced 100644
--- a/AudioGameGUI.pro
+++ b/AudioGameGUI.pro
@@ -14,14 +14,16 @@ TEMPLATE = app
SOURCES += main.cpp\
- mainwindow.cpp \
- timerdialog.cpp \
- StateMachineController.cpp
+ StateMachineController.cpp \
+ Mainwindow.cpp \
+ TimerDialog.cpp
-HEADERS += mainwindow.h \
+HEADERS += \
helpers.h \
- timerdialog.h \
- StateMachineController.h
+ StateMachineController.h \
+ TimerDialog.h \
+ Mainwindow.h \
+ SettingStructures.h
FORMS += mainwindow.ui \
timerdialog.ui
diff --git a/AudioGameGUI.pro.user b/AudioGameGUI.pro.user
index 441184a..107cc57 100644
--- a/AudioGameGUI.pro.user
+++ b/AudioGameGUI.pro.user
@@ -1,7 +1,11 @@
-
+
+
+ EnvironmentId
+ {2ed301e3-4f04-4cfb-b8ea-e4f5caa11dd8}
+
ProjectExplorer.Project.ActiveTarget
0
@@ -29,9 +33,12 @@
false
4
false
+ 80
+ true
true
1
true
+ false
0
true
0
@@ -58,17 +65,18 @@
0
0
- /home/kretschmerf/projectsbuild-AudioGameGUI-Desktop-Debug
+ /local/disk1/home/kretschmerf/projects/Developer/build-AudioGameGUI-Desktop-Debug
true
qmake
QtProjectManager.QMakeBuildStep
- false
- true
+ true
false
+ false
+ false
true
@@ -117,7 +125,7 @@
true
- /home/kretschmerf/projectsbuild-AudioGameGUI-Desktop-Release
+ /local/disk1/home/kretschmerf/projects/Developer/build-AudioGameGUI-Desktop-Release
true
@@ -125,9 +133,10 @@
QtProjectManager.QMakeBuildStep
false
- true
false
+ false
+ false
true
@@ -175,7 +184,67 @@
0
true
- 2
+
+ /local/disk1/home/kretschmerf/projects/Developer/build-AudioGameGUI-Desktop-Profile
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+ 3
0
@@ -191,19 +260,58 @@
1
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
2
AudioGameGUI
- Qt4ProjectManager.Qt4RunConfiguration:/storage/scic/Data/External/Developer/AudioGameGUI/AudioGameGUI.pro
+ Qt4ProjectManager.Qt4RunConfiguration:/local/disk1/home/kretschmerf/projects/Developer/AudioGameGUI/AudioGameGUI.pro
+ true
AudioGameGUI.pro
false
false
3768
- true
- false
+ false
+ true
false
false
true
@@ -216,11 +324,11 @@
1
- ProjectExplorer.Project.Updater.EnvironmentId
- {2ed301e3-4f04-4cfb-b8ea-e4f5caa11dd8}
+ ProjectExplorer.Project.Updater.FileVersion
+ 18
- ProjectExplorer.Project.Updater.FileVersion
- 15
+ Version
+ 18
diff --git a/mainwindow.cpp b/Mainwindow.cpp
similarity index 56%
rename from mainwindow.cpp
rename to Mainwindow.cpp
index 88a0e0e..7013133 100644
--- a/mainwindow.cpp
+++ b/Mainwindow.cpp
@@ -1,4 +1,4 @@
-#include "mainwindow.h"
+#include "Mainwindow.h"
#include "ui_mainwindow.h"
#include "helpers.h"
@@ -9,6 +9,40 @@ MainWindow::MainWindow(QWidget *parent) :
{
ui->setupUi(this);
+
+ /*Load defaults from settings*/
+ ui->lineEdit_repeatPositive->setText(appSettings.value("defaults/repeatPositive", 10).toString());
+ ui->lineEdit_repeatNegative->setText(appSettings.value("defaults/repeatNegative", 10).toString());
+ ui->lineEdit_soundDurationPositive->setText(appSettings.value("defaults/soundDurationPositive", .5).toString());
+ ui->lineEdit_soundDurationNegative->setText(appSettings.value("defaults/soundDurationNegative", .5).toString());
+
+ ui->lineEdit_preDelay->setText(appSettings.value("defaults/preDelay", 0).toString());
+ ui->lineEdit_preImaq->setText(appSettings.value("defaults/preImaq", 0).toString());
+ ui->lineEdit_licksToReward->setText(appSettings.value("defaults/licksToReward", 10).toString());
+ ui->lineEdit_iti->setText(appSettings.value("defaults/iti", 30).toString());
+
+ ui->lineEdit_outputFolder->setText(appSettings.value("defaults/outputFolder", QStandardPaths::writableLocation(QStandardPaths::HomeLocation)).toString());
+
+ if(appSettings.value("defaults/autoFilename", true).toBool()){
+ ui->checkBox_autoFilename->click();
+ }
+
+ /*Set Validators*/
+ QValidator *doubleValidator = new QDoubleValidator(0,1000,2, this);
+ QValidator *intValidator = new QIntValidator(0,1000, this);
+
+ ui->lineEdit_repeatPositive->setValidator(intValidator);
+ ui->lineEdit_repeatNegative->setValidator(intValidator);
+ ui->lineEdit_soundDurationPositive->setValidator(doubleValidator);
+ ui->lineEdit_soundDurationNegative->setValidator(doubleValidator);
+ ui->lineEdit_preDelay->setValidator(doubleValidator);
+ ui->lineEdit_preImaq->setValidator(doubleValidator);
+ ui->lineEdit_licksToReward->setValidator(intValidator);
+ ui->lineEdit_iti->setValidator(doubleValidator);
+
+
+ connect(this,SIGNAL(paused()), &smc, SIGNAL(pauseRequested()));
+
}
MainWindow::~MainWindow()
@@ -37,19 +71,27 @@ void MainWindow::on_pushButton_Run_clicked()
sorting = ORDERED;
}
-// int trialsTotal = trialSequence.length();
+ /*Populate settings with GUI values*/
+ audioGameSettings settings;
+ settings.preImaq = ui->lineEdit_preImaq->text().toDouble();
+ settings.preDelay = ui->lineEdit_preDelay->text().toDouble();
+ settings.soundDurationPositive = ui->lineEdit_soundDurationPositive->text().toDouble();
+ settings.soundDurationNegative = ui->lineEdit_soundDurationNegative->text().toDouble();
+ settings.userReaction = userReaction;
+ settings.trialSequence = generateTrialSequence(sorting, ui->lineEdit_repeatPositive->text().toInt(), ui->lineEdit_repeatNegative->text().toInt());
+
+ if(ui->checkBox_itiExternal->isChecked()){
+ qDebug()<<"Using iti from file";
+ settings.itiSequence = loadExternalItiSequence("/Users/davidunzue/iti_external.txt", ui->lineEdit_repeatPositive->text().toInt(), ui->lineEdit_repeatNegative->text().toInt());
+ }else{
+ settings.itiSequence = generateItiSequence(userReaction, ui->lineEdit_iti->text(), ui->lineEdit_preImaq->text().toDouble(), ui->lineEdit_repeatPositive->text().toInt(), ui->lineEdit_repeatNegative->text().toInt());
+ }
+ qDebug()<< settings.itiSequence;
- smc.preImaq = ui->lineEdit_preImaq->text().toDouble();
- smc.preDelay = ui->lineEdit_preDelay->text().toDouble();
- smc.soundDurationPositive = ui->lineEdit_soundDurationPositive->text().toDouble();
- smc.soundDurationNegative = ui->lineEdit_soundDurationNegative->text().toDouble();
- smc.userReaction = userReaction;
- smc.trialSequence = generateTrialSequence(sorting, ui->lineEdit_repeatPositive->text().toDouble(), ui->lineEdit_repeatNegative->text().toDouble());
- smc.itiSequence = generateItiSequence(userReaction, ui->lineEdit_iti->text(), ui->lineEdit_preImaq->text().toDouble(), ui->lineEdit_repeatPositive->text().toDouble(), ui->lineEdit_repeatNegative->text().toDouble());
- smc.runStateMachine();
+ smc.runStateMachine(settings);
}
void MainWindow::on_pushButton_Pause_toggled(bool checked)
@@ -58,37 +100,18 @@ void MainWindow::on_pushButton_Pause_toggled(bool checked)
qDebug() << "Paused";
ui->statusBar->showMessage("Paused");
ui->pushButton_Pause->setText("Resume");
- timerDialog->removeTimer();
- pause();
+ emit(paused());
+
} else {
qDebug() << "Resumed";
ui->statusBar->showMessage("Resumed");
ui->pushButton_Pause->setText("Pause");
- pause();
-
+ emit(resumed());
}
}
-bool MainWindow::paused() const
-{
- return false;//m_paused;
-}
-
-void MainWindow::setPaused(bool paused)
-{
-// if (m_paused != paused) {
-// m_paused = paused;
-// emit pausedChanged();
-// }
-}
-
-void MainWindow::pause()
-{
- //emit pauseRequested();
-}
-
void MainWindow::on_pushButton_Stop_clicked()
{
// timerDialog->removeTimer();
@@ -97,11 +120,12 @@ void MainWindow::on_pushButton_Stop_clicked()
qDebug() << "Stopped and terminated";
ui->statusBar->showMessage("Stopped and terminated");
ui->pushButton_Run->setDisabled(false);
+ emit(stopped());
}
-void MainWindow::on_buttonSelectDir_clicked()
+void MainWindow::on_pushButton_selectOutputFolder_clicked()
{
selectedDirectory = QFileDialog::getExistingDirectory(this, tr("Select Directory"),
@@ -115,20 +139,20 @@ void MainWindow::on_buttonSelectDir_clicked()
appSettings.setValue(DEFAULT_DIR_KEY,
currentDir.absoluteFilePath(selectedDirectory));
- ui->inputDirPath->setText(selectedDirectory);
+ ui->lineEdit_outputFolder->setText(selectedDirectory);
}
}
-void MainWindow::on_autoFilename_clicked(bool checked)
+void MainWindow::on_checkBox_autoFilename_clicked(bool checked)
{
// auto option checked
if(checked) {
time_t rawtime;
struct tm * timeinfo;
// ensure buffer is big enought
- char buffer[80];
+ char buffer[42];
// current date/time based on current system
time(&rawtime);
@@ -136,16 +160,16 @@ void MainWindow::on_autoFilename_clicked(bool checked)
timeinfo = localtime(&rawtime);
// write date/time info into formatted string
- strftime(buffer,80,"%Y%m%d%H%M%S_AudioGame_events",timeinfo);
+ strftime(buffer,42,"%Y%m%d%H%M%S_AudioGame_events",timeinfo);
QString autoFilename(buffer);
// write to input field and disable it
- ui->inputFilename->setText(autoFilename);
- ui->inputFilename->setDisabled(true);
+ ui->lineEdit_outputFilename->setText(autoFilename);
+ ui->lineEdit_outputFilename->setDisabled(true);
} else {
// clear input field and enable it
- ui->inputFilename->clear();
- ui->inputFilename->setDisabled(false);
+ ui->lineEdit_outputFilename->clear();
+ ui->lineEdit_outputFilename->setDisabled(false);
}
}
@@ -184,16 +208,6 @@ void MainWindow::on_checkBox_itiExternal_clicked(bool checked)
{
if(checked) {
ui->lineEdit_iti->setDisabled(true);
- // get iti duration value from external file
- QFile file("/Users/davidunzue/iti_external.txt");
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
- return;
- QTextStream in(&file);
- while (!in.atEnd()) {
- QString line = in.readLine();
- qDebug() << line;
- ui->lineEdit_iti->setText(line);
- }
} else {
ui->lineEdit_iti->setDisabled(false);
}
@@ -206,7 +220,6 @@ void MainWindow::on_lineEdit_iti_editingFinished()
void MainWindow::on_lineEdit_preImaq_editingFinished()
{
-
updateIti();
}
@@ -218,8 +231,8 @@ void MainWindow::updateIti()
if(!lineEdit_iti_str.isEmpty()) {
if(lineEdit_iti_str.contains(',')) {
QStringList iti_range = lineEdit_iti_str.split(',');
- double iti = randomMinMax(iti_range.first().toDouble(), iti_range.last().toDouble());
- if(iti < userReaction + preImaq){
+ if((iti_range.first().toDouble() < userReaction + preImaq) |
+ iti_range.last().toDouble() < userReaction + preImaq){
ui->lineEdit_iti->setText(QString("%1,%2").arg(QString::number(iti_range.first().toDouble() + userReaction + preImaq), QString::number(iti_range.last().toDouble() + userReaction + preImaq)));
}
} else {
diff --git a/mainwindow.h b/Mainwindow.h
similarity index 84%
rename from mainwindow.h
rename to Mainwindow.h
index 1483799..6840c46 100644
--- a/mainwindow.h
+++ b/Mainwindow.h
@@ -6,8 +6,10 @@
#include
#include
#include
-#include "timerdialog.h"
+#include
+#include "TimerDialog.h"
#include "StateMachineController.h"
+#include "SettingStructures.h"
// values for trial sequence sorting
enum SORTING {ORDERED, SORTED, SHUFFLED};
@@ -28,29 +30,17 @@ class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
- bool paused() const;
- void setPaused(bool paused);
-
private slots:
- void on_buttonSelectDir_clicked();
-
- void on_autoFilename_clicked(bool checked);
-
+ void on_pushButton_selectOutputFolder_clicked();
+ void on_checkBox_autoFilename_clicked(bool checked);
void on_pushButton_selectFilePositive_clicked();
-
void on_pushButton_selectFileNegative_clicked();
-
- void pause();
-
void on_pushButton_Run_clicked();
void on_pushButton_Pause_toggled(bool checked);
void on_pushButton_Stop_clicked();
-
void on_checkBox_itiExternal_clicked(bool checked);
-
void on_lineEdit_iti_editingFinished();
-
void on_lineEdit_preImaq_editingFinished();
@@ -72,8 +62,10 @@ private slots:
QString selectedPositiveFileName;
QString selectedNegativeFileName;
-
-
+signals:
+ void paused();
+ void resumed();
+ void stopped();
};
diff --git a/SettingStructures.h b/SettingStructures.h
new file mode 100644
index 0000000..e758bbf
--- /dev/null
+++ b/SettingStructures.h
@@ -0,0 +1,32 @@
+#ifndef SETTINGSTRUCTURES_H
+#define SETTINGSTRUCTURES_H
+#include
+#include
+
+
+struct audioGameSettings{
+ /*Sequences*/
+ QVector trialSequence;
+ QVector itiSequence;
+
+ /*Timing*/
+ double preDelay = -1;
+ double iti = -1;
+ double userReaction = 30; //sec
+ double preImaq = -1;
+
+ /*Stimulus properties*/
+ double soundDurationPositive = -1;
+ double soundDurationNegative = -1;
+ QString fileNamePositive;
+ QString fileNameNegative;
+
+ /*Reward*/
+ int licksToReward;
+};
+
+
+
+
+
+#endif // SETTINGSTRUCTURES_H
diff --git a/StateMachineController.cpp b/StateMachineController.cpp
index 97f1c2b..a83098a 100644
--- a/StateMachineController.cpp
+++ b/StateMachineController.cpp
@@ -1,21 +1,14 @@
#include "StateMachineController.h"
-StateMachineController::StateMachineController(QWidget *parent)
+StateMachineController::StateMachineController(QObject *parent)
{
// seed randomizer
srand(time(0));
-// //timerDialog = new TimerDialog();
+ timerDialog = new TimerDialog();
mainTimer = new QTimer(this);
mainTimer->setSingleShot(true);
- // Create and start the state machine
- setupStateMachine();
-
-}
-
-void StateMachineController::setupStateMachine()
-{
stateMachine = new QStateMachine(this);
// Create the two top-level states
@@ -68,8 +61,8 @@ void StateMachineController::setupStateMachine()
//connect(state_iti, SIGNAL(entered()), mainTimer, SLOT(start()));
// state user reaction
connect(state_userReaction, SIGNAL(entered()), this, SLOT(onStateUserReactionEntered()));
- /////connect(state_userReaction, SIGNAL(exited()), timerDialog, SLOT(removeTimer()));
- //connect(state_userReaction, SIGNAL(entered()), mainTimer, SLOT(start()));
+ /////connect(state_settings.userReaction, SIGNAL(exited()), timerDialog, SLOT(removeTimer()));
+ //connect(state_settings.userReaction, SIGNAL(entered()), mainTimer, SLOT(start()));
// state baseline
connect(state_acquisitionBaseline, SIGNAL(entered()), this, SLOT(onStateAcquisitionBaselineEntered()));
//connect(state_acquisitionBaseline, SIGNAL(entered()), mainTimer, SLOT(start()));
@@ -80,13 +73,35 @@ void StateMachineController::setupStateMachine()
}
-void StateMachineController::runStateMachine()
+void StateMachineController::runStateMachine(audioGameSettings settings)
{
+ this->settings = settings;
trialsCurrent = 1; // set index for first trial (1-based)
- trialsTotal = trialSequence.length();
+ trialsTotal = settings.trialSequence.length();
+
+
+// /* set default values */
+// sm->state = STATE_IDLE;
+// sm->duration = 0;
+// sm->rcx_file = SM_RCX_POSITIVE;
+// sm->snd_bit = 0x00;
+// sm->trigger_count = 0;
+
+// /* interface SDL */
+// //SDLInitialize();
+
+// /* interface TDT */
+// TDTInitializeInterface();
+
+// /* allocate DAQ */
+// daq = (DAQmxEngine *)malloc(sizeof(DAQmxEngine));
+// DAQmxInitializeInterface(daq);
+// DAQmxLogToFile(daq->fp_log, "INIT", 0, 0);
// start state machine
stateMachine->start();
+// /qDebug() << settings.itiSequence
+
}
@@ -95,7 +110,7 @@ void StateMachineController::onStatePreDelayEntered()
qDebug() << "Pre delay";
emit(statusMessage("Pre delay running"));
- mainTimer->setInterval(preDelay * 1000);
+ mainTimer->setInterval(settings.preDelay * 1000);
mainTimer->start();
}
@@ -104,23 +119,22 @@ void StateMachineController::onStateItiEntered()
qDebug() << "Entered Iti";
emit(statusMessage("Starting trial begin"));
- double nextItiValue = itiSequence.at(trialsCurrent - 1); // -1 because trialsCurrent is 1-based
+ double nextItiValue = settings.itiSequence.at(trialsCurrent - 1); // -1 because trialsCurrent is 1-based
mainTimer->setInterval(nextItiValue * 1000);
mainTimer->start();
-
}
void StateMachineController::onStateUserReactionEntered()
{
// timerDialog->removeTimer(); // remove previous timer dialog
-// timerDialog->setUpTimer(userReaction);
+// timerDialog->setUpTimer(settings.userReaction);
// timerDialog->show();
// timerDialog->startTimer();
qDebug()<< "Starting user reaction";
emit(statusMessage("Starting user reaction"));
- mainTimer->setInterval(userReaction * 1000);
+ mainTimer->setInterval(settings.userReaction * 1000);
mainTimer->start();
}
@@ -130,24 +144,36 @@ void StateMachineController::onStateAcquisitionBaselineEntered()
emit(statusMessage("Starting baseline"));
- mainTimer->setInterval(preImaq * 1000);
+ mainTimer->setInterval(settings.preImaq * 1000);
mainTimer->start();
}
void StateMachineController::onStateSoundEntered()
{
- int soundType = trialSequence.first();
- trialSequence.pop_front();
+ int soundType = settings.trialSequence.first();
+ settings.trialSequence.pop_front();
+
+ switch(soundType){
+ case 0:
+ mainTimer->setInterval(settings.soundDurationNegative * 1000);
+ //state_sound->assignProperty(mainTimer, "interval", (settings.soundDurationNegative * 1000));
+ qDebug() << "Loading negative sound file:" << settings.fileNameNegative;
+
+ //TDTLoadRCXCircuit(settings.fileNameNegative);
+ break;
+ case 1:
+ mainTimer->setInterval(settings.soundDurationPositive * 1000);
+ //state_sound->assignProperty(mainTimer, "interval", (settings.soundDurationPositive * 1000));
+ qDebug() << "Loading positive sound file:" << settings.fileNamePositive;
+ //TDTLoadRCXCircuit(settings.fileNamePositive);
- if (soundType == 1) {
- mainTimer->setInterval(soundDurationPositive * 1000);
- //state_sound->assignProperty(mainTimer, "interval", (soundDurationPositive * 1000));
- } else if (soundType == 0) {
- mainTimer->setInterval(soundDurationNegative * 1000);
- //state_sound->assignProperty(mainTimer, "interval", (soundDurationNegative * 1000));
+ break;
}
+
mainTimer->start();
+ //DAQmxTriggerDO(daq, DAQ_PORT_DO_SOUND, true);
+
qDebug()<< "Starting sound";
emit(statusMessage("Starting sound"));
@@ -171,3 +197,23 @@ void StateMachineController::onStateSoundExited()
//ui->pushButton_Run->setText("Run");
}
}
+
+
+//timerDialog->removeTimer();
+//bool MainWindow::paused() const
+//{
+// return false;//m_paused;
+//}
+
+//void MainWindow::setPaused(bool paused)
+//{
+//// if (m_paused != paused) {
+//// m_paused = paused;
+//// emit pausedChanged();
+//// }
+//}
+
+//void MainWindow::pause()
+//{
+// //emit pauseRequested();
+//}
diff --git a/StateMachineController.h b/StateMachineController.h
index a6cb390..0400d45 100644
--- a/StateMachineController.h
+++ b/StateMachineController.h
@@ -12,25 +12,17 @@
#include
#include //std::random_shuffle
+#include "SettingStructures.h"
+#include "TimerDialog.h"
+
class StateMachineController : public QObject
{
Q_OBJECT
public:
- explicit StateMachineController(QWidget *parent = 0);
-
- double preDelay = -1;
- double iti = -1;
- double userReaction = 30; //sec
- double preImaq = -1;
- double soundDurationPositive = -1;
- double soundDurationNegative = -1;
-
- QVector trialSequence;
- QVector itiSequence;
-
- void setupStateMachine();
- void runStateMachine();
+ explicit StateMachineController(QObject *parent = 0);
+ audioGameSettings settings;
+ void runStateMachine(audioGameSettings);
private:
// state machine
@@ -45,6 +37,9 @@ class StateMachineController : public QObject
// the timer that triggers the state changes
QTimer *mainTimer;
+ TimerDialog *timerDialog;
+
+ //DAQmxEngine *daq;
int trialsTotal = -1;
int trialsCurrent = -1; // is gonna be 1-based, so first trial has index 1
@@ -58,13 +53,9 @@ public slots:
void onStateSoundEntered();
void onStateSoundExited();
-
-
-
signals:
void statusMessage(QString);
-
-Q_SIGNALS:
+//Q_SIGNALS:
// change notification signals for the state properties
void pausedChanged();
/**
diff --git a/timerdialog.cpp b/TimerDialog.cpp
similarity index 97%
rename from timerdialog.cpp
rename to TimerDialog.cpp
index eecbf4a..45a7fea 100644
--- a/timerdialog.cpp
+++ b/TimerDialog.cpp
@@ -1,4 +1,4 @@
-#include "timerdialog.h"
+#include "TimerDialog.h"
#include "ui_timerdialog.h"
TimerDialog::TimerDialog(QWidget *parent) :
diff --git a/timerdialog.h b/TimerDialog.h
similarity index 100%
rename from timerdialog.h
rename to TimerDialog.h
diff --git a/helpers.h b/helpers.h
index 27a49ca..e2fdfd3 100644
--- a/helpers.h
+++ b/helpers.h
@@ -4,6 +4,9 @@
#include
#include
#include
+#include
+#include
+#include
// random generator function:
int randomGenerator (int i) { return rand()%i; }
@@ -73,7 +76,6 @@ QVector generateItiSequence(double userReaction, QString itiList, double
{
QVector itiSequence;
int itiSequenceLength = repeatPositive + repeatNegative;
-
if(!itiList.isEmpty()) {
if(itiList.contains(',')) {
QStringList iti_range = itiList.split(',');
@@ -94,5 +96,22 @@ QVector generateItiSequence(double userReaction, QString itiList, double
}
+QVector loadExternalItiSequence(QString fileName, int repeatPositive, int repeatNegative)
+{
+ QVector itiSequence;
+
+ // get iti duration value from external file
+ QFile file(fileName);
+ if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
+ QTextStream in(&file);
+ while (!in.atEnd()) {
+ QString line = in.readLine();
+ itiSequence.append(10); /*Get proper value*/
+ qDebug() << line;
+ }
+ }
+ return itiSequence;
+}
+
#endif // HELPERS_H
diff --git a/mainwindow.ui b/mainwindow.ui
index eeb583a..96c6a96 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -7,7 +7,7 @@
0
0
472
- 782
+ 833
@@ -85,10 +85,10 @@
0
-
-
+
-
-
+
Select
@@ -109,10 +109,10 @@
10
-
-
+
-
-
+
auto
@@ -415,7 +415,7 @@
0
0
472
- 22
+ 27
@@ -437,10 +437,10 @@
- inputDirPath
- buttonSelectDir
- inputFilename
- autoFilename
+ lineEdit_outputFolder
+ pushButton_selectOutputFolder
+ lineEdit_outputFilename
+ checkBox_autoFilename
lineEdit_selectFilePositive
pushButton_selectFilePositive
lineEdit_soundDurationPositive