Compare commits
7 commits
d9e755cd32
...
d35b166ce5
Author | SHA1 | Date | |
---|---|---|---|
|
d35b166ce5 | ||
|
14a51c88e9 | ||
|
307d9c4d43 | ||
|
e39d885f6f | ||
|
6056778856 | ||
|
0795157d5f | ||
|
86e866c996 |
|
@ -2,6 +2,7 @@ TEMPLATE = app
|
||||||
TARGET = libremediaserver-audio
|
TARGET = libremediaserver-audio
|
||||||
QT += webkitwidgets widgets
|
QT += webkitwidgets widgets
|
||||||
HEADERS += src/libremediaserver-audio.h \
|
HEADERS += src/libremediaserver-audio.h \
|
||||||
|
src/cuetrackwidget.h \
|
||||||
src/editcuetrackwidget.h \
|
src/editcuetrackwidget.h \
|
||||||
src/cuetracklistwidget.h \
|
src/cuetracklistwidget.h \
|
||||||
src/showplayer.h \
|
src/showplayer.h \
|
||||||
|
@ -23,8 +24,10 @@ HEADERS += src/libremediaserver-audio.h \
|
||||||
src/audiowidget.h \
|
src/audiowidget.h \
|
||||||
src/defines.h \
|
src/defines.h \
|
||||||
src/settings.h \
|
src/settings.h \
|
||||||
src/slidergroup.h
|
src/slidergroup.h \
|
||||||
|
src/dialgroup.h
|
||||||
SOURCES += src/main.cpp \
|
SOURCES += src/main.cpp \
|
||||||
|
src/cuetrackwidget.cpp \
|
||||||
src/editcuetrackwidget.cpp \
|
src/editcuetrackwidget.cpp \
|
||||||
src/cuetracklistwidget.cpp \
|
src/cuetracklistwidget.cpp \
|
||||||
src/showplayer.cpp \
|
src/showplayer.cpp \
|
||||||
|
@ -43,8 +46,10 @@ SOURCES += src/main.cpp \
|
||||||
src/audiolayerwidget.cpp \
|
src/audiolayerwidget.cpp \
|
||||||
src/audiowidget.cpp \
|
src/audiowidget.cpp \
|
||||||
src/settings.cpp \
|
src/settings.cpp \
|
||||||
src/slidergroup.cpp
|
src/slidergroup.cpp \
|
||||||
|
src/dialgroup.cpp
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
src/cuetrackwidget.ui \
|
||||||
src/showplayer.ui \
|
src/showplayer.ui \
|
||||||
src/libremediaserver-audio-ui.ui
|
src/libremediaserver-audio-ui.ui
|
||||||
CCFLAG += -msse2 -mavx2
|
CCFLAG += -msse2 -mavx2
|
||||||
|
@ -58,3 +63,5 @@ OTHER_FILES += \
|
||||||
docs/changelog.txt \
|
docs/changelog.txt \
|
||||||
docs/lms-audio.xlm \
|
docs/lms-audio.xlm \
|
||||||
docs/roadmap.txt
|
docs/roadmap.txt
|
||||||
|
RESOURCES += \
|
||||||
|
lms-resources.qrc
|
||||||
|
|
15
lms-resources.qrc
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/buttons">
|
||||||
|
<file>resources/copy_button.png</file>
|
||||||
|
<file>resources/cut_button.png</file>
|
||||||
|
<file>resources/delete_button.png</file>
|
||||||
|
<file>resources/edit_button.png</file>
|
||||||
|
<file>resources/load_button.png</file>
|
||||||
|
<file>resources/new_button.png</file>
|
||||||
|
<file>resources/paste_button.png</file>
|
||||||
|
<file>resources/save_button.png</file>
|
||||||
|
<file>resources/icon.png</file>
|
||||||
|
<file>resources/panic_button.jpg</file>
|
||||||
|
<file>resources/go_button.jpeg</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
BIN
resources/copy_button.png
Normal file
After Width: | Height: | Size: 871 B |
BIN
resources/cut_button.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
resources/delete_button.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
resources/edit_button.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
resources/load_button.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
resources/new_button.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
resources/paste_button.png
Normal file
After Width: | Height: | Size: 1 KiB |
BIN
resources/save_button.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
|
@ -1,4 +1,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
@ -7,6 +10,8 @@
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QTableWidget>
|
#include <QTableWidget>
|
||||||
#include <QTableWidgetItem>
|
#include <QTableWidgetItem>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QXmlStreamReader>
|
||||||
#include "cuetracklistwidget.h"
|
#include "cuetracklistwidget.h"
|
||||||
|
|
||||||
CueTrackListWidget::CueTrackListWidget(QWidget *parent)
|
CueTrackListWidget::CueTrackListWidget(QWidget *parent)
|
||||||
|
@ -42,9 +47,10 @@ CueTrack* CueTrackListWidget::getTrackAtIndex(int index) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
CueTrack* CueTrackListWidget::getSelectedTrack() {
|
CueTrack* CueTrackListWidget::getSelectedTrack(bool advance) {
|
||||||
CueTrack* track = getTrackAtIndex(selectedIndex);
|
CueTrack* track = getTrackAtIndex(selectedIndex);
|
||||||
key_down();
|
if (advance)
|
||||||
|
key_down();
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,23 +127,25 @@ void CueTrackListWidget::updateSelectedCueTrack(bool highlightRow) {
|
||||||
void CueTrackListWidget::cueTrackLoadDefaults(CueTrack * t)
|
void CueTrackListWidget::cueTrackLoadDefaults(CueTrack * t)
|
||||||
{
|
{
|
||||||
t->active = false;
|
t->active = false;
|
||||||
t->audioLayer = -1;
|
t->audioLayer = 0;
|
||||||
t->bus1 = 80;
|
t->bus1 = 100;
|
||||||
t->bus2 = 80;
|
t->bus2 = 100;
|
||||||
t->entryPoint = 0;
|
t->entryPoint = 0;
|
||||||
t->exitPoint = 255;
|
t->exitPoint = 255;
|
||||||
t->fadeIn = 3;
|
t->fadeIn = 2;
|
||||||
t->fadeOut = 3;
|
t->fadeOut = 2;
|
||||||
t->waitIn = 0;
|
t->waitIn = 0;
|
||||||
t->waitOut = 0;
|
t->waitOut = 0;
|
||||||
t->pan = 0;
|
t->pan = 0;
|
||||||
t->pitch = 1;
|
t->pitch = 1;
|
||||||
t->status = Status::PlayingOnce;
|
t->status = Status::PlayingOnce;
|
||||||
|
lastUserCueNumber += 10;
|
||||||
t->userNumber = lastUserCueNumber;
|
t->userNumber = lastUserCueNumber;
|
||||||
lastUserCueNumber++;
|
|
||||||
t->volume = 80;
|
t->volume = 80;
|
||||||
t->stopAtEnd = true;
|
t->stopAtEnd = true;
|
||||||
t->filePath = "";
|
t->filePath = "";
|
||||||
|
t->duration = 0;
|
||||||
|
t->multi = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CueTrackListWidget::createNewCueTrack()
|
void CueTrackListWidget::createNewCueTrack()
|
||||||
|
@ -145,15 +153,20 @@ void CueTrackListWidget::createNewCueTrack()
|
||||||
CueTrack *t = new CueTrack;
|
CueTrack *t = new CueTrack;
|
||||||
cueTrackLoadDefaults(t);
|
cueTrackLoadDefaults(t);
|
||||||
EditCueTrackWidget dialog(t, this);
|
EditCueTrackWidget dialog(t, this);
|
||||||
if (dialog.exec() == QDialog::Accepted)
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
|
t->active = false;
|
||||||
addCueTrack(t);
|
addCueTrack(t);
|
||||||
if (m_size == 1)
|
if (m_size == 1)
|
||||||
{
|
{
|
||||||
updateSelectedCueTrack(true);
|
updateSelectedCueTrack(true);
|
||||||
emit changeSelectedIndex(0);
|
emit changeSelectedIndex(0);
|
||||||
|
} else
|
||||||
|
redrawCueTrackList();
|
||||||
|
if (lastUserCueNumber < t->userNumber)
|
||||||
|
lastUserCueNumber = t->userNumber;
|
||||||
} else
|
} else
|
||||||
redrawCueTrackList();
|
delete (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CueTrackListWidget::editCueTrack()
|
void CueTrackListWidget::editCueTrack()
|
||||||
{
|
{
|
||||||
|
@ -164,6 +177,8 @@ void CueTrackListWidget::editCueTrack()
|
||||||
redrawCueTrackList();
|
redrawCueTrackList();
|
||||||
emit changeSelectedIndex(selectedIndex);
|
emit changeSelectedIndex(selectedIndex);
|
||||||
}
|
}
|
||||||
|
if (lastUserCueNumber < current->userNumber)
|
||||||
|
lastUserCueNumber = current->userNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CueTrackListWidget::deleteCueTrack()
|
void CueTrackListWidget::deleteCueTrack()
|
||||||
|
@ -198,6 +213,8 @@ void CueTrackListWidget::copyCueTrack(CueTrack *src, CueTrack *dst)
|
||||||
dst->name = src->name;
|
dst->name = src->name;
|
||||||
dst->description = src->description;
|
dst->description = src->description;
|
||||||
dst->filePath = src->filePath;
|
dst->filePath = src->filePath;
|
||||||
|
dst->duration = src->duration;
|
||||||
|
dst->multi = src->multi;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString *CueTrackListWidget::getFileName(std::string s)
|
QString *CueTrackListWidget::getFileName(std::string s)
|
||||||
|
@ -223,7 +240,7 @@ void CueTrackListWidget::redrawCueTrackList()
|
||||||
int selected = cueTracks.at(selectedIndex)->userNumber;
|
int selected = cueTracks.at(selectedIndex)->userNumber;
|
||||||
clearTableWidget();
|
clearTableWidget();
|
||||||
tableWidget->setColumnCount(7);
|
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);
|
tableWidget->setHorizontalHeaderLabels(headers);
|
||||||
sortCueTrackList();
|
sortCueTrackList();
|
||||||
selectedIndex = 0;
|
selectedIndex = 0;
|
||||||
|
@ -241,13 +258,9 @@ void CueTrackListWidget::redrawCueTrackList()
|
||||||
tableWidget->resizeRowsToContents();
|
tableWidget->resizeRowsToContents();
|
||||||
tableWidget->scrollToItem(tableWidget->item(selectedIndex, 0));
|
tableWidget->scrollToItem(tableWidget->item(selectedIndex, 0));
|
||||||
tableWidget->blockSignals(false);
|
tableWidget->blockSignals(false);
|
||||||
|
emit changeSelectedIndex(selectedIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QFile>
|
|
||||||
#include <QXmlStreamReader>
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
void CueTrackListWidget::loadCueTrackList(std::string filename)
|
void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
{
|
{
|
||||||
QFile file(QString::fromStdString(filename));
|
QFile file(QString::fromStdString(filename));
|
||||||
|
@ -258,6 +271,7 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
}
|
}
|
||||||
QXmlStreamReader xmlReader(&file);
|
QXmlStreamReader xmlReader(&file);
|
||||||
clearCueTrackList();
|
clearCueTrackList();
|
||||||
|
lastUserCueNumber = 0;
|
||||||
while (!xmlReader.atEnd() && !xmlReader.hasError())
|
while (!xmlReader.atEnd() && !xmlReader.hasError())
|
||||||
{
|
{
|
||||||
QXmlStreamReader::TokenType token = xmlReader.readNext();
|
QXmlStreamReader::TokenType token = xmlReader.readNext();
|
||||||
|
@ -309,7 +323,12 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
t->waitOut = xmlReader.text().toInt();
|
t->waitOut = xmlReader.text().toInt();
|
||||||
}
|
}
|
||||||
else if (elementName == "stopAtEnd") {
|
else if (elementName == "stopAtEnd") {
|
||||||
t->stopAtEnd = xmlReader.text().toString().toLower() == "true";
|
QString tmp = xmlReader.text().toString().toLower();
|
||||||
|
if (tmp.compare("false"))
|
||||||
|
t->stopAtEnd = true;
|
||||||
|
else {
|
||||||
|
t->stopAtEnd = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (elementName == "name") {
|
else if (elementName == "name") {
|
||||||
t->name = xmlReader.text().toString().toStdString();
|
t->name = xmlReader.text().toString().toStdString();
|
||||||
|
@ -319,6 +338,10 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
}
|
}
|
||||||
else if (elementName == "userNumber") {
|
else if (elementName == "userNumber") {
|
||||||
t->userNumber = xmlReader.text().toInt();
|
t->userNumber = xmlReader.text().toInt();
|
||||||
|
if (t->userNumber > lastUserCueNumber)
|
||||||
|
{
|
||||||
|
lastUserCueNumber = t->userNumber;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (elementName == "entryPoint") {
|
else if (elementName == "entryPoint") {
|
||||||
t->entryPoint = xmlReader.text().toInt();
|
t->entryPoint = xmlReader.text().toInt();
|
||||||
|
@ -329,9 +352,18 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
else if (elementName == "audioLayer") {
|
else if (elementName == "audioLayer") {
|
||||||
t->audioLayer = xmlReader.text().toInt();
|
t->audioLayer = xmlReader.text().toInt();
|
||||||
}
|
}
|
||||||
else if (elementName == "active") {
|
else if (elementName == "duration") {
|
||||||
t->active = xmlReader.text().toString().toLower() == "true";
|
t->duration = xmlReader.text().toInt();
|
||||||
}
|
}
|
||||||
|
else if (elementName == "multi") {
|
||||||
|
QString tmp = xmlReader.text().toString().toLower();
|
||||||
|
if (tmp.compare("false"))
|
||||||
|
t->multi = true;
|
||||||
|
else {
|
||||||
|
t->multi = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t->active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xmlReader.readNext();
|
xmlReader.readNext();
|
||||||
|
@ -348,9 +380,6 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||||
redrawCueTrackList();
|
redrawCueTrackList();
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
void CueTrackListWidget::saveCueTrackList(std::string filename)
|
void CueTrackListWidget::saveCueTrackList(std::string filename)
|
||||||
{
|
{
|
||||||
std::ofstream file(filename);
|
std::ofstream file(filename);
|
||||||
|
@ -393,10 +422,11 @@ std::string CueTrackListWidget::cueTrackToXml(const CueTrack& cueTrack)
|
||||||
xml += " <entryPoint>" + std::to_string(cueTrack.entryPoint) + "</entryPoint>\n";
|
xml += " <entryPoint>" + std::to_string(cueTrack.entryPoint) + "</entryPoint>\n";
|
||||||
xml += " <exitPoint>" + std::to_string(cueTrack.exitPoint) + "</exitPoint>\n";
|
xml += " <exitPoint>" + std::to_string(cueTrack.exitPoint) + "</exitPoint>\n";
|
||||||
xml += " <audioLayer>" + std::to_string(cueTrack.audioLayer) + "</audioLayer>\n";
|
xml += " <audioLayer>" + std::to_string(cueTrack.audioLayer) + "</audioLayer>\n";
|
||||||
xml += " <active>";
|
xml += " <duration>" + std::to_string(cueTrack.duration) + "</duration>\n";
|
||||||
xml += (cueTrack.active ? "true" : "false");
|
xml += " <multi>";
|
||||||
xml += "</active>\n";
|
xml += (cueTrack.multi ? "true" : "false");
|
||||||
xml += " </CueTrack>\n";
|
xml += "</multi>\n";
|
||||||
|
xml += " </CueTrack>\n";
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,7 +474,6 @@ void saveCueTrackToXml(const CueTrack& cueTrack, const QString& filename) {
|
||||||
xmlWriter.writeTextElement("entryPoint", QString::number(cueTrack.entryPoint));
|
xmlWriter.writeTextElement("entryPoint", QString::number(cueTrack.entryPoint));
|
||||||
xmlWriter.writeTextElement("exitPoint", QString::number(cueTrack.exitPoint));
|
xmlWriter.writeTextElement("exitPoint", QString::number(cueTrack.exitPoint));
|
||||||
xmlWriter.writeTextElement("audioLayer", QString::number(cueTrack.audioLayer));
|
xmlWriter.writeTextElement("audioLayer", QString::number(cueTrack.audioLayer));
|
||||||
xmlWriter.writeTextElement("active", cueTrack.active ? "true" : "false");
|
|
||||||
|
|
||||||
xmlWriter.writeEndElement();
|
xmlWriter.writeEndElement();
|
||||||
xmlWriter.writeEndDocument();
|
xmlWriter.writeEndDocument();
|
||||||
|
@ -507,9 +536,9 @@ CueTrack loadCueTrackFromXml(const QString& filename) {
|
||||||
cueTrack.exitPoint = xmlReader.readElementText().toInt();
|
cueTrack.exitPoint = xmlReader.readElementText().toInt();
|
||||||
} else if (elementName == "audioLayer") {
|
} else if (elementName == "audioLayer") {
|
||||||
cueTrack.audioLayer = xmlReader.readElementText().toInt();
|
cueTrack.audioLayer = xmlReader.readElementText().toInt();
|
||||||
} else if (elementName == "active") {
|
} else if (elementName == "duration") {
|
||||||
cueTrack.active = xmlReader.readElementText() == "true";
|
cueTrack.duration = xmlReader.readElementText().toInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (xmlReader.hasError()) {
|
if (xmlReader.hasError()) {
|
||||||
|
@ -528,3 +557,39 @@ void CueTrackListWidget::clearTableWidget()
|
||||||
tableWidget->clear();
|
tableWidget->clear();
|
||||||
tableWidget->setRowCount(0);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
redrawCueTrackList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackListWidget::copyCueTrack() {
|
||||||
|
if (selectedIndex >= 0 && selectedIndex < m_size) {
|
||||||
|
delete copiedCue;
|
||||||
|
copiedCue = new CueTrack(*cueTracks.at(selectedIndex));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackListWidget::cutCueTrack() {
|
||||||
|
if (selectedIndex >= 0 && selectedIndex < m_size) {
|
||||||
|
delete copiedCue;
|
||||||
|
copiedCue = new CueTrack(*cueTracks.at(selectedIndex));
|
||||||
|
removeCueTrack(selectedIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackListWidget::pasteCueTrack() {
|
||||||
|
if (copiedCue != nullptr) {
|
||||||
|
CueTrack* newCue = new CueTrack(*copiedCue);
|
||||||
|
addCueTrack(newCue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ public:
|
||||||
explicit CueTrackListWidget(QWidget *parent = nullptr);
|
explicit CueTrackListWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
CueTrack* getSelectedTrack();
|
CueTrack* getSelectedTrack(bool advance);
|
||||||
void createNewCueTrack();
|
void createNewCueTrack();
|
||||||
void editCueTrack();
|
void editCueTrack();
|
||||||
void deleteCueTrack();
|
void deleteCueTrack();
|
||||||
|
@ -31,6 +31,8 @@ public slots:
|
||||||
void clearCueTrackList();
|
void clearCueTrackList();
|
||||||
void setLastUserCueNumber(size_t n) { lastUserCueNumber = n; }
|
void setLastUserCueNumber(size_t n) { lastUserCueNumber = n; }
|
||||||
size_t getLastUserCueNumber() { return lastUserCueNumber; }
|
size_t getLastUserCueNumber() { return lastUserCueNumber; }
|
||||||
|
void cueTrackAtEnd(int layer);
|
||||||
|
void redrawCueTrackList();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<CueTrack *> cueTracks;
|
std::vector<CueTrack *> cueTracks;
|
||||||
|
@ -39,7 +41,8 @@ private:
|
||||||
int m_size = 0;
|
int m_size = 0;
|
||||||
int size() { return m_size; }
|
int size() { return m_size; }
|
||||||
int selectedIndex = 0;
|
int selectedIndex = 0;
|
||||||
size_t lastUserCueNumber = 0;
|
int lastUserCueNumber = 0;
|
||||||
|
CueTrack* copiedCue = nullptr;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void addCueTrack(CueTrack* cue);
|
void addCueTrack(CueTrack* cue);
|
||||||
|
@ -52,12 +55,14 @@ private slots:
|
||||||
void cueTrackLoadDefaults(CueTrack * t);
|
void cueTrackLoadDefaults(CueTrack * t);
|
||||||
void copyCueTrack(CueTrack *src, CueTrack *dst);
|
void copyCueTrack(CueTrack *src, CueTrack *dst);
|
||||||
void sortCueTrackList();
|
void sortCueTrackList();
|
||||||
void redrawCueTrackList();
|
|
||||||
void clearTableWidget();
|
void clearTableWidget();
|
||||||
std::string cueTrackToXml(const CueTrack& cueTrack);
|
std::string cueTrackToXml(const CueTrack& cueTrack);
|
||||||
|
void copyCueTrack();
|
||||||
|
void pasteCueTrack();
|
||||||
|
void cutCueTrack();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void changeSelectedIndex(int index);
|
void changeSelectedIndex(int index);
|
||||||
|
void goAction(int channel);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
94
src/cuetrackwidget.cpp
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
|
#include "cuetrackwidget.h"
|
||||||
|
#include "ui_cuetrackwidget.h"
|
||||||
|
|
||||||
|
CueTrackWidget::CueTrackWidget(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::CueTrackWidget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
tlFade.setFrameRange(0, 100);
|
||||||
|
tlWaitIn.setFrameRange(0, 100);
|
||||||
|
tlWaitOut.setFrameRange(0, 100);
|
||||||
|
connect(&tlFade, &QTimeLine::frameChanged, ui->cueProgressBar, &QProgressBar::setValue);
|
||||||
|
connect(&tlWaitIn, &QTimeLine::frameChanged, ui->cueProgressBar, &QProgressBar::setValue);
|
||||||
|
connect(&tlWaitOut, &QTimeLine::frameChanged, ui->cueProgressBar, &QProgressBar::setValue);
|
||||||
|
connect(&tlFade, SIGNAL(finished()), this, SLOT(fadeSlot()));
|
||||||
|
connect(&tlWaitIn, SIGNAL(finished()), this, SLOT(waitInSlot()));
|
||||||
|
connect(&tlWaitOut, SIGNAL(finished()), this, SLOT(waitOutSlot()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CueTrackWidget::~CueTrackWidget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::loadCueTrack(CueTrack* track)
|
||||||
|
{
|
||||||
|
ui->cueName->setText(track->name.data());
|
||||||
|
ui->cueNumber->display(track->userNumber);
|
||||||
|
ui->vol->display(track->volume);
|
||||||
|
ui->pan->display(track->pan);
|
||||||
|
ui->pitch->display(track->pitch);
|
||||||
|
ui->bus1->display(track->bus1);
|
||||||
|
ui->bus2->display(track->bus2);
|
||||||
|
ui->fade->setValue(track->fadeIn);
|
||||||
|
ui->waitIn->setValue(track->waitIn);
|
||||||
|
ui->waitOut->setValue(track->waitOut);
|
||||||
|
ui->halt->setChecked(track->stopAtEnd);
|
||||||
|
QFileInfo fileInfo(track->filePath.data());
|
||||||
|
fileInfo.fileName().truncate(64);
|
||||||
|
ui->mediaFileName->setText(fileInfo.fileName());
|
||||||
|
ui->status->setText(statusToString(track->status));
|
||||||
|
ui->audioLayer->display(track->audioLayer);
|
||||||
|
ui->multi->setChecked(track->multi);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::go()
|
||||||
|
{
|
||||||
|
tlFade.stop();
|
||||||
|
tlWaitIn.stop();
|
||||||
|
tlWaitOut.stop();
|
||||||
|
ui->cueProgressBar->setValue(0);
|
||||||
|
if (ui->waitIn->value() > 0)
|
||||||
|
{
|
||||||
|
tlWaitIn.setDuration(ui->waitIn->value() * 1000);
|
||||||
|
tlWaitIn.start();
|
||||||
|
ui->cueProgressBar->setStyleSheet("QProgressBar::chunk { background-color: #FF0000; }");
|
||||||
|
} else {
|
||||||
|
waitInSlot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::waitInSlot()
|
||||||
|
{
|
||||||
|
emit goAction(ui->audioLayer->intValue());
|
||||||
|
tlFade.setDuration(ui->fade->value() * 1000);
|
||||||
|
tlFade.start();
|
||||||
|
ui->cueProgressBar->setStyleSheet("QProgressBar::chunk { background-color: #00FF00; }");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::fadeSlot()
|
||||||
|
{
|
||||||
|
if (ui->waitOut->value() > 0) {
|
||||||
|
tlWaitOut.setDuration(ui->waitOut->value() * 1000);
|
||||||
|
tlWaitOut.start();
|
||||||
|
ui->cueProgressBar->setStyleSheet("QProgressBar::chunk { background-color: #FF0000; }");
|
||||||
|
} else {
|
||||||
|
waitOutSlot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::waitOutSlot()
|
||||||
|
{
|
||||||
|
ui->cueProgressBar->setStyleSheet("QProgressBar::chunk { background-color: #0000FF; }");
|
||||||
|
emit cueFinished(ui->audioLayer->intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::setNextCue()
|
||||||
|
{
|
||||||
|
ui->cueProgressBar->setDisabled(true);
|
||||||
|
ui->cueProgressBar->hide();
|
||||||
|
}
|
43
src/cuetrackwidget.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#ifndef CUETRACKWIDGET_H
|
||||||
|
#define CUETRACKWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QTimeLine>
|
||||||
|
|
||||||
|
#include "defines.h"
|
||||||
|
#include "dialgroup.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class CueTrackWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
class CueTrackWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CueTrackWidget(QWidget *parent = nullptr);
|
||||||
|
~CueTrackWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::CueTrackWidget *ui;
|
||||||
|
QTimeLine tlFade;
|
||||||
|
QTimeLine tlWaitIn;
|
||||||
|
QTimeLine tlWaitOut;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void loadCueTrack(CueTrack* track);
|
||||||
|
void go();
|
||||||
|
void setNextCue();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void fadeSlot();
|
||||||
|
void waitInSlot();
|
||||||
|
void waitOutSlot();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void cueFinished(int layer);
|
||||||
|
void goAction(int layer);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUETRACKWIDGET_H
|
780
src/cuetrackwidget.ui
Normal file
|
@ -0,0 +1,780 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CueTrackWidget</class>
|
||||||
|
<widget class="QWidget" name="CueTrackWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>502</width>
|
||||||
|
<height>329</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::ClickFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Cue Track</string>
|
||||||
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/icon.png</normaloff>:/buttons/resources/icon.png</iconset>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QSplitter" name="splitter">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="opaqueResize">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="handleWidth">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QSplitter" name="cueHeaderInfo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QProgressBar" name="cueProgressBar">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Cue Progress</string>
|
||||||
|
</property>
|
||||||
|
<property name="statusTip">
|
||||||
|
<string>Cue Progress</string>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>24</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLCDNumber" name="cueNumber">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>48</width>
|
||||||
|
<height>48</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>14</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Cue Number</string>
|
||||||
|
</property>
|
||||||
|
<property name="statusTip">
|
||||||
|
<string>Cue Number</string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Plain</enum>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="smallDecimalPoint">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
|
<property name="segmentStyle">
|
||||||
|
<enum>QLCDNumber::Flat</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="cueName">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>2</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>13</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Cue Name</string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Plain</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Cue Name</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="margin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSplitter" name="mediaInfo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="mediaFileName">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Media FIle Name</string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Media file name</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="margin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSplitter" name="cueValues">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QGroupBox" name="timesLayout">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="sizeConstraint">
|
||||||
|
<enum>QLayout::SetDefaultConstraint</enum>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="fade">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Wait in time in seconds</string>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QDoubleSpinBox" name="waitOut">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Wait out time in secods</string>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QDoubleSpinBox" name="waitIn">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Fade time in seconds</string>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleName">
|
||||||
|
<string>Fade In </string>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleDescription">
|
||||||
|
<string>Fade In Time in seconds</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="wrapping">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||||
|
</property>
|
||||||
|
<property name="specialValueText">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="showGroupSeparator" stdset="0">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="prefix">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>99990000.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="stepType">
|
||||||
|
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QTimeEdit" name="exitPoint">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Exit Point</string>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="status">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>13</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Playback Status</string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Playback Status</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QTimeEdit" name="entryPoint">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Entry Point</string>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLCDNumber" name="audioLayer">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Audio Channel</string>
|
||||||
|
</property>
|
||||||
|
<property name="smallDecimalPoint">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="segmentStyle">
|
||||||
|
<enum>QLCDNumber::Flat</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QRadioButton" name="halt">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>13</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Do not play next cue if checked</string>
|
||||||
|
</property>
|
||||||
|
<property name="whatsThis">
|
||||||
|
<string>If checked, do not play next cue. If checked, Go next cue when this cue has finished.</string>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleName">
|
||||||
|
<string>Halt</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string> Halt </string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/delete_button.png</normaloff>:/buttons/resources/delete_button.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="gridLayoutWidget">
|
||||||
|
<layout class="QGridLayout" name="audioLayout" rowminimumheight="0,0,0,0" columnminimumwidth="0,0,0">
|
||||||
|
<property name="sizeConstraint">
|
||||||
|
<enum>QLayout::SetDefaultConstraint</enum>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLCDNumber" name="pitch">
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="bus1Label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bus 1</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLCDNumber" name="pan">
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="segmentStyle">
|
||||||
|
<enum>QLCDNumber::Flat</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="volLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Volume</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLabel" name="bus2Label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bus 2</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLCDNumber" name="vol">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Volume</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLCDNumber" name="bus2">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Bus 2 Volume</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLCDNumber" name="bus1">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Bus 1 Volume</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="panLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Pan</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLabel" name="pitchLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Pitch</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QCheckBox" name="multi">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
<underline>true</underline>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>PLay next cue at same time this cue, do not wait to finish the cue.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/go_button.jpeg</normaloff>:/buttons/resources/go_button.jpeg</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="multiLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>MultiCue</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>waitOut</tabstop>
|
||||||
|
<tabstop>fade</tabstop>
|
||||||
|
<tabstop>entryPoint</tabstop>
|
||||||
|
<tabstop>exitPoint</tabstop>
|
||||||
|
<tabstop>waitIn</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources>
|
||||||
|
<include location="../lms-resources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -65,7 +65,7 @@ constexpr const char* statusToString(Status e) noexcept
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
static Status stringToStatus(QString *statusStr) {
|
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("Paused") ) return Paused;
|
||||||
else if (!statusStr->compare("Play 1")) return PlayingOnce;
|
else if (!statusStr->compare("Play 1")) return PlayingOnce;
|
||||||
else if (!statusStr->compare("Play Loop")) return PlayingLoop;
|
else if (!statusStr->compare("Play Loop")) return PlayingLoop;
|
||||||
|
@ -91,6 +91,7 @@ struct layerData {
|
||||||
int bus1Vol;
|
int bus1Vol;
|
||||||
int bus2Vol;
|
int bus2Vol;
|
||||||
float level;
|
float level;
|
||||||
|
int fade;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CueTrack {
|
struct CueTrack {
|
||||||
|
@ -112,7 +113,9 @@ struct CueTrack {
|
||||||
int entryPoint; // 0 - 255
|
int entryPoint; // 0 - 255
|
||||||
int exitPoint; // 0 - 255
|
int exitPoint; // 0 - 255
|
||||||
int audioLayer; // internal audio layer used when cue is loaded
|
int audioLayer; // internal audio layer used when cue is loaded
|
||||||
bool active;
|
bool active; // the cue is playing
|
||||||
|
int duration; // media duration in milliseconds
|
||||||
|
bool multi; // launch next cue at same time, not waiting for this to finish.
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
67
src/dialgroup.cpp
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
#include <cmath>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include "dialgroup.h"
|
||||||
|
|
||||||
|
DialGroup::DialGroup(QString name,
|
||||||
|
int min,
|
||||||
|
int max,
|
||||||
|
int decimals,
|
||||||
|
QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
|
layout->setAlignment(Qt::AlignHCenter);
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
slider.setFocusPolicy(Qt::NoFocus);
|
||||||
|
slider.setRange(min, max);
|
||||||
|
slider.setValue(min + max / 2);
|
||||||
|
slider.setToolTip(name);
|
||||||
|
slider.setContentsMargins(0, 0, 0, 0);
|
||||||
|
/*
|
||||||
|
slider.setMinimumHeight(0);
|
||||||
|
slider.setSingleStep(1);
|
||||||
|
slider.setMinimumWidth(50);
|
||||||
|
slider.setStyleSheet("QDial {"
|
||||||
|
"border: 1px solid #aa8895;"
|
||||||
|
"background: #20182d;"
|
||||||
|
"margin: 0px;}"
|
||||||
|
"QSlider::groove:vertical {"
|
||||||
|
"border: 1px solid #999999;"
|
||||||
|
"width: 25px;}"
|
||||||
|
"QDial::tickmarks:vertical {"
|
||||||
|
"background-color: black;"
|
||||||
|
"background: red;"
|
||||||
|
"color: white;}"
|
||||||
|
*/
|
||||||
|
valueBox.setFocusPolicy(Qt::NoFocus);
|
||||||
|
valueBox.setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||||
|
valueBox.setMinimumWidth(50);
|
||||||
|
valueBox.setRange(min, max);
|
||||||
|
valueBox.setValue(0);
|
||||||
|
valueBox.setDecimals(decimals);
|
||||||
|
valueBox.setObjectName(name);
|
||||||
|
valueBox.setToolTip(name);
|
||||||
|
valueBox.setAlignment(Qt::AlignHCenter);
|
||||||
|
valueBox.setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout->addWidget(&slider);
|
||||||
|
layout->addWidget(&valueBox);
|
||||||
|
/* this->setStyleSheet("border: 1px solid #998090;"
|
||||||
|
"background-color: black;"
|
||||||
|
"margin: 1px;"
|
||||||
|
);*/
|
||||||
|
layout->setSpacing(0);
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
this->setLayout(layout);
|
||||||
|
slider.setObjectName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialGroup::setValue(float value)
|
||||||
|
{
|
||||||
|
slider.blockSignals(true);
|
||||||
|
valueBox.blockSignals(true);
|
||||||
|
slider.setValue(value);
|
||||||
|
valueBox.setValue(value);
|
||||||
|
slider.blockSignals(false);
|
||||||
|
valueBox.blockSignals(false);
|
||||||
|
}
|
30
src/dialgroup.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef DIALGROUP_H
|
||||||
|
#define DIALGROUP_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDial>
|
||||||
|
|
||||||
|
#include "clickabledoublespinbox.h"
|
||||||
|
|
||||||
|
class DialGroup : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DialGroup(QString name,
|
||||||
|
int min,
|
||||||
|
int max,
|
||||||
|
int decimals,
|
||||||
|
QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setValue(float value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QDial slider;
|
||||||
|
ClickableDoubleSpinBox valueBox;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -58,6 +58,8 @@ void EditCueTrackWidget::setupUi() {
|
||||||
layout->addRow("Entry Point", entryPointSpin);
|
layout->addRow("Entry Point", entryPointSpin);
|
||||||
exitPointSpin = new QSpinBox(this);
|
exitPointSpin = new QSpinBox(this);
|
||||||
layout->addRow("Exit Point", exitPointSpin);
|
layout->addRow("Exit Point", exitPointSpin);
|
||||||
|
multiCheck = new QCheckBox(this);
|
||||||
|
layout->addRow("Multi Cue", multiCheck);
|
||||||
statusCombo->addItem(statusToString(Status::Stopped));
|
statusCombo->addItem(statusToString(Status::Stopped));
|
||||||
statusCombo->addItem(statusToString(Status::Paused));
|
statusCombo->addItem(statusToString(Status::Paused));
|
||||||
statusCombo->addItem(statusToString(Status::PlayingOnce));
|
statusCombo->addItem(statusToString(Status::PlayingOnce));
|
||||||
|
@ -92,6 +94,7 @@ void EditCueTrackWidget::loadCueTrack(CueTrack cueTrack) {
|
||||||
audioLayerSpin->setValue(cueTrack.audioLayer);
|
audioLayerSpin->setValue(cueTrack.audioLayer);
|
||||||
QString tmp = statusToString(cueTrack.status);
|
QString tmp = statusToString(cueTrack.status);
|
||||||
statusCombo->setCurrentIndex(statusCombo->findText(tmp));
|
statusCombo->setCurrentIndex(statusCombo->findText(tmp));
|
||||||
|
multiCheck->setChecked(cueTrack.multi);
|
||||||
}
|
}
|
||||||
|
|
||||||
CueTrack EditCueTrackWidget::saveCueTrack() {
|
CueTrack EditCueTrackWidget::saveCueTrack() {
|
||||||
|
@ -114,6 +117,7 @@ CueTrack EditCueTrackWidget::saveCueTrack() {
|
||||||
cueTrack.pan = panSpin->value();
|
cueTrack.pan = panSpin->value();
|
||||||
cueTrack.pitch = pitchSpin->value();
|
cueTrack.pitch = pitchSpin->value();
|
||||||
cueTrack.description.append(descriptionEdit->text().toUtf8().constData());
|
cueTrack.description.append(descriptionEdit->text().toUtf8().constData());
|
||||||
|
cueTrack.multi = multiCheck->isChecked();
|
||||||
return cueTrack;
|
return cueTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ private:
|
||||||
QSpinBox *exitPointSpin;
|
QSpinBox *exitPointSpin;
|
||||||
QComboBox *statusCombo;
|
QComboBox *statusCombo;
|
||||||
QSpinBox *audioLayerSpin;
|
QSpinBox *audioLayerSpin;
|
||||||
|
QCheckBox *multiCheck;
|
||||||
QPushButton *browseButton;
|
QPushButton *browseButton;
|
||||||
QPushButton *saveButton;
|
QPushButton *saveButton;
|
||||||
QPushButton *cancelButton;
|
QPushButton *cancelButton;
|
||||||
|
|
|
@ -60,6 +60,6 @@ void libreMediaServerAudioUi::olasetup()
|
||||||
|
|
||||||
void libreMediaServerAudioUi::launchShowPlayerWindow()
|
void libreMediaServerAudioUi::launchShowPlayerWindow()
|
||||||
{
|
{
|
||||||
qDebug() << "launch show player";
|
//m_showPlayer->showMaximized();
|
||||||
m_showPlayer->show();
|
m_showPlayer->show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>400</width>
|
<width>640</width>
|
||||||
<height>400</height>
|
<height>800</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
|
@ -23,8 +23,8 @@
|
||||||
<string>LibreMediaServer</string>
|
<string>LibreMediaServer</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</iconset>
|
<normaloff>:/buttons/resources/icon.png</normaloff>:/buttons/resources/icon.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget"/>
|
<widget class="QWidget" name="centralwidget"/>
|
||||||
<widget class="QMenuBar" name="menuBar">
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>400</width>
|
<width>640</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -56,6 +56,8 @@
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources>
|
||||||
|
<include location="../lms-resources.qrc"/>
|
||||||
|
</resources>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
@ -139,8 +139,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
if (m_ui) {
|
if (m_ui) {
|
||||||
m_lmsUi->m_aw->filterParamChanged(layer, channel, value);
|
m_lmsUi->m_aw->filterParamChanged(layer, channel, value);
|
||||||
m_played.clear();
|
|
||||||
m_played.append(m_ola->getValue(layer, DMX_FILE));
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -172,14 +170,16 @@ void libreMediaServerAudio::refreshUi() {
|
||||||
}
|
}
|
||||||
m_lmsUi->m_aw->levelChanged(i, m_mae.getLevel(i));
|
m_lmsUi->m_aw->levelChanged(i, m_mae.getLevel(i));
|
||||||
if (m_mae.getAtEnd(i)) {
|
if (m_mae.getAtEnd(i)) {
|
||||||
if (m_currentStatus[i] == Status::PlayingOnce) {
|
if (m_currentStatus[i] == Status::PlayingOnce || m_currentStatus[i] == Status::Stopped) {
|
||||||
m_currentStatus[i] = Status::Stopped;
|
m_currentStatus[i] = Status::Stopped;
|
||||||
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
||||||
|
m_lmsUi->m_showPlayer->cueTrackAtEnd(i);
|
||||||
}
|
}
|
||||||
if (m_currentStatus[i] == Status::PlayingFolder) {
|
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);
|
int folder = m_ola->getValue(i, DMX_FOLDER);
|
||||||
last++;
|
|
||||||
if (last < m_mediaLibrary->getMediaFolderCount(folder)) {
|
if (last < m_mediaLibrary->getMediaFolderCount(folder)) {
|
||||||
this->loadMedia(i, folder, last);
|
this->loadMedia(i, folder, last);
|
||||||
m_mae.playbackChanged(i, Status::PlayingFolder);
|
m_mae.playbackChanged(i, Status::PlayingFolder);
|
||||||
|
@ -187,6 +187,7 @@ void libreMediaServerAudio::refreshUi() {
|
||||||
else {
|
else {
|
||||||
m_currentStatus[i] = Status::Stopped;
|
m_currentStatus[i] = Status::Stopped;
|
||||||
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
||||||
|
m_lmsUi->m_showPlayer->cueTrackAtEnd(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_currentStatus[i] == Status::PlayingFolderLoop) {
|
else if (m_currentStatus[i] == Status::PlayingFolderLoop) {
|
||||||
|
@ -227,7 +228,8 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
||||||
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||||
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChangedFaded(int, Slider, int, int)), this, SLOT(uiSliderChangedFaded(int, Slider, int, int)));
|
||||||
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||||
m_refreshUi = new QTimer(this);
|
m_refreshUi = new QTimer(this);
|
||||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||||
|
@ -298,4 +300,14 @@ void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile)
|
||||||
qWarning() << "ui load media error" << result << "file" << mediaFile << "layer" << layer;
|
qWarning() << "ui load media error" << result << "file" << mediaFile << "layer" << layer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void libreMediaServerAudio::uiSliderChangedFaded(int layer, Slider s, int value, int ms)
|
||||||
|
{
|
||||||
|
switch (s){
|
||||||
|
case Slider::Volume:
|
||||||
|
m_mae.volChanged(layer, value, ms);
|
||||||
|
m_updateUi[layer][0] = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -66,6 +66,7 @@ private:
|
||||||
private slots:
|
private slots:
|
||||||
void refreshUi();
|
void refreshUi();
|
||||||
void uiSliderChanged(int layer, Slider s, int value);
|
void uiSliderChanged(int layer, Slider s, int value);
|
||||||
|
void uiSliderChangedFaded(int layer, Slider s, int value, int ms);
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiLoadMedia(int layer, QString s);
|
void uiLoadMedia(int layer, QString s);
|
||||||
|
|
||||||
|
|
|
@ -434,8 +434,15 @@ ma_result MiniAudioEngine::printFormatInfo(int layer)
|
||||||
|
|
||||||
// Expects between 0 and 65535 vol value
|
// Expects between 0 and 65535 vol value
|
||||||
void MiniAudioEngine::volChanged(int layer, int vol)
|
void MiniAudioEngine::volChanged(int layer, int vol)
|
||||||
|
{
|
||||||
|
volChanged(layer, vol, FADE_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expects between 0 and 65535 vol value and fade time in milliseconds
|
||||||
|
void MiniAudioEngine::volChanged(int layer, int vol, int ms)
|
||||||
{
|
{
|
||||||
m_mae.currentStatus[layer].vol = vol;
|
m_mae.currentStatus[layer].vol = vol;
|
||||||
|
m_mae.currentStatus[layer].fade = ms;
|
||||||
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
||||||
return;
|
return;
|
||||||
if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated)
|
if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated)
|
||||||
|
@ -445,9 +452,10 @@ void MiniAudioEngine::volChanged(int layer, int vol)
|
||||||
db = 0;
|
db = 0;
|
||||||
} else
|
} else
|
||||||
db = ma_volume_db_to_linear(db);
|
db = ma_volume_db_to_linear(db);
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, FADE_TIME);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MiniAudioEngine::panChanged(int layer, float value)
|
void MiniAudioEngine::panChanged(int layer, float value)
|
||||||
{
|
{
|
||||||
float result;
|
float result;
|
||||||
|
@ -507,7 +515,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0.000001f, 0.000000f, FADE_TIME);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0.000001f, 0.000000f, FADE_TIME);
|
||||||
if (m_mae.currentStatus[layer].cursor > 0)
|
if (m_mae.currentStatus[layer].cursor > 0)
|
||||||
usleep(FADE_TIME * 1500); // avoid glitch when seeking
|
usleep(FADE_TIME * 1500); // avoid glitch when seeking
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, FADE_TIME * 2);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, m_mae.currentStatus[layer].fade);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ public:
|
||||||
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
||||||
ma_result loadMedia(int layer, char *media);
|
ma_result loadMedia(int layer, char *media);
|
||||||
void volChanged(int layer, int vol);
|
void volChanged(int layer, int vol);
|
||||||
|
void volChanged(int layer, int vol, int ms);
|
||||||
void panChanged(int layer, float pan);
|
void panChanged(int layer, float pan);
|
||||||
void pitchChanged(int layer, float pitch);
|
void pitchChanged(int layer, float pitch);
|
||||||
ma_result playbackChanged(int layer, Status status);
|
ma_result playbackChanged(int layer, Status status);
|
||||||
|
|
|
@ -12,11 +12,12 @@ ShowPlayer::ShowPlayer(QWidget *parent) :
|
||||||
connect(ui->SaveCueList, SIGNAL(clicked()), this, SLOT(saveCueTrackList()));
|
connect(ui->SaveCueList, SIGNAL(clicked()), this, SLOT(saveCueTrackList()));
|
||||||
connect(ui->LoadCueList, SIGNAL(clicked()), this, SLOT(loadCueTrackList()));
|
connect(ui->LoadCueList, SIGNAL(clicked()), this, SLOT(loadCueTrackList()));
|
||||||
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
|
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
|
||||||
filesLoaded = 0;
|
connect(ui->cueListWidget, SIGNAL(changeSelectedIndex(int)), this, SLOT(updateIndex(int)));
|
||||||
currentStatus = Status::Iddle;
|
currentStatus = Status::Iddle;
|
||||||
for(int i = 0; i < MAX_LAYERS; i++)
|
for(int i = 0; i < MAX_LAYERS; i++) {
|
||||||
layersUsed[i] = -1;
|
layersUsed[i] = -1;
|
||||||
connect(ui->cueListWidget, SIGNAL(changeSelectedIndex(int)), this, SLOT(changeSelectedIndex(int)));
|
cueTrackWidgetPlaying[i] = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowPlayer::~ShowPlayer() {}
|
ShowPlayer::~ShowPlayer() {}
|
||||||
|
@ -27,48 +28,52 @@ void ShowPlayer::onAddTrack() {
|
||||||
|
|
||||||
void ShowPlayer::go()
|
void ShowPlayer::go()
|
||||||
{
|
{
|
||||||
ui->activeCueNumber->display(lastIndex);
|
CueTrack *goCue = ui->cueListWidget->getSelectedTrack(true);
|
||||||
CueTrack* current = ui->cueListWidget->getSelectedTrack();
|
if (!goCue)
|
||||||
if (!current)
|
|
||||||
return;
|
return;
|
||||||
if (current->audioLayer < 0)
|
current[goCue->audioLayer] = goCue;
|
||||||
return;
|
playCueTrack(goCue);
|
||||||
ui->activeCueLabel->setText(current->name.data());
|
if (goCue->multi)
|
||||||
for (int i = 0; i < MAX_LAYERS; i++) {
|
go();
|
||||||
if (layersUsed[i] == -1) {
|
}
|
||||||
layersUsed[i] = current->userNumber;
|
|
||||||
break;
|
void ShowPlayer::goAction(int c)
|
||||||
}
|
{
|
||||||
|
if (!current[c]->filePath.empty()) {
|
||||||
|
emit uiLoadMedia(current[c]->audioLayer, current[c]->filePath.data());
|
||||||
|
ui->cueListWidget->cueTrackAtEnd(c);
|
||||||
}
|
}
|
||||||
if (!current->filePath.empty())
|
updateTrackStateInEngine(current[c]);
|
||||||
emit uiLoadMedia(current->audioLayer, current->filePath.data());
|
emit uiPlaybackChanged(current[c]->audioLayer, current[c]->status);
|
||||||
updateTrackStateInEngine(current);
|
switch (current[c]->status) {
|
||||||
emit uiPlaybackChanged(current->audioLayer, current->status);
|
case Status::PlayingOnce:
|
||||||
filesLoaded++;
|
case Status::PlayingLoop:
|
||||||
|
case Status::PlayingFolder:
|
||||||
|
case Status::PlayingFolderLoop:
|
||||||
|
case Status::PlayingFolderRandom:
|
||||||
|
current[c]->active = true;
|
||||||
|
layersUsed[current[c]->audioLayer] = current[c]->userNumber;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
current[c]->active = false;
|
||||||
|
}
|
||||||
|
ui->cueListWidget->redrawCueTrackList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowPlayer::updateTrackStateInEngine(CueTrack *track) {
|
void ShowPlayer::updateTrackStateInEngine(CueTrack *track) {
|
||||||
emit uiSliderChanged(track->audioLayer, Slider::Volume, track->volume * 655.35);
|
emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000);
|
||||||
emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128);
|
emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128);
|
||||||
emit uiSliderChanged(track->audioLayer, Slider::Pitch, track->pitch * 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::Bus1, track->bus1 * 255 * 2.55);
|
||||||
emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55);
|
emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowPlayer::changeSelectedIndex(int i)
|
|
||||||
{
|
|
||||||
CueTrack *t = ui->cueListWidget->getTrackAtIndex(i);
|
|
||||||
ui->nextCueNumber->display(t->userNumber);
|
|
||||||
ui->nextCueLabel->setText(t->name.data());
|
|
||||||
lastIndex = t->userNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShowPlayer::loadCueTrackList()
|
void ShowPlayer::loadCueTrackList()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("XML Files (*.xml)"));
|
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("XML Files (*.xml)"));
|
||||||
if (fileName.isEmpty())
|
if (fileName.isEmpty())
|
||||||
return;
|
return;
|
||||||
ui->cueListWidget->loadCueTrackList(fileName.toStdString());
|
ui->cueListWidget->loadCueTrackList(fileName.toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowPlayer::saveCueTrackList()
|
void ShowPlayer::saveCueTrackList()
|
||||||
|
@ -78,3 +83,64 @@ void ShowPlayer::saveCueTrackList()
|
||||||
return;
|
return;
|
||||||
ui->cueListWidget->saveCueTrackList(fileName.toStdString());
|
ui->cueListWidget->saveCueTrackList(fileName.toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::cueTrackAtEnd(int layer)
|
||||||
|
{
|
||||||
|
current[layer]->active = false;
|
||||||
|
ui->cueListWidget->cueTrackAtEnd(layer);
|
||||||
|
removeCueTrackWidget(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::cueFinished(int c)
|
||||||
|
{
|
||||||
|
if (!current[c])
|
||||||
|
return;
|
||||||
|
if (!current[c]->stopAtEnd)
|
||||||
|
this->go();
|
||||||
|
if (current[c]->status == Status::Stopped || current[c]->status == Status::Paused)
|
||||||
|
cueTrackAtEnd(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
CueTrackWidget *ShowPlayer::addCueTrackWidget(CueTrack* track) {
|
||||||
|
QListWidgetItem* item = new QListWidgetItem(ui->activeCueList);
|
||||||
|
CueTrackWidget* widget = new CueTrackWidget();
|
||||||
|
widget->loadCueTrack(track);
|
||||||
|
connect(widget, SIGNAL(goAction(int)), this, SLOT(goAction(int)));
|
||||||
|
connect(widget, SIGNAL(cueFinished(int)), this, SLOT(cueFinished(int)));
|
||||||
|
cueTrackWidgetPlaying[track->audioLayer] = widget;
|
||||||
|
item->setSizeHint(widget->sizeHint());
|
||||||
|
ui->activeCueList->setItemWidget(item, widget);
|
||||||
|
return (widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::playCueTrack(CueTrack* track) {
|
||||||
|
removeCueTrackWidget(track->audioLayer);
|
||||||
|
CueTrackWidget *widget = addCueTrackWidget(track);
|
||||||
|
widget->go();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::removeCueTrackWidget(int audioLayer) {
|
||||||
|
CueTrackWidget* widgetToRemove = cueTrackWidgetPlaying[audioLayer];
|
||||||
|
if (widgetToRemove != NULL && ui->activeCueList->count() > 0) {
|
||||||
|
for (int i = 0; i < ui->activeCueList->count(); ++i) {
|
||||||
|
QListWidgetItem* item = ui->activeCueList->item(i);
|
||||||
|
QWidget* widget = ui->activeCueList->itemWidget(item);
|
||||||
|
if (widget == widgetToRemove) {
|
||||||
|
ui->activeCueList->removeItemWidget(item);
|
||||||
|
delete item;
|
||||||
|
delete widgetToRemove;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cueTrackWidgetPlaying[audioLayer] = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::updateIndex(int index) {
|
||||||
|
if (index < 0)
|
||||||
|
return;
|
||||||
|
CueTrack *track = ui->cueListWidget->getSelectedTrack(false);
|
||||||
|
if (track) {
|
||||||
|
ui->nextCue->loadCueTrack(track);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "cuetracklistwidget.h"
|
#include "cuetracklistwidget.h"
|
||||||
|
#include "cuetrackwidget.h"
|
||||||
|
#include "dialgroup.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "ui_showplayer.h"
|
#include "ui_showplayer.h"
|
||||||
|
|
||||||
|
@ -24,25 +26,33 @@ public:
|
||||||
explicit ShowPlayer(QWidget *parent = nullptr);
|
explicit ShowPlayer(QWidget *parent = nullptr);
|
||||||
~ShowPlayer();
|
~ShowPlayer();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void cueTrackAtEnd(int layer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::ShowPlayer *ui;
|
Ui::ShowPlayer *ui;
|
||||||
Status currentStatus = Status::Iddle;
|
Status currentStatus = Status::Iddle;
|
||||||
size_t filesLoaded = 0;
|
|
||||||
int layersUsed[MAX_LAYERS];
|
int layersUsed[MAX_LAYERS];
|
||||||
int lastIndex = 0;
|
CueTrack *current[MAX_LAYERS];
|
||||||
|
CueTrackWidget *cueTrackWidgetPlaying[MAX_LAYERS];
|
||||||
void updateTrackStateInEngine(CueTrack *track);
|
CueTrackWidget *addCueTrackWidget(CueTrack *track);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateTrackStateInEngine(CueTrack *track);
|
||||||
void onAddTrack();
|
void onAddTrack();
|
||||||
void go();
|
void go();
|
||||||
void changeSelectedIndex(int i);
|
|
||||||
void loadCueTrackList();
|
void loadCueTrackList();
|
||||||
void saveCueTrackList();
|
void saveCueTrackList();
|
||||||
|
void cueFinished(int channel);
|
||||||
|
void removeCueTrackWidget(int index);
|
||||||
|
void playCueTrack(CueTrack *track);
|
||||||
|
void goAction(int channel);
|
||||||
|
void updateIndex(int index);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiSliderChanged(int layer, Slider s, int vol);
|
void uiSliderChanged(int layer, Slider s, int vol);
|
||||||
|
void uiSliderChangedFaded(int layer, Slider s, int vol, int ms);
|
||||||
void uiLoadMedia(int layer, QString s);
|
void uiLoadMedia(int layer, QString s);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>743</width>
|
<width>800</width>
|
||||||
<height>671</height>
|
<height>802</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -19,137 +19,50 @@
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Show Player</string>
|
<string>Show Player</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/icon.png</normaloff>:/buttons/resources/icon.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizeGripEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="modal">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSplitter" name="splitter">
|
<widget class="QSplitter" name="splitter_3">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>400</width>
|
|
||||||
<height>400</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::StyledPanel</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="handleWidth">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<widget class="QSplitter" name="masterSplitter">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::Box</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Raised</enum>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="handleWidth">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<widget class="QPushButton" name="goButton">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="focusPolicy">
|
|
||||||
<enum>Qt::ClickFocus</enum>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>GO</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Space</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="layoutWidget">
|
|
||||||
<layout class="QGridLayout" name="statusLayout">
|
|
||||||
<property name="sizeConstraint">
|
|
||||||
<enum>QLayout::SetMinimumSize</enum>
|
|
||||||
</property>
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLCDNumber" name="activeCueNumber"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="activeCueLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Active Cue</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLCDNumber" name="nextCueNumber">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLabel" name="nextCueLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Next Cue</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QToolButton" name="panicButton">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="focusPolicy">
|
|
||||||
<enum>Qt::ClickFocus</enum>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>P</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="horizontalLayoutWidget">
|
<widget class="QWidget" name="horizontalLayoutWidget">
|
||||||
<layout class="QHBoxLayout" name="ButtonToolBarLayout">
|
<layout class="QHBoxLayout" name="ButtonToolBarLayout" stretch="0,0,0,0,0,0,0,0">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeConstraint">
|
<property name="sizeConstraint">
|
||||||
<enum>QLayout::SetMinimumSize</enum>
|
<enum>QLayout::SetDefaultConstraint</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>100</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="rightMargin">
|
<property name="rightMargin">
|
||||||
<number>100</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="LoadCueList">
|
<widget class="QToolButton" name="LoadCueList">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Load Cue List</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Load CueList</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/load_button.png</normaloff>../resources/load_button.png</iconset>
|
<normaloff>:/buttons/resources/load_button.png</normaloff>:/buttons/resources/load_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -161,12 +74,15 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="SaveCueList">
|
<widget class="QToolButton" name="SaveCueList">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Save Cue List</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Save CueList.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/save_button.png</normaloff>../resources/save_button.png</iconset>
|
<normaloff>:/buttons/resources/save_button.png</normaloff>:/buttons/resources/save_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -184,12 +100,21 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="CopyCue">
|
<widget class="QToolButton" name="CopyCue">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>32</horstretch>
|
||||||
|
<verstretch>32</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Copy Cue</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Copy Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/copy_button.png</normaloff>../resources/copy_button.png</iconset>
|
<normaloff>:/buttons/resources/copy_button.png</normaloff>:/buttons/resources/copy_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -202,17 +127,17 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="CutCue">
|
<widget class="QToolButton" name="CutCue">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Load Cue List</string>
|
<string>Cut Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="accessibleName">
|
<property name="accessibleName">
|
||||||
<string>Load Cue List</string>
|
<string>Load Cue List</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Cut Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/cut_button.png</normaloff>../resources/cut_button.png</iconset>
|
<normaloff>:/buttons/resources/cut_button.png</normaloff>:/buttons/resources/cut_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -224,12 +149,15 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="PasteCue">
|
<widget class="QToolButton" name="PasteCue">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Paste Cue</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Paste Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/paste_button.png</normaloff>../resources/paste_button.png</iconset>
|
<normaloff>:/buttons/resources/paste_button.png</normaloff>:/buttons/resources/paste_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -244,12 +172,15 @@
|
||||||
<property name="focusPolicy">
|
<property name="focusPolicy">
|
||||||
<enum>Qt::NoFocus</enum>
|
<enum>Qt::NoFocus</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>New Cue</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>New Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/new_button.png</normaloff>../resources/new_button.png</iconset>
|
<normaloff>:/buttons/resources/new_button.png</normaloff>:/buttons/resources/new_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -264,12 +195,15 @@
|
||||||
<property name="focusPolicy">
|
<property name="focusPolicy">
|
||||||
<enum>Qt::NoFocus</enum>
|
<enum>Qt::NoFocus</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Edit Cue</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Edit Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/edit_button.png</normaloff>../resources/edit_button.png</iconset>
|
<normaloff>:/buttons/resources/edit_button.png</normaloff>:/buttons/resources/edit_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -284,12 +218,15 @@
|
||||||
<property name="focusPolicy">
|
<property name="focusPolicy">
|
||||||
<enum>Qt::NoFocus</enum>
|
<enum>Qt::NoFocus</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Remove Cue</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Delete Cue</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset>
|
<iconset resource="../lms-resources.qrc">
|
||||||
<normaloff>../resources/remove_button.png</normaloff>../resources/remove_button.png</iconset>
|
<normaloff>:/buttons/resources/delete_button.png</normaloff>:/buttons/resources/delete_button.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -301,25 +238,101 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
|
<widget class="QSplitter" name="splitter_2">
|
||||||
<property name="enabled">
|
<property name="orientation">
|
||||||
<bool>true</bool>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<widget class="QPushButton" name="goButton">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<property name="sizePolicy">
|
||||||
<horstretch>0</horstretch>
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
<verstretch>0</verstretch>
|
<horstretch>0</horstretch>
|
||||||
</sizepolicy>
|
<verstretch>0</verstretch>
|
||||||
</property>
|
</sizepolicy>
|
||||||
<property name="focusPolicy">
|
</property>
|
||||||
<enum>Qt::StrongFocus</enum>
|
<property name="focusPolicy">
|
||||||
</property>
|
<enum>Qt::ClickFocus</enum>
|
||||||
<property name="autoFillBackground">
|
</property>
|
||||||
<bool>true</bool>
|
<property name="text">
|
||||||
</property>
|
<string/>
|
||||||
<property name="inputMethodHints">
|
</property>
|
||||||
<set>Qt::ImhPreferLowercase</set>
|
<property name="icon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/go_button.jpeg</normaloff>:/buttons/resources/go_button.jpeg</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>120</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Space</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="CueTrackWidget" name="nextCue" native="true"/>
|
||||||
|
<widget class="QToolButton" name="panicButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::ClickFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../lms-resources.qrc">
|
||||||
|
<normaloff>:/buttons/resources/panic_button.jpg</normaloff>:/buttons/resources/panic_button.jpg</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>96</width>
|
||||||
|
<height>120</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>P</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSplitter" name="splitter">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Cue List</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QListWidget" name="activeCueList">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Cues active</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Plain</enum>
|
||||||
|
</property>
|
||||||
|
<property name="resizeMode">
|
||||||
|
<enum>QListView::Adjust</enum>
|
||||||
|
</property>
|
||||||
|
<property name="layoutMode">
|
||||||
|
<enum>QListView::SinglePass</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -332,13 +345,20 @@
|
||||||
<header>src/cuetracklistwidget.h</header>
|
<header>src/cuetracklistwidget.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>CueTrackWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>src/cuetrackwidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>cueListWidget</tabstop>
|
|
||||||
<tabstop>NewCue</tabstop>
|
<tabstop>NewCue</tabstop>
|
||||||
<tabstop>EditCue</tabstop>
|
<tabstop>EditCue</tabstop>
|
||||||
<tabstop>RemoveCue</tabstop>
|
<tabstop>RemoveCue</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources>
|
||||||
|
<include location="../lms-resources.qrc"/>
|
||||||
|
</resources>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
@ -38,16 +38,16 @@ SliderGroup::SliderGroup(QString name,
|
||||||
"margin: 0px;}"
|
"margin: 0px;}"
|
||||||
"QSlider::groove:vertical {"
|
"QSlider::groove:vertical {"
|
||||||
"border: 1px solid #999999;"
|
"border: 1px solid #999999;"
|
||||||
"width: 25px;"
|
"width: 25px;}"
|
||||||
"margin: -4px;}"
|
|
||||||
"QSlider::handle:vertical {"
|
"QSlider::handle:vertical {"
|
||||||
"background: white;"
|
"background: white;"
|
||||||
"border: 1px solid #5c5c5c;"
|
"border: 2px solid #5c5c5c;"
|
||||||
"width: 29px;"
|
"width: 29px;"
|
||||||
"height: 7px;"
|
"height: 10px;"
|
||||||
"margin: -2px;"
|
|
||||||
"border-radius: 2px;}"
|
"border-radius: 2px;}"
|
||||||
"Qslider::tickmarks:vertical {background: white;"
|
"Qslider::tickmarks:vertical {"
|
||||||
|
"background-color: black;"
|
||||||
|
"background: red;"
|
||||||
"color: white;}"
|
"color: white;}"
|
||||||
"QSlider::add-page:vertical {background: blue;}"
|
"QSlider::add-page:vertical {background: blue;}"
|
||||||
"QSlider::sub-page:vertical {background: #20182d;}");
|
"QSlider::sub-page:vertical {background: #20182d;}");
|
||||||
|
|