diff --git a/src/cuetracklistwidget.cpp b/src/cuetracklistwidget.cpp index 4397239..22ecbbd 100644 --- a/src/cuetracklistwidget.cpp +++ b/src/cuetracklistwidget.cpp @@ -145,15 +145,20 @@ void CueTrackListWidget::createNewCueTrack() CueTrack *t = new CueTrack; cueTrackLoadDefaults(t); EditCueTrackWidget dialog(t, this); - if (dialog.exec() == QDialog::Accepted) + if (dialog.exec() == QDialog::Accepted) { + t->active = false; addCueTrack(t); - if (m_size == 1) - { - updateSelectedCueTrack(true); - emit changeSelectedIndex(0); + if (m_size == 1) + { + updateSelectedCueTrack(true); + emit changeSelectedIndex(0); + } else + redrawCueTrackList(); + if (lastUserCueNumber < t->userNumber) + lastUserCueNumber = t->userNumber + 10; } else - redrawCueTrackList(); - } + delete (t); +} void CueTrackListWidget::editCueTrack() { @@ -164,6 +169,8 @@ void CueTrackListWidget::editCueTrack() redrawCueTrackList(); emit changeSelectedIndex(selectedIndex); } + if (lastUserCueNumber < current->userNumber) + lastUserCueNumber = current->userNumber + 10; } void CueTrackListWidget::deleteCueTrack() @@ -223,7 +230,7 @@ void CueTrackListWidget::redrawCueTrackList() int selected = cueTracks.at(selectedIndex)->userNumber; clearTableWidget(); tableWidget->setColumnCount(7); - QStringList headers = {"Active", "Number","Audio Channel", "Name", "Volume", "Status", "File"}; + QStringList headers = {"Active", "Number","Channel", "Name", "Volume", "Status", "File"}; tableWidget->setHorizontalHeaderLabels(headers); sortCueTrackList(); selectedIndex = 0; @@ -309,7 +316,12 @@ void CueTrackListWidget::loadCueTrackList(std::string filename) t->waitOut = xmlReader.text().toInt(); } else if (elementName == "stopAtEnd") { - t->stopAtEnd = xmlReader.text().toString().toLower() == "true"; + QString tmp = xmlReader.text().toString().toLower(); + if (tmp.compare("true")) + t->stopAtEnd = true; + else { + t->stopAtEnd = false; + } } else if (elementName == "name") { t->name = xmlReader.text().toString().toStdString(); @@ -329,9 +341,7 @@ void CueTrackListWidget::loadCueTrackList(std::string filename) else if (elementName == "audioLayer") { t->audioLayer = xmlReader.text().toInt(); } - else if (elementName == "active") { - t->active = xmlReader.text().toString().toLower() == "true"; - } + t->active = false; } } xmlReader.readNext(); @@ -393,9 +403,6 @@ std::string CueTrackListWidget::cueTrackToXml(const CueTrack& cueTrack) xml += " " + std::to_string(cueTrack.entryPoint) + "\n"; xml += " " + std::to_string(cueTrack.exitPoint) + "\n"; xml += " " + std::to_string(cueTrack.audioLayer) + "\n"; - xml += " "; - xml += (cueTrack.active ? "true" : "false"); - xml += "\n"; xml += " \n"; return xml; } @@ -528,3 +535,17 @@ void CueTrackListWidget::clearTableWidget() tableWidget->clear(); tableWidget->setRowCount(0); } + +void CueTrackListWidget::cueTrackAtEnd(int layer) +{ + for (int i = 0; i < m_size; i++) + { + CueTrack * cur = cueTracks.at(i); + if (cur->audioLayer == layer) + { + cur->active = false; + } + layer--; + } + redrawCueTrackList(); +} diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index fa7b685..b8e2527 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -31,6 +31,8 @@ public slots: void clearCueTrackList(); void setLastUserCueNumber(size_t n) { lastUserCueNumber = n; } size_t getLastUserCueNumber() { return lastUserCueNumber; } + void cueTrackAtEnd(int layer); + void redrawCueTrackList(); private: std::vector cueTracks; @@ -39,7 +41,7 @@ private: int m_size = 0; int size() { return m_size; } int selectedIndex = 0; - size_t lastUserCueNumber = 0; + int lastUserCueNumber = 0; private slots: void addCueTrack(CueTrack* cue); @@ -52,7 +54,6 @@ private slots: void cueTrackLoadDefaults(CueTrack * t); void copyCueTrack(CueTrack *src, CueTrack *dst); void sortCueTrackList(); - void redrawCueTrackList(); void clearTableWidget(); std::string cueTrackToXml(const CueTrack& cueTrack); diff --git a/src/defines.h b/src/defines.h index 59375fc..9317a59 100644 --- a/src/defines.h +++ b/src/defines.h @@ -65,7 +65,7 @@ constexpr const char* statusToString(Status e) noexcept #include static Status stringToStatus(QString *statusStr) { - if (!statusStr->compare("Stopped")) return Stopped; + if (!statusStr->compare("Stop")) return Stopped; else if (!statusStr->compare("Paused") ) return Paused; else if (!statusStr->compare("Play 1")) return PlayingOnce; else if (!statusStr->compare("Play Loop")) return PlayingLoop; diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index 1a1b6eb..f86495d 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -139,8 +139,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value) #ifndef NOGUI if (m_ui) { m_lmsUi->m_aw->filterParamChanged(layer, channel, value); - m_played.clear(); - m_played.append(m_ola->getValue(layer, DMX_FILE)); } #endif } @@ -175,11 +173,13 @@ void libreMediaServerAudio::refreshUi() { if (m_currentStatus[i] == Status::PlayingOnce) { m_currentStatus[i] = Status::Stopped; m_lmsUi->m_aw->playbackChanged(i, Status::Stopped); + m_lmsUi->m_showPlayer->cueTrackAtEnd(i); } if (m_currentStatus[i] == Status::PlayingFolder) { - uint last = m_played.last(); + uint last = 0; + if (!m_played.isEmpty()) + last = m_played.last() + 1; int folder = m_ola->getValue(i, DMX_FOLDER); - last++; if (last < m_mediaLibrary->getMediaFolderCount(folder)) { this->loadMedia(i, folder, last); m_mae.playbackChanged(i, Status::PlayingFolder); @@ -187,6 +187,7 @@ void libreMediaServerAudio::refreshUi() { else { m_currentStatus[i] = Status::Stopped; m_lmsUi->m_aw->playbackChanged(i, Status::Stopped); + m_lmsUi->m_showPlayer->cueTrackAtEnd(i); } } else if (m_currentStatus[i] == Status::PlayingFolderLoop) { diff --git a/src/showplayer.cpp b/src/showplayer.cpp index 3b877df..5b8d11c 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -44,6 +44,18 @@ void ShowPlayer::go() emit uiLoadMedia(current->audioLayer, current->filePath.data()); updateTrackStateInEngine(current); emit uiPlaybackChanged(current->audioLayer, current->status); + switch (current->status) { + case Status::PlayingOnce: + case Status::PlayingLoop: + case Status::PlayingFolder: + case Status::PlayingFolderLoop: + case Status::PlayingFolderRandom: + current->active = true; + break; + default: + current->active = false; + } + ui->cueListWidget->redrawCueTrackList(); filesLoaded++; } @@ -78,3 +90,8 @@ void ShowPlayer::saveCueTrackList() return; ui->cueListWidget->saveCueTrackList(fileName.toStdString()); } + +void ShowPlayer::cueTrackAtEnd(int layer) +{ + ui->cueListWidget->cueTrackAtEnd(layer); +} diff --git a/src/showplayer.h b/src/showplayer.h index 7abec4c..43c3788 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -24,6 +24,9 @@ public: explicit ShowPlayer(QWidget *parent = nullptr); ~ShowPlayer(); +public slots: + void cueTrackAtEnd(int layer); + private: Ui::ShowPlayer *ui; Status currentStatus = Status::Iddle; @@ -31,9 +34,8 @@ private: int layersUsed[MAX_LAYERS]; int lastIndex = 0; - void updateTrackStateInEngine(CueTrack *track); - private slots: + void updateTrackStateInEngine(CueTrack *track); void onAddTrack(); void go(); void changeSelectedIndex(int i); diff --git a/src/showplayer.ui b/src/showplayer.ui index b862342..6b07d30 100644 --- a/src/showplayer.ui +++ b/src/showplayer.ui @@ -134,7 +134,7 @@ 0 - QLayout::SetMinimumSize + QLayout::SetDefaultConstraint 100