From 333d7c7b49f5acbf813fb1be4055d54e7ead1cd4 Mon Sep 17 00:00:00 2001 From: snt Date: Tue, 18 Jun 2024 14:58:23 +0200 Subject: [PATCH] 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