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