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
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QEvent>
#include <QKeyEvent>
#include <QShortcut>
#include "cuetrackwidget.h"
class CueTrackListWidget : public QWidget {
Q_OBJECT
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) {
layout = new QVBoxLayout();
layout = new QVBoxLayout();
containerWidget = new QWidget();
containerWidget->setLayout(layout);
@ -22,33 +26,69 @@ public:
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(scrollArea);
layout->setAlignment(Qt::AlignTop);
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) {
layout->addWidget(widget);
size++;
widget->setParent(containerWidget);
layout->addWidget(widget);
widget->show();
m_size++;
containerWidget->update();
containerWidget->adjustSize();
}
void clear() {
QLayoutItem* item;
while ((item = layout->takeAt(0)) != nullptr) {
void removeCueTrackWidget(size_t index) {
if (index >= m_size) return;
QLayoutItem* item = layout->takeAt(index);
if (item) {
delete item->widget();
delete item;
}
size = 0;
}
m_size--;
}
}
CueTrackWidget* getTrackAtIndex(size_t index) {
if (index < this->size) {
if (index < m_size) {
return qobject_cast<CueTrackWidget*>(layout->itemAt(index)->widget());
}
return nullptr;
}
CueTrackWidget* getSelectedTrack() {
CueTrackWidget* track = getTrackAtIndex(selectedIndex);
key_down();
return track;
}
private:
QScrollArea* scrollArea;
QWidget* containerWidget;
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

View file

@ -1,92 +1,113 @@
#include "cuetrackwidget.h"
#include <QSplitter>
CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) {
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->setRange(0, 1000);
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->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->setToolTip("Volume");
layout->addWidget(volumeSpin);
volumeSpin->setValue(100);
row->addWidget(volumeSpin);
bus1Spin = new QSpinBox(this);
bus1Spin->setRange(0, 255);
bus1Spin->setToolTip("Bus 1");
layout->addWidget(bus1Spin);
bus1Spin->setValue(255);
row->addWidget(bus1Spin);
bus2Spin = new QSpinBox(this);
bus2Spin->setRange(0, 255);
bus2Spin->setToolTip("Bus 2");
layout->addWidget(bus2Spin);
bus2Spin->setValue(255);
row->addWidget(bus2Spin);
panSpin = new QSpinBox(this);
panSpin->setRange(0, 255);
panSpin->setToolTip("Pan");
layout->addWidget(panSpin);
panSpin->setValue(128);
row->addWidget(panSpin);
pitchSpin = new QSpinBox(this);
pitchSpin->setRange(0, 255);
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();
statusCombo->setToolTip("Playback Status");
layout->addWidget(statusCombo);
row->addWidget(statusCombo);
fadeInSpin = new QSpinBox(this);
fadeInSpin->setRange(0, 10000);
fadeInSpin->setToolTip("Fade In Time");
layout->addWidget(fadeInSpin);
fadeInSpin->setValue(3);
row->addWidget(fadeInSpin);
fadeOutSpin = new QSpinBox(this);
fadeOutSpin->setRange(0, 10000);
fadeOutSpin->setToolTip("Fade Out Time");
layout->addWidget(fadeOutSpin);
fadeOutSpin->setValue(3);
row->addWidget(fadeOutSpin);
waitInSpin = new QSpinBox(this);
waitInSpin->setRange(0, 10000);
waitInSpin->setToolTip("Wait In Time");
layout->addWidget(waitInSpin);
row->addWidget(waitInSpin);
waitOutSpin = new QSpinBox(this);
waitOutSpin->setRange(0, 10000);
waitOutSpin->setToolTip("Wait Out Time");
layout->addWidget(waitOutSpin);
row->addWidget(waitOutSpin);
stopAtEndCheck = new QCheckBox(this);
stopAtEndCheck->setToolTip("Halt");
layout->addWidget(stopAtEndCheck);
stopAtEndCheck->setChecked("True");
row->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);
layout->addWidget(row);
setLayout(layout);
}

View file

@ -38,8 +38,15 @@ public:
int getUserNumber() const { return userNumberSpin->value(); }
int getEntryPoint() const { return entryPointSpin->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:
QCheckBox* active;
QLineEdit* filePathEdit;
QSpinBox* volumeSpin;
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)
{
switch (s){

View file

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

View file

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

View file

@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
<width>1200</width>
<height>800</height>
<width>276</width>
<height>112</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -19,167 +19,137 @@
<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>
<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">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</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">
<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">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<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">
<layout class="QHBoxLayout" name="headerLayout">
<property name="spacing">
<number>1</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
</layout>
</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>
</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>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>