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
|
||||
QT += webkitwidgets widgets
|
||||
HEADERS += src/libremediaserver-audio.h \
|
||||
src/cuetrackwidget.h \
|
||||
src/editcuetrackwidget.h \
|
||||
src/cuetracklistwidget.h \
|
||||
src/showplayer.h \
|
||||
|
@ -23,8 +24,10 @@ HEADERS += src/libremediaserver-audio.h \
|
|||
src/audiowidget.h \
|
||||
src/defines.h \
|
||||
src/settings.h \
|
||||
src/slidergroup.h
|
||||
src/slidergroup.h \
|
||||
src/dialgroup.h
|
||||
SOURCES += src/main.cpp \
|
||||
src/cuetrackwidget.cpp \
|
||||
src/editcuetrackwidget.cpp \
|
||||
src/cuetracklistwidget.cpp \
|
||||
src/showplayer.cpp \
|
||||
|
@ -43,8 +46,10 @@ SOURCES += src/main.cpp \
|
|||
src/audiolayerwidget.cpp \
|
||||
src/audiowidget.cpp \
|
||||
src/settings.cpp \
|
||||
src/slidergroup.cpp
|
||||
src/slidergroup.cpp \
|
||||
src/dialgroup.cpp
|
||||
FORMS += \
|
||||
src/cuetrackwidget.ui \
|
||||
src/showplayer.ui \
|
||||
src/libremediaserver-audio-ui.ui
|
||||
CCFLAG += -msse2 -mavx2
|
||||
|
@ -58,3 +63,5 @@ OTHER_FILES += \
|
|||
docs/changelog.txt \
|
||||
docs/lms-audio.xlm \
|
||||
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 <iostream>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <QWidget>
|
||||
#include <QScrollArea>
|
||||
#include <QEvent>
|
||||
|
@ -7,6 +10,8 @@
|
|||
#include <QVBoxLayout>
|
||||
#include <QTableWidget>
|
||||
#include <QTableWidgetItem>
|
||||
#include <QFile>
|
||||
#include <QXmlStreamReader>
|
||||
#include "cuetracklistwidget.h"
|
||||
|
||||
CueTrackListWidget::CueTrackListWidget(QWidget *parent)
|
||||
|
@ -42,9 +47,10 @@ CueTrack* CueTrackListWidget::getTrackAtIndex(int index) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
CueTrack* CueTrackListWidget::getSelectedTrack() {
|
||||
CueTrack* CueTrackListWidget::getSelectedTrack(bool advance) {
|
||||
CueTrack* track = getTrackAtIndex(selectedIndex);
|
||||
key_down();
|
||||
if (advance)
|
||||
key_down();
|
||||
return track;
|
||||
}
|
||||
|
||||
|
@ -121,23 +127,25 @@ void CueTrackListWidget::updateSelectedCueTrack(bool highlightRow) {
|
|||
void CueTrackListWidget::cueTrackLoadDefaults(CueTrack * t)
|
||||
{
|
||||
t->active = false;
|
||||
t->audioLayer = -1;
|
||||
t->bus1 = 80;
|
||||
t->bus2 = 80;
|
||||
t->audioLayer = 0;
|
||||
t->bus1 = 100;
|
||||
t->bus2 = 100;
|
||||
t->entryPoint = 0;
|
||||
t->exitPoint = 255;
|
||||
t->fadeIn = 3;
|
||||
t->fadeOut = 3;
|
||||
t->fadeIn = 2;
|
||||
t->fadeOut = 2;
|
||||
t->waitIn = 0;
|
||||
t->waitOut = 0;
|
||||
t->pan = 0;
|
||||
t->pitch = 1;
|
||||
t->status = Status::PlayingOnce;
|
||||
lastUserCueNumber += 10;
|
||||
t->userNumber = lastUserCueNumber;
|
||||
lastUserCueNumber++;
|
||||
t->volume = 80;
|
||||
t->stopAtEnd = true;
|
||||
t->filePath = "";
|
||||
t->duration = 0;
|
||||
t->multi = false;
|
||||
}
|
||||
|
||||
void CueTrackListWidget::createNewCueTrack()
|
||||
|
@ -145,15 +153,20 @@ void CueTrackListWidget::createNewCueTrack()
|
|||
CueTrack *t = new CueTrack;
|
||||
cueTrackLoadDefaults(t);
|
||||
EditCueTrackWidget dialog(t, this);
|
||||
if (dialog.exec() == QDialog::Accepted)
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
t->active = false;
|
||||
addCueTrack(t);
|
||||
if (m_size == 1)
|
||||
{
|
||||
updateSelectedCueTrack(true);
|
||||
emit changeSelectedIndex(0);
|
||||
if (m_size == 1)
|
||||
{
|
||||
updateSelectedCueTrack(true);
|
||||
emit changeSelectedIndex(0);
|
||||
} else
|
||||
redrawCueTrackList();
|
||||
if (lastUserCueNumber < t->userNumber)
|
||||
lastUserCueNumber = t->userNumber;
|
||||
} else
|
||||
redrawCueTrackList();
|
||||
}
|
||||
delete (t);
|
||||
}
|
||||
|
||||
void CueTrackListWidget::editCueTrack()
|
||||
{
|
||||
|
@ -164,6 +177,8 @@ void CueTrackListWidget::editCueTrack()
|
|||
redrawCueTrackList();
|
||||
emit changeSelectedIndex(selectedIndex);
|
||||
}
|
||||
if (lastUserCueNumber < current->userNumber)
|
||||
lastUserCueNumber = current->userNumber;
|
||||
}
|
||||
|
||||
void CueTrackListWidget::deleteCueTrack()
|
||||
|
@ -198,6 +213,8 @@ void CueTrackListWidget::copyCueTrack(CueTrack *src, CueTrack *dst)
|
|||
dst->name = src->name;
|
||||
dst->description = src->description;
|
||||
dst->filePath = src->filePath;
|
||||
dst->duration = src->duration;
|
||||
dst->multi = src->multi;
|
||||
}
|
||||
|
||||
QString *CueTrackListWidget::getFileName(std::string s)
|
||||
|
@ -223,7 +240,7 @@ void CueTrackListWidget::redrawCueTrackList()
|
|||
int selected = cueTracks.at(selectedIndex)->userNumber;
|
||||
clearTableWidget();
|
||||
tableWidget->setColumnCount(7);
|
||||
QStringList headers = {"Active", "Number","Audio Channel", "Name", "Volume", "Status", "File"};
|
||||
QStringList headers = {"Active", "Number","Channel", "Name", "Volume", "Status", "File"};
|
||||
tableWidget->setHorizontalHeaderLabels(headers);
|
||||
sortCueTrackList();
|
||||
selectedIndex = 0;
|
||||
|
@ -241,13 +258,9 @@ void CueTrackListWidget::redrawCueTrackList()
|
|||
tableWidget->resizeRowsToContents();
|
||||
tableWidget->scrollToItem(tableWidget->item(selectedIndex, 0));
|
||||
tableWidget->blockSignals(false);
|
||||
emit changeSelectedIndex(selectedIndex);
|
||||
}
|
||||
|
||||
#include <QFile>
|
||||
#include <QXmlStreamReader>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
void CueTrackListWidget::loadCueTrackList(std::string filename)
|
||||
{
|
||||
QFile file(QString::fromStdString(filename));
|
||||
|
@ -258,6 +271,7 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
|||
}
|
||||
QXmlStreamReader xmlReader(&file);
|
||||
clearCueTrackList();
|
||||
lastUserCueNumber = 0;
|
||||
while (!xmlReader.atEnd() && !xmlReader.hasError())
|
||||
{
|
||||
QXmlStreamReader::TokenType token = xmlReader.readNext();
|
||||
|
@ -309,7 +323,12 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
|||
t->waitOut = xmlReader.text().toInt();
|
||||
}
|
||||
else if (elementName == "stopAtEnd") {
|
||||
t->stopAtEnd = xmlReader.text().toString().toLower() == "true";
|
||||
QString tmp = xmlReader.text().toString().toLower();
|
||||
if (tmp.compare("false"))
|
||||
t->stopAtEnd = true;
|
||||
else {
|
||||
t->stopAtEnd = false;
|
||||
}
|
||||
}
|
||||
else if (elementName == "name") {
|
||||
t->name = xmlReader.text().toString().toStdString();
|
||||
|
@ -319,6 +338,10 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
|||
}
|
||||
else if (elementName == "userNumber") {
|
||||
t->userNumber = xmlReader.text().toInt();
|
||||
if (t->userNumber > lastUserCueNumber)
|
||||
{
|
||||
lastUserCueNumber = t->userNumber;
|
||||
}
|
||||
}
|
||||
else if (elementName == "entryPoint") {
|
||||
t->entryPoint = xmlReader.text().toInt();
|
||||
|
@ -329,9 +352,18 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
|||
else if (elementName == "audioLayer") {
|
||||
t->audioLayer = xmlReader.text().toInt();
|
||||
}
|
||||
else if (elementName == "active") {
|
||||
t->active = xmlReader.text().toString().toLower() == "true";
|
||||
}
|
||||
else if (elementName == "duration") {
|
||||
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();
|
||||
|
@ -348,9 +380,6 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
|
|||
redrawCueTrackList();
|
||||
}
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
void CueTrackListWidget::saveCueTrackList(std::string 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 += " <exitPoint>" + std::to_string(cueTrack.exitPoint) + "</exitPoint>\n";
|
||||
xml += " <audioLayer>" + std::to_string(cueTrack.audioLayer) + "</audioLayer>\n";
|
||||
xml += " <active>";
|
||||
xml += (cueTrack.active ? "true" : "false");
|
||||
xml += "</active>\n";
|
||||
xml += " </CueTrack>\n";
|
||||
xml += " <duration>" + std::to_string(cueTrack.duration) + "</duration>\n";
|
||||
xml += " <multi>";
|
||||
xml += (cueTrack.multi ? "true" : "false");
|
||||
xml += "</multi>\n";
|
||||
xml += " </CueTrack>\n";
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
@ -444,7 +474,6 @@ void saveCueTrackToXml(const CueTrack& cueTrack, const QString& filename) {
|
|||
xmlWriter.writeTextElement("entryPoint", QString::number(cueTrack.entryPoint));
|
||||
xmlWriter.writeTextElement("exitPoint", QString::number(cueTrack.exitPoint));
|
||||
xmlWriter.writeTextElement("audioLayer", QString::number(cueTrack.audioLayer));
|
||||
xmlWriter.writeTextElement("active", cueTrack.active ? "true" : "false");
|
||||
|
||||
xmlWriter.writeEndElement();
|
||||
xmlWriter.writeEndDocument();
|
||||
|
@ -507,9 +536,9 @@ CueTrack loadCueTrackFromXml(const QString& filename) {
|
|||
cueTrack.exitPoint = xmlReader.readElementText().toInt();
|
||||
} else if (elementName == "audioLayer") {
|
||||
cueTrack.audioLayer = xmlReader.readElementText().toInt();
|
||||
} else if (elementName == "active") {
|
||||
cueTrack.active = xmlReader.readElementText() == "true";
|
||||
}
|
||||
} else if (elementName == "duration") {
|
||||
cueTrack.duration = xmlReader.readElementText().toInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (xmlReader.hasError()) {
|
||||
|
@ -528,3 +557,39 @@ void CueTrackListWidget::clearTableWidget()
|
|||
tableWidget->clear();
|
||||
tableWidget->setRowCount(0);
|
||||
}
|
||||
|
||||
void CueTrackListWidget::cueTrackAtEnd(int layer)
|
||||
{
|
||||
for (int i = 0; i < m_size; i++)
|
||||
{
|
||||
CueTrack * cur = cueTracks.at(i);
|
||||
if (cur->audioLayer == layer)
|
||||
{
|
||||
cur->active = false;
|
||||
}
|
||||
}
|
||||
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);
|
||||
|
||||
public slots:
|
||||
CueTrack* getSelectedTrack();
|
||||
CueTrack* getSelectedTrack(bool advance);
|
||||
void createNewCueTrack();
|
||||
void editCueTrack();
|
||||
void deleteCueTrack();
|
||||
|
@ -31,6 +31,8 @@ public slots:
|
|||
void clearCueTrackList();
|
||||
void setLastUserCueNumber(size_t n) { lastUserCueNumber = n; }
|
||||
size_t getLastUserCueNumber() { return lastUserCueNumber; }
|
||||
void cueTrackAtEnd(int layer);
|
||||
void redrawCueTrackList();
|
||||
|
||||
private:
|
||||
std::vector<CueTrack *> cueTracks;
|
||||
|
@ -39,7 +41,8 @@ private:
|
|||
int m_size = 0;
|
||||
int size() { return m_size; }
|
||||
int selectedIndex = 0;
|
||||
size_t lastUserCueNumber = 0;
|
||||
int lastUserCueNumber = 0;
|
||||
CueTrack* copiedCue = nullptr;
|
||||
|
||||
private slots:
|
||||
void addCueTrack(CueTrack* cue);
|
||||
|
@ -52,12 +55,14 @@ private slots:
|
|||
void cueTrackLoadDefaults(CueTrack * t);
|
||||
void copyCueTrack(CueTrack *src, CueTrack *dst);
|
||||
void sortCueTrackList();
|
||||
void redrawCueTrackList();
|
||||
void clearTableWidget();
|
||||
std::string cueTrackToXml(const CueTrack& cueTrack);
|
||||
|
||||
void copyCueTrack();
|
||||
void pasteCueTrack();
|
||||
void cutCueTrack();
|
||||
|
||||
signals:
|
||||
void changeSelectedIndex(int index);
|
||||
void goAction(int channel);
|
||||
};
|
||||
#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>
|
||||
|
||||
static Status stringToStatus(QString *statusStr) {
|
||||
if (!statusStr->compare("Stopped")) return Stopped;
|
||||
if (!statusStr->compare("Stop")) return Stopped;
|
||||
else if (!statusStr->compare("Paused") ) return Paused;
|
||||
else if (!statusStr->compare("Play 1")) return PlayingOnce;
|
||||
else if (!statusStr->compare("Play Loop")) return PlayingLoop;
|
||||
|
@ -91,6 +91,7 @@ struct layerData {
|
|||
int bus1Vol;
|
||||
int bus2Vol;
|
||||
float level;
|
||||
int fade;
|
||||
};
|
||||
|
||||
struct CueTrack {
|
||||
|
@ -112,7 +113,9 @@ struct CueTrack {
|
|||
int entryPoint; // 0 - 255
|
||||
int exitPoint; // 0 - 255
|
||||
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
|
||||
|
|
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);
|
||||
exitPointSpin = new QSpinBox(this);
|
||||
layout->addRow("Exit Point", exitPointSpin);
|
||||
multiCheck = new QCheckBox(this);
|
||||
layout->addRow("Multi Cue", multiCheck);
|
||||
statusCombo->addItem(statusToString(Status::Stopped));
|
||||
statusCombo->addItem(statusToString(Status::Paused));
|
||||
statusCombo->addItem(statusToString(Status::PlayingOnce));
|
||||
|
@ -92,6 +94,7 @@ void EditCueTrackWidget::loadCueTrack(CueTrack cueTrack) {
|
|||
audioLayerSpin->setValue(cueTrack.audioLayer);
|
||||
QString tmp = statusToString(cueTrack.status);
|
||||
statusCombo->setCurrentIndex(statusCombo->findText(tmp));
|
||||
multiCheck->setChecked(cueTrack.multi);
|
||||
}
|
||||
|
||||
CueTrack EditCueTrackWidget::saveCueTrack() {
|
||||
|
@ -114,6 +117,7 @@ CueTrack EditCueTrackWidget::saveCueTrack() {
|
|||
cueTrack.pan = panSpin->value();
|
||||
cueTrack.pitch = pitchSpin->value();
|
||||
cueTrack.description.append(descriptionEdit->text().toUtf8().constData());
|
||||
cueTrack.multi = multiCheck->isChecked();
|
||||
return cueTrack;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ private:
|
|||
QSpinBox *exitPointSpin;
|
||||
QComboBox *statusCombo;
|
||||
QSpinBox *audioLayerSpin;
|
||||
QCheckBox *multiCheck;
|
||||
QPushButton *browseButton;
|
||||
QPushButton *saveButton;
|
||||
QPushButton *cancelButton;
|
||||
|
|
|
@ -60,6 +60,6 @@ void libreMediaServerAudioUi::olasetup()
|
|||
|
||||
void libreMediaServerAudioUi::launchShowPlayerWindow()
|
||||
{
|
||||
qDebug() << "launch show player";
|
||||
//m_showPlayer->showMaximized();
|
||||
m_showPlayer->show();
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>400</height>
|
||||
<width>640</width>
|
||||
<height>800</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
|
@ -23,8 +23,8 @@
|
|||
<string>LibreMediaServer</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset>
|
||||
<normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/icon.png</normaloff>:/buttons/resources/icon.png</iconset>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget"/>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
|
@ -32,7 +32,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<width>640</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -56,6 +56,8 @@
|
|||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<resources>
|
||||
<include location="../lms-resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
|
@ -139,8 +139,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
#ifndef NOGUI
|
||||
if (m_ui) {
|
||||
m_lmsUi->m_aw->filterParamChanged(layer, channel, value);
|
||||
m_played.clear();
|
||||
m_played.append(m_ola->getValue(layer, DMX_FILE));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -172,14 +170,16 @@ void libreMediaServerAudio::refreshUi() {
|
|||
}
|
||||
m_lmsUi->m_aw->levelChanged(i, m_mae.getLevel(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_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
||||
m_lmsUi->m_showPlayer->cueTrackAtEnd(i);
|
||||
}
|
||||
if (m_currentStatus[i] == Status::PlayingFolder) {
|
||||
uint last = m_played.last();
|
||||
uint last = 0;
|
||||
if (!m_played.isEmpty())
|
||||
last = m_played.last() + 1;
|
||||
int folder = m_ola->getValue(i, DMX_FOLDER);
|
||||
last++;
|
||||
if (last < m_mediaLibrary->getMediaFolderCount(folder)) {
|
||||
this->loadMedia(i, folder, last);
|
||||
m_mae.playbackChanged(i, Status::PlayingFolder);
|
||||
|
@ -187,6 +187,7 @@ void libreMediaServerAudio::refreshUi() {
|
|||
else {
|
||||
m_currentStatus[i] = Status::Stopped;
|
||||
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
|
||||
m_lmsUi->m_showPlayer->cueTrackAtEnd(i);
|
||||
}
|
||||
}
|
||||
else if (m_currentStatus[i] == Status::PlayingFolderLoop) {
|
||||
|
@ -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(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(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)));
|
||||
m_refreshUi = new QTimer(this);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
|
|
@ -66,6 +66,7 @@ private:
|
|||
private slots:
|
||||
void refreshUi();
|
||||
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 uiLoadMedia(int layer, QString s);
|
||||
|
||||
|
|
|
@ -434,8 +434,15 @@ ma_result MiniAudioEngine::printFormatInfo(int layer)
|
|||
|
||||
// Expects between 0 and 65535 vol value
|
||||
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].fade = ms;
|
||||
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
||||
return;
|
||||
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;
|
||||
} else
|
||||
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)
|
||||
{
|
||||
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);
|
||||
if (m_mae.currentStatus[layer].cursor > 0)
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ public:
|
|||
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
||||
ma_result loadMedia(int layer, char *media);
|
||||
void volChanged(int layer, int vol);
|
||||
void volChanged(int layer, int vol, int ms);
|
||||
void panChanged(int layer, float pan);
|
||||
void pitchChanged(int layer, float pitch);
|
||||
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->LoadCueList, SIGNAL(clicked()), this, SLOT(loadCueTrackList()));
|
||||
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
|
||||
filesLoaded = 0;
|
||||
connect(ui->cueListWidget, SIGNAL(changeSelectedIndex(int)), this, SLOT(updateIndex(int)));
|
||||
currentStatus = Status::Iddle;
|
||||
for(int i = 0; i < MAX_LAYERS; i++)
|
||||
for(int i = 0; i < MAX_LAYERS; i++) {
|
||||
layersUsed[i] = -1;
|
||||
connect(ui->cueListWidget, SIGNAL(changeSelectedIndex(int)), this, SLOT(changeSelectedIndex(int)));
|
||||
cueTrackWidgetPlaying[i] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
ShowPlayer::~ShowPlayer() {}
|
||||
|
@ -27,48 +28,52 @@ void ShowPlayer::onAddTrack() {
|
|||
|
||||
void ShowPlayer::go()
|
||||
{
|
||||
ui->activeCueNumber->display(lastIndex);
|
||||
CueTrack* current = ui->cueListWidget->getSelectedTrack();
|
||||
if (!current)
|
||||
CueTrack *goCue = ui->cueListWidget->getSelectedTrack(true);
|
||||
if (!goCue)
|
||||
return;
|
||||
if (current->audioLayer < 0)
|
||||
return;
|
||||
ui->activeCueLabel->setText(current->name.data());
|
||||
for (int i = 0; i < MAX_LAYERS; i++) {
|
||||
if (layersUsed[i] == -1) {
|
||||
layersUsed[i] = current->userNumber;
|
||||
break;
|
||||
}
|
||||
current[goCue->audioLayer] = goCue;
|
||||
playCueTrack(goCue);
|
||||
if (goCue->multi)
|
||||
go();
|
||||
}
|
||||
|
||||
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())
|
||||
emit uiLoadMedia(current->audioLayer, current->filePath.data());
|
||||
updateTrackStateInEngine(current);
|
||||
emit uiPlaybackChanged(current->audioLayer, current->status);
|
||||
filesLoaded++;
|
||||
updateTrackStateInEngine(current[c]);
|
||||
emit uiPlaybackChanged(current[c]->audioLayer, current[c]->status);
|
||||
switch (current[c]->status) {
|
||||
case Status::PlayingOnce:
|
||||
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) {
|
||||
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::Pitch, track->pitch * 128);
|
||||
emit uiSliderChanged(track->audioLayer, Slider::Bus1, track->bus1 * 255 * 2.55);
|
||||
emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55);
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("XML Files (*.xml)"));
|
||||
if (fileName.isEmpty())
|
||||
return;
|
||||
ui->cueListWidget->loadCueTrackList(fileName.toStdString());
|
||||
ui->cueListWidget->loadCueTrackList(fileName.toStdString());
|
||||
}
|
||||
|
||||
void ShowPlayer::saveCueTrackList()
|
||||
|
@ -78,3 +83,64 @@ void ShowPlayer::saveCueTrackList()
|
|||
return;
|
||||
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 "cuetracklistwidget.h"
|
||||
#include "cuetrackwidget.h"
|
||||
#include "dialgroup.h"
|
||||
#include "settings.h"
|
||||
#include "ui_showplayer.h"
|
||||
|
||||
|
@ -24,25 +26,33 @@ public:
|
|||
explicit ShowPlayer(QWidget *parent = nullptr);
|
||||
~ShowPlayer();
|
||||
|
||||
public slots:
|
||||
void cueTrackAtEnd(int layer);
|
||||
|
||||
private:
|
||||
Ui::ShowPlayer *ui;
|
||||
Status currentStatus = Status::Iddle;
|
||||
size_t filesLoaded = 0;
|
||||
int layersUsed[MAX_LAYERS];
|
||||
int lastIndex = 0;
|
||||
|
||||
void updateTrackStateInEngine(CueTrack *track);
|
||||
CueTrack *current[MAX_LAYERS];
|
||||
CueTrackWidget *cueTrackWidgetPlaying[MAX_LAYERS];
|
||||
CueTrackWidget *addCueTrackWidget(CueTrack *track);
|
||||
|
||||
private slots:
|
||||
void updateTrackStateInEngine(CueTrack *track);
|
||||
void onAddTrack();
|
||||
void go();
|
||||
void changeSelectedIndex(int i);
|
||||
void loadCueTrackList();
|
||||
void saveCueTrackList();
|
||||
void cueFinished(int channel);
|
||||
void removeCueTrackWidget(int index);
|
||||
void playCueTrack(CueTrack *track);
|
||||
void goAction(int channel);
|
||||
void updateIndex(int index);
|
||||
|
||||
signals:
|
||||
void uiPlaybackChanged(int layer, Status s);
|
||||
void uiSliderChanged(int layer, Slider s, int vol);
|
||||
void uiSliderChangedFaded(int layer, Slider s, int vol, int ms);
|
||||
void uiLoadMedia(int layer, QString s);
|
||||
};
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>743</width>
|
||||
<height>671</height>
|
||||
<width>800</width>
|
||||
<height>802</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
|
@ -19,137 +19,50 @@
|
|||
<property name="windowTitle">
|
||||
<string>Show Player</string>
|
||||
</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">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<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>
|
||||
<widget class="QSplitter" name="splitter_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</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">
|
||||
<layout class="QHBoxLayout" name="ButtonToolBarLayout">
|
||||
<layout class="QHBoxLayout" name="ButtonToolBarLayout" stretch="0,0,0,0,0,0,0,0">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMinimumSize</enum>
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>100</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>100</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="LoadCueList">
|
||||
<property name="toolTip">
|
||||
<string>Load Cue List</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Load CueList</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/load_button.png</normaloff>../resources/load_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/load_button.png</normaloff>:/buttons/resources/load_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -161,12 +74,15 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="SaveCueList">
|
||||
<property name="toolTip">
|
||||
<string>Save Cue List</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Save CueList.</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/save_button.png</normaloff>../resources/save_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/save_button.png</normaloff>:/buttons/resources/save_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -184,12 +100,21 @@
|
|||
</item>
|
||||
<item>
|
||||
<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">
|
||||
<string>...</string>
|
||||
<string>Copy Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/copy_button.png</normaloff>../resources/copy_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/copy_button.png</normaloff>:/buttons/resources/copy_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -202,17 +127,17 @@
|
|||
<item>
|
||||
<widget class="QToolButton" name="CutCue">
|
||||
<property name="toolTip">
|
||||
<string>Load Cue List</string>
|
||||
<string>Cut Cue</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Load Cue List</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Cut Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/cut_button.png</normaloff>../resources/cut_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/cut_button.png</normaloff>:/buttons/resources/cut_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -224,12 +149,15 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="PasteCue">
|
||||
<property name="toolTip">
|
||||
<string>Paste Cue</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Paste Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/paste_button.png</normaloff>../resources/paste_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/paste_button.png</normaloff>:/buttons/resources/paste_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -244,12 +172,15 @@
|
|||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>New Cue</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>New Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/new_button.png</normaloff>../resources/new_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/new_button.png</normaloff>:/buttons/resources/new_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -264,12 +195,15 @@
|
|||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit Cue</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Edit Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/edit_button.png</normaloff>../resources/edit_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/edit_button.png</normaloff>:/buttons/resources/edit_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -284,12 +218,15 @@
|
|||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Remove Cue</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>Delete Cue</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../resources/remove_button.png</normaloff>../resources/remove_button.png</iconset>
|
||||
<iconset resource="../lms-resources.qrc">
|
||||
<normaloff>:/buttons/resources/delete_button.png</normaloff>:/buttons/resources/delete_button.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -301,25 +238,101 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
<widget class="QSplitter" name="splitter_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="inputMethodHints">
|
||||
<set>Qt::ImhPreferLowercase</set>
|
||||
<widget class="QPushButton" name="goButton">
|
||||
<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/>
|
||||
</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>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>
|
||||
<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>
|
||||
</item>
|
||||
|
@ -332,13 +345,20 @@
|
|||
<header>src/cuetracklistwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CueTrackWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>src/cuetrackwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>cueListWidget</tabstop>
|
||||
<tabstop>NewCue</tabstop>
|
||||
<tabstop>EditCue</tabstop>
|
||||
<tabstop>RemoveCue</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<resources>
|
||||
<include location="../lms-resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
|
@ -38,16 +38,16 @@ SliderGroup::SliderGroup(QString name,
|
|||
"margin: 0px;}"
|
||||
"QSlider::groove:vertical {"
|
||||
"border: 1px solid #999999;"
|
||||
"width: 25px;"
|
||||
"margin: -4px;}"
|
||||
"width: 25px;}"
|
||||
"QSlider::handle:vertical {"
|
||||
"background: white;"
|
||||
"border: 1px solid #5c5c5c;"
|
||||
"border: 2px solid #5c5c5c;"
|
||||
"width: 29px;"
|
||||
"height: 7px;"
|
||||
"margin: -2px;"
|
||||
"height: 10px;"
|
||||
"border-radius: 2px;}"
|
||||
"Qslider::tickmarks:vertical {background: white;"
|
||||
"Qslider::tickmarks:vertical {"
|
||||
"background-color: black;"
|
||||
"background: red;"
|
||||
"color: white;}"
|
||||
"QSlider::add-page:vertical {background: blue;}"
|
||||
"QSlider::sub-page:vertical {background: #20182d;}");
|
||||
|
|