wip cue list básica en una capa.

This commit is contained in:
snt 2024-06-17 19:12:05 +02:00
parent 647b75f168
commit 52b44a4d7c
7 changed files with 250 additions and 217 deletions

View file

@ -2,17 +2,21 @@
#define CUETRACKLISTWIDGET_H #define CUETRACKLISTWIDGET_H
#include <QWidget> #include <QWidget>
#include <QScrollArea> #include <QScrollArea>
#include <QVBoxLayout> #include <QEvent>
#include <QKeyEvent>
#include <QShortcut>
#include "cuetrackwidget.h" #include "cuetrackwidget.h"
class CueTrackListWidget : public QWidget { class CueTrackListWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
size_t size = 0; size_t m_size = 0;
size_t size() const { return m_size; }
size_t selectedIndex = 0;
explicit CueTrackListWidget(QWidget *parent = nullptr) : QWidget(parent) { explicit CueTrackListWidget(QWidget *parent = nullptr) : QWidget(parent) {
layout = new QVBoxLayout(); layout = new QVBoxLayout();
containerWidget = new QWidget(); containerWidget = new QWidget();
containerWidget->setLayout(layout); containerWidget->setLayout(layout);
@ -22,33 +26,69 @@ public:
QVBoxLayout* mainLayout = new QVBoxLayout(this); QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(scrollArea); mainLayout->addWidget(scrollArea);
layout->setAlignment(Qt::AlignTop);
setLayout(mainLayout); setLayout(mainLayout);
QShortcut *shortcut_up = new QShortcut(QKeySequence("Up"), parent);
QObject::connect(shortcut_up, SIGNAL(activated()), this, SLOT(key_up()));
QShortcut *shortcut_down = new QShortcut(QKeySequence("Down"), parent);
QObject::connect(shortcut_down, SIGNAL(activated()), this, SLOT(key_down()));
} }
void addCueTrackWidget(CueTrackWidget* widget) { void addCueTrackWidget(CueTrackWidget* widget) {
layout->addWidget(widget); widget->setParent(containerWidget);
size++; layout->addWidget(widget);
widget->show();
m_size++;
containerWidget->update();
containerWidget->adjustSize();
} }
void clear() { void removeCueTrackWidget(size_t index) {
QLayoutItem* item; if (index >= m_size) return;
while ((item = layout->takeAt(0)) != nullptr) {
QLayoutItem* item = layout->takeAt(index);
if (item) {
delete item->widget(); delete item->widget();
delete item; delete item;
} m_size--;
size = 0; }
} }
CueTrackWidget* getTrackAtIndex(size_t index) { CueTrackWidget* getTrackAtIndex(size_t index) {
if (index < this->size) { if (index < m_size) {
return qobject_cast<CueTrackWidget*>(layout->itemAt(index)->widget()); return qobject_cast<CueTrackWidget*>(layout->itemAt(index)->widget());
} }
return nullptr; return nullptr;
} }
CueTrackWidget* getSelectedTrack() {
CueTrackWidget* track = getTrackAtIndex(selectedIndex);
key_down();
return track;
}
private: private:
QScrollArea* scrollArea; QScrollArea* scrollArea;
QWidget* containerWidget; QWidget* containerWidget;
QVBoxLayout* layout; QVBoxLayout* layout;
private slots:
void key_up() {
if (m_size > 0 && selectedIndex > 0) {
getTrackAtIndex(selectedIndex)->highlight(false);
selectedIndex--;
getTrackAtIndex(selectedIndex)->highlight(true);
}
}
void key_down() {
if (selectedIndex < m_size - 1 && m_size > 0) {
getTrackAtIndex(selectedIndex)->highlight(false);
selectedIndex++;
getTrackAtIndex(selectedIndex)->highlight(true);
}
}
}; };
#endif #endif

View file

@ -1,92 +1,113 @@
#include "cuetrackwidget.h" #include "cuetrackwidget.h"
#include <QSplitter>
CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) { CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) {
setupUi(); setupUi();
} }
void CueTrackWidget::setupUi() { void CueTrackWidget::setupUi() {
auto layout = new QHBoxLayout(this); QVBoxLayout *layout = new QVBoxLayout(this);
QSplitter *row = new QSplitter(Qt::Horizontal);
active = new QCheckBox(this);
row->addWidget(active);
userNumberSpin = new QSpinBox(this); userNumberSpin = new QSpinBox(this);
userNumberSpin->setRange(0, 1000); userNumberSpin->setRange(0, 1000);
userNumberSpin->setToolTip("Cue user number"); userNumberSpin->setToolTip("Cue user number");
layout->addWidget(userNumberSpin); row->addWidget(userNumberSpin);
nameEdit = new QLineEdit(this);
nameEdit->setToolTip("Cue Name");
row->addWidget(nameEdit);
descriptionEdit = new QLineEdit(this);
descriptionEdit->setToolTip("Cue Notes");
row->addWidget(descriptionEdit);
filePathEdit = new QLineEdit(this); filePathEdit = new QLineEdit(this);
filePathEdit->setToolTip("File name"); filePathEdit->setToolTip("File name");
layout->addWidget(filePathEdit); row->addWidget(filePathEdit);
volumeSpin = new QSpinBox(this); layout->addWidget(row);
row = new QSplitter(Qt::Horizontal);
volumeSpin = new QSpinBox(this);
volumeSpin->setRange(0, 65535); volumeSpin->setRange(0, 65535);
volumeSpin->setToolTip("Volume"); volumeSpin->setToolTip("Volume");
layout->addWidget(volumeSpin); volumeSpin->setValue(100);
row->addWidget(volumeSpin);
bus1Spin = new QSpinBox(this); bus1Spin = new QSpinBox(this);
bus1Spin->setRange(0, 255); bus1Spin->setRange(0, 255);
bus1Spin->setToolTip("Bus 1"); bus1Spin->setToolTip("Bus 1");
layout->addWidget(bus1Spin); bus1Spin->setValue(255);
row->addWidget(bus1Spin);
bus2Spin = new QSpinBox(this); bus2Spin = new QSpinBox(this);
bus2Spin->setRange(0, 255); bus2Spin->setRange(0, 255);
bus2Spin->setToolTip("Bus 2"); bus2Spin->setToolTip("Bus 2");
layout->addWidget(bus2Spin); bus2Spin->setValue(255);
row->addWidget(bus2Spin);
panSpin = new QSpinBox(this); panSpin = new QSpinBox(this);
panSpin->setRange(0, 255); panSpin->setRange(0, 255);
panSpin->setToolTip("Pan"); panSpin->setToolTip("Pan");
layout->addWidget(panSpin); panSpin->setValue(128);
row->addWidget(panSpin);
pitchSpin = new QSpinBox(this); pitchSpin = new QSpinBox(this);
pitchSpin->setRange(0, 255); pitchSpin->setRange(0, 255);
pitchSpin->setToolTip("Pitch"); pitchSpin->setToolTip("Pitch");
layout->addWidget(pitchSpin); pitchSpin->setValue(128);
row->addWidget(pitchSpin);
statusCombo = new QComboBox(this); entryPointSpin = new QSpinBox(this);
entryPointSpin->setRange(0, 255);
entryPointSpin->setToolTip("Entry Point");
row->addWidget(entryPointSpin);
exitPointSpin = new QSpinBox(this);
exitPointSpin->setRange(0, 255);
exitPointSpin->setToolTip("Exit Point");
exitPointSpin->setValue(255);
row->addWidget(exitPointSpin);
layout->addWidget(row);
row = new QSplitter(Qt::Horizontal);
setupStatusCombo(); setupStatusCombo();
statusCombo->setToolTip("Playback Status"); statusCombo->setToolTip("Playback Status");
layout->addWidget(statusCombo); row->addWidget(statusCombo);
fadeInSpin = new QSpinBox(this); fadeInSpin = new QSpinBox(this);
fadeInSpin->setRange(0, 10000); fadeInSpin->setRange(0, 10000);
fadeInSpin->setToolTip("Fade In Time"); fadeInSpin->setToolTip("Fade In Time");
layout->addWidget(fadeInSpin); fadeInSpin->setValue(3);
row->addWidget(fadeInSpin);
fadeOutSpin = new QSpinBox(this); fadeOutSpin = new QSpinBox(this);
fadeOutSpin->setRange(0, 10000); fadeOutSpin->setRange(0, 10000);
fadeOutSpin->setToolTip("Fade Out Time"); fadeOutSpin->setToolTip("Fade Out Time");
layout->addWidget(fadeOutSpin); fadeOutSpin->setValue(3);
row->addWidget(fadeOutSpin);
waitInSpin = new QSpinBox(this); waitInSpin = new QSpinBox(this);
waitInSpin->setRange(0, 10000); waitInSpin->setRange(0, 10000);
waitInSpin->setToolTip("Wait In Time"); waitInSpin->setToolTip("Wait In Time");
layout->addWidget(waitInSpin); row->addWidget(waitInSpin);
waitOutSpin = new QSpinBox(this); waitOutSpin = new QSpinBox(this);
waitOutSpin->setRange(0, 10000); waitOutSpin->setRange(0, 10000);
waitOutSpin->setToolTip("Wait Out Time"); waitOutSpin->setToolTip("Wait Out Time");
layout->addWidget(waitOutSpin); row->addWidget(waitOutSpin);
stopAtEndCheck = new QCheckBox(this); stopAtEndCheck = new QCheckBox(this);
stopAtEndCheck->setToolTip("Halt"); stopAtEndCheck->setToolTip("Halt");
layout->addWidget(stopAtEndCheck); stopAtEndCheck->setChecked("True");
row->addWidget(stopAtEndCheck);
nameEdit = new QLineEdit(this); layout->addWidget(row);
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); setLayout(layout);
} }

View file

@ -38,8 +38,15 @@ public:
int getUserNumber() const { return userNumberSpin->value(); } int getUserNumber() const { return userNumberSpin->value(); }
int getEntryPoint() const { return entryPointSpin->value(); } int getEntryPoint() const { return entryPointSpin->value(); }
int getExitPoint() const { return exitPointSpin->value(); } int getExitPoint() const { return exitPointSpin->value(); }
void highlight(bool highlight) {
if (highlight)
this->setStyleSheet("background-color: yellow;");
else
this->setStyleSheet("background-color: white;");
}
private: private:
QCheckBox* active;
QLineEdit* filePathEdit; QLineEdit* filePathEdit;
QSpinBox* volumeSpin; QSpinBox* volumeSpin;
QSpinBox* panSpin; QSpinBox* panSpin;

View file

@ -239,7 +239,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
} }
}; };
// From Ui widgets // From Ui widgets and ShowPlayer
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value) void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
{ {
switch (s){ switch (s){

View file

@ -63,14 +63,14 @@ void ShowPlayer::onAddTrack() {
TrackDialog dialog; TrackDialog dialog;
dialog.show(); dialog.show();
if (dialog.exec() == QDialog::Accepted) { if (dialog.exec() == QDialog::Accepted) {
ui->cueListWidget->addCueTrackWidget(&dialog.track); ui->cueListWidget->addCueTrackWidget(dialog.track);
} }
} }
void ShowPlayer::go() void ShowPlayer::go()
{ {
CueTrackWidget* current = ui->cueListWidget->getTrackAtIndex(currentTrackIndex); CueTrackWidget* current = ui->cueListWidget->getSelectedTrack();
if (!current) if (!current)
return; return;
for (int i = 0; i < MAX_LAYERS; i++) { for (int i = 0; i < MAX_LAYERS; i++) {
if (layersUsed[i] == -1) { if (layersUsed[i] == -1) {
@ -83,5 +83,4 @@ void ShowPlayer::go()
emit uiLoadMedia(current->audioLayer, current->getFilePath()); emit uiLoadMedia(current->audioLayer, current->getFilePath());
emit uiPlaybackChanged(current->audioLayer, current->getStatus()); emit uiPlaybackChanged(current->audioLayer, current->getStatus());
filesLoaded++; filesLoaded++;
currentTrackIndex++;
} }

View file

@ -26,7 +26,6 @@ public:
private: private:
Ui::ShowPlayer *ui; Ui::ShowPlayer *ui;
CueTrackListWidget *cueListWidget; // Widget para mostrar los tracks
size_t currentTrackIndex; size_t currentTrackIndex;
Status currentStatus = Status::Iddle; Status currentStatus = Status::Iddle;
size_t filesLoaded = 0; size_t filesLoaded = 0;
@ -35,7 +34,7 @@ private:
QWidget *createHeader(); QWidget *createHeader();
void updateTrackStateInEngine(size_t index, int layer) { void updateTrackStateInEngine(size_t index, int layer) {
CueTrackWidget *track = cueListWidget->getTrackAtIndex(index); CueTrackWidget *track = ui->cueListWidget->getTrackAtIndex(index);
emit uiSliderChanged(layer, Slider::Volume, track->getVolume()); emit uiSliderChanged(layer, Slider::Volume, track->getVolume());
emit uiSliderChanged(layer, Slider::Pan, track->getPan()); emit uiSliderChanged(layer, Slider::Pan, track->getPan());
emit uiSliderChanged(layer, Slider::Pitch, track->getPitch()); emit uiSliderChanged(layer, Slider::Pitch, track->getPitch());
@ -46,9 +45,6 @@ private:
private slots: private slots:
void onAddTrack(); void onAddTrack();
void go(); void go();
//void stop();
//void nextTrack();
//void goToTrack(size_t i);
signals: signals:
void uiPlaybackChanged(int layer, Status s); void uiPlaybackChanged(int layer, Status s);

View file

@ -6,12 +6,12 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1200</width> <width>276</width>
<height>800</height> <height>112</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -19,167 +19,137 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Show Player</string> <string>Show Player</string>
</property> </property>
<widget class="QPushButton" name="goButton"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="geometry"> <item>
<rect> <widget class="QSplitter" name="splitter">
<x>10</x> <property name="orientation">
<y>10</y> <enum>Qt::Vertical</enum>
<width>131</width> </property>
<height>111</height> <widget class="QSplitter" name="masterSplitter">
</rect> <property name="orientation">
</property> <enum>Qt::Horizontal</enum>
<property name="text"> </property>
<string>GO</string> <widget class="QPushButton" name="goButton">
</property> <property name="sizePolicy">
<property name="shortcut"> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<string>Space</string> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
</widget> </sizepolicy>
<widget class="QWidget" name="masterWidget" native="true"> </property>
<property name="geometry"> <property name="text">
<rect> <string>GO</string>
<x>150</x> </property>
<y>10</y> <property name="shortcut">
<width>661</width> <string>Space</string>
<height>111</height> </property>
</rect> </widget>
</property> <widget class="QWidget" name="layoutWidget">
<property name="sizePolicy"> <layout class="QGridLayout" name="statusLayout">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred"> <item row="0" column="0">
<horstretch>0</horstretch> <widget class="QLCDNumber" name="activeCueNumber"/>
<verstretch>0</verstretch> </item>
</sizepolicy> <item row="0" column="1">
</property> <widget class="QLabel" name="activeCueLabel">
<widget class="QLabel" name="activeCueLabel"> <property name="text">
<property name="geometry"> <string>Active Cue</string>
<rect> </property>
<x>90</x> </widget>
<y>40</y> </item>
<width>311</width> <item row="1" column="0">
<height>31</height> <widget class="QLCDNumber" name="nextCueNumber">
</rect> <property name="enabled">
</property> <bool>true</bool>
<property name="text"> </property>
<string>Active Cue</string> </widget>
</property> </item>
</widget> <item row="1" column="1">
<widget class="QLabel" name="nextCueLabel"> <widget class="QLabel" name="nextCueLabel">
<property name="geometry"> <property name="text">
<rect> <string>Next Cue</string>
<x>90</x> </property>
<y>80</y> </widget>
<width>311</width> </item>
<height>21</height> </layout>
</rect> </widget>
</property> <widget class="QToolButton" name="panicButton">
<property name="text"> <property name="sizePolicy">
<string>Next Cue</string> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
</property> <horstretch>0</horstretch>
</widget> <verstretch>0</verstretch>
<widget class="QLCDNumber" name="activeCueNumber"> </sizepolicy>
<property name="geometry"> </property>
<rect> <property name="focusPolicy">
<x>0</x> <enum>Qt::ClickFocus</enum>
<y>40</y> </property>
<width>91</width> <property name="text">
<height>31</height> <string>...</string>
</rect> </property>
</property> <property name="shortcut">
</widget> <string>P</string>
<widget class="QLCDNumber" name="nextCueNumber"> </property>
<property name="geometry"> </widget>
<rect> </widget>
<x>10</x> <widget class="QWidget" name="horizontalLayoutWidget">
<y>80</y> <layout class="QHBoxLayout" name="ButtonToolBarLayout">
<width>64</width> <property name="sizeConstraint">
<height>23</height> <enum>QLayout::SetMinimumSize</enum>
</rect> </property>
</property> <item>
</widget> <widget class="QToolButton" name="rmCueButton">
<widget class="QToolButton" name="panicButton"> <property name="text">
<property name="geometry"> <string>...</string>
<rect> </property>
<x>570</x> </widget>
<y>0</y> </item>
<width>91</width> <item>
<height>31</height> <widget class="QToolButton" name="addCueButton">
</rect> <property name="text">
</property> <string>...</string>
<property name="text"> </property>
<string>...</string> </widget>
</property> </item>
<property name="shortcut"> <item>
<string>P</string> <widget class="QToolButton" name="editCueButton">
</property> <property name="text">
</widget> <string>...</string>
</widget> </property>
<widget class="CueTrackListWidget" name="cueListWidget" native="true"> </widget>
<property name="geometry"> </item>
<rect> </layout>
<x>9</x> </widget>
<y>229</y> <widget class="QWidget" name="horizontalLayoutWidget_2">
<width>1200</width> <layout class="QHBoxLayout" name="headerLayout">
<height>561</height> <property name="spacing">
</rect> <number>1</number>
</property> </property>
<property name="sizePolicy"> <property name="sizeConstraint">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred"> <enum>QLayout::SetMaximumSize</enum>
<horstretch>0</horstretch> </property>
<verstretch>0</verstretch> </layout>
</sizepolicy> </widget>
</property> <widget class="CueTrackListWidget" name="cueListWidget" native="true">
</widget> <property name="enabled">
<widget class="QWidget" name="horizontalLayoutWidget"> <bool>true</bool>
<property name="geometry"> </property>
<rect> <property name="sizePolicy">
<x>130</x> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<y>130</y> <horstretch>0</horstretch>
<width>201</width> <verstretch>0</verstretch>
<height>26</height> </sizepolicy>
</rect> </property>
</property> <property name="focusPolicy">
<layout class="QHBoxLayout" name="ButtonToolBarLayout"> <enum>Qt::StrongFocus</enum>
<item> </property>
<widget class="QToolButton" name="rmCueButton"> <property name="autoFillBackground">
<property name="text"> <bool>true</bool>
<string>...</string> </property>
<property name="inputMethodHints">
<set>Qt::ImhPreferLowercase</set>
</property> </property>
</widget> </widget>
</item> </widget>
<item> </item>
<widget class="QToolButton" name="addCueButton"> </layout>
<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> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>