From 333d7c7b49f5acbf813fb1be4055d54e7ead1cd4 Mon Sep 17 00:00:00 2001 From: snt Date: Tue, 18 Jun 2024 14:58:23 +0200 Subject: [PATCH 1/4] wip settings --- src/cuetrackwidget.cpp | 36 +++++++++++++++++- src/cuetrackwidget.h | 17 ++++----- src/libremediaserver-audio.cpp | 2 +- src/main.cpp | 8 +++- src/settings.cpp | 68 ++++++++++++++++++++++++++++++++-- src/settings.h | 11 ++++-- src/showplayer.cpp | 46 +---------------------- src/showplayer.h | 2 - src/showplayer.ui | 10 ----- src/trackdialog.cpp | 58 +++++++++++++++++++++++++++++ src/trackdialog.h | 34 +++++++++++++++++ 11 files changed, 215 insertions(+), 77 deletions(-) create mode 100644 src/trackdialog.cpp create mode 100644 src/trackdialog.h diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp index 90e6832..17da586 100644 --- a/src/cuetrackwidget.cpp +++ b/src/cuetrackwidget.cpp @@ -167,12 +167,44 @@ void CueTrackWidget::setupStatusCombo() { statusCombo->addItem("PlayingFolderRandom", PlayingFolderRandom); } +void CueTrackWidget::loadCueTrack(const CueTrack &cueTrack) { + filePathEdit->setText(QString::fromStdString(cueTrack.filePath)); + 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(QString::fromStdString(cueTrack.name)); + descriptionEdit->setText(QString::fromStdString(cueTrack.description)); + userNumberSpin->setValue(cueTrack.userNumber); + entryPointSpin->setValue(cueTrack.entryPoint); + exitPointSpin->setValue(cueTrack.exitPoint); + statusCombo->setCurrentIndex(statusCombo->findData(cueTrack.status)); +} + CueTrack CueTrackWidget::saveCueTrack() const { CueTrack cueTrack; cueTrack.filePath = filePathEdit->text().toStdString(); cueTrack.volume = volumeSpin->value(); - // Guarda el resto de los campos aquí... - + cueTrack.pan = panSpin->value(); + cueTrack.pitch = pitchSpin->value(); + cueTrack.bus1 = bus1Spin->value(); + cueTrack.bus2 = bus2Spin->value(); + cueTrack.fadeIn = fadeInSpin->value(); + cueTrack.fadeOut = fadeOutSpin->value(); + cueTrack.waitIn = waitInSpin->value(); + cueTrack.waitOut = waitOutSpin->value(); + cueTrack.stopAtEnd = stopAtEndCheck->isChecked(); + cueTrack.name = nameEdit->text().toStdString(); + cueTrack.description = descriptionEdit->text().toStdString(); + cueTrack.userNumber = userNumberSpin->value(); + cueTrack.entryPoint = entryPointSpin->value(); + cueTrack.exitPoint = exitPointSpin->value(); cueTrack.status = static_cast(statusCombo->currentData().toInt()); return cueTrack; } diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h index b7ddd5c..cd8e953 100644 --- a/src/cuetrackwidget.h +++ b/src/cuetrackwidget.h @@ -14,12 +14,13 @@ class CueTrackWidget : public QWidget { Q_OBJECT public: - explicit CueTrackWidget(QWidget *parent = nullptr); - - CueTrack saveCueTrack() const; - QWidget *createHeader(); int audioLayer = 0; + explicit CueTrackWidget(QWidget *parent = nullptr); + CueTrack saveCueTrack() const; + void loadCueTrack(const CueTrack &cueTrack); + QWidget *createHeader(); + int getVolume() const { return volumeSpin->value(); } int getPan() const { return panSpin->value(); } int getPitch() const { return pitchSpin->value(); } @@ -39,13 +40,10 @@ public: int getEntryPoint() const { return entryPointSpin->value(); } int getExitPoint() const { return exitPointSpin->value(); } void highlight(bool highlight) { - if (highlight) - this->setStyleSheet("background-color: yellow;"); - else - this->setStyleSheet("background-color: white;"); + if (highlight) this->setStyleSheet("background-color: yellow;"); + else this->setStyleSheet("background-color: white;"); } -private: QCheckBox* active; QLineEdit* filePathEdit; QSpinBox* volumeSpin; @@ -65,6 +63,7 @@ private: QSpinBox* entryPointSpin; QSpinBox* exitPointSpin; +private: void setupUi(); void setupStatusCombo(); }; diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index 0a88b2a..61588fb 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -23,7 +23,7 @@ libreMediaServerAudio::libreMediaServerAudio() { - m_settings = Settings::getInstance(); + m_settings = Settings::getInstance(this); m_settings->readFile(); m_ui = m_settings->getShowUi(); m_layersQty = m_settings->getLayersNumber(); diff --git a/src/main.cpp b/src/main.cpp index 79b7a91..5cea13f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,8 +31,12 @@ bool hasUi(int &argc, char *argv[]) int main(int argc, char *argv[]) { - QApplication app(argc, argv); - libreMediaServerAudio lms; + QApplication app(argc, argv); + libreMediaServerAudio lms; + app.setApplicationName("LibreMediaServerAudio"); + app.setOrganizationName("Criptomart"); + app.setOrganizationDomain("Criptomart.net"); + app.setApplicationVersion(VERSION); #ifndef NOGUI if (hasUi(argc, argv) || lms.getShowUi()) { diff --git a/src/settings.cpp b/src/settings.cpp index 6527bcb..2c8361f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2,20 +2,82 @@ Settings *Settings::_instance = 0; -Settings *Settings::getInstance() { +Settings *Settings::getInstance(QObject *parent) { if (_instance == 0) { - _instance = new Settings(); + _instance = new Settings(parent); Q_CHECK_PTR(_instance); } return _instance; } Settings::Settings(QObject *parent) : - QObject(parent) + QSettings{parent} { m_layersNumber = 0; m_ui = false; + m_audioDeviceQty = 0; + for (uint i = 0; i < MAX_AUDIODEVICES; i++) + m_audioDeviceId[i] = -1; + settingsLoader(); +} + +Settings::~Settings() { + settingsSaver(); +} + +void Settings::settingsLoader() +{ + beginGroup("lmsAudio"); + m_ui = value("ui", 0).toBool(); + m_layersNumber = value("layersNumber", 0).toInt(); + m_pathmedia = value("path", "").toString(); + endGroup(); + beginGroup("audioDevice"); + m_audioDeviceQty = value("devicesNumber", 0).toInt(); + for (uint i = 0; i < m_audioDeviceQty; i++) + m_audioDeviceId[i] = value(QString("id%1").arg(i), -1).toInt(); + endGroup(); + beginGroup("layers"); + for (int i = 0; i < m_layersNumber; i++) { + beginGroup(QString("layer%1").arg(i)); + dmxSetting temp; + temp.address = value("dmx", 0).toInt(); + temp.universe = value("universe", 0).toInt(); + temp.layer = value("id", 0).toInt(); + temp.audioDevice = value("audioDevice", 0).toInt(); + m_settings.append(temp); + if (!m_universe.contains(temp.universe)) { + m_universe.insert(temp.universe); + } + endGroup(); + } + endGroup(); + printSettings(); +} + +void Settings::settingsSaver() +{ + beginGroup("lmsAudio"); + setValue("ui", m_ui); + setValue("layersNumber", m_layersNumber); + setValue("path", m_pathmedia); + endGroup(); + beginGroup("audioDevice"); + setValue("devicesNumber", m_audioDeviceQty); + for (uint i = 0; i < m_audioDeviceQty; i++) + setValue(QString("id%1").arg(i), m_audioDeviceId[i]); + endGroup(); + beginGroup("layers"); + for (int i = 0; i < m_layersNumber; i++) { + beginGroup(QString("layer%1").arg(i)); + setValue("dmx", m_settings[i].address); + setValue("universe", m_settings[i].universe); + setValue("id", m_settings[i].layer); + setValue("audioDevice", m_settings[i].audioDevice); + endGroup(); + } + endGroup(); } // Read the dmx settings for dmx.xml At the moment we need: diff --git a/src/settings.h b/src/settings.h index 6e51d14..8f57f0c 100644 --- a/src/settings.h +++ b/src/settings.h @@ -6,20 +6,23 @@ #include #include #include +#include #include "medialibrary.h" #include "audiowidget.h" #include "defines.h" -class Settings : public QObject +class Settings : public QSettings { Q_OBJECT public: - Settings(QObject *parent = 0); - static Settings *getInstance(); + Settings(QObject *parent = nullptr); + ~Settings(); + static Settings *getInstance(QObject *parent = nullptr); inline QSet getUniverses() { return m_universe; } inline QString getPathMedia() { return m_pathmedia; } + inline void setPathMedia(QString new_path) { m_pathmedia = new_path; }; inline QList getDmxSettings() { return m_settings; } inline int getLayersNumber() { return m_layersNumber; } inline uint *getAudioDeviceId() { return m_audioDeviceId; } @@ -28,6 +31,8 @@ public: void readFile(); void readFromFile(QString file); void printSettings(); + void settingsLoader(); + void settingsSaver(); private: static Settings *_instance; diff --git a/src/showplayer.cpp b/src/showplayer.cpp index 6f65f8a..a6676fe 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -1,47 +1,5 @@ #include "showplayer.h" -QWidget *ShowPlayer::createHeader() -{ - QWidget *ret = new QWidget(); - - auto layout = new QHBoxLayout(this); - QLabel *l = new QLabel("Cue Number"); - layout->addWidget(l); - l = new QLabel("File Path"); - layout->addWidget(l); - l = new QLabel("Volume"); - layout->addWidget(l); - l = new QLabel("Bus 1"); - layout->addWidget(l); - l = new QLabel("Bus 2"); - layout->addWidget(l); - l = new QLabel("Pan"); - layout->addWidget(l); - l = new QLabel("Pitch"); - layout->addWidget(l); - l = new QLabel("Playback Status"); - layout->addWidget(l); - l = new QLabel("Fade In"); - layout->addWidget(l); - l = new QLabel("Fade Out"); - layout->addWidget(l); - l = new QLabel("Wait In"); - layout->addWidget(l); - l = new QLabel("Wait Out "); - layout->addWidget(l); - l = new QLabel("Halt"); - layout->addWidget(l); - l = new QLabel("Name"); - layout->addWidget(l); - l = new QLabel("Notes"); - layout->addWidget(l); - l = new QLabel("Entry Point"); - layout->addWidget(l); - l = new QLabel("Exit Point"); - layout->addWidget(l); - ret->setLayout(layout); - return ret; -} ShowPlayer::ShowPlayer(QWidget *parent) : QDialog(parent) @@ -50,9 +8,7 @@ ShowPlayer::ShowPlayer(QWidget *parent) : ui->setupUi(this); connect(ui->addCueButton, SIGNAL(clicked()), this, SLOT(onAddTrack())); connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go())); - QWidget *w = createHeader(); - ui->headerLayout->addWidget(w); - currentTrackIndex = 0; + currentTrackIndex = 0; filesLoaded = 0; currentStatus = Status::Iddle; } diff --git a/src/showplayer.h b/src/showplayer.h index b5e1175..54451f2 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -31,8 +31,6 @@ private: size_t filesLoaded = 0; int layersUsed[MAX_LAYERS] = { -1 }; - QWidget *createHeader(); - void updateTrackStateInEngine(size_t index, int layer) { CueTrackWidget *track = ui->cueListWidget->getTrackAtIndex(index); emit uiSliderChanged(layer, Slider::Volume, track->getVolume()); diff --git a/src/showplayer.ui b/src/showplayer.ui index d27f83e..8c98050 100644 --- a/src/showplayer.ui +++ b/src/showplayer.ui @@ -117,16 +117,6 @@ - - - - 1 - - - QLayout::SetMaximumSize - - - true diff --git a/src/trackdialog.cpp b/src/trackdialog.cpp new file mode 100644 index 0000000..89f699b --- /dev/null +++ b/src/trackdialog.cpp @@ -0,0 +1,58 @@ +#include "trackdialog.h" +#include "settings.h" + +TrackDialog::TrackDialog(QWidget *parent) : QDialog(parent) { + setupUi(); + connectSignals(); +} + +void TrackDialog::setupUi() { + okButton = new QPushButton(tr("OK"), this); + cancelButton = new QPushButton(tr("Cancelar"), this); + browseButton = new QPushButton(tr("Buscar..."), this); + + QFormLayout *layout = new QFormLayout(this); + track = new CueTrack(); + layout->addRow(tr("&User number"), track->userNumber); + layout->addRow(tr("&Name"), track->name); + layout->addRow(tr("&Description"), track->description); + layout->addRow(tr("&File"), track->filePath); + layout->addRow(tr("&Browse files"), browseButton); + layout->addRow(tr("&Status"), track->status); + layout->addRow(tr("&Fade in"), track->fadeIn); + layout->addRow(tr("Fade &Out"), track->fadeOut); + layout->addRow(tr("&Wait In"), track->waitIn); + layout->addRow(tr("&Wait Ou&t"), track->waitOut); + layout->addRow(tr("Sto&p at end"), track->stopAtEnd); + layout->addRow(tr("&Volume"), track->volume); + layout->addRow(tr("pan"), track->pan); + layout->addRow(tr("pitch"), track->pitch); + layout->addRow(tr("Bus&1"), track->bus1); + layout->addRow(tr("Bus&2"), track->bus2); + layout->addRow(tr("&Entry Point"), track->entryPoint); + layout->addRow(tr("E&xit Point"), track->exitPoint); + layout->addWidget(okButton); + layout->addWidget(cancelButton); + setLayout(layout); +} + +void TrackDialog::connectSignals() { + connect(okButton, &QPushButton::clicked, this, &TrackDialog::accept); + connect(cancelButton, &QPushButton::clicked, this, &TrackDialog::reject); + connect(browseButton, &QPushButton::clicked, this, &TrackDialog::browseFiles); +} + +QString TrackDialog::browseFiles() const { + QString filePath = QFileDialog::getOpenFileName( + const_cast(this), + tr("Select File"), + Settings::getInstance()->getPathMedia(), + tr("Archivos de audio (*.mp3 *.wav *.flac);;Todos los archivos (*)") + ); + if (!filePath.isEmpty()) { + track->setFilePath(filePath); + QDir dir; + Settings::getInstance()->setPathMedia(dir.absoluteFilePath(filePath)); + } + return filePath; +} diff --git a/src/trackdialog.h b/src/trackdialog.h new file mode 100644 index 0000000..4d787cb --- /dev/null +++ b/src/trackdialog.h @@ -0,0 +1,34 @@ +#ifndef TRACKDIALOG_H +#define TRACKDIALOG_H + +#include +#include +#include +#include +#include + +#include "defines.h" +#include "cuetrackwidget.h" + +class TrackDialog : public QDialog { + Q_OBJECT + +public: + CueTrack *track; + + explicit TrackDialog(QWidget *parent = nullptr); + +private: + QPushButton *okButton; + QPushButton *cancelButton; + QPushButton *browseButton; + + void setupUi(); + void connectSignals(); + +private slots: + QString browseFiles() const; + +}; + +#endif From bd9b07f0001eee93377e902a28a756c674c87022 Mon Sep 17 00:00:00 2001 From: snt Date: Tue, 18 Jun 2024 20:23:19 +0200 Subject: [PATCH 2/4] wip edit cues --- src/clickabledoublespinbox.cpp | 8 -- src/clickabledoublespinbox.h | 9 ++ src/cuetracklistwidget.h | 12 +- src/cuetrackwidget.cpp | 152 +++++++++++--------------- src/cuetrackwidget.h | 194 ++++++++++++++++++++++++++++++--- src/filterbankwidget.cpp | 8 ++ src/showplayer.cpp | 43 +++++--- src/showplayer.h | 14 +-- src/trackdialog.cpp | 44 ++++---- src/trackdialog.h | 2 +- 10 files changed, 318 insertions(+), 168 deletions(-) diff --git a/src/clickabledoublespinbox.cpp b/src/clickabledoublespinbox.cpp index 76feb8b..9ec04f4 100644 --- a/src/clickabledoublespinbox.cpp +++ b/src/clickabledoublespinbox.cpp @@ -5,13 +5,5 @@ ClickableDoubleSpinBox::ClickableDoubleSpinBox(QWidget *parent) : QDoubleSpinBox(parent) { - setFocusPolicy(Qt::NoFocus); - setButtonSymbols(QAbstractSpinBox::NoButtons); - setValue(-1); - setDecimals(1); - setAlignment(Qt::AlignHCenter); - setContentsMargins(0, 0, 0, 0); - setMaximumWidth(66); - setMinimumWidth(25); } diff --git a/src/clickabledoublespinbox.h b/src/clickabledoublespinbox.h index 81bcb76..ff668fb 100644 --- a/src/clickabledoublespinbox.h +++ b/src/clickabledoublespinbox.h @@ -10,11 +10,20 @@ class ClickableDoubleSpinBox : public QDoubleSpinBox { Q_OBJECT public: + bool active = false; + explicit ClickableDoubleSpinBox(QWidget *parent = nullptr); protected: void mousePressEvent ( QMouseEvent * event ) { if (event->button() == Qt::LeftButton) { emit click(); + active = true; + //this->setBackgroundRole(QPalette::BrightText); + + } else if (event->button() == Qt::RightButton) { + emit click(); + active = false; + //this->setBackgroundRole(QPalette::Shadow); } event->accept(); } diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index d3b1727..ed6b71f 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -38,7 +38,9 @@ public: void addCueTrackWidget(CueTrackWidget* widget) { widget->setParent(containerWidget); layout->addWidget(widget); - widget->show(); + if (m_size == 0) + widget->setStyle(true); + widget->show(); m_size++; containerWidget->update(); containerWidget->adjustSize(); @@ -76,17 +78,17 @@ private: private slots: void key_up() { if (m_size > 0 && selectedIndex > 0) { - getTrackAtIndex(selectedIndex)->highlight(false); + getTrackAtIndex(selectedIndex)->setStyle(false); selectedIndex--; - getTrackAtIndex(selectedIndex)->highlight(true); + getTrackAtIndex(selectedIndex)->setStyle(true); } } void key_down() { if (selectedIndex < m_size - 1 && m_size > 0) { - getTrackAtIndex(selectedIndex)->highlight(false); + getTrackAtIndex(selectedIndex)->setStyle(false); selectedIndex++; - getTrackAtIndex(selectedIndex)->highlight(true); + getTrackAtIndex(selectedIndex)->setStyle(true); } } diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp index 17da586..80c31b6 100644 --- a/src/cuetrackwidget.cpp +++ b/src/cuetrackwidget.cpp @@ -7,152 +7,116 @@ CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) { void CueTrackWidget::setupUi() { QVBoxLayout *layout = new QVBoxLayout(this); - QSplitter *row = new QSplitter(Qt::Horizontal); + active = new QCheckBox(this); row->addWidget(active); userNumberSpin = new QSpinBox(this); - userNumberSpin->setRange(0, 1000); + userNumberSpin->setRange(0, 100000); userNumberSpin->setToolTip("Cue user number"); row->addWidget(userNumberSpin); + audioLayer = new QSpinBox(this); + audioLayer->setRange(0, MAX_LAYERS); + audioLayer->setToolTip("Audio Layer"); + row->addWidget(audioLayer); + nameEdit = new QLineEdit(this); nameEdit->setToolTip("Cue Name"); row->addWidget(nameEdit); descriptionEdit = new QLineEdit(this); descriptionEdit->setToolTip("Cue Notes"); - row->addWidget(descriptionEdit); - + filePathEdit = new QLineEdit(this); filePathEdit->setToolTip("File name"); - row->addWidget(filePathEdit); - - layout->addWidget(row); - - row = new QSplitter(Qt::Horizontal); - volumeSpin = new QSpinBox(this); - volumeSpin->setRange(0, 65535); + + volumeSpin = new ClickableDoubleSpinBox(this); + volumeSpin->setRange(0.0f, 100.0f); volumeSpin->setToolTip("Volume"); - volumeSpin->setValue(100); - row->addWidget(volumeSpin); - - bus1Spin = new QSpinBox(this); - bus1Spin->setRange(0, 255); + volumeSpin->setSpecialValueText("-inf"); + volumeSpin->setValue(75.0f); + + bus1Spin = new ClickableDoubleSpinBox(this); + bus1Spin->setRange(0.0f, 100.0f); bus1Spin->setToolTip("Bus 1"); - bus1Spin->setValue(255); - row->addWidget(bus1Spin); - - bus2Spin = new QSpinBox(this); - bus2Spin->setRange(0, 255); + bus1Spin->setSpecialValueText("-inf"); + bus1Spin->setValue(100.0f); + + bus2Spin = new ClickableDoubleSpinBox(this); + bus2Spin->setRange(0.0f, 100.0f); bus2Spin->setToolTip("Bus 2"); - bus2Spin->setValue(255); - row->addWidget(bus2Spin); - - panSpin = new QSpinBox(this); - panSpin->setRange(0, 255); + bus2Spin->setSpecialValueText("-inf"); + bus2Spin->setValue(100.0f); + + panSpin = new ClickableDoubleSpinBox(this); + panSpin->setRange(-1, 1); panSpin->setToolTip("Pan"); - panSpin->setValue(128); - row->addWidget(panSpin); - - pitchSpin = new QSpinBox(this); - pitchSpin->setRange(0, 255); + panSpin->setValue(0); + + pitchSpin = new ClickableDoubleSpinBox(this); + pitchSpin->setRange(0, 2); + pitchSpin->setSpecialValueText("Stop"); pitchSpin->setToolTip("Pitch"); - pitchSpin->setValue(128); - row->addWidget(pitchSpin); - + pitchSpin->setValue(1); + entryPointSpin = new QSpinBox(this); entryPointSpin->setRange(0, 255); entryPointSpin->setToolTip("Entry Point"); - row->addWidget(entryPointSpin); - + exitPointSpin = new QSpinBox(this); exitPointSpin->setRange(0, 255); exitPointSpin->setToolTip("Exit Point"); exitPointSpin->setValue(255); - row->addWidget(exitPointSpin); - - layout->addWidget(row); - - row = new QSplitter(Qt::Horizontal); + setupStatusCombo(); statusCombo->setToolTip("Playback Status"); - row->addWidget(statusCombo); - - fadeInSpin = new QSpinBox(this); + row->addWidget(userNumberSpin); + + fadeInSpin = new QSpinBox(this); fadeInSpin->setRange(0, 10000); fadeInSpin->setToolTip("Fade In Time"); fadeInSpin->setValue(3); - row->addWidget(fadeInSpin); fadeOutSpin = new QSpinBox(this); fadeOutSpin->setRange(0, 10000); fadeOutSpin->setToolTip("Fade Out Time"); fadeOutSpin->setValue(3); - row->addWidget(fadeOutSpin); waitInSpin = new QSpinBox(this); waitInSpin->setRange(0, 10000); waitInSpin->setToolTip("Wait In Time"); - row->addWidget(waitInSpin); waitOutSpin = new QSpinBox(this); waitOutSpin->setRange(0, 10000); waitOutSpin->setToolTip("Wait Out Time"); - row->addWidget(waitOutSpin); stopAtEndCheck = new QCheckBox(this); stopAtEndCheck->setToolTip("Halt"); stopAtEndCheck->setChecked("True"); - row->addWidget(stopAtEndCheck); + editButton = new QPushButton("Edit", this); + editButton->setToolTip("Edit"); + row->addWidget(editButton); + connect(editButton, &QPushButton::clicked, this, &CueTrackWidget::editButtonClicked); + + layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(row); - setLayout(layout); + setStyle(false); } -QWidget *CueTrackWidget::createHeader() -{ - QWidget *ret = new QWidget(); +void CueTrackWidget::setStyle(bool highlight) { + QString style; - auto layout = new QHBoxLayout(this); - QLabel *l = new QLabel("Cue Number"); - layout->addWidget(l); - l = new QLabel("File Path"); - layout->addWidget(l); - l = new QLabel("Volume"); - layout->addWidget(l); - l = new QLabel("Bus 1"); - layout->addWidget(l); - l = new QLabel("Bus 2"); - layout->addWidget(l); - l = new QLabel("Pan"); - layout->addWidget(l); - l = new QLabel("Pitch"); - layout->addWidget(l); - l = new QLabel("Playback Status"); - layout->addWidget(l); - l = new QLabel("Fade In"); - layout->addWidget(l); - l = new QLabel("Fade Out"); - layout->addWidget(l); - l = new QLabel("Wait In"); - layout->addWidget(l); - l = new QLabel("Wait Out "); - layout->addWidget(l); - l = new QLabel("Halt"); - layout->addWidget(l); - l = new QLabel("Name"); - layout->addWidget(l); - l = new QLabel("Notes"); - layout->addWidget(l); - l = new QLabel("Entry Point"); - layout->addWidget(l); - l = new QLabel("Exit Point"); - layout->addWidget(l); - ret->setLayout(layout); - return ret; + style.append("margin: 1px;"); + if (highlight) + style.append("background-color: #e8e0f8;"); + else + style.append("background-color: #b9b8a7;"); + this->setStyleSheet(style); } void CueTrackWidget::setupStatusCombo() { @@ -208,3 +172,11 @@ CueTrack CueTrackWidget::saveCueTrack() const { cueTrack.status = static_cast(statusCombo->currentData().toInt()); return cueTrack; } + +void CueTrackWidget::editButtonClicked() { + EditCueTrackWidget editor; + editor.loadCueTrack(saveCueTrack()); + if (editor.exec() == QDialog::Accepted) { + loadCueTrack(editor.saveCueTrack()); + } +} diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h index cd8e953..3d729f4 100644 --- a/src/cuetrackwidget.h +++ b/src/cuetrackwidget.h @@ -8,24 +8,23 @@ #include #include #include +#include +#include #include "defines.h" +#include "clickabledoublespinbox.h" class CueTrackWidget : public QWidget { Q_OBJECT public: - int audioLayer = 0; - explicit CueTrackWidget(QWidget *parent = nullptr); CueTrack saveCueTrack() const; void loadCueTrack(const CueTrack &cueTrack); - QWidget *createHeader(); - - int getVolume() const { return volumeSpin->value(); } - int getPan() const { return panSpin->value(); } - int getPitch() const { return pitchSpin->value(); } - int getBus1() const { return bus1Spin->value(); } - int getBus2() const { return bus2Spin->value(); } + int getVolume() const { return volumeSpin->value() * 2.55f * 255.0f; } + int getPan() const { return (panSpin->value() * 128) + 128; } + int getPitch() const { return pitchSpin->value() * 128; } + int getBus1() const { return bus1Spin->value() * 2.55f * 255.0f; } + int getBus2() const { return bus2Spin->value() * 2.55f * 255.0f; } Status getStatus() const { return static_cast(statusCombo->currentIndex()); } QString getFilePath() const { return filePathEdit->text(); } void setFilePath(QString text) const { filePathEdit->setText(text);}; @@ -39,18 +38,16 @@ public: int getUserNumber() const { return userNumberSpin->value(); } int getEntryPoint() const { return entryPointSpin->value(); } int getExitPoint() const { return exitPointSpin->value(); } - void highlight(bool highlight) { - if (highlight) this->setStyleSheet("background-color: yellow;"); - else this->setStyleSheet("background-color: white;"); - } + void setStyle(bool highlight); QCheckBox* active; + QSpinBox* audioLayer; QLineEdit* filePathEdit; - QSpinBox* volumeSpin; - QSpinBox* panSpin; - QSpinBox* pitchSpin; - QSpinBox* bus1Spin; - QSpinBox* bus2Spin; + ClickableDoubleSpinBox* volumeSpin; + ClickableDoubleSpinBox* panSpin; + ClickableDoubleSpinBox* pitchSpin; + ClickableDoubleSpinBox* bus1Spin; + ClickableDoubleSpinBox* bus2Spin; QComboBox* statusCombo; QSpinBox* fadeOutSpin; QSpinBox* fadeInSpin; @@ -62,10 +59,171 @@ public: QSpinBox* userNumberSpin; QSpinBox* entryPointSpin; QSpinBox* exitPointSpin; + QPushButton* editButton; + private: void setupUi(); void setupStatusCombo(); + +private slots: + void editButtonClicked(); }; +// Definición de la clase EditCueTrackWidget +#include +#include "settings.h" + +class EditCueTrackWidget : public QDialog { + Q_OBJECT + +public: + explicit EditCueTrackWidget(QWidget *parent = nullptr); + + void loadCueTrack(const CueTrack &cueTrack); + CueTrack saveCueTrack() const; + +private: + void setupUi(); + void connectSignals(); + void onBrowseButtonClicked(); + + QLineEdit *filePathEdit; + QDoubleSpinBox *volumeSpin; + QDoubleSpinBox *panSpin; + QDoubleSpinBox *pitchSpin; + QDoubleSpinBox *bus1Spin; + QDoubleSpinBox *bus2Spin; + QSpinBox *fadeInSpin; + QSpinBox *fadeOutSpin; + QSpinBox *waitInSpin; + QSpinBox *waitOutSpin; + QCheckBox *stopAtEndCheck; + QLineEdit *nameEdit; + QLineEdit *descriptionEdit; + QSpinBox *userNumberSpin; + QSpinBox *entryPointSpin; + QSpinBox *exitPointSpin; + QComboBox *statusCombo; + QPushButton *browseButton; + QPushButton *saveButton; + QPushButton *cancelButton; + + CueTrack currentCueTrack; +}; + +EditCueTrackWidget::EditCueTrackWidget(QWidget *parent) : QDialog(parent) { + setupUi(); + connectSignals(); +} + +void EditCueTrackWidget::setupUi() { + filePathEdit = new QLineEdit(this); + volumeSpin = new QDoubleSpinBox(this); + panSpin = new QDoubleSpinBox(this); + pitchSpin = new QDoubleSpinBox(this); + bus1Spin = new QDoubleSpinBox(this); + bus2Spin = new QDoubleSpinBox(this); + fadeInSpin = new QSpinBox(this); + fadeOutSpin = new QSpinBox(this); + waitInSpin = new QSpinBox(this); + waitOutSpin = new QSpinBox(this); + stopAtEndCheck = new QCheckBox(this); + nameEdit = new QLineEdit(this); + descriptionEdit = new QLineEdit(this); + userNumberSpin = new QSpinBox(this); + entryPointSpin = new QSpinBox(this); + exitPointSpin = new QSpinBox(this); + statusCombo = new QComboBox(this); + statusCombo->addItem("Stopped"); + statusCombo->addItem("Paused"); + statusCombo->addItem("PlayingOnce"); + statusCombo->addItem("PlayingLoop"); + statusCombo->addItem("Iddle"); + statusCombo->addItem("PlayingFolder"); + statusCombo->addItem("PlayingFolderLoop"); + statusCombo->addItem("PlayingFolderRandom"); + + browseButton = new QPushButton("Browse...", this); + saveButton = new QPushButton("Save", this); + cancelButton = new QPushButton("Cancel", this); + + QFormLayout *layout = new QFormLayout(this); + layout->addRow("User Number", userNumberSpin); + layout->addRow("Name", nameEdit); + layout->addRow("File Path", filePathEdit); + layout->addRow(browseButton); + layout->addRow("Status", statusCombo); + layout->addRow("Fade In", fadeInSpin); + layout->addRow("Fade Out", fadeOutSpin); + layout->addRow("Wait In", waitInSpin); + layout->addRow("Wait Out", waitOutSpin); + layout->addRow("Stop At End", stopAtEndCheck); + layout->addRow("Volume", volumeSpin); + layout->addRow("Bus 1", bus1Spin); + layout->addRow("Bus 2", bus2Spin); + layout->addRow("Pan", panSpin); + layout->addRow("Pitch", pitchSpin); + layout->addRow("Entry Point", entryPointSpin); + layout->addRow("Exit Point", exitPointSpin); + layout->addRow("Description", descriptionEdit); + layout->addRow(saveButton); + layout->addRow(cancelButton); +} + +void EditCueTrackWidget::loadCueTrack(const 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); + statusCombo->setCurrentIndex(statusCombo->findText(statusToString(cueTrack.status))); +} + +CueTrack EditCueTrackWidget::saveCueTrack() const { + CueTrack cueTrack; + cueTrack.filePath.append(filePathEdit->text().toUtf8().constData()); + cueTrack.volume = volumeSpin->value(); + cueTrack.pan = panSpin->value(); + cueTrack.pitch = pitchSpin->value(); + cueTrack.name.append(nameEdit->text().toUtf8().constData()); + cueTrack.description.append(descriptionEdit->text().toUtf8().constData()); + cueTrack.status = static_cast(statusCombo->currentIndex()); + cueTrack.fadeIn = fadeInSpin->value(); + cueTrack.fadeOut = fadeOutSpin->value(); + cueTrack.waitIn = waitInSpin->value(); + cueTrack.waitOut = waitOutSpin->value(); + cueTrack.stopAtEnd = stopAtEndCheck->isChecked(); + cueTrack.userNumber = userNumberSpin->value(); + cueTrack.entryPoint = entryPointSpin->value(); + cueTrack.exitPoint = exitPointSpin->value(); + return cueTrack; +} + +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)); + } +} + #endif // CUETRACKWIDGET_H diff --git a/src/filterbankwidget.cpp b/src/filterbankwidget.cpp index 098e591..c948411 100644 --- a/src/filterbankwidget.cpp +++ b/src/filterbankwidget.cpp @@ -47,6 +47,14 @@ FilterBankWidget::FilterBankWidget(QWidget *parent) } else { fb[j]->setRange(-50, 50); } + fb[j]->setFocusPolicy(Qt::NoFocus); + fb[j]->setButtonSymbols(QAbstractSpinBox::NoButtons); + fb[j]->setValue(-1); + fb[j]->setDecimals(1); + fb[j]->setAlignment(Qt::AlignHCenter); + fb[j]->setContentsMargins(0, 0, 0, 0); + fb[j]->setMaximumWidth(66); + fb[j]->setMinimumWidth(25); filterLayout->insertWidget(j, fb[j]); } filterLayout->setSpacing(0); diff --git a/src/showplayer.cpp b/src/showplayer.cpp index a6676fe..906f20b 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -8,18 +8,21 @@ ShowPlayer::ShowPlayer(QWidget *parent) : ui->setupUi(this); connect(ui->addCueButton, SIGNAL(clicked()), this, SLOT(onAddTrack())); connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go())); - currentTrackIndex = 0; filesLoaded = 0; currentStatus = Status::Iddle; + for(int i = 0; i < MAX_LAYERS; i++) + layersUsed[i] = -1; } ShowPlayer::~ShowPlayer() {} void ShowPlayer::onAddTrack() { - TrackDialog dialog; - dialog.show(); - if (dialog.exec() == QDialog::Accepted) { - ui->cueListWidget->addCueTrackWidget(dialog.track); + CueTrackWidget* track = new CueTrackWidget(); + EditCueTrackWidget editor; + editor.loadCueTrack(track->saveCueTrack()); + if (editor.exec() == QDialog::Accepted) { + track->loadCueTrack(editor.saveCueTrack()); + ui->cueListWidget->addCueTrackWidget(track); } } @@ -28,15 +31,25 @@ void ShowPlayer::go() CueTrackWidget* current = ui->cueListWidget->getSelectedTrack(); if (!current) return; - for (int i = 0; i < MAX_LAYERS; i++) { - if (layersUsed[i] == -1) { - layersUsed[i] = currentTrackIndex; - current->audioLayer = i; - break; - } - } - updateTrackStateInEngine(currentTrackIndex, current->audioLayer); - emit uiLoadMedia(current->audioLayer, current->getFilePath()); - emit uiPlaybackChanged(current->audioLayer, current->getStatus()); + if (!current->getFilePath().isEmpty()) + { + for (int i = 0; i < MAX_LAYERS; i++) { + if (layersUsed[i] == -1) { + layersUsed[i] = current->userNumberSpin->value(); + break; + } + } + emit uiLoadMedia(current->audioLayer->value(), current->getFilePath()); + } + updateTrackStateInEngine(current); + emit uiPlaybackChanged(current->audioLayer->value(), current->getStatus()); filesLoaded++; } + +void ShowPlayer::updateTrackStateInEngine(CueTrackWidget *track) { + emit uiSliderChanged(track->audioLayer->value(), Slider::Volume, track->getVolume()); + emit uiSliderChanged(track->audioLayer->value(), Slider::Pan, track->getPan()); + emit uiSliderChanged(track->audioLayer->value(), Slider::Pitch, track->getPitch()); + emit uiSliderChanged(track->audioLayer->value(), Slider::Bus1, track->getBus1()); + emit uiSliderChanged(track->audioLayer->value(), Slider::Bus2, track->getBus2()); +}; diff --git a/src/showplayer.h b/src/showplayer.h index 54451f2..4184a19 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -5,11 +5,13 @@ #include #include +#include #include "defines.h" #include "cuetrackwidget.h" #include "cuetracklistwidget.h" #include "trackdialog.h" +#include "settings.h" #include "ui_showplayer.h" namespace Ui { @@ -26,19 +28,11 @@ public: private: Ui::ShowPlayer *ui; - size_t currentTrackIndex; Status currentStatus = Status::Iddle; size_t filesLoaded = 0; - int layersUsed[MAX_LAYERS] = { -1 }; + int layersUsed[MAX_LAYERS]; - void updateTrackStateInEngine(size_t index, int layer) { - CueTrackWidget *track = ui->cueListWidget->getTrackAtIndex(index); - emit uiSliderChanged(layer, Slider::Volume, track->getVolume()); - emit uiSliderChanged(layer, Slider::Pan, track->getPan()); - emit uiSliderChanged(layer, Slider::Pitch, track->getPitch()); - emit uiSliderChanged(layer, Slider::Bus1, track->getBus1()); - emit uiSliderChanged(layer, Slider::Bus2, track->getBus2()); - }; + void updateTrackStateInEngine(CueTrackWidget *track); private slots: void onAddTrack(); diff --git a/src/trackdialog.cpp b/src/trackdialog.cpp index 89f699b..45517ae 100644 --- a/src/trackdialog.cpp +++ b/src/trackdialog.cpp @@ -12,25 +12,27 @@ void TrackDialog::setupUi() { browseButton = new QPushButton(tr("Buscar..."), this); QFormLayout *layout = new QFormLayout(this); - track = new CueTrack(); - layout->addRow(tr("&User number"), track->userNumber); - layout->addRow(tr("&Name"), track->name); - layout->addRow(tr("&Description"), track->description); - layout->addRow(tr("&File"), track->filePath); - layout->addRow(tr("&Browse files"), browseButton); - layout->addRow(tr("&Status"), track->status); - layout->addRow(tr("&Fade in"), track->fadeIn); - layout->addRow(tr("Fade &Out"), track->fadeOut); - layout->addRow(tr("&Wait In"), track->waitIn); - layout->addRow(tr("&Wait Ou&t"), track->waitOut); - layout->addRow(tr("Sto&p at end"), track->stopAtEnd); - layout->addRow(tr("&Volume"), track->volume); - layout->addRow(tr("pan"), track->pan); - layout->addRow(tr("pitch"), track->pitch); - layout->addRow(tr("Bus&1"), track->bus1); - layout->addRow(tr("Bus&2"), track->bus2); - layout->addRow(tr("&Entry Point"), track->entryPoint); - layout->addRow(tr("E&xit Point"), track->exitPoint); + //track = new CueTrackWidget(); + //track->editButtonClicked(); +/* layout->addRow(tr("&User number"), track->userNumberSpin); + layout->addRow(tr("&Name"), track->nameEdit); + layout->addRow(tr("&Description"), track->descriptionEdit); + layout->addRow(tr("&File"), track->filePathEdit); + layout->addRow(tr("&Status"), track->statusCombo); + layout->addRow(tr("&Fade in"), track->fadeInSpin); + layout->addRow(tr("Fade &Out"), track->fadeOutSpin); + layout->addRow(tr("&Wait In"), track->waitInSpin); + layout->addRow(tr("&Wait Ou&t"), track->waitOutSpin); + layout->addRow(tr("Sto&p at end"), track->stopAtEndCheck); + layout->addRow(tr("&Volume"), track->volumeSpin); + layout->addRow(tr("pan"), track->panSpin); + layout->addRow(tr("pitch"), track->pitchSpin); + layout->addRow(tr("Bus&1"), track->bus1Spin); + layout->addRow(tr("Bus&2"), track->bus2Spin); + layout->addRow(tr("&Entry Point"), track->entryPointSpin); + layout->addRow(tr("E&xit Point"), track->exitPointSpin);*/ + //layout->addRow(tr("&Browse files"), browseButton); + //layout->addWidget(track); layout->addWidget(okButton); layout->addWidget(cancelButton); setLayout(layout); @@ -39,7 +41,7 @@ void TrackDialog::setupUi() { void TrackDialog::connectSignals() { connect(okButton, &QPushButton::clicked, this, &TrackDialog::accept); connect(cancelButton, &QPushButton::clicked, this, &TrackDialog::reject); - connect(browseButton, &QPushButton::clicked, this, &TrackDialog::browseFiles); + //connect(browseButton, &QPushButton::clicked, this, &TrackDialog::browseFiles); } QString TrackDialog::browseFiles() const { @@ -50,7 +52,7 @@ QString TrackDialog::browseFiles() const { tr("Archivos de audio (*.mp3 *.wav *.flac);;Todos los archivos (*)") ); if (!filePath.isEmpty()) { - track->setFilePath(filePath); + track->setFilePath(filePath); QDir dir; Settings::getInstance()->setPathMedia(dir.absoluteFilePath(filePath)); } diff --git a/src/trackdialog.h b/src/trackdialog.h index 4d787cb..58418c2 100644 --- a/src/trackdialog.h +++ b/src/trackdialog.h @@ -14,7 +14,7 @@ class TrackDialog : public QDialog { Q_OBJECT public: - CueTrack *track; + CueTrackWidget *track; explicit TrackDialog(QWidget *parent = nullptr); From 3b98be8b1454ffbf53c7dadb116977d01ce79cd4 Mon Sep 17 00:00:00 2001 From: snt Date: Wed, 19 Jun 2024 15:20:53 +0200 Subject: [PATCH 3/4] wip - antes de cambiar a TableWidget --- libremediaserver-audio.pro | 2 + src/cuetracklistwidget.h | 32 +++++ src/cuetrackwidget.cpp | 1 + src/cuetrackwidget.h | 282 ++++++++++++++++++------------------- 4 files changed, 174 insertions(+), 143 deletions(-) diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 3e68214..35d910f 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -2,6 +2,7 @@ TEMPLATE = app TARGET = libremediaserver-audio QT += webkitwidgets widgets HEADERS += src/libremediaserver-audio.h \ + src/editcuetrackwidget.h \ src/cuetracklistwidget.h \ src/cuetrackwidget.h \ src/showplayer.h \ @@ -26,6 +27,7 @@ HEADERS += src/libremediaserver-audio.h \ src/slidergroup.h \ src/trackdialog.h SOURCES += src/main.cpp \ + src/editcuetrackwidget.cpp \ src/cuetrackwidget.cpp \ src/showplayer.cpp \ src/clickabledoublespinbox.cpp \ diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index ed6b71f..2fb457b 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -8,6 +8,9 @@ #include "cuetrackwidget.h" +#include +#include + class CueTrackListWidget : public QWidget { Q_OBJECT public: @@ -92,5 +95,34 @@ private slots: } } + void displayCueTrackInTable(QTableWidget* tableWidget, const CueTrack& cueTrack) { + // Configura las columnas si aún no están configuradas + if (tableWidget->columnCount() == 0) { + tableWidget->setColumnCount(5); // Ajusta según el número de propiedades a mostrar + QStringList headers = {"Nombre", "Volumen", "Pan", "Pitch", "Estado"}; + tableWidget->setHorizontalHeaderLabels(headers); + } + + int currentRow = tableWidget->rowCount(); + tableWidget->insertRow(currentRow); + + // Nombre + tableWidget->setItem(currentRow, 0, new QTableWidgetItem(cueTrack.name)); + + // Volumen + tableWidget->setItem(currentRow, 1, new QTableWidgetItem(QString::number(cueTrack.volume))); + + // Pan + tableWidget->setItem(currentRow, 2, new QTableWidgetItem(QString::number(cueTrack.pan))); + + // Pitch + tableWidget->setItem(currentRow, 3, new QTableWidgetItem(QString::number(cueTrack.pitch))); + + // Estado + QString statusStr; // Asume que tienes una función para convertir el estado a QString + statusStr = statusToString(cueTrack.status); // Implementa esta función según tu lógica + tableWidget->setItem(currentRow, 4, new QTableWidgetItem(statusStr)); +} + }; #endif diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp index 80c31b6..3dfec06 100644 --- a/src/cuetrackwidget.cpp +++ b/src/cuetrackwidget.cpp @@ -1,4 +1,5 @@ #include "cuetrackwidget.h" +#include "editcuetrackwidget.h" #include CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) { diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h index 3d729f4..2e6f620 100644 --- a/src/cuetrackwidget.h +++ b/src/cuetrackwidget.h @@ -18,6 +18,7 @@ class CueTrackWidget : public QWidget { public: explicit CueTrackWidget(QWidget *parent = nullptr); + CueTrack track; CueTrack saveCueTrack() const; void loadCueTrack(const CueTrack &cueTrack); int getVolume() const { return volumeSpin->value() * 2.55f * 255.0f; } @@ -61,169 +62,164 @@ public: QSpinBox* exitPointSpin; QPushButton* editButton; - private: void setupUi(); void setupStatusCombo(); private slots: void editButtonClicked(); +/* + #include + #include + + bool CueTrack::saveToFile(const QString& filePath) const { + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return false; // No se pudo abrir el archivo para escritura + } + + QTextStream out(&file); + + // Escribir los datos en el archivo + out << "Volume: " << getVolume() << "\n"; + out << "Pan: " << getPan() << "\n"; + out << "Pitch: " << getPitch() << "\n"; + out << "Bus1: " << getBus1() << "\n"; + out << "Bus2: " << getBus2() << "\n"; + out << "Status: " << static_cast(getStatus()) << "\n"; + out << "FilePath: " << getFilePath() << "\n"; + out << "FadeIn: " << getFadeIn() << "\n"; + out << "FadeOut: " << getFadeOut() << "\n"; + out << "WaitIn: " << getWaitIn() << "\n"; + out << "WaitOut: " << getWaitOut() << "\n"; + out << "StopAtEnd: " << getStopAtEnd() << "\n"; + out << "Name: " << getName() << "\n"; + out << "Description: " << getDescription() << "\n"; + out << "UserNumber: " << getUserNumber() << "\n"; + out << "EntryPoint: " << getEntryPoint() << "\n"; + out << "ExitPoint: " << getExitPoint() << "\n"; + + file.close(); + return true; + } + #include + #include + + bool CueTrack::loadFromFile(const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return false; // No se pudo abrir el archivo para lectura + } + + QTextStream in(&file); + + // Leer los datos del archivo + while (!in.atEnd()) { + QString line = in.readLine(); + QStringList parts = line.split(": "); + if (parts.size() != 2) continue; // Omitir líneas mal formadas + + QString key = parts[0].trimmed(); + QString value = parts[1].trimmed(); + + if (key == "Volume") setVolume(value.toDouble()); + else if (key == "Pan") setPan(value.toDouble()); + else if (key == "Pitch") setPitch(value.toDouble()); + else if (key == "Bus1") setBus1(value.toInt()); + else if (key == "Bus2") setBus2(value.toInt()); + else if (key == "Status") setStatus(static_cast(value.toInt())); + else if (key == "FilePath") setFilePath(value); + else if (key == "FadeIn") setFadeIn(value.toDouble()); + else if (key == "FadeOut") setFadeOut(value.toDouble()); + else if (key == "WaitIn") setWaitIn(value.toDouble()); + else if (key == "WaitOut") setWaitOut(value.toDouble()); + else if (key == "StopAtEnd") setStopAtEnd(value.toInt() != 0); + else if (key == "Name") setName(value); + else if (key == "Description") setDescription(value); + else if (key == "UserNumber") setUserNumber(value.toInt()); + else if (key == "EntryPoint") setEntryPoint(value.toDouble()); + else if (key == "ExitPoint") setExitPoint(value.toDouble()); + // Añadir más campos según sea necesario + } + + file.close(); + return true; + } }; -// Definición de la clase EditCueTrackWidget -#include -#include "settings.h" +#include +#include -class EditCueTrackWidget : public QDialog { - Q_OBJECT +void saveCueTrackToXml(const CueTrack& cueTrack, const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly)) { + qWarning("No se pudo abrir el archivo para escritura."); + return; + } -public: - explicit EditCueTrackWidget(QWidget *parent = nullptr); + QXmlStreamWriter xmlWriter(&file); + xmlWriter.setAutoFormatting(true); // Para una salida más legible - void loadCueTrack(const CueTrack &cueTrack); - CueTrack saveCueTrack() const; + xmlWriter.writeStartDocument(); + xmlWriter.writeStartElement("CueTrack"); -private: - void setupUi(); - void connectSignals(); - void onBrowseButtonClicked(); + // Escribe los datos del objeto CueTrack como elementos o atributos + xmlWriter.writeTextElement("Name", cueTrack.name()); + xmlWriter.writeTextElement("Volume", QString::number(cueTrack.volume())); + xmlWriter.writeTextElement("Pan", QString::number(cueTrack.pan())); + xmlWriter.writeTextElement("Pitch", QString::number(cueTrack.pitch())); + // Añade más elementos según sea necesario - QLineEdit *filePathEdit; - QDoubleSpinBox *volumeSpin; - QDoubleSpinBox *panSpin; - QDoubleSpinBox *pitchSpin; - QDoubleSpinBox *bus1Spin; - QDoubleSpinBox *bus2Spin; - QSpinBox *fadeInSpin; - QSpinBox *fadeOutSpin; - QSpinBox *waitInSpin; - QSpinBox *waitOutSpin; - QCheckBox *stopAtEndCheck; - QLineEdit *nameEdit; - QLineEdit *descriptionEdit; - QSpinBox *userNumberSpin; - QSpinBox *entryPointSpin; - QSpinBox *exitPointSpin; - QComboBox *statusCombo; - QPushButton *browseButton; - QPushButton *saveButton; - QPushButton *cancelButton; + xmlWriter.writeEndElement(); // Cierra el elemento CueTrack + xmlWriter.writeEndDocument(); - CueTrack currentCueTrack; -}; - -EditCueTrackWidget::EditCueTrackWidget(QWidget *parent) : QDialog(parent) { - setupUi(); - connectSignals(); + file.close(); // No olvides cerrar el archivo } -void EditCueTrackWidget::setupUi() { - filePathEdit = new QLineEdit(this); - volumeSpin = new QDoubleSpinBox(this); - panSpin = new QDoubleSpinBox(this); - pitchSpin = new QDoubleSpinBox(this); - bus1Spin = new QDoubleSpinBox(this); - bus2Spin = new QDoubleSpinBox(this); - fadeInSpin = new QSpinBox(this); - fadeOutSpin = new QSpinBox(this); - waitInSpin = new QSpinBox(this); - waitOutSpin = new QSpinBox(this); - stopAtEndCheck = new QCheckBox(this); - nameEdit = new QLineEdit(this); - descriptionEdit = new QLineEdit(this); - userNumberSpin = new QSpinBox(this); - entryPointSpin = new QSpinBox(this); - exitPointSpin = new QSpinBox(this); - statusCombo = new QComboBox(this); - statusCombo->addItem("Stopped"); - statusCombo->addItem("Paused"); - statusCombo->addItem("PlayingOnce"); - statusCombo->addItem("PlayingLoop"); - statusCombo->addItem("Iddle"); - statusCombo->addItem("PlayingFolder"); - statusCombo->addItem("PlayingFolderLoop"); - statusCombo->addItem("PlayingFolderRandom"); +#include +#include - browseButton = new QPushButton("Browse...", this); - saveButton = new QPushButton("Save", this); - cancelButton = new QPushButton("Cancel", this); +bool loadCueTrackFromXml(CueTrack& cueTrack, const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly)) { + qWarning("No se pudo abrir el archivo para lectura."); + return false; + } - QFormLayout *layout = new QFormLayout(this); - layout->addRow("User Number", userNumberSpin); - layout->addRow("Name", nameEdit); - layout->addRow("File Path", filePathEdit); - layout->addRow(browseButton); - layout->addRow("Status", statusCombo); - layout->addRow("Fade In", fadeInSpin); - layout->addRow("Fade Out", fadeOutSpin); - layout->addRow("Wait In", waitInSpin); - layout->addRow("Wait Out", waitOutSpin); - layout->addRow("Stop At End", stopAtEndCheck); - layout->addRow("Volume", volumeSpin); - layout->addRow("Bus 1", bus1Spin); - layout->addRow("Bus 2", bus2Spin); - layout->addRow("Pan", panSpin); - layout->addRow("Pitch", pitchSpin); - layout->addRow("Entry Point", entryPointSpin); - layout->addRow("Exit Point", exitPointSpin); - layout->addRow("Description", descriptionEdit); - layout->addRow(saveButton); - layout->addRow(cancelButton); + QXmlStreamReader xmlReader(&file); + + while (!xmlReader.atEnd() && !xmlReader.hasError()) { + // Lee el siguiente elemento + QXmlStreamReader::TokenType token = xmlReader.readNext(); + // Si es un elemento de inicio y el nombre del elemento es el esperado + if (token == QXmlStreamReader::StartElement) { + if (xmlReader.name() == "filePath") { + cueTrack.filePath = xmlReader.readElementText().toStdString(); + } else if (xmlReader.name() == "volume") { + cueTrack.volume = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "pan") { + cueTrack.pan = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "pitch") { + cueTrack.pitch = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "status") { + QString statusStr = xmlReader.readElementText(); + cueTrack.status = stringToStatus(&statusStr); // Asegúrate de que esta función maneje QString correctamente + } + // Añade más campos según sea necesario + } + } + + if (xmlReader.hasError()) { + qWarning("Error al leer el archivo XML: %s", xmlReader.errorString().toUtf8().constData()); + return false; + } + + file.close(); + return true; +} } -void EditCueTrackWidget::loadCueTrack(const 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); - statusCombo->setCurrentIndex(statusCombo->findText(statusToString(cueTrack.status))); -} -CueTrack EditCueTrackWidget::saveCueTrack() const { - CueTrack cueTrack; - cueTrack.filePath.append(filePathEdit->text().toUtf8().constData()); - cueTrack.volume = volumeSpin->value(); - cueTrack.pan = panSpin->value(); - cueTrack.pitch = pitchSpin->value(); - cueTrack.name.append(nameEdit->text().toUtf8().constData()); - cueTrack.description.append(descriptionEdit->text().toUtf8().constData()); - cueTrack.status = static_cast(statusCombo->currentIndex()); - cueTrack.fadeIn = fadeInSpin->value(); - cueTrack.fadeOut = fadeOutSpin->value(); - cueTrack.waitIn = waitInSpin->value(); - cueTrack.waitOut = waitOutSpin->value(); - cueTrack.stopAtEnd = stopAtEndCheck->isChecked(); - cueTrack.userNumber = userNumberSpin->value(); - cueTrack.entryPoint = entryPointSpin->value(); - cueTrack.exitPoint = exitPointSpin->value(); - return cueTrack; -} - -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)); - } -} +*/ #endif // CUETRACKWIDGET_H From 84702c5e446bfe0e0ea0d47592b3e6ebc5cd6914 Mon Sep 17 00:00:00 2001 From: snt Date: Thu, 20 Jun 2024 14:56:15 +0200 Subject: [PATCH 4/4] cambio a un vector de CueTrack en vex de CueTrackWidget. CueTrackListWidget ahora posee el contenedor de CueTracks y muestra un QTableWidget con info de las CueTracks. --- libremediaserver-audio.pro | 11 +- src/audiolayerwidget.cpp | 4 +- src/cuetracklistwidget.h | 134 ++++---------------- src/cuetrackwidget.cpp | 183 --------------------------- src/cuetrackwidget.h | 225 --------------------------------- src/defines.h | 1 + src/editcuetrackwidget.cpp | 139 ++++++++++++++++++++ src/editcuetrackwidget.h | 54 ++++++++ src/libremediaserver-audio.cpp | 4 +- src/miniaudioengine.cpp | 14 +- src/showplayer.cpp | 40 +++--- src/showplayer.h | 4 +- src/showplayer.ui | 10 +- src/trackdialog.cpp | 60 --------- src/trackdialog.h | 34 ----- 15 files changed, 265 insertions(+), 652 deletions(-) delete mode 100644 src/cuetrackwidget.cpp delete mode 100644 src/cuetrackwidget.h create mode 100644 src/editcuetrackwidget.cpp create mode 100644 src/editcuetrackwidget.h delete mode 100644 src/trackdialog.cpp delete mode 100644 src/trackdialog.h diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 35d910f..41955a6 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -4,7 +4,6 @@ QT += webkitwidgets widgets HEADERS += src/libremediaserver-audio.h \ src/editcuetrackwidget.h \ src/cuetracklistwidget.h \ - src/cuetrackwidget.h \ src/showplayer.h \ src/clickabledoublespinbox.h \ src/clickablelabel.h \ @@ -24,11 +23,9 @@ HEADERS += src/libremediaserver-audio.h \ src/audiowidget.h \ src/defines.h \ src/settings.h \ - src/slidergroup.h \ - src/trackdialog.h + src/slidergroup.h SOURCES += src/main.cpp \ src/editcuetrackwidget.cpp \ - src/cuetrackwidget.cpp \ src/showplayer.cpp \ src/clickabledoublespinbox.cpp \ src/clickablelabel.cpp \ @@ -45,8 +42,7 @@ SOURCES += src/main.cpp \ src/audiolayerwidget.cpp \ src/audiowidget.cpp \ src/settings.cpp \ - src/slidergroup.cpp \ - src/trackdialog.cpp + src/slidergroup.cpp FORMS += \ src/showplayer.ui \ src/libremediaserver-audio-ui.ui @@ -61,3 +57,6 @@ OTHER_FILES += \ docs/changelog.txt \ docs/lms-audio.xlm \ docs/roadmap.txt + +SOURCES += \ + src/cuetracklistwidget.cpp diff --git a/src/audiolayerwidget.cpp b/src/audiolayerwidget.cpp index 9b6ecf7..576df5c 100644 --- a/src/audiolayerwidget.cpp +++ b/src/audiolayerwidget.cpp @@ -275,10 +275,10 @@ void AudioLayerWidget::setMediaFile(QString file) int size = list.size(); if (size >= 2) { QString tmp = list.at(size - 2); - tmp.truncate(60); + tmp.truncate(64); m_folderValue->setText(tmp); tmp = list.at(size - 1); - tmp.truncate(40); + tmp.truncate(64); m_fileValue->setText(tmp); } } diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index 2fb457b..af17160 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -1,128 +1,46 @@ #ifndef CUETRACKLISTWIDGET_H #define CUETRACKLISTWIDGET_H +#include #include #include #include #include #include - -#include "cuetrackwidget.h" - +#include #include #include +#include "defines.h" +#include "editcuetrackwidget.h" class CueTrackListWidget : public QWidget { Q_OBJECT + public: - size_t m_size = 0; - size_t size() const { return m_size; } - size_t selectedIndex = 0; - - explicit CueTrackListWidget(QWidget *parent = nullptr) : QWidget(parent) { - layout = new QVBoxLayout(); - containerWidget = new QWidget(); - containerWidget->setLayout(layout); - - scrollArea = new QScrollArea(this); - scrollArea->setWidgetResizable(true); - scrollArea->setWidget(containerWidget); - - QVBoxLayout* mainLayout = new QVBoxLayout(this); - mainLayout->addWidget(scrollArea); - layout->setAlignment(Qt::AlignTop); - setLayout(mainLayout); - - QShortcut *shortcut_up = new QShortcut(QKeySequence("Up"), parent); - QObject::connect(shortcut_up, SIGNAL(activated()), this, SLOT(key_up())); - QShortcut *shortcut_down = new QShortcut(QKeySequence("Down"), parent); - QObject::connect(shortcut_down, SIGNAL(activated()), this, SLOT(key_down())); - } - - void addCueTrackWidget(CueTrackWidget* widget) { - widget->setParent(containerWidget); - layout->addWidget(widget); - if (m_size == 0) - widget->setStyle(true); - widget->show(); - m_size++; - containerWidget->update(); - containerWidget->adjustSize(); - } - - void removeCueTrackWidget(size_t index) { - if (index >= m_size) return; - - QLayoutItem* item = layout->takeAt(index); - if (item) { - delete item->widget(); - delete item; - m_size--; - } - } - - CueTrackWidget* getTrackAtIndex(size_t index) { - if (index < m_size) { - return qobject_cast(layout->itemAt(index)->widget()); - } - return nullptr; - } - - CueTrackWidget* getSelectedTrack() { - CueTrackWidget* track = getTrackAtIndex(selectedIndex); - key_down(); - return track; - } + explicit CueTrackListWidget(QWidget *parent = nullptr); + CueTrack* getSelectedTrack(); + void createNewCueTrack(); + void editCueTrack(); + void deleteCueTrack(); private: - QScrollArea* scrollArea; - QWidget* containerWidget; + std::vector cueTracks; QVBoxLayout* layout; + QTableWidget* tableWidget; + int m_size = 0; + int size() { return m_size; } + int selectedIndex = 0; + size_t lastUserCueNumber = 0; private slots: - void key_up() { - if (m_size > 0 && selectedIndex > 0) { - getTrackAtIndex(selectedIndex)->setStyle(false); - selectedIndex--; - getTrackAtIndex(selectedIndex)->setStyle(true); - } - } - - void key_down() { - if (selectedIndex < m_size - 1 && m_size > 0) { - getTrackAtIndex(selectedIndex)->setStyle(false); - selectedIndex++; - getTrackAtIndex(selectedIndex)->setStyle(true); - } - } - - void displayCueTrackInTable(QTableWidget* tableWidget, const CueTrack& cueTrack) { - // Configura las columnas si aún no están configuradas - if (tableWidget->columnCount() == 0) { - tableWidget->setColumnCount(5); // Ajusta según el número de propiedades a mostrar - QStringList headers = {"Nombre", "Volumen", "Pan", "Pitch", "Estado"}; - tableWidget->setHorizontalHeaderLabels(headers); - } - - int currentRow = tableWidget->rowCount(); - tableWidget->insertRow(currentRow); - - // Nombre - tableWidget->setItem(currentRow, 0, new QTableWidgetItem(cueTrack.name)); - - // Volumen - tableWidget->setItem(currentRow, 1, new QTableWidgetItem(QString::number(cueTrack.volume))); - - // Pan - tableWidget->setItem(currentRow, 2, new QTableWidgetItem(QString::number(cueTrack.pan))); - - // Pitch - tableWidget->setItem(currentRow, 3, new QTableWidgetItem(QString::number(cueTrack.pitch))); - - // Estado - QString statusStr; // Asume que tienes una función para convertir el estado a QString - statusStr = statusToString(cueTrack.status); // Implementa esta función según tu lógica - tableWidget->setItem(currentRow, 4, new QTableWidgetItem(statusStr)); -} - + void addCueTrack(CueTrack* cue); + void removeCueTrack(int index); + CueTrack* getTrackAtIndex(int index); + void key_up(); + void key_down(); + void displayCueTrackInTable(CueTrack *cueTrack); + void keyPressEvent(QKeyEvent* event); + void updateSelectedCueTrack(bool highlightRow); + void cueTrackLoadDefaults(CueTrack * t); + void copyCueTrack(CueTrack *src, CueTrack *dst); }; #endif diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp deleted file mode 100644 index 3dfec06..0000000 --- a/src/cuetrackwidget.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include "cuetrackwidget.h" -#include "editcuetrackwidget.h" -#include - -CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) { - setupUi(); -} - -void CueTrackWidget::setupUi() { - QVBoxLayout *layout = new QVBoxLayout(this); - QSplitter *row = new QSplitter(Qt::Horizontal); - - active = new QCheckBox(this); - row->addWidget(active); - - userNumberSpin = new QSpinBox(this); - userNumberSpin->setRange(0, 100000); - userNumberSpin->setToolTip("Cue user number"); - row->addWidget(userNumberSpin); - - audioLayer = new QSpinBox(this); - audioLayer->setRange(0, MAX_LAYERS); - audioLayer->setToolTip("Audio Layer"); - row->addWidget(audioLayer); - - nameEdit = new QLineEdit(this); - nameEdit->setToolTip("Cue Name"); - row->addWidget(nameEdit); - - descriptionEdit = new QLineEdit(this); - descriptionEdit->setToolTip("Cue Notes"); - - filePathEdit = new QLineEdit(this); - filePathEdit->setToolTip("File name"); - - volumeSpin = new ClickableDoubleSpinBox(this); - volumeSpin->setRange(0.0f, 100.0f); - volumeSpin->setToolTip("Volume"); - volumeSpin->setSpecialValueText("-inf"); - volumeSpin->setValue(75.0f); - - bus1Spin = new ClickableDoubleSpinBox(this); - bus1Spin->setRange(0.0f, 100.0f); - bus1Spin->setToolTip("Bus 1"); - bus1Spin->setSpecialValueText("-inf"); - bus1Spin->setValue(100.0f); - - bus2Spin = new ClickableDoubleSpinBox(this); - bus2Spin->setRange(0.0f, 100.0f); - bus2Spin->setToolTip("Bus 2"); - bus2Spin->setSpecialValueText("-inf"); - bus2Spin->setValue(100.0f); - - panSpin = new ClickableDoubleSpinBox(this); - panSpin->setRange(-1, 1); - panSpin->setToolTip("Pan"); - panSpin->setValue(0); - - pitchSpin = new ClickableDoubleSpinBox(this); - pitchSpin->setRange(0, 2); - pitchSpin->setSpecialValueText("Stop"); - pitchSpin->setToolTip("Pitch"); - pitchSpin->setValue(1); - - entryPointSpin = new QSpinBox(this); - entryPointSpin->setRange(0, 255); - entryPointSpin->setToolTip("Entry Point"); - - exitPointSpin = new QSpinBox(this); - exitPointSpin->setRange(0, 255); - exitPointSpin->setToolTip("Exit Point"); - exitPointSpin->setValue(255); - - setupStatusCombo(); - statusCombo->setToolTip("Playback Status"); - row->addWidget(userNumberSpin); - - fadeInSpin = new QSpinBox(this); - fadeInSpin->setRange(0, 10000); - fadeInSpin->setToolTip("Fade In Time"); - fadeInSpin->setValue(3); - - fadeOutSpin = new QSpinBox(this); - fadeOutSpin->setRange(0, 10000); - fadeOutSpin->setToolTip("Fade Out Time"); - fadeOutSpin->setValue(3); - - waitInSpin = new QSpinBox(this); - waitInSpin->setRange(0, 10000); - waitInSpin->setToolTip("Wait In Time"); - - waitOutSpin = new QSpinBox(this); - waitOutSpin->setRange(0, 10000); - waitOutSpin->setToolTip("Wait Out Time"); - - stopAtEndCheck = new QCheckBox(this); - stopAtEndCheck->setToolTip("Halt"); - stopAtEndCheck->setChecked("True"); - - editButton = new QPushButton("Edit", this); - editButton->setToolTip("Edit"); - row->addWidget(editButton); - connect(editButton, &QPushButton::clicked, this, &CueTrackWidget::editButtonClicked); - - layout->setSpacing(0); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(row); - setLayout(layout); - setStyle(false); -} - -void CueTrackWidget::setStyle(bool highlight) { - QString style; - - style.append("margin: 1px;"); - if (highlight) - style.append("background-color: #e8e0f8;"); - else - style.append("background-color: #b9b8a7;"); - this->setStyleSheet(style); -} - -void CueTrackWidget::setupStatusCombo() { - statusCombo = new QComboBox(this); - statusCombo->addItem("Stopped", Stopped); - statusCombo->addItem("Paused", Paused); - statusCombo->addItem("PlayingOnce", PlayingOnce); - statusCombo->addItem("PlayingLoop", PlayingLoop); - statusCombo->addItem("Iddle", Iddle); - statusCombo->addItem("PlayingFolder", PlayingFolder); - statusCombo->addItem("PlayingFolderLoop", PlayingFolderLoop); - statusCombo->addItem("PlayingFolderRandom", PlayingFolderRandom); -} - -void CueTrackWidget::loadCueTrack(const CueTrack &cueTrack) { - filePathEdit->setText(QString::fromStdString(cueTrack.filePath)); - 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(QString::fromStdString(cueTrack.name)); - descriptionEdit->setText(QString::fromStdString(cueTrack.description)); - userNumberSpin->setValue(cueTrack.userNumber); - entryPointSpin->setValue(cueTrack.entryPoint); - exitPointSpin->setValue(cueTrack.exitPoint); - statusCombo->setCurrentIndex(statusCombo->findData(cueTrack.status)); -} - -CueTrack CueTrackWidget::saveCueTrack() const { - CueTrack cueTrack; - cueTrack.filePath = filePathEdit->text().toStdString(); - cueTrack.volume = volumeSpin->value(); - cueTrack.pan = panSpin->value(); - cueTrack.pitch = pitchSpin->value(); - cueTrack.bus1 = bus1Spin->value(); - cueTrack.bus2 = bus2Spin->value(); - cueTrack.fadeIn = fadeInSpin->value(); - cueTrack.fadeOut = fadeOutSpin->value(); - cueTrack.waitIn = waitInSpin->value(); - cueTrack.waitOut = waitOutSpin->value(); - cueTrack.stopAtEnd = stopAtEndCheck->isChecked(); - cueTrack.name = nameEdit->text().toStdString(); - cueTrack.description = descriptionEdit->text().toStdString(); - cueTrack.userNumber = userNumberSpin->value(); - cueTrack.entryPoint = entryPointSpin->value(); - cueTrack.exitPoint = exitPointSpin->value(); - cueTrack.status = static_cast(statusCombo->currentData().toInt()); - return cueTrack; -} - -void CueTrackWidget::editButtonClicked() { - EditCueTrackWidget editor; - editor.loadCueTrack(saveCueTrack()); - if (editor.exec() == QDialog::Accepted) { - loadCueTrack(editor.saveCueTrack()); - } -} diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h deleted file mode 100644 index 2e6f620..0000000 --- a/src/cuetrackwidget.h +++ /dev/null @@ -1,225 +0,0 @@ -#ifndef CUETRACKWIDGET_H -#define CUETRACKWIDGET_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "defines.h" -#include "clickabledoublespinbox.h" - -class CueTrackWidget : public QWidget { - Q_OBJECT - -public: - explicit CueTrackWidget(QWidget *parent = nullptr); - CueTrack track; - CueTrack saveCueTrack() const; - void loadCueTrack(const CueTrack &cueTrack); - int getVolume() const { return volumeSpin->value() * 2.55f * 255.0f; } - int getPan() const { return (panSpin->value() * 128) + 128; } - int getPitch() const { return pitchSpin->value() * 128; } - int getBus1() const { return bus1Spin->value() * 2.55f * 255.0f; } - int getBus2() const { return bus2Spin->value() * 2.55f * 255.0f; } - Status getStatus() const { return static_cast(statusCombo->currentIndex()); } - QString getFilePath() const { return filePathEdit->text(); } - void setFilePath(QString text) const { filePathEdit->setText(text);}; - int getFadeIn() const { return fadeInSpin->value(); } - int getFadeOut() const { return fadeOutSpin->value(); } - int getWaitIn() const { return waitInSpin->value(); } - int getWaitOut() const { return waitOutSpin->value(); } - bool getStopAtEnd() const { return stopAtEndCheck->isChecked(); } - QString getName() const { return nameEdit->text(); } - QString getDescription() const { return descriptionEdit->text(); } - int getUserNumber() const { return userNumberSpin->value(); } - int getEntryPoint() const { return entryPointSpin->value(); } - int getExitPoint() const { return exitPointSpin->value(); } - void setStyle(bool highlight); - - QCheckBox* active; - QSpinBox* audioLayer; - QLineEdit* filePathEdit; - ClickableDoubleSpinBox* volumeSpin; - ClickableDoubleSpinBox* panSpin; - ClickableDoubleSpinBox* pitchSpin; - ClickableDoubleSpinBox* bus1Spin; - ClickableDoubleSpinBox* bus2Spin; - QComboBox* statusCombo; - QSpinBox* fadeOutSpin; - QSpinBox* fadeInSpin; - QSpinBox* waitInSpin; - QSpinBox* waitOutSpin; - QCheckBox* stopAtEndCheck; - QLineEdit* nameEdit; - QLineEdit* descriptionEdit; - QSpinBox* userNumberSpin; - QSpinBox* entryPointSpin; - QSpinBox* exitPointSpin; - QPushButton* editButton; - -private: - void setupUi(); - void setupStatusCombo(); - -private slots: - void editButtonClicked(); -/* - #include - #include - - bool CueTrack::saveToFile(const QString& filePath) const { - QFile file(filePath); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - return false; // No se pudo abrir el archivo para escritura - } - - QTextStream out(&file); - - // Escribir los datos en el archivo - out << "Volume: " << getVolume() << "\n"; - out << "Pan: " << getPan() << "\n"; - out << "Pitch: " << getPitch() << "\n"; - out << "Bus1: " << getBus1() << "\n"; - out << "Bus2: " << getBus2() << "\n"; - out << "Status: " << static_cast(getStatus()) << "\n"; - out << "FilePath: " << getFilePath() << "\n"; - out << "FadeIn: " << getFadeIn() << "\n"; - out << "FadeOut: " << getFadeOut() << "\n"; - out << "WaitIn: " << getWaitIn() << "\n"; - out << "WaitOut: " << getWaitOut() << "\n"; - out << "StopAtEnd: " << getStopAtEnd() << "\n"; - out << "Name: " << getName() << "\n"; - out << "Description: " << getDescription() << "\n"; - out << "UserNumber: " << getUserNumber() << "\n"; - out << "EntryPoint: " << getEntryPoint() << "\n"; - out << "ExitPoint: " << getExitPoint() << "\n"; - - file.close(); - return true; - } - #include - #include - - bool CueTrack::loadFromFile(const QString& filePath) { - QFile file(filePath); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - return false; // No se pudo abrir el archivo para lectura - } - - QTextStream in(&file); - - // Leer los datos del archivo - while (!in.atEnd()) { - QString line = in.readLine(); - QStringList parts = line.split(": "); - if (parts.size() != 2) continue; // Omitir líneas mal formadas - - QString key = parts[0].trimmed(); - QString value = parts[1].trimmed(); - - if (key == "Volume") setVolume(value.toDouble()); - else if (key == "Pan") setPan(value.toDouble()); - else if (key == "Pitch") setPitch(value.toDouble()); - else if (key == "Bus1") setBus1(value.toInt()); - else if (key == "Bus2") setBus2(value.toInt()); - else if (key == "Status") setStatus(static_cast(value.toInt())); - else if (key == "FilePath") setFilePath(value); - else if (key == "FadeIn") setFadeIn(value.toDouble()); - else if (key == "FadeOut") setFadeOut(value.toDouble()); - else if (key == "WaitIn") setWaitIn(value.toDouble()); - else if (key == "WaitOut") setWaitOut(value.toDouble()); - else if (key == "StopAtEnd") setStopAtEnd(value.toInt() != 0); - else if (key == "Name") setName(value); - else if (key == "Description") setDescription(value); - else if (key == "UserNumber") setUserNumber(value.toInt()); - else if (key == "EntryPoint") setEntryPoint(value.toDouble()); - else if (key == "ExitPoint") setExitPoint(value.toDouble()); - // Añadir más campos según sea necesario - } - - file.close(); - return true; - } -}; - -#include -#include - -void saveCueTrackToXml(const CueTrack& cueTrack, const QString& filePath) { - QFile file(filePath); - if (!file.open(QIODevice::WriteOnly)) { - qWarning("No se pudo abrir el archivo para escritura."); - return; - } - - QXmlStreamWriter xmlWriter(&file); - xmlWriter.setAutoFormatting(true); // Para una salida más legible - - xmlWriter.writeStartDocument(); - xmlWriter.writeStartElement("CueTrack"); - - // Escribe los datos del objeto CueTrack como elementos o atributos - xmlWriter.writeTextElement("Name", cueTrack.name()); - xmlWriter.writeTextElement("Volume", QString::number(cueTrack.volume())); - xmlWriter.writeTextElement("Pan", QString::number(cueTrack.pan())); - xmlWriter.writeTextElement("Pitch", QString::number(cueTrack.pitch())); - // Añade más elementos según sea necesario - - xmlWriter.writeEndElement(); // Cierra el elemento CueTrack - xmlWriter.writeEndDocument(); - - file.close(); // No olvides cerrar el archivo -} - -#include -#include - -bool loadCueTrackFromXml(CueTrack& cueTrack, const QString& filePath) { - QFile file(filePath); - if (!file.open(QIODevice::ReadOnly)) { - qWarning("No se pudo abrir el archivo para lectura."); - return false; - } - - QXmlStreamReader xmlReader(&file); - - while (!xmlReader.atEnd() && !xmlReader.hasError()) { - // Lee el siguiente elemento - QXmlStreamReader::TokenType token = xmlReader.readNext(); - // Si es un elemento de inicio y el nombre del elemento es el esperado - if (token == QXmlStreamReader::StartElement) { - if (xmlReader.name() == "filePath") { - cueTrack.filePath = xmlReader.readElementText().toStdString(); - } else if (xmlReader.name() == "volume") { - cueTrack.volume = xmlReader.readElementText().toInt(); - } else if (xmlReader.name() == "pan") { - cueTrack.pan = xmlReader.readElementText().toInt(); - } else if (xmlReader.name() == "pitch") { - cueTrack.pitch = xmlReader.readElementText().toInt(); - } else if (xmlReader.name() == "status") { - QString statusStr = xmlReader.readElementText(); - cueTrack.status = stringToStatus(&statusStr); // Asegúrate de que esta función maneje QString correctamente - } - // Añade más campos según sea necesario - } - } - - if (xmlReader.hasError()) { - qWarning("Error al leer el archivo XML: %s", xmlReader.errorString().toUtf8().constData()); - return false; - } - - file.close(); - return true; -} -} - - - -*/ -#endif // CUETRACKWIDGET_H diff --git a/src/defines.h b/src/defines.h index 64c9eba..1209bcb 100644 --- a/src/defines.h +++ b/src/defines.h @@ -112,6 +112,7 @@ struct CueTrack { int entryPoint; // 0 - 255 int exitPoint; // 0 - 255 int audioLayer; // internal audio layer used when cue is loaded + bool active; }; #endif // __cplusplus diff --git a/src/editcuetrackwidget.cpp b/src/editcuetrackwidget.cpp new file mode 100644 index 0000000..54547fb --- /dev/null +++ b/src/editcuetrackwidget.cpp @@ -0,0 +1,139 @@ +#include "editcuetrackwidget.h" +#include +#include +#include +#include + +EditCueTrackWidget::EditCueTrackWidget(CueTrack *cueTrack, QWidget *parent) + : QDialog(parent) { + setupUi(); + connectSignals(); + this->cueTrack = cueTrack; + loadCueTrack(*cueTrack); +} + +void EditCueTrackWidget::setupUi() { + userNumberSpin = new QSpinBox(this); + nameEdit = new QLineEdit(this); + audioLayerSpin = new QSpinBox(this); + audioLayerSpin->setRange(0, MAX_LAYERS - 1); + filePathEdit = new QLineEdit(this); + statusCombo = new QComboBox(this); + volumeSpin = new QDoubleSpinBox(this); + volumeSpin->setRange(0, 100.01f); + panSpin = new QDoubleSpinBox(this); + pitchSpin = new QDoubleSpinBox(this); + bus1Spin = new QDoubleSpinBox(this); + bus1Spin->setRange(0, 100.01f); + bus2Spin = new QDoubleSpinBox(this); + bus2Spin->setRange(0, 100.01f); + fadeInSpin = new QSpinBox(this); + fadeOutSpin = new QSpinBox(this); + waitInSpin = new QSpinBox(this); + waitOutSpin = new QSpinBox(this); + stopAtEndCheck = new QCheckBox(this); + descriptionEdit = new QLineEdit(this); + entryPointSpin = new QSpinBox(this); + exitPointSpin = new QSpinBox(this); + statusCombo->addItem("Stopped"); + statusCombo->addItem("Paused"); + statusCombo->addItem("PlayingOnce"); + statusCombo->addItem("PlayingLoop"); + statusCombo->addItem("Iddle"); + statusCombo->addItem("PlayingFolder"); + statusCombo->addItem("PlayingFolderLoop"); + statusCombo->addItem("PlayingFolderRandom"); + statusCombo->addItem("PlayingFolderRandomLoop"); + + browseButton = new QPushButton("Browse...", this); + saveButton = new QPushButton("Save", this); + cancelButton = new QPushButton("Cancel", this); + + QFormLayout *layout = new QFormLayout(this); + layout->addRow("User Number", userNumberSpin); + layout->addRow("Name", nameEdit); + layout->addRow("Audio Layer", audioLayerSpin); + layout->addRow("File Path", filePathEdit); + layout->addRow(browseButton); + layout->addRow("Status", statusCombo); + layout->addRow("Fade In", fadeInSpin); + layout->addRow("Fade Out", fadeOutSpin); + layout->addRow("Wait In", waitInSpin); + layout->addRow("Wait Out", waitOutSpin); + layout->addRow("Stop At End", stopAtEndCheck); + layout->addRow("Volume", volumeSpin); + layout->addRow("Bus 1", bus1Spin); + layout->addRow("Bus 2", bus2Spin); + layout->addRow("Pan", panSpin); + layout->addRow("Pitch", pitchSpin); + layout->addRow("Entry Point", entryPointSpin); + layout->addRow("Exit Point", exitPointSpin); + layout->addRow("Description", descriptionEdit); + 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); + statusCombo->setCurrentIndex(statusCombo->findText(statusToString(cueTrack.status))); + audioLayerSpin->setValue(cueTrack.audioLayer); +} + +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(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()); + 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)); + } +} + diff --git a/src/editcuetrackwidget.h b/src/editcuetrackwidget.h new file mode 100644 index 0000000..080561e --- /dev/null +++ b/src/editcuetrackwidget.h @@ -0,0 +1,54 @@ +#ifndef EDITCUETRACKWIDGET_H +#define EDITCUETRACKWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" +#include "defines.h" + +class EditCueTrackWidget : public QDialog +{ + Q_OBJECT +public: + explicit EditCueTrackWidget(CueTrack *cueTrack, QWidget *parent = nullptr); + CueTrack *cueTrack; + void loadCueTrack(CueTrack cueTrack); + CueTrack saveCueTrack(); + +private: + void setupUi(); + void connectSignals(); + void onBrowseButtonClicked(); + void accept() override; + + QLineEdit *filePathEdit; + QDoubleSpinBox *volumeSpin; + QDoubleSpinBox *panSpin; + QDoubleSpinBox *pitchSpin; + QDoubleSpinBox *bus1Spin; + QDoubleSpinBox *bus2Spin; + QSpinBox *fadeInSpin; + QSpinBox *fadeOutSpin; + QSpinBox *waitInSpin; + QSpinBox *waitOutSpin; + QCheckBox *stopAtEndCheck; + QLineEdit *nameEdit; + QLineEdit *descriptionEdit; + QSpinBox *userNumberSpin; + QSpinBox *entryPointSpin; + QSpinBox *exitPointSpin; + QComboBox *statusCombo; + QSpinBox *audioLayerSpin; + QPushButton *browseButton; + QPushButton *saveButton; + QPushButton *cancelButton; +}; + +#endif // EDITCUETRACKWIDGET_H diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index 61588fb..1a40036 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -280,7 +280,9 @@ void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile) { ma_result result; - if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0) + if (mediaFile.isEmpty()) + return ; + if (mediaFile.compare(m_currentMedia[layer]) == 0) return; result = m_mae.loadMedia(layer, mediaFile.toLatin1().data()); if (result == MA_SUCCESS) { diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp index 5d37356..0e54927 100644 --- a/src/miniaudioengine.cpp +++ b/src/miniaudioengine.cpp @@ -58,7 +58,7 @@ bool MiniAudioEngine::startEngine(uint layers, uint* audioDevicesId, uint audioD m_mae.currentStatus[i].pitch = 128; m_mae.currentStatus[i].vol = 0.0f; m_mae.currentStatus[i].cursor = 0; - m_mae.currentStatus[i].updated = false; + m_mae.currentStatus[i].updated = MA_FALSE; } result = this->startContext(); if (result != MA_SUCCESS) return false; @@ -351,6 +351,8 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file) { ma_result result; + if (!file || !*file) + return MA_INVALID_ARGS; if (m_mae.mediaLoaded[layer] == MA_TRUE) { m_mae.mediaLoaded[layer] = MA_FALSE; @@ -372,7 +374,7 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file) return result; } m_mae.currentStatus[layer].media = file; - m_mae.currentStatus[layer].updated = true; + m_mae.currentStatus[layer].updated = MA_TRUE; m_mae.mediaLoaded[layer] = MA_TRUE; this->refreshValues(layer); return result; @@ -434,6 +436,8 @@ ma_result MiniAudioEngine::printFormatInfo(int layer) void MiniAudioEngine::volChanged(int layer, int vol) { m_mae.currentStatus[layer].vol = vol; + if (m_mae.mediaLoaded[layer] != MA_TRUE) + return; if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated) return; float db = ((float)vol / 771.0f) - 85.0f; @@ -449,7 +453,7 @@ void MiniAudioEngine::panChanged(int layer, float value) float result; m_mae.currentStatus[layer].pan = value; - if (m_mae.mediaLoaded[layer] == false) + if (m_mae.mediaLoaded[layer] != MA_TRUE) return; result = (value / 128.0) - 1.0; ma_sound_group_set_pan(&m_mae.sounds[layer], result); @@ -460,7 +464,7 @@ void MiniAudioEngine::pitchChanged(int layer, float value) float pitch; m_mae.currentStatus[layer].pitch = value; - if (m_mae.mediaLoaded[layer] == false) + if (m_mae.mediaLoaded[layer] != MA_TRUE) return; pitch = value / 128.0; ma_sound_group_set_pitch(&m_mae.sounds[layer], pitch); @@ -473,7 +477,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status) bool loop = false; m_mae.currentStatus[layer].status = status; - if (m_mae.mediaLoaded[layer] == MA_FALSE) + if (m_mae.mediaLoaded[layer] != MA_TRUE) return MA_DOES_NOT_EXIST; m_mae.currentStatus[layer].updated = false; switch (status) { diff --git a/src/showplayer.cpp b/src/showplayer.cpp index 906f20b..c9108f4 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -17,39 +17,33 @@ ShowPlayer::ShowPlayer(QWidget *parent) : ShowPlayer::~ShowPlayer() {} void ShowPlayer::onAddTrack() { - CueTrackWidget* track = new CueTrackWidget(); - EditCueTrackWidget editor; - editor.loadCueTrack(track->saveCueTrack()); - if (editor.exec() == QDialog::Accepted) { - track->loadCueTrack(editor.saveCueTrack()); - ui->cueListWidget->addCueTrackWidget(track); - } + ui->cueListWidget->createNewCueTrack(); } void ShowPlayer::go() { - CueTrackWidget* current = ui->cueListWidget->getSelectedTrack(); + CueTrack* current = ui->cueListWidget->getSelectedTrack(); if (!current) return; - if (!current->getFilePath().isEmpty()) - { - for (int i = 0; i < MAX_LAYERS; i++) { - if (layersUsed[i] == -1) { - layersUsed[i] = current->userNumberSpin->value(); - break; - } + if (current->audioLayer < 0) + return; + for (int i = 0; i < MAX_LAYERS; i++) { + if (layersUsed[i] == -1) { + layersUsed[i] = current->userNumber; + break; } - emit uiLoadMedia(current->audioLayer->value(), current->getFilePath()); } + if (!current->filePath.empty()) + emit uiLoadMedia(current->audioLayer, current->filePath.data()); updateTrackStateInEngine(current); - emit uiPlaybackChanged(current->audioLayer->value(), current->getStatus()); + emit uiPlaybackChanged(current->audioLayer, current->status); filesLoaded++; } -void ShowPlayer::updateTrackStateInEngine(CueTrackWidget *track) { - emit uiSliderChanged(track->audioLayer->value(), Slider::Volume, track->getVolume()); - emit uiSliderChanged(track->audioLayer->value(), Slider::Pan, track->getPan()); - emit uiSliderChanged(track->audioLayer->value(), Slider::Pitch, track->getPitch()); - emit uiSliderChanged(track->audioLayer->value(), Slider::Bus1, track->getBus1()); - emit uiSliderChanged(track->audioLayer->value(), Slider::Bus2, track->getBus2()); +void ShowPlayer::updateTrackStateInEngine(CueTrack *track) { + emit uiSliderChanged(track->audioLayer, Slider::Volume, track->volume * 655.35); + emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128); + emit uiSliderChanged(track->audioLayer, Slider::Pitch, track->pitch * 128); + emit uiSliderChanged(track->audioLayer, Slider::Bus1, track->bus1 * 255 * 2.55); + emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55); }; diff --git a/src/showplayer.h b/src/showplayer.h index 4184a19..977b0f4 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -8,9 +8,7 @@ #include #include "defines.h" -#include "cuetrackwidget.h" #include "cuetracklistwidget.h" -#include "trackdialog.h" #include "settings.h" #include "ui_showplayer.h" @@ -32,7 +30,7 @@ private: size_t filesLoaded = 0; int layersUsed[MAX_LAYERS]; - void updateTrackStateInEngine(CueTrackWidget *track); + void updateTrackStateInEngine(CueTrack *track); private slots: void onAddTrack(); diff --git a/src/showplayer.ui b/src/showplayer.ui index 8c98050..26f0c94 100644 --- a/src/showplayer.ui +++ b/src/showplayer.ui @@ -6,8 +6,8 @@ 0 0 - 276 - 112 + 538 + 554 @@ -22,6 +22,12 @@ + + + 0 + 0 + + Qt::Vertical diff --git a/src/trackdialog.cpp b/src/trackdialog.cpp deleted file mode 100644 index 45517ae..0000000 --- a/src/trackdialog.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "trackdialog.h" -#include "settings.h" - -TrackDialog::TrackDialog(QWidget *parent) : QDialog(parent) { - setupUi(); - connectSignals(); -} - -void TrackDialog::setupUi() { - okButton = new QPushButton(tr("OK"), this); - cancelButton = new QPushButton(tr("Cancelar"), this); - browseButton = new QPushButton(tr("Buscar..."), this); - - QFormLayout *layout = new QFormLayout(this); - //track = new CueTrackWidget(); - //track->editButtonClicked(); -/* layout->addRow(tr("&User number"), track->userNumberSpin); - layout->addRow(tr("&Name"), track->nameEdit); - layout->addRow(tr("&Description"), track->descriptionEdit); - layout->addRow(tr("&File"), track->filePathEdit); - layout->addRow(tr("&Status"), track->statusCombo); - layout->addRow(tr("&Fade in"), track->fadeInSpin); - layout->addRow(tr("Fade &Out"), track->fadeOutSpin); - layout->addRow(tr("&Wait In"), track->waitInSpin); - layout->addRow(tr("&Wait Ou&t"), track->waitOutSpin); - layout->addRow(tr("Sto&p at end"), track->stopAtEndCheck); - layout->addRow(tr("&Volume"), track->volumeSpin); - layout->addRow(tr("pan"), track->panSpin); - layout->addRow(tr("pitch"), track->pitchSpin); - layout->addRow(tr("Bus&1"), track->bus1Spin); - layout->addRow(tr("Bus&2"), track->bus2Spin); - layout->addRow(tr("&Entry Point"), track->entryPointSpin); - layout->addRow(tr("E&xit Point"), track->exitPointSpin);*/ - //layout->addRow(tr("&Browse files"), browseButton); - //layout->addWidget(track); - layout->addWidget(okButton); - layout->addWidget(cancelButton); - setLayout(layout); -} - -void TrackDialog::connectSignals() { - connect(okButton, &QPushButton::clicked, this, &TrackDialog::accept); - connect(cancelButton, &QPushButton::clicked, this, &TrackDialog::reject); - //connect(browseButton, &QPushButton::clicked, this, &TrackDialog::browseFiles); -} - -QString TrackDialog::browseFiles() const { - QString filePath = QFileDialog::getOpenFileName( - const_cast(this), - tr("Select File"), - Settings::getInstance()->getPathMedia(), - tr("Archivos de audio (*.mp3 *.wav *.flac);;Todos los archivos (*)") - ); - if (!filePath.isEmpty()) { - track->setFilePath(filePath); - QDir dir; - Settings::getInstance()->setPathMedia(dir.absoluteFilePath(filePath)); - } - return filePath; -} diff --git a/src/trackdialog.h b/src/trackdialog.h deleted file mode 100644 index 58418c2..0000000 --- a/src/trackdialog.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef TRACKDIALOG_H -#define TRACKDIALOG_H - -#include -#include -#include -#include -#include - -#include "defines.h" -#include "cuetrackwidget.h" - -class TrackDialog : public QDialog { - Q_OBJECT - -public: - CueTrackWidget *track; - - explicit TrackDialog(QWidget *parent = nullptr); - -private: - QPushButton *okButton; - QPushButton *cancelButton; - QPushButton *browseButton; - - void setupUi(); - void connectSignals(); - -private slots: - QString browseFiles() const; - -}; - -#endif