lms-audio/src/editcuetrackwidget.cpp
2024-07-07 02:31:05 +02:00

145 lines
5.8 KiB
C++

#include "editcuetrackwidget.h"
#include <QLineEdit>
#include <QFormLayout>
#include <QVBoxLayout>
#include <QFileDialog>
EditCueTrackWidget::EditCueTrackWidget(CueTrack *cueTrack, QWidget *parent)
: QDialog(parent) {
setupUi();
connectSignals();
this->cueTrack = cueTrack;
loadCueTrack(*cueTrack);
}
void EditCueTrackWidget::setupUi() {
QFormLayout *layout = new QFormLayout(this);
userNumberSpin = new QSpinBox(this);
userNumberSpin->setRange(0, 9999);
layout->addRow("User Number", userNumberSpin);
nameEdit = new QLineEdit(this);
layout->addRow("Name", nameEdit);
audioLayerSpin = new QSpinBox(this);
audioLayerSpin->setRange(0, MAX_LAYERS - 1);
layout->addRow("Audio Layer", audioLayerSpin);
filePathEdit = new QLineEdit(this);
layout->addRow("File Path", filePathEdit);
browseButton = new QPushButton("Browse...", this);
layout->addRow(browseButton);
statusCombo = new QComboBox(this);
layout->addRow("Status", statusCombo);
volumeSpin = new QDoubleSpinBox(this);
volumeSpin->setRange(0, 100.00f);
layout->addRow("Volume", volumeSpin);
panSpin = new QDoubleSpinBox(this);
panSpin->setRange(-1, 1);
layout->addRow("Pan", panSpin);
pitchSpin = new QDoubleSpinBox(this);
pitchSpin->setRange(0, 2);
layout->addRow("Pitch", pitchSpin);
bus1Spin = new QDoubleSpinBox(this);
bus1Spin->setRange(0, 100.00f);
layout->addRow("Bus 1", bus1Spin);
bus2Spin = new QDoubleSpinBox(this);
bus2Spin->setRange(0, 100.00f);
layout->addRow("Bus 2", bus2Spin);
fadeInSpin = new QSpinBox(this);
layout->addRow("Fade In", fadeInSpin);
fadeOutSpin = new QSpinBox(this);
fadeOutSpin->setRange(0, 60 * 60 * 24);
layout->addRow("Fade Out", fadeOutSpin);
waitInSpin = new QSpinBox(this);
layout->addRow("Wait In", waitInSpin);
waitOutSpin = new QSpinBox(this);
layout->addRow("Wait Out", waitOutSpin);
stopAtEndCheck = new QCheckBox(this);
layout->addRow("Stop At End", stopAtEndCheck);
descriptionEdit = new QLineEdit(this);
layout->addRow("Description", descriptionEdit);
entryPointSpin = new QSpinBox(this);
layout->addRow("Entry Point", entryPointSpin);
exitPointSpin = new QSpinBox(this);
layout->addRow("Exit Point", exitPointSpin);
multiCheck = new QCheckBox(this);
layout->addRow("Multi Cue", multiCheck);
statusCombo->addItem(statusToString(Status::Stopped));
statusCombo->addItem(statusToString(Status::Paused));
statusCombo->addItem(statusToString(Status::PlayingOnce));
statusCombo->addItem(statusToString(Status::PlayingLoop));
statusCombo->addItem(statusToString(Status::Iddle));
statusCombo->addItem(statusToString(Status::PlayingFolder));
statusCombo->addItem(statusToString(Status::PlayingFolderLoop));
statusCombo->addItem(statusToString(Status::PlayingFolderRandom));
saveButton = new QPushButton("Save", this);
cancelButton = new QPushButton("Cancel", this);
layout->addRow(saveButton);
layout->addRow(cancelButton);
}
void EditCueTrackWidget::loadCueTrack(CueTrack cueTrack) {
filePathEdit->setText(cueTrack.filePath.data());
volumeSpin->setValue(cueTrack.volume);
panSpin->setValue(cueTrack.pan);
pitchSpin->setValue(cueTrack.pitch);
bus1Spin->setValue(cueTrack.bus1);
bus2Spin->setValue(cueTrack.bus2);
fadeInSpin->setValue(cueTrack.fadeIn);
fadeOutSpin->setValue(cueTrack.fadeOut);
waitInSpin->setValue(cueTrack.waitIn);
waitOutSpin->setValue(cueTrack.waitOut);
stopAtEndCheck->setChecked(cueTrack.stopAtEnd);
nameEdit->setText(cueTrack.name.data());
descriptionEdit->setText(cueTrack.description.data());
userNumberSpin->setValue(cueTrack.userNumber);
entryPointSpin->setValue(cueTrack.entryPoint);
exitPointSpin->setValue(cueTrack.exitPoint);
audioLayerSpin->setValue(cueTrack.audioLayer);
QString tmp = statusToString(cueTrack.status);
statusCombo->setCurrentIndex(statusCombo->findText(tmp));
multiCheck->setChecked(cueTrack.multi);
}
CueTrack EditCueTrackWidget::saveCueTrack() {
CueTrack cueTrack;
cueTrack.userNumber = userNumberSpin->value();
cueTrack.name.append(nameEdit->text().toUtf8().constData());
cueTrack.audioLayer = audioLayerSpin->value();
cueTrack.filePath.append(filePathEdit->text().toUtf8().constData());
cueTrack.status = static_cast<Status>(statusCombo->currentIndex());
cueTrack.fadeIn = fadeInSpin->value();
cueTrack.fadeOut = fadeOutSpin->value();
cueTrack.waitIn = waitInSpin->value();
cueTrack.waitOut = waitOutSpin->value();
cueTrack.stopAtEnd = stopAtEndCheck->isChecked();
cueTrack.entryPoint = entryPointSpin->value();
cueTrack.exitPoint = exitPointSpin->value();
cueTrack.volume = volumeSpin->value();
cueTrack.bus1 = bus1Spin->value();
cueTrack.bus2 = bus2Spin->value();
cueTrack.pan = panSpin->value();
cueTrack.pitch = pitchSpin->value();
cueTrack.description.append(descriptionEdit->text().toUtf8().constData());
cueTrack.multi = multiCheck->isChecked();
return cueTrack;
}
void EditCueTrackWidget::accept() {
*cueTrack = saveCueTrack();
QDialog::accept();
}
void EditCueTrackWidget::connectSignals() {
connect(saveButton, &QPushButton::clicked, this, &EditCueTrackWidget::accept);
connect(cancelButton, &QPushButton::clicked, this, &EditCueTrackWidget::reject);
connect(browseButton, &QPushButton::clicked, this, &EditCueTrackWidget::onBrowseButtonClicked);
}
void EditCueTrackWidget::onBrowseButtonClicked() {
QString filePath = QFileDialog::getOpenFileName(this, tr("Select File"), Settings::getInstance()->getPathMedia(), tr("Audio Files (*.mp3 *.wav *.flac)"));
if (!filePath.isEmpty()) {
filePathEdit->setText(filePath);
QDir dir;
Settings::getInstance()->setPathMedia(dir.absoluteFilePath(filePath));
}
}