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,14 +2,18 @@
#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();
@ -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) {
widget->setParent(containerWidget);
layout->addWidget(widget); layout->addWidget(widget);
size++; 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);
layout->addWidget(row);
row = new QSplitter(Qt::Horizontal);
volumeSpin = new QSpinBox(this); 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);
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 = new QSpinBox(this);
entryPointSpin->setRange(0, 255); entryPointSpin->setRange(0, 255);
entryPointSpin->setToolTip("Entry Point"); entryPointSpin->setToolTip("Entry Point");
layout->addWidget(entryPointSpin); row->addWidget(entryPointSpin);
exitPointSpin = new QSpinBox(this); exitPointSpin = new QSpinBox(this);
exitPointSpin->setRange(0, 255); exitPointSpin->setRange(0, 255);
exitPointSpin->setToolTip("Exit Point"); exitPointSpin->setToolTip("Exit Point");
layout->addWidget(exitPointSpin); exitPointSpin->setValue(255);
row->addWidget(exitPointSpin);
layout->addWidget(row);
row = new QSplitter(Qt::Horizontal);
setupStatusCombo();
statusCombo->setToolTip("Playback Status");
row->addWidget(statusCombo);
fadeInSpin = new QSpinBox(this);
fadeInSpin->setRange(0, 10000);
fadeInSpin->setToolTip("Fade In Time");
fadeInSpin->setValue(3);
row->addWidget(fadeInSpin);
fadeOutSpin = new QSpinBox(this);
fadeOutSpin->setRange(0, 10000);
fadeOutSpin->setToolTip("Fade Out Time");
fadeOutSpin->setValue(3);
row->addWidget(fadeOutSpin);
waitInSpin = new QSpinBox(this);
waitInSpin->setRange(0, 10000);
waitInSpin->setToolTip("Wait In Time");
row->addWidget(waitInSpin);
waitOutSpin = new QSpinBox(this);
waitOutSpin->setRange(0, 10000);
waitOutSpin->setToolTip("Wait Out Time");
row->addWidget(waitOutSpin);
stopAtEndCheck = new QCheckBox(this);
stopAtEndCheck->setToolTip("Halt");
stopAtEndCheck->setChecked("True");
row->addWidget(stopAtEndCheck);
layout->addWidget(row);
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,13 +63,13 @@ 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++) {
@ -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,14 +19,22 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Show Player</string> <string>Show Player</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QSplitter" name="masterSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QPushButton" name="goButton"> <widget class="QPushButton" name="goButton">
<property name="geometry"> <property name="sizePolicy">
<rect> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<x>10</x> <horstretch>0</horstretch>
<y>10</y> <verstretch>0</verstretch>
<width>131</width> </sizepolicy>
<height>111</height>
</rect>
</property> </property>
<property name="text"> <property name="text">
<string>GO</string> <string>GO</string>
@ -35,75 +43,43 @@
<string>Space</string> <string>Space</string>
</property> </property>
</widget> </widget>
<widget class="QWidget" name="masterWidget" native="true"> <widget class="QWidget" name="layoutWidget">
<property name="geometry"> <layout class="QGridLayout" name="statusLayout">
<rect> <item row="0" column="0">
<x>150</x> <widget class="QLCDNumber" name="activeCueNumber"/>
<y>10</y> </item>
<width>661</width> <item row="0" column="1">
<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"> <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"> <property name="text">
<string>Active Cue</string> <string>Active Cue</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="nextCueLabel"> </item>
<property name="geometry"> <item row="1" column="0">
<rect> <widget class="QLCDNumber" name="nextCueNumber">
<x>90</x> <property name="enabled">
<y>80</y> <bool>true</bool>
<width>311</width>
<height>21</height>
</rect>
</property> </property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="nextCueLabel">
<property name="text"> <property name="text">
<string>Next Cue</string> <string>Next Cue</string>
</property> </property>
</widget> </widget>
<widget class="QLCDNumber" name="activeCueNumber"> </item>
<property name="geometry"> </layout>
<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>
<widget class="QToolButton" name="panicButton"> <widget class="QToolButton" name="panicButton">
<property name="geometry"> <property name="sizePolicy">
<rect> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<x>570</x> <horstretch>0</horstretch>
<y>0</y> <verstretch>0</verstretch>
<width>91</width> </sizepolicy>
<height>31</height> </property>
</rect> <property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property> </property>
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
@ -113,32 +89,11 @@
</property> </property>
</widget> </widget>
</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"> <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"> <layout class="QHBoxLayout" name="ButtonToolBarLayout">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<item> <item>
<widget class="QToolButton" name="rmCueButton"> <widget class="QToolButton" name="rmCueButton">
<property name="text"> <property name="text">
@ -163,14 +118,6 @@
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="horizontalLayoutWidget_2"> <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"> <layout class="QHBoxLayout" name="headerLayout">
<property name="spacing"> <property name="spacing">
<number>1</number> <number>1</number>
@ -180,6 +127,29 @@
</property> </property>
</layout> </layout>
</widget> </widget>
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
<property name="enabled">
<bool>true</bool>
</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>
</property>
</widget>
</widget>
</item>
</layout>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>