wip show player
This commit is contained in:
parent
33d9cd699e
commit
9c97f20470
23 changed files with 89728 additions and 20 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -44,3 +44,5 @@ log/**
|
||||||
|
|
||||||
*~
|
*~
|
||||||
*.autosave
|
*.autosave
|
||||||
|
|
||||||
|
*.vscode*
|
||||||
|
|
|
@ -2,12 +2,15 @@ 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/cuetracklistwidget.h \
|
||||||
|
src/cuetrackwidget.h \
|
||||||
|
src/showplayer.h \
|
||||||
src/clickabledoublespinbox.h \
|
src/clickabledoublespinbox.h \
|
||||||
src/clickablelabel.h \
|
src/clickablelabel.h \
|
||||||
src/clickableslider.h \
|
src/clickableslider.h \
|
||||||
src/dmxwidget.h \
|
src/dmxwidget.h \
|
||||||
src/filterbankwidget.h \
|
src/filterbankwidget.h \
|
||||||
src/libremediaserver-audio-gui.h \
|
src/libremediaserver-audio-ui.h \
|
||||||
src/ma_writer_node.h \
|
src/ma_writer_node.h \
|
||||||
src/main.h \
|
src/main.h \
|
||||||
src/medialibrary.h \
|
src/medialibrary.h \
|
||||||
|
@ -20,14 +23,17 @@ 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/trackdialog.h
|
||||||
SOURCES += src/main.cpp \
|
SOURCES += src/main.cpp \
|
||||||
|
src/cuetrackwidget.cpp \
|
||||||
|
src/showplayer.cpp \
|
||||||
src/clickabledoublespinbox.cpp \
|
src/clickabledoublespinbox.cpp \
|
||||||
src/clickablelabel.cpp \
|
src/clickablelabel.cpp \
|
||||||
src/clickableslider.cpp \
|
src/clickableslider.cpp \
|
||||||
src/dmxwidget.cpp \
|
src/dmxwidget.cpp \
|
||||||
src/filterbankwidget.cpp \
|
src/filterbankwidget.cpp \
|
||||||
src/libremediaserver-audio-gui.cpp \
|
src/libremediaserver-audio-ui.cpp \
|
||||||
src/libremediaserver-audio.cpp \
|
src/libremediaserver-audio.cpp \
|
||||||
src/medialibrary.cpp \
|
src/medialibrary.cpp \
|
||||||
src/miniaudio.c \
|
src/miniaudio.c \
|
||||||
|
@ -37,14 +43,16 @@ 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 \
|
||||||
FORMS += src/libremediaserver-audio-gui.ui
|
src/trackdialog.cpp
|
||||||
|
FORMS += \
|
||||||
|
src/showplayer.ui \
|
||||||
|
src/libremediaserver-audio-ui.ui
|
||||||
CCFLAG += -msse2 -mavx2
|
CCFLAG += -msse2 -mavx2
|
||||||
QMAKE_CXXFLAGS += $$(CXXFLAG)
|
QMAKE_CXXFLAGS += $$(CXXFLAG)
|
||||||
QMAKE_CFLAGS += $$(CCFLAG)
|
QMAKE_CFLAGS += $$(CCFLAG)
|
||||||
QMAKE_LFLAGS += $$(LDFLAG)
|
QMAKE_LFLAGS += $$(LDFLAG)
|
||||||
LIBS += -lola -lolacommon -ldl -lpthread -lm
|
LIBS += -lola -lolacommon -ldl -lpthread -lm
|
||||||
# -lcitp
|
|
||||||
OTHER_FILES += \
|
OTHER_FILES += \
|
||||||
LICENSE.txt \
|
LICENSE.txt \
|
||||||
docs/compiling.txt \
|
docs/compiling.txt \
|
||||||
|
|
23
src/.qmake.stash
Normal file
23
src/.qmake.stash
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
QMAKE_CXX.QT_COMPILER_STDCXX = 201703L
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 11
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 4
|
||||||
|
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
|
||||||
|
QMAKE_CXX.COMPILER_MACROS = \
|
||||||
|
QT_COMPILER_STDCXX \
|
||||||
|
QMAKE_GCC_MAJOR_VERSION \
|
||||||
|
QMAKE_GCC_MINOR_VERSION \
|
||||||
|
QMAKE_GCC_PATCH_VERSION
|
||||||
|
QMAKE_CXX.INCDIRS = \
|
||||||
|
/usr/include/c++/11 \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/11 \
|
||||||
|
/usr/include/c++/11/backward \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/11/include \
|
||||||
|
/usr/local/include \
|
||||||
|
/usr/include/x86_64-linux-gnu \
|
||||||
|
/usr/include
|
||||||
|
QMAKE_CXX.LIBDIRS = \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/11 \
|
||||||
|
/usr/lib/x86_64-linux-gnu \
|
||||||
|
/usr/lib \
|
||||||
|
/lib/x86_64-linux-gnu \
|
||||||
|
/lib
|
18
src/.vscode/c_cpp_properties.json
vendored
Normal file
18
src/.vscode/c_cpp_properties.json
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "linux-gcc-x64",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"compilerPath": "/usr/bin/gcc",
|
||||||
|
"cStandard": "${default}",
|
||||||
|
"cppStandard": "${default}",
|
||||||
|
"intelliSenseMode": "linux-gcc-x64",
|
||||||
|
"compilerArgs": [
|
||||||
|
""
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
24
src/.vscode/launch.json
vendored
Normal file
24
src/.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "C/C++ Runner: Debug Session",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"externalConsole": false,
|
||||||
|
"cwd": "/home/snt/Documentos/lab/lms/lms-audio/src",
|
||||||
|
"program": "/home/snt/Documentos/lab/lms/lms-audio/src/build/Debug/outDebug",
|
||||||
|
"MIMode": "gdb",
|
||||||
|
"miDebuggerPath": "gdb",
|
||||||
|
"setupCommands": [
|
||||||
|
{
|
||||||
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
"text": "-enable-pretty-printing",
|
||||||
|
"ignoreFailures": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
59
src/.vscode/settings.json
vendored
Normal file
59
src/.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"C_Cpp_Runner.cCompilerPath": "gcc",
|
||||||
|
"C_Cpp_Runner.cppCompilerPath": "g++",
|
||||||
|
"C_Cpp_Runner.debuggerPath": "gdb",
|
||||||
|
"C_Cpp_Runner.cStandard": "",
|
||||||
|
"C_Cpp_Runner.cppStandard": "",
|
||||||
|
"C_Cpp_Runner.msvcBatchPath": "",
|
||||||
|
"C_Cpp_Runner.useMsvc": false,
|
||||||
|
"C_Cpp_Runner.warnings": [
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wpedantic",
|
||||||
|
"-Wshadow",
|
||||||
|
"-Wformat=2",
|
||||||
|
"-Wcast-align",
|
||||||
|
"-Wconversion",
|
||||||
|
"-Wsign-conversion",
|
||||||
|
"-Wnull-dereference"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.msvcWarnings": [
|
||||||
|
"/W4",
|
||||||
|
"/permissive-",
|
||||||
|
"/w14242",
|
||||||
|
"/w14287",
|
||||||
|
"/w14296",
|
||||||
|
"/w14311",
|
||||||
|
"/w14826",
|
||||||
|
"/w44062",
|
||||||
|
"/w44242",
|
||||||
|
"/w14905",
|
||||||
|
"/w14906",
|
||||||
|
"/w14263",
|
||||||
|
"/w44265",
|
||||||
|
"/w14928"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.enableWarnings": true,
|
||||||
|
"C_Cpp_Runner.warningsAsError": false,
|
||||||
|
"C_Cpp_Runner.compilerArgs": [],
|
||||||
|
"C_Cpp_Runner.linkerArgs": [],
|
||||||
|
"C_Cpp_Runner.includePaths": [],
|
||||||
|
"C_Cpp_Runner.includeSearch": [
|
||||||
|
"*",
|
||||||
|
"**/*"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.excludeSearch": [
|
||||||
|
"**/build",
|
||||||
|
"**/build/**",
|
||||||
|
"**/.*",
|
||||||
|
"**/.*/**",
|
||||||
|
"**/.vscode",
|
||||||
|
"**/.vscode/**"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.useAddressSanitizer": false,
|
||||||
|
"C_Cpp_Runner.useUndefinedSanitizer": false,
|
||||||
|
"C_Cpp_Runner.useLeakSanitizer": false,
|
||||||
|
"C_Cpp_Runner.showCompilationTime": false,
|
||||||
|
"C_Cpp_Runner.useLinkTimeOptimization": false,
|
||||||
|
"C_Cpp_Runner.msvcSecureNoWarnings": false
|
||||||
|
}
|
|
@ -19,7 +19,6 @@ public:
|
||||||
explicit AudioLayerWidget(QWidget *parent = 0, int layer = 0);
|
explicit AudioLayerWidget(QWidget *parent = 0, int layer = 0);
|
||||||
~AudioLayerWidget();
|
~AudioLayerWidget();
|
||||||
|
|
||||||
// From OLA -> LibreMediaServer -> AudioWidget
|
|
||||||
void setMediaFile(QString file);
|
void setMediaFile(QString file);
|
||||||
void setDuration(float dur);
|
void setDuration(float dur);
|
||||||
void setCurrentTime(float progress);
|
void setCurrentTime(float progress);
|
||||||
|
|
157
src/cuetrackwidget.cpp
Normal file
157
src/cuetrackwidget.cpp
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
#include "cuetrackwidget.h"
|
||||||
|
|
||||||
|
CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) {
|
||||||
|
setupUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::setupUi() {
|
||||||
|
auto layout = new QHBoxLayout(this);
|
||||||
|
|
||||||
|
userNumberSpin = new QSpinBox(this);
|
||||||
|
userNumberSpin->setRange(0, 1000);
|
||||||
|
userNumberSpin->setToolTip("Cue user number");
|
||||||
|
layout->addWidget(userNumberSpin);
|
||||||
|
|
||||||
|
filePathEdit = new QLineEdit(this);
|
||||||
|
filePathEdit->setToolTip("File name");
|
||||||
|
layout->addWidget(filePathEdit);
|
||||||
|
|
||||||
|
volumeSpin = new QSpinBox(this);
|
||||||
|
volumeSpin->setRange(0, 65535);
|
||||||
|
volumeSpin->setToolTip("Volume");
|
||||||
|
layout->addWidget(volumeSpin);
|
||||||
|
|
||||||
|
bus1Spin = new QSpinBox(this);
|
||||||
|
bus1Spin->setRange(0, 255);
|
||||||
|
bus1Spin->setToolTip("Bus 1");
|
||||||
|
layout->addWidget(bus1Spin);
|
||||||
|
|
||||||
|
bus2Spin = new QSpinBox(this);
|
||||||
|
bus2Spin->setRange(0, 255);
|
||||||
|
bus2Spin->setToolTip("Bus 2");
|
||||||
|
layout->addWidget(bus2Spin);
|
||||||
|
|
||||||
|
panSpin = new QSpinBox(this);
|
||||||
|
panSpin->setRange(0, 255);
|
||||||
|
panSpin->setToolTip("Pan");
|
||||||
|
layout->addWidget(panSpin);
|
||||||
|
|
||||||
|
pitchSpin = new QSpinBox(this);
|
||||||
|
pitchSpin->setRange(0, 255);
|
||||||
|
pitchSpin->setToolTip("Pitch");
|
||||||
|
layout->addWidget(pitchSpin);
|
||||||
|
|
||||||
|
statusCombo = new QComboBox(this);
|
||||||
|
setupStatusCombo();
|
||||||
|
statusCombo->setToolTip("Playback Status");
|
||||||
|
layout->addWidget(statusCombo);
|
||||||
|
|
||||||
|
fadeInSpin = new QSpinBox(this);
|
||||||
|
fadeInSpin->setRange(0, 10000);
|
||||||
|
fadeInSpin->setToolTip("Fade In Time");
|
||||||
|
layout->addWidget(fadeInSpin);
|
||||||
|
|
||||||
|
fadeOutSpin = new QSpinBox(this);
|
||||||
|
fadeOutSpin->setRange(0, 10000);
|
||||||
|
fadeOutSpin->setToolTip("Fade Out Time");
|
||||||
|
layout->addWidget(fadeOutSpin);
|
||||||
|
|
||||||
|
waitInSpin = new QSpinBox(this);
|
||||||
|
waitInSpin->setRange(0, 10000);
|
||||||
|
waitInSpin->setToolTip("Wait In Time");
|
||||||
|
layout->addWidget(waitInSpin);
|
||||||
|
|
||||||
|
waitOutSpin = new QSpinBox(this);
|
||||||
|
waitOutSpin->setRange(0, 10000);
|
||||||
|
waitOutSpin->setToolTip("Wait Out Time");
|
||||||
|
layout->addWidget(waitOutSpin);
|
||||||
|
|
||||||
|
stopAtEndCheck = new QCheckBox(this);
|
||||||
|
stopAtEndCheck->setToolTip("Halt");
|
||||||
|
layout->addWidget(stopAtEndCheck);
|
||||||
|
|
||||||
|
nameEdit = new QLineEdit(this);
|
||||||
|
nameEdit->setToolTip("Cue Name");
|
||||||
|
layout->addWidget(nameEdit);
|
||||||
|
|
||||||
|
descriptionEdit = new QLineEdit(this);
|
||||||
|
descriptionEdit->setToolTip("Cue Notes");
|
||||||
|
layout->addWidget(descriptionEdit);
|
||||||
|
|
||||||
|
entryPointSpin = new QSpinBox(this);
|
||||||
|
entryPointSpin->setRange(0, 255);
|
||||||
|
entryPointSpin->setToolTip("Entry Point");
|
||||||
|
layout->addWidget(entryPointSpin);
|
||||||
|
|
||||||
|
exitPointSpin = new QSpinBox(this);
|
||||||
|
exitPointSpin->setRange(0, 255);
|
||||||
|
exitPointSpin->setToolTip("Exit Point");
|
||||||
|
layout->addWidget(exitPointSpin);
|
||||||
|
|
||||||
|
setLayout(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *CueTrackWidget::createHeader()
|
||||||
|
{
|
||||||
|
QWidget *ret = new QWidget();
|
||||||
|
|
||||||
|
auto layout = new QHBoxLayout(this);
|
||||||
|
QLabel *l = new QLabel("Cue Number");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("File Path");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Volume");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Bus 1");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Bus 2");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Pan");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Pitch");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Playback Status");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Fade In");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Fade Out");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Wait In");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Wait Out ");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Halt");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Name");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Notes");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Entry Point");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Exit Point");
|
||||||
|
layout->addWidget(l);
|
||||||
|
ret->setLayout(layout);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CueTrackWidget::setupStatusCombo() {
|
||||||
|
statusCombo = new QComboBox(this);
|
||||||
|
statusCombo->addItem("Stopped", Stopped);
|
||||||
|
statusCombo->addItem("Paused", Paused);
|
||||||
|
statusCombo->addItem("PlayingOnce", PlayingOnce);
|
||||||
|
statusCombo->addItem("PlayingLoop", PlayingLoop);
|
||||||
|
statusCombo->addItem("Iddle", Iddle);
|
||||||
|
statusCombo->addItem("PlayingFolder", PlayingFolder);
|
||||||
|
statusCombo->addItem("PlayingFolderLoop", PlayingFolderLoop);
|
||||||
|
statusCombo->addItem("PlayingFolderRandom", PlayingFolderRandom);
|
||||||
|
}
|
||||||
|
|
||||||
|
CueTrack CueTrackWidget::saveCueTrack() const {
|
||||||
|
CueTrack cueTrack;
|
||||||
|
cueTrack.filePath = filePathEdit->text().toStdString();
|
||||||
|
cueTrack.volume = volumeSpin->value();
|
||||||
|
// Guarda el resto de los campos aquí...
|
||||||
|
|
||||||
|
cueTrack.status = static_cast<Status>(statusCombo->currentData().toInt());
|
||||||
|
return cueTrack;
|
||||||
|
}
|
65
src/cuetrackwidget.h
Normal file
65
src/cuetrackwidget.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#ifndef CUETRACKWIDGET_H
|
||||||
|
#define CUETRACKWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QCheckBox>
|
||||||
|
#include <QLabel>
|
||||||
|
#include "defines.h"
|
||||||
|
|
||||||
|
class CueTrackWidget : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CueTrackWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
CueTrack saveCueTrack() const;
|
||||||
|
QWidget *createHeader();
|
||||||
|
int audioLayer = 0;
|
||||||
|
|
||||||
|
int getVolume() const { return volumeSpin->value(); }
|
||||||
|
int getPan() const { return panSpin->value(); }
|
||||||
|
int getPitch() const { return pitchSpin->value(); }
|
||||||
|
int getBus1() const { return bus1Spin->value(); }
|
||||||
|
int getBus2() const { return bus2Spin->value(); }
|
||||||
|
Status getStatus() const { return static_cast<Status>(statusCombo->currentIndex()); }
|
||||||
|
QString getFilePath() const { return filePathEdit->text(); }
|
||||||
|
void setFilePath(QString text) const { filePathEdit->setText(text);};
|
||||||
|
int getFadeIn() const { return fadeInSpin->value(); }
|
||||||
|
int getFadeOut() const { return fadeOutSpin->value(); }
|
||||||
|
int getWaitIn() const { return waitInSpin->value(); }
|
||||||
|
int getWaitOut() const { return waitOutSpin->value(); }
|
||||||
|
bool getStopAtEnd() const { return stopAtEndCheck->isChecked(); }
|
||||||
|
QString getName() const { return nameEdit->text(); }
|
||||||
|
QString getDescription() const { return descriptionEdit->text(); }
|
||||||
|
int getUserNumber() const { return userNumberSpin->value(); }
|
||||||
|
int getEntryPoint() const { return entryPointSpin->value(); }
|
||||||
|
int getExitPoint() const { return exitPointSpin->value(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QLineEdit* filePathEdit;
|
||||||
|
QSpinBox* volumeSpin;
|
||||||
|
QSpinBox* panSpin;
|
||||||
|
QSpinBox* pitchSpin;
|
||||||
|
QSpinBox* bus1Spin;
|
||||||
|
QSpinBox* bus2Spin;
|
||||||
|
QComboBox* statusCombo;
|
||||||
|
QSpinBox* fadeOutSpin;
|
||||||
|
QSpinBox* fadeInSpin;
|
||||||
|
QSpinBox* waitInSpin;
|
||||||
|
QSpinBox* waitOutSpin;
|
||||||
|
QCheckBox* stopAtEndCheck;
|
||||||
|
QLineEdit* nameEdit;
|
||||||
|
QLineEdit* descriptionEdit;
|
||||||
|
QSpinBox* userNumberSpin;
|
||||||
|
QSpinBox* entryPointSpin;
|
||||||
|
QSpinBox* exitPointSpin;
|
||||||
|
|
||||||
|
void setupUi();
|
||||||
|
void setupStatusCombo();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUETRACKWIDGET_H
|
|
@ -63,6 +63,19 @@ constexpr const char* statusToString(Status e) noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
static Status stringToStatus(QString *statusStr) {
|
||||||
|
if (statusStr->compare("Stopped")) return Stopped;
|
||||||
|
else if (statusStr->compare("Paused")) return Paused;
|
||||||
|
else if (statusStr->compare("PlayingOnce")) return PlayingOnce;
|
||||||
|
else if (statusStr->compare("PlayingLoop")) return PlayingLoop;
|
||||||
|
else if (statusStr->compare("Iddle")) return Iddle;
|
||||||
|
else if (statusStr->compare("PlayingFolder")) return PlayingFolder;
|
||||||
|
else if (statusStr->compare("PlayingFolderLoop")) return PlayingFolderLoop;
|
||||||
|
else if (statusStr->compare("PlayingFolderRandom")) return PlayingFolderRandom;
|
||||||
|
else return Stopped; // Valor por defecto o manejar como error
|
||||||
|
}
|
||||||
|
|
||||||
struct layerData {
|
struct layerData {
|
||||||
QString media;
|
QString media;
|
||||||
Status status;
|
Status status;
|
||||||
|
@ -79,5 +92,27 @@ struct layerData {
|
||||||
int bus2Vol;
|
int bus2Vol;
|
||||||
float level;
|
float level;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CueTrack {
|
||||||
|
std::string filePath;
|
||||||
|
int volume = 0; // 0 - 65535 ToDo: change to db -85 - 0
|
||||||
|
int pan = 128; // 0 - 255
|
||||||
|
int pitch = 128; // 0 - 255
|
||||||
|
int bus1 = 255; // 0 - 255
|
||||||
|
int bus2 = 255; // 0 - 255
|
||||||
|
Status status;
|
||||||
|
int fadeOut = 3; // ToDo: change to float or milliseconds
|
||||||
|
int fadeIn = 3;
|
||||||
|
int waitIn = 0;
|
||||||
|
int waitOut = 0;
|
||||||
|
bool stopAtEnd = false; // trigger next cue when this is executed
|
||||||
|
std::string name;
|
||||||
|
std::string description;
|
||||||
|
int userNumber; // cue user id
|
||||||
|
int entryPoint; // 0 - 255
|
||||||
|
int exitPoint; // 0 - 255
|
||||||
|
int audioLayer; // internal audio layer used when cue is loaded
|
||||||
|
};
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
#endif // DEFINES_H
|
#endif // DEFINES_H
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libremediaserver-audio-gui.h"
|
#include "libremediaserver-audio-ui.h"
|
||||||
|
|
||||||
|
|
||||||
libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
||||||
|
@ -35,6 +35,7 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
||||||
topWidget->setContentsMargins(0, 0, 0, 0);
|
topWidget->setContentsMargins(0, 0, 0, 0);
|
||||||
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
||||||
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
||||||
|
connect(ui.actionLaunchShowPlayer, SIGNAL(triggered()), this, SLOT(launchShowPlayerWindow()));
|
||||||
this->setContentsMargins(0, 0, 0, 0);
|
this->setContentsMargins(0, 0, 0, 0);
|
||||||
this->setStyleSheet(
|
this->setStyleSheet(
|
||||||
"margin: 0px;"
|
"margin: 0px;"
|
||||||
|
@ -43,6 +44,7 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
||||||
"selection-color: blue;"
|
"selection-color: blue;"
|
||||||
"selection-background-color: green"
|
"selection-background-color: green"
|
||||||
);
|
);
|
||||||
|
m_showPlayer = new ShowPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
libreMediaServerAudioUi::~libreMediaServerAudioUi()
|
libreMediaServerAudioUi::~libreMediaServerAudioUi()
|
||||||
|
@ -55,3 +57,9 @@ void libreMediaServerAudioUi::olasetup()
|
||||||
view->load(QUrl("http://localhost:9090/ola.html"));
|
view->load(QUrl("http://localhost:9090/ola.html"));
|
||||||
view->show();
|
view->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void libreMediaServerAudioUi::launchShowPlayerWindow()
|
||||||
|
{
|
||||||
|
qDebug() << "launch show player";
|
||||||
|
m_showPlayer->show();
|
||||||
|
}
|
|
@ -26,7 +26,8 @@
|
||||||
#include "audiowidget.h"
|
#include "audiowidget.h"
|
||||||
#include "dmxwidget.h"
|
#include "dmxwidget.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "ui_libremediaserver-audio-gui.h"
|
#include "showplayer.h"
|
||||||
|
#include "ui_libremediaserver-audio-ui.h"
|
||||||
|
|
||||||
class libreMediaServerAudioUi : public QMainWindow
|
class libreMediaServerAudioUi : public QMainWindow
|
||||||
{
|
{
|
||||||
|
@ -37,12 +38,14 @@ public:
|
||||||
virtual ~libreMediaServerAudioUi();
|
virtual ~libreMediaServerAudioUi();
|
||||||
AudioWidget *m_aw;
|
AudioWidget *m_aw;
|
||||||
dmxWidget *m_dmxWidget;
|
dmxWidget *m_dmxWidget;
|
||||||
|
ShowPlayer *m_showPlayer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::LibreMediaServerAudio ui;
|
Ui::LibreMediaServerAudioUi ui;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void olasetup();
|
void olasetup();
|
||||||
|
void launchShowPlayerWindow();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LIBREMEDIASERVERAUDIOUI_H
|
#endif // LIBREMEDIASERVERAUDIOUI_H
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<author>Santi Noreña lms@criptomart.net</author>
|
<author>Santi Noreña lms@criptomart.net</author>
|
||||||
<class>LibreMediaServerAudio</class>
|
<class>LibreMediaServerAudioUi</class>
|
||||||
<widget class="QMainWindow" name="LibreMediaServerAudio">
|
<widget class="QMainWindow" name="LibreMediaServerAudioUi">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
<string>File</string>
|
<string>File</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionLaunch_OLA_Setup"/>
|
<addaction name="actionLaunch_OLA_Setup"/>
|
||||||
|
<addaction name="actionLaunchShowPlayer"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -49,6 +50,11 @@
|
||||||
<string>OLA Setup</string>
|
<string>OLA Setup</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionLaunchShowPlayer">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show Player</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
|
@ -226,6 +226,9 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
||||||
connect(m_lmsUi->m_aw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
connect(m_lmsUi->m_aw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
||||||
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(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);
|
m_refreshUi = new QTimer(this);
|
||||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||||
m_refreshUi->start(UI_REFRESH_TIME);
|
m_refreshUi->start(UI_REFRESH_TIME);
|
||||||
|
|
|
@ -30,7 +30,7 @@ using namespace std;
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
#include "libremediaserver-audio-gui.h"
|
#include "libremediaserver-audio-ui.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class libreMediaServerAudio : public QObject
|
class libreMediaServerAudio : public QObject
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "olathread.h"
|
#include "olathread.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "libremediaserver-audio.h"
|
#include "libremediaserver-audio.h"
|
||||||
#include "libremediaserver-audio-gui.h"
|
#include "libremediaserver-audio-ui.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
|
||||||
olaThread *m_ola;
|
olaThread *m_ola;
|
||||||
|
|
81196
src/miniaudio.c
Normal file
81196
src/miniaudio.c
Normal file
File diff suppressed because it is too large
Load diff
7766
src/miniaudio.h
Normal file
7766
src/miniaudio.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -502,7 +502,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
result = ma_sound_start(&m_mae.sounds[layer]);
|
result = ma_sound_start(&m_mae.sounds[layer]);
|
||||||
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 load 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, FADE_TIME * 2);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -57,12 +57,8 @@ typedef struct
|
||||||
|
|
||||||
class MiniAudioEngine
|
class MiniAudioEngine
|
||||||
{
|
{
|
||||||
friend class libreMediaServerAudio;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void audioDataCallback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount);
|
static void audioDataCallback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount);
|
||||||
|
|
||||||
protected:
|
|
||||||
MiniAudioEngine();
|
MiniAudioEngine();
|
||||||
void stopEngine();
|
void stopEngine();
|
||||||
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
||||||
|
|
87
src/showplayer.cpp
Normal file
87
src/showplayer.cpp
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include "showplayer.h"
|
||||||
|
|
||||||
|
QWidget *ShowPlayer::createHeader()
|
||||||
|
{
|
||||||
|
QWidget *ret = new QWidget();
|
||||||
|
|
||||||
|
auto layout = new QHBoxLayout(this);
|
||||||
|
QLabel *l = new QLabel("Cue Number");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("File Path");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Volume");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Bus 1");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Bus 2");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Pan");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Pitch");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Playback Status");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Fade In");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Fade Out");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Wait In");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Wait Out ");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Halt");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Name");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Notes");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Entry Point");
|
||||||
|
layout->addWidget(l);
|
||||||
|
l = new QLabel("Exit Point");
|
||||||
|
layout->addWidget(l);
|
||||||
|
ret->setLayout(layout);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowPlayer::ShowPlayer(QWidget *parent) :
|
||||||
|
QDialog(parent)
|
||||||
|
, ui(new Ui::ShowPlayer)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
connect(ui->addCueButton, SIGNAL(clicked()), this, SLOT(onAddTrack()));
|
||||||
|
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
|
||||||
|
QWidget *w = createHeader();
|
||||||
|
ui->headerLayout->addWidget(w);
|
||||||
|
currentTrackIndex = 0;
|
||||||
|
filesLoaded = 0;
|
||||||
|
currentStatus = Status::Iddle;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowPlayer::~ShowPlayer() {}
|
||||||
|
|
||||||
|
void ShowPlayer::onAddTrack() {
|
||||||
|
TrackDialog dialog;
|
||||||
|
dialog.show();
|
||||||
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
|
ui->cueListWidget->addCueTrackWidget(&dialog.track);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowPlayer::go()
|
||||||
|
{
|
||||||
|
CueTrackWidget* current = ui->cueListWidget->getTrackAtIndex(currentTrackIndex);
|
||||||
|
if (!current)
|
||||||
|
return;
|
||||||
|
for (int i = 0; i < MAX_LAYERS; i++) {
|
||||||
|
if (layersUsed[i] == -1) {
|
||||||
|
layersUsed[i] = currentTrackIndex;
|
||||||
|
current->audioLayer = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateTrackStateInEngine(currentTrackIndex, current->audioLayer);
|
||||||
|
emit uiLoadMedia(current->audioLayer, current->getFilePath());
|
||||||
|
emit uiPlaybackChanged(current->audioLayer, current->getStatus());
|
||||||
|
filesLoaded++;
|
||||||
|
currentTrackIndex++;
|
||||||
|
}
|
59
src/showplayer.h
Normal file
59
src/showplayer.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#ifndef SHOWPLAYER_H
|
||||||
|
#define SHOWPLAYER_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
#include "defines.h"
|
||||||
|
#include "cuetrackwidget.h"
|
||||||
|
#include "cuetracklistwidget.h"
|
||||||
|
#include "trackdialog.h"
|
||||||
|
#include "ui_showplayer.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ShowPlayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShowPlayer : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ShowPlayer(QWidget *parent = nullptr);
|
||||||
|
~ShowPlayer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ShowPlayer *ui;
|
||||||
|
CueTrackListWidget *cueListWidget; // Widget para mostrar los tracks
|
||||||
|
size_t currentTrackIndex;
|
||||||
|
Status currentStatus = Status::Iddle;
|
||||||
|
size_t filesLoaded = 0;
|
||||||
|
int layersUsed[MAX_LAYERS] = { -1 };
|
||||||
|
|
||||||
|
QWidget *createHeader();
|
||||||
|
|
||||||
|
void updateTrackStateInEngine(size_t index, int layer) {
|
||||||
|
CueTrackWidget *track = cueListWidget->getTrackAtIndex(index);
|
||||||
|
emit uiSliderChanged(layer, Slider::Volume, track->getVolume());
|
||||||
|
emit uiSliderChanged(layer, Slider::Pan, track->getPan());
|
||||||
|
emit uiSliderChanged(layer, Slider::Pitch, track->getPitch());
|
||||||
|
emit uiSliderChanged(layer, Slider::Bus1, track->getBus1());
|
||||||
|
emit uiSliderChanged(layer, Slider::Bus2, track->getBus2());
|
||||||
|
};
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onAddTrack();
|
||||||
|
void go();
|
||||||
|
//void stop();
|
||||||
|
//void nextTrack();
|
||||||
|
//void goToTrack(size_t i);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
|
void uiSliderChanged(int layer, Slider s, int vol);
|
||||||
|
void uiLoadMedia(int layer, QString s);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHOWPLAYER_H
|
194
src/showplayer.ui
Normal file
194
src/showplayer.ui
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ShowPlayer</class>
|
||||||
|
<widget class="QDialog" name="ShowPlayer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1200</width>
|
||||||
|
<height>800</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Show Player</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton" name="goButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>111</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>GO</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Space</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="masterWidget" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>661</width>
|
||||||
|
<height>111</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="activeCueLabel">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>311</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Active Cue</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="nextCueLabel">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>311</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Next Cue</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLCDNumber" name="activeCueNumber">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLCDNumber" name="nextCueNumber">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>64</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolButton" name="panicButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>570</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>P</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>9</x>
|
||||||
|
<y>229</y>
|
||||||
|
<width>1200</width>
|
||||||
|
<height>561</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>201</width>
|
||||||
|
<height>26</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="ButtonToolBarLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="rmCueButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="addCueButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="editCueButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>9</x>
|
||||||
|
<y>160</y>
|
||||||
|
<width>761</width>
|
||||||
|
<height>80</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="headerLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="sizeConstraint">
|
||||||
|
<enum>QLayout::SetMaximumSize</enum>
|
||||||
|
</property>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>CueTrackListWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>src/cuetracklistwidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Add table
Reference in a new issue