diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 41955a6..3e68214 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -2,8 +2,8 @@ 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 \ src/clickabledoublespinbox.h \ src/clickablelabel.h \ @@ -23,9 +23,10 @@ HEADERS += src/libremediaserver-audio.h \ src/audiowidget.h \ src/defines.h \ src/settings.h \ - src/slidergroup.h + src/slidergroup.h \ + src/trackdialog.h SOURCES += src/main.cpp \ - src/editcuetrackwidget.cpp \ + src/cuetrackwidget.cpp \ src/showplayer.cpp \ src/clickabledoublespinbox.cpp \ src/clickablelabel.cpp \ @@ -42,7 +43,8 @@ SOURCES += src/main.cpp \ src/audiolayerwidget.cpp \ src/audiowidget.cpp \ src/settings.cpp \ - src/slidergroup.cpp + src/slidergroup.cpp \ + src/trackdialog.cpp FORMS += \ src/showplayer.ui \ src/libremediaserver-audio-ui.ui @@ -57,6 +59,3 @@ 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 576df5c..9b6ecf7 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(64); + tmp.truncate(60); m_folderValue->setText(tmp); tmp = list.at(size - 1); - tmp.truncate(64); + tmp.truncate(40); m_fileValue->setText(tmp); } } diff --git a/src/clickabledoublespinbox.cpp b/src/clickabledoublespinbox.cpp index 9ec04f4..76feb8b 100644 --- a/src/clickabledoublespinbox.cpp +++ b/src/clickabledoublespinbox.cpp @@ -5,5 +5,13 @@ 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 ff668fb..81bcb76 100644 --- a/src/clickabledoublespinbox.h +++ b/src/clickabledoublespinbox.h @@ -10,20 +10,11 @@ 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 af17160..d3b1727 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -1,46 +1,94 @@ #ifndef CUETRACKLISTWIDGET_H #define CUETRACKLISTWIDGET_H -#include #include #include #include #include #include -#include -#include -#include -#include "defines.h" -#include "editcuetrackwidget.h" + +#include "cuetrackwidget.h" class CueTrackListWidget : public QWidget { Q_OBJECT - public: - explicit CueTrackListWidget(QWidget *parent = nullptr); - CueTrack* getSelectedTrack(); - void createNewCueTrack(); - void editCueTrack(); - void deleteCueTrack(); + 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); + 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; + } private: - std::vector cueTracks; + QScrollArea* scrollArea; + QWidget* containerWidget; QVBoxLayout* layout; - QTableWidget* tableWidget; - int m_size = 0; - int size() { return m_size; } - int selectedIndex = 0; - size_t lastUserCueNumber = 0; private slots: - 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); + void key_up() { + if (m_size > 0 && selectedIndex > 0) { + getTrackAtIndex(selectedIndex)->highlight(false); + selectedIndex--; + getTrackAtIndex(selectedIndex)->highlight(true); + } + } + + void key_down() { + if (selectedIndex < m_size - 1 && m_size > 0) { + getTrackAtIndex(selectedIndex)->highlight(false); + selectedIndex++; + getTrackAtIndex(selectedIndex)->highlight(true); + } + } + }; #endif diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp new file mode 100644 index 0000000..90e6832 --- /dev/null +++ b/src/cuetrackwidget.cpp @@ -0,0 +1,178 @@ +#include "cuetrackwidget.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, 1000); + userNumberSpin->setToolTip("Cue user number"); + row->addWidget(userNumberSpin); + + 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->setToolTip("Volume"); + volumeSpin->setValue(100); + row->addWidget(volumeSpin); + + bus1Spin = new QSpinBox(this); + bus1Spin->setRange(0, 255); + bus1Spin->setToolTip("Bus 1"); + bus1Spin->setValue(255); + row->addWidget(bus1Spin); + + bus2Spin = new QSpinBox(this); + bus2Spin->setRange(0, 255); + bus2Spin->setToolTip("Bus 2"); + bus2Spin->setValue(255); + row->addWidget(bus2Spin); + + panSpin = new QSpinBox(this); + panSpin->setRange(0, 255); + panSpin->setToolTip("Pan"); + panSpin->setValue(128); + row->addWidget(panSpin); + + pitchSpin = new QSpinBox(this); + pitchSpin->setRange(0, 255); + pitchSpin->setToolTip("Pitch"); + pitchSpin->setValue(128); + row->addWidget(pitchSpin); + + 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); + 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); + + layout->addWidget(row); + + setLayout(layout); +} + +QWidget *CueTrackWidget::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; +} + +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); +} + +CueTrack CueTrackWidget::saveCueTrack() const { + CueTrack cueTrack; + cueTrack.filePath = filePathEdit->text().toStdString(); + cueTrack.volume = volumeSpin->value(); + // Guarda el resto de los campos aquĆ­... + + cueTrack.status = static_cast(statusCombo->currentData().toInt()); + return cueTrack; +} diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h new file mode 100644 index 0000000..b7ddd5c --- /dev/null +++ b/src/cuetrackwidget.h @@ -0,0 +1,72 @@ +#ifndef CUETRACKWIDGET_H +#define CUETRACKWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include "defines.h" + +class CueTrackWidget : public QWidget { + Q_OBJECT + +public: + explicit CueTrackWidget(QWidget *parent = nullptr); + + CueTrack saveCueTrack() const; + QWidget *createHeader(); + int audioLayer = 0; + + 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(); } + 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 highlight(bool highlight) { + if (highlight) + this->setStyleSheet("background-color: yellow;"); + else + this->setStyleSheet("background-color: white;"); + } + +private: + QCheckBox* active; + QLineEdit* filePathEdit; + QSpinBox* volumeSpin; + QSpinBox* panSpin; + QSpinBox* pitchSpin; + QSpinBox* bus1Spin; + QSpinBox* bus2Spin; + QComboBox* statusCombo; + QSpinBox* fadeOutSpin; + QSpinBox* fadeInSpin; + QSpinBox* waitInSpin; + QSpinBox* waitOutSpin; + QCheckBox* stopAtEndCheck; + QLineEdit* nameEdit; + QLineEdit* descriptionEdit; + QSpinBox* userNumberSpin; + QSpinBox* entryPointSpin; + QSpinBox* exitPointSpin; + + void setupUi(); + void setupStatusCombo(); +}; + +#endif // CUETRACKWIDGET_H diff --git a/src/defines.h b/src/defines.h index 1209bcb..64c9eba 100644 --- a/src/defines.h +++ b/src/defines.h @@ -112,7 +112,6 @@ 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 deleted file mode 100644 index 54547fb..0000000 --- a/src/editcuetrackwidget.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#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 deleted file mode 100644 index 080561e..0000000 --- a/src/editcuetrackwidget.h +++ /dev/null @@ -1,54 +0,0 @@ -#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/filterbankwidget.cpp b/src/filterbankwidget.cpp index c948411..098e591 100644 --- a/src/filterbankwidget.cpp +++ b/src/filterbankwidget.cpp @@ -47,14 +47,6 @@ 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/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index 1a40036..0a88b2a 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -23,7 +23,7 @@ libreMediaServerAudio::libreMediaServerAudio() { - m_settings = Settings::getInstance(this); + m_settings = Settings::getInstance(); m_settings->readFile(); m_ui = m_settings->getShowUi(); m_layersQty = m_settings->getLayersNumber(); @@ -280,9 +280,7 @@ void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile) { ma_result result; - if (mediaFile.isEmpty()) - return ; - if (mediaFile.compare(m_currentMedia[layer]) == 0) + if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0) return; result = m_mae.loadMedia(layer, mediaFile.toLatin1().data()); if (result == MA_SUCCESS) { diff --git a/src/main.cpp b/src/main.cpp index 5cea13f..79b7a91 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,12 +31,8 @@ bool hasUi(int &argc, char *argv[]) int main(int argc, char *argv[]) { - QApplication app(argc, argv); - libreMediaServerAudio lms; - app.setApplicationName("LibreMediaServerAudio"); - app.setOrganizationName("Criptomart"); - app.setOrganizationDomain("Criptomart.net"); - app.setApplicationVersion(VERSION); + QApplication app(argc, argv); + libreMediaServerAudio lms; #ifndef NOGUI if (hasUi(argc, argv) || lms.getShowUi()) { diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp index 0e54927..5d37356 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 = MA_FALSE; + m_mae.currentStatus[i].updated = false; } result = this->startContext(); if (result != MA_SUCCESS) return false; @@ -351,8 +351,6 @@ 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; @@ -374,7 +372,7 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file) return result; } m_mae.currentStatus[layer].media = file; - m_mae.currentStatus[layer].updated = MA_TRUE; + m_mae.currentStatus[layer].updated = true; m_mae.mediaLoaded[layer] = MA_TRUE; this->refreshValues(layer); return result; @@ -436,8 +434,6 @@ 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; @@ -453,7 +449,7 @@ void MiniAudioEngine::panChanged(int layer, float value) float result; m_mae.currentStatus[layer].pan = value; - if (m_mae.mediaLoaded[layer] != MA_TRUE) + if (m_mae.mediaLoaded[layer] == false) return; result = (value / 128.0) - 1.0; ma_sound_group_set_pan(&m_mae.sounds[layer], result); @@ -464,7 +460,7 @@ void MiniAudioEngine::pitchChanged(int layer, float value) float pitch; m_mae.currentStatus[layer].pitch = value; - if (m_mae.mediaLoaded[layer] != MA_TRUE) + if (m_mae.mediaLoaded[layer] == false) return; pitch = value / 128.0; ma_sound_group_set_pitch(&m_mae.sounds[layer], pitch); @@ -477,7 +473,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status) bool loop = false; m_mae.currentStatus[layer].status = status; - if (m_mae.mediaLoaded[layer] != MA_TRUE) + if (m_mae.mediaLoaded[layer] == MA_FALSE) return MA_DOES_NOT_EXIST; m_mae.currentStatus[layer].updated = false; switch (status) { diff --git a/src/settings.cpp b/src/settings.cpp index 2c8361f..6527bcb 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2,82 +2,20 @@ Settings *Settings::_instance = 0; -Settings *Settings::getInstance(QObject *parent) { +Settings *Settings::getInstance() { if (_instance == 0) { - _instance = new Settings(parent); + _instance = new Settings(); Q_CHECK_PTR(_instance); } return _instance; } Settings::Settings(QObject *parent) : - QSettings{parent} + QObject(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 8f57f0c..6e51d14 100644 --- a/src/settings.h +++ b/src/settings.h @@ -6,23 +6,20 @@ #include #include #include -#include #include "medialibrary.h" #include "audiowidget.h" #include "defines.h" -class Settings : public QSettings +class Settings : public QObject { Q_OBJECT public: - Settings(QObject *parent = nullptr); - ~Settings(); - static Settings *getInstance(QObject *parent = nullptr); + Settings(QObject *parent = 0); + static Settings *getInstance(); 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; } @@ -31,8 +28,6 @@ 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 c9108f4..6f65f8a 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -1,5 +1,47 @@ #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) @@ -8,42 +50,37 @@ 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; filesLoaded = 0; currentStatus = Status::Iddle; - for(int i = 0; i < MAX_LAYERS; i++) - layersUsed[i] = -1; } ShowPlayer::~ShowPlayer() {} void ShowPlayer::onAddTrack() { - ui->cueListWidget->createNewCueTrack(); + TrackDialog dialog; + dialog.show(); + if (dialog.exec() == QDialog::Accepted) { + ui->cueListWidget->addCueTrackWidget(dialog.track); + } } void ShowPlayer::go() { - CueTrack* current = ui->cueListWidget->getSelectedTrack(); + CueTrackWidget* current = ui->cueListWidget->getSelectedTrack(); if (!current) return; - if (current->audioLayer < 0) - return; for (int i = 0; i < MAX_LAYERS; i++) { - if (layersUsed[i] == -1) { - layersUsed[i] = current->userNumber; - break; - } - } - if (!current->filePath.empty()) - emit uiLoadMedia(current->audioLayer, current->filePath.data()); - updateTrackStateInEngine(current); - emit uiPlaybackChanged(current->audioLayer, current->status); + 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()); filesLoaded++; } - -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 977b0f4..b5e1175 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -5,11 +5,11 @@ #include #include -#include #include "defines.h" +#include "cuetrackwidget.h" #include "cuetracklistwidget.h" -#include "settings.h" +#include "trackdialog.h" #include "ui_showplayer.h" namespace Ui { @@ -26,11 +26,21 @@ public: private: Ui::ShowPlayer *ui; + size_t currentTrackIndex; Status currentStatus = Status::Iddle; size_t filesLoaded = 0; - int layersUsed[MAX_LAYERS]; + int layersUsed[MAX_LAYERS] = { -1 }; - void updateTrackStateInEngine(CueTrack *track); + QWidget *createHeader(); + + 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()); + }; private slots: void onAddTrack(); diff --git a/src/showplayer.ui b/src/showplayer.ui index 26f0c94..d27f83e 100644 --- a/src/showplayer.ui +++ b/src/showplayer.ui @@ -6,8 +6,8 @@ 0 0 - 538 - 554 + 276 + 112 @@ -22,12 +22,6 @@ - - - 0 - 0 - - Qt::Vertical @@ -123,6 +117,16 @@ + + + + 1 + + + QLayout::SetMaximumSize + + + true