Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
Integrated multiple files
Browse files Browse the repository at this point in the history
  • Loading branch information
MPIBR-kretschmerf committed Dec 4, 2017
1 parent 3631ad1 commit a8e4f0b
Show file tree
Hide file tree
Showing 13 changed files with 749 additions and 321 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
Thumbs.db
# dynamically generate include for ActiveX object
RPcoX.*
rpcoxlib.h
rpcoxlib.cpp

# C++ objects and libs

*.slo
*.lo
*.o
Expand Down
14 changes: 9 additions & 5 deletions AudioGameGUI.pro
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ QT += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
DEFINES += APP_VERSION=\\\"0.1\\\"
RESOURCES = application.qrc
DEFINES += APP_VERSION=\\\"0.2\\\"
RESOURCES = application.qrc \
tangoicons.qrc
RC_FILE = app.rc

QT += axcontainer
Expand Down Expand Up @@ -43,7 +44,8 @@ SOURCES += main.cpp\
trialseq.cpp \
LogFileWriter.cpp \
AboutDialog.cpp \
SocketClient.cpp
SocketClient.cpp \
FileSelectionWidget.cpp


HEADERS += \
Expand All @@ -56,10 +58,12 @@ HEADERS += \
trialseq.h \
LogFileWriter.h \
AboutDialog.h \
SocketClient.h
SocketClient.h \
FileSelectionWidget.h

FORMS += mainwindow.ui \
timerdialog.ui \
AboutDialog.ui
AboutDialog.ui \
FileSelectionWidget.ui

DISTFILES +=
288 changes: 288 additions & 0 deletions FileSelectionWidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@
#include "FileSelectionWidget.h"
#include "ui_FileSelectionWidget.h"
#include <QFileDialog>
#include <QDebug>

FileSelectionWidget::FileSelectionWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::FileSelectionWidget)
{
ui->setupUi(this);
QIcon::setThemeName("Tango");

ui->pushButton_moveUp->setIcon(QIcon(":icons/go-up"));
ui->pushButton_moveDown->setIcon(QIcon(":icons/go-down"));
ui->pushButton_remove->setIcon(QIcon(":icons/list-remove"));
ui->pushButton_addFile->setIcon(QIcon(":icons/document-new"));
ui->pushButton_addFolder->setIcon(QIcon(":icons/folder-new"));

ui->lineEdit_defaultRepetitions->setText(QString::number(defaultRepetitions));
ui->lineEdit_defaultDuration->setText(QString::number(defaultDuration));

QList<int> sizes;
sizes.push_back(5);
sizes.push_back(600);
sizes.push_back(5);
sizes.push_back(20);
ui->splitter->setSizes(sizes);

connect(ui->listWidget_fileName,SIGNAL(itemSelectionChanged()),this,SLOT(fileSelectionChanged()));
connect(ui->listWidget_repetitions,SIGNAL(itemSelectionChanged()), this, SLOT(repetitionSelectionChanged()));
connect(ui->listWidget_duration,SIGNAL(itemSelectionChanged()), this, SLOT(durationSelectionChanged()));
connect(ui->listWidget_repetitions, SIGNAL(currentTextChanged(QString)), this, SLOT(repetitionSelectionChanged()));
connect(ui->listWidget_duration, SIGNAL(currentTextChanged(QString)), this, SLOT(durationSelectionChanged()));

QIntValidator* intValidator = new QIntValidator(0, 999999, this);
QDoubleValidator* doubleValidator = new QDoubleValidator(0, 999999, 2, this);

ui->lineEdit_defaultRepetitions->setValidator(intValidator);
ui->lineEdit_defaultDuration->setValidator(doubleValidator);

fileFilter = tr("Audio Files (*.rcx)");
}

FileSelectionWidget::~FileSelectionWidget()
{
delete ui;
}

QStringList FileSelectionWidget::getFilenames()
{
QStringList filenames;

for(int i=0;i<ui->listWidget_fileName->count();i++){
int repetitions = ui->listWidget_repetitions->item(i)->text().toInt();
for(int j = 1; j<=repetitions; j++){
filenames.append(ui->listWidget_fileName->item(i)->text());
}
}
return filenames;
}

QVector<double> FileSelectionWidget::getDurations()
{
QVector<double> durations;

for(int i=0;i<ui->listWidget_duration->count();i++){
int repetitions = ui->listWidget_repetitions->item(i)->text().toInt();
for(int j = 1; j<=repetitions; j++){
durations.append(ui->listWidget_duration->item(i)->text().toInt());
}
}
return durations;
}
void FileSelectionWidget::setFilenames(QStringList filenames){
for(int i=0;i<filenames.size();i++){
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(filenames.at(i));
ui->listWidget_fileName->addItem(newItem);

QListWidgetItem *newRepetitionItem = new QListWidgetItem;
newRepetitionItem->setText(QString::number(defaultRepetitions));
newRepetitionItem->setFlags(newRepetitionItem->flags() |= Qt::ItemIsEditable);
ui->listWidget_repetitions->addItem(newRepetitionItem);

QListWidgetItem *newDurationItem = new QListWidgetItem;
newDurationItem->setText(QString::number(defaultDuration));
newDurationItem->setFlags(newRepetitionItem->flags() |= Qt::ItemIsEditable);
ui->listWidget_duration->addItem(newDurationItem);
}
ui->listWidget_repetitions->setCurrentRow(0);

filesChanged();
}

void FileSelectionWidget::setFolder(QString dirName){
QDir dir(dirName, this->fileFilter);
QStringList fileNames = dir.entryList();
if(!fileNames.isEmpty()){
for(int i=0;i<fileNames.size();i++){
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(dirName + "/" + fileNames.at(i));
QListWidgetItem *newRepetitionItem = new QListWidgetItem;
newRepetitionItem->setText(QString::number(defaultRepetitions));
newRepetitionItem->setFlags(newRepetitionItem->flags() |= Qt::ItemIsEditable);
QListWidgetItem *newDurationItem = new QListWidgetItem;
newDurationItem->setText(QString::number(defaultDuration));
newDurationItem->setFlags(newDurationItem->flags() |= Qt::ItemIsEditable);
QListWidgetItem *selectedItem = ui->listWidget_fileName->currentItem();
if(selectedItem){ /*Add item at current position*/
ui->listWidget_fileName->insertItem(ui->listWidget_fileName->row(selectedItem), newItem);
ui->listWidget_repetitions->insertItem(ui->listWidget_fileName->row(selectedItem), newRepetitionItem);
ui->listWidget_duration->insertItem(ui->listWidget_fileName->row(selectedItem), newDurationItem);
}else{/*Add item to the end if nothing is selected*/
ui->listWidget_fileName->addItem(newItem);
ui->listWidget_repetitions->addItem(newRepetitionItem);
ui->listWidget_duration->addItem(newDurationItem);
}
}
ui->listWidget_repetitions->setCurrentRow(0);

filesChanged();
}

}

void FileSelectionWidget::setCurrent(int idx){
if(idx < ui->listWidget_fileName->count()){
ui->listWidget_fileName->setCurrentRow(idx);
}
}

void FileSelectionWidget::fileSelectionChanged()
{
int currentRow = ui->listWidget_fileName->row(ui->listWidget_fileName->currentItem());
if(ui->listWidget_repetitions->row(ui->listWidget_repetitions->currentItem()) != currentRow){
ui->listWidget_repetitions->setCurrentRow(currentRow);
}
if(ui->listWidget_duration->row(ui->listWidget_duration->currentItem()) != currentRow){
ui->listWidget_duration->setCurrentRow(currentRow);
}
emit(selectedFileChanged(ui->listWidget_fileName->item(currentRow)->text()));
}

void FileSelectionWidget::repetitionSelectionChanged()
{
int currentRow = ui->listWidget_repetitions->row(ui->listWidget_repetitions->currentItem());
if(ui->listWidget_fileName->row(ui->listWidget_fileName->currentItem()) != currentRow){
ui->listWidget_fileName->setCurrentRow(currentRow);
}
if(ui->listWidget_duration->row(ui->listWidget_duration->currentItem()) != currentRow){
ui->listWidget_duration->setCurrentRow(currentRow);
}
emit(selectedFileChanged(ui->listWidget_fileName->item(currentRow)->text()));
}

void FileSelectionWidget::durationSelectionChanged()
{
int currentRow = ui->listWidget_duration->row(ui->listWidget_duration->currentItem());
if(ui->listWidget_fileName->row(ui->listWidget_fileName->currentItem()) != currentRow){
ui->listWidget_fileName->setCurrentRow(currentRow);
}
if(ui->listWidget_repetitions->row(ui->listWidget_repetitions->currentItem()) != currentRow){
ui->listWidget_repetitions->setCurrentRow(currentRow);
}
emit(selectedFileChanged(ui->listWidget_fileName->item(currentRow)->text()));
}

void FileSelectionWidget::on_pushButton_moveUp_clicked()
{
QListWidgetItem *selectedItem = ui->listWidget_fileName->currentItem();
if(!selectedItem)
return;
int currentRow = ui->listWidget_fileName->row(selectedItem);
ui->listWidget_fileName->takeItem(currentRow);
ui->listWidget_fileName->insertItem (currentRow-1, selectedItem);
ui->listWidget_fileName->setCurrentItem(selectedItem);

selectedItem = ui->listWidget_repetitions->item(currentRow);
ui->listWidget_repetitions->takeItem(currentRow);
ui->listWidget_repetitions->insertItem (currentRow-1, selectedItem);
ui->listWidget_repetitions->setCurrentItem(selectedItem);

selectedItem = ui->listWidget_duration->item(currentRow);
ui->listWidget_duration->takeItem(currentRow);
ui->listWidget_duration->insertItem (currentRow-1, selectedItem);
ui->listWidget_duration->setCurrentItem(selectedItem);

filesChanged();
}

void FileSelectionWidget::on_pushButton_moveDown_clicked()
{
QListWidgetItem *selectedItem = ui->listWidget_fileName->currentItem();
if(!selectedItem)
return;
int currentRow = ui->listWidget_fileName->row(selectedItem);
ui->listWidget_fileName->takeItem(currentRow);
ui->listWidget_fileName->insertItem (currentRow+1, selectedItem);
ui->listWidget_fileName->setCurrentItem(selectedItem);

selectedItem = ui->listWidget_repetitions->item(currentRow);
ui->listWidget_repetitions->takeItem(currentRow);
ui->listWidget_repetitions->insertItem (currentRow+1, selectedItem);
ui->listWidget_repetitions->setCurrentItem(selectedItem);

selectedItem = ui->listWidget_duration->item(currentRow);
ui->listWidget_duration->takeItem(currentRow);
ui->listWidget_duration->insertItem (currentRow+1, selectedItem);
ui->listWidget_duration->setCurrentItem(selectedItem);

filesChanged();
}

void FileSelectionWidget::on_pushButton_remove_clicked()
{
QListWidgetItem *selectedItem = ui->listWidget_fileName->currentItem();
if(selectedItem){ /*Delete selected item*/
/*necessary?*/
ui->listWidget_fileName->clearSelection();
int currentRow = ui->listWidget_fileName->row(selectedItem);
ui->listWidget_fileName->takeItem(currentRow);
ui->listWidget_repetitions->takeItem(currentRow);
ui->listWidget_duration->takeItem(currentRow);
}else{/*Delete last item if nothing is selected*/
delete ui->listWidget_fileName->item( ui->listWidget_fileName->count() - 1 );
delete ui->listWidget_repetitions->item( ui->listWidget_repetitions->count() - 1 );
delete ui->listWidget_duration->item( ui->listWidget_repetitions->count() - 1 );
}
filesChanged();
}

void FileSelectionWidget::on_pushButton_addFile_clicked()
{
// if (!selectedPositiveFileName.isEmpty()) {
// QDir currentDir;
// // remember this directory next time the selector is opened
// appSettings.setValue(DEFAULT_DIR_KEY,
// currentDir.absoluteFilePath(selectedPositiveFileName));

// ui->lineEdit_filePositive->setText(selectedPositiveFileName);
// }

QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open File"),
"",
this->fileFilter);
if(!fileNames.isEmpty()){
for(int i=0;i<fileNames.size();i++){
QListWidgetItem *newItem = new QListWidgetItem;
QListWidgetItem *newRepetitionItem = new QListWidgetItem;
QListWidgetItem *newDurationItem = new QListWidgetItem;
newRepetitionItem->setText(QString::number(defaultRepetitions));
newRepetitionItem->setFlags(newRepetitionItem->flags() |= Qt::ItemIsEditable);
newDurationItem->setText(QString::number(defaultDuration));
newDurationItem->setFlags(newDurationItem->flags() |= Qt::ItemIsEditable);
newItem->setText(fileNames.at(i));
QListWidgetItem *selectedItem = ui->listWidget_fileName->currentItem();
int currentRow = ui->listWidget_fileName->row(selectedItem);
if(selectedItem){ /*Add item at current position*/
ui->listWidget_fileName->insertItem(currentRow, newItem);
ui->listWidget_repetitions->insertItem(currentRow, newRepetitionItem);
ui->listWidget_duration->insertItem(currentRow, newDurationItem);
}else{/*Add item to the end if nothing is selected*/
ui->listWidget_fileName->addItem(newItem);
ui->listWidget_repetitions->addItem(newRepetitionItem);
ui->listWidget_duration->addItem(newDurationItem);
}
}
filesChanged();
}
}

void FileSelectionWidget::on_pushButton_addFolder_clicked()
{
QString dirName = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
tr(""),
QFileDialog::ShowDirsOnly);
setFolder(dirName);
}

void FileSelectionWidget::on_lineEdit_defaultRepetitions_editingFinished()
{
defaultRepetitions = ui->lineEdit_defaultRepetitions->text().toInt();
}

void FileSelectionWidget::on_lineEdit_defaultDuration_editingFinished()
{
defaultDuration = ui->lineEdit_defaultDuration->text().toDouble();
}
51 changes: 51 additions & 0 deletions FileSelectionWidget.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#ifndef FILESELECTIONWIDGET_H
#define FILESELECTIONWIDGET_H

#include <QWidget>

namespace Ui {
class FileSelectionWidget;
}

class FileSelectionWidget : public QWidget
{
Q_OBJECT

public:
explicit FileSelectionWidget(QWidget *parent = 0);
~FileSelectionWidget();
void setFilenames(QStringList);
QStringList getFilenames();
//QVector<int> getRepetitions();
QVector<double> getDurations();
void setFolder(QString);
void setCurrent(int);
QString fileFilter;
int defaultRepetitions = 10;
double defaultDuration = 10;

private:

private slots:
void fileSelectionChanged();
void repetitionSelectionChanged();
void durationSelectionChanged();
void on_pushButton_moveUp_clicked();
void on_pushButton_moveDown_clicked();
void on_pushButton_remove_clicked();
void on_pushButton_addFile_clicked();
void on_pushButton_addFolder_clicked();

void on_lineEdit_defaultRepetitions_editingFinished();

void on_lineEdit_defaultDuration_editingFinished();

signals:
void filesChanged();
void selectedFileChanged(QString filename);

private:
Ui::FileSelectionWidget *ui;
};

#endif // FILESELECTIONWIDGET_H
Loading

0 comments on commit a8e4f0b

Please sign in to comment.