From 52b44a4d7c3b7b59b661fd6ed8b48c96d474e087 Mon Sep 17 00:00:00 2001 From: snt Date: Mon, 17 Jun 2024 19:12:05 +0200 Subject: [PATCH] =?UTF-8?q?wip=20cue=20list=20b=C3=A1sica=20en=20una=20cap?= =?UTF-8?q?a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cuetracklistwidget.h | 64 +++++-- src/cuetrackwidget.cpp | 87 ++++++---- src/cuetrackwidget.h | 7 + src/libremediaserver-audio.cpp | 2 +- src/showplayer.cpp | 7 +- src/showplayer.h | 6 +- src/showplayer.ui | 294 +++++++++++++++------------------ 7 files changed, 250 insertions(+), 217 deletions(-) diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index e6c529a..d3b1727 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -2,17 +2,21 @@ #define CUETRACKLISTWIDGET_H #include #include -#include +#include +#include +#include #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(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 diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp index daa2e8b..90e6832 100644 --- a/src/cuetrackwidget.cpp +++ b/src/cuetrackwidget.cpp @@ -1,92 +1,113 @@ #include "cuetrackwidget.h" +#include 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); } diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h index 86c3360..b7ddd5c 100644 --- a/src/cuetrackwidget.h +++ b/src/cuetrackwidget.h @@ -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; diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index cae1d88..0a88b2a 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -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){ diff --git a/src/showplayer.cpp b/src/showplayer.cpp index f4fbef8..6f65f8a 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -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++; } diff --git a/src/showplayer.h b/src/showplayer.h index 22a029b..b5e1175 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -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); diff --git a/src/showplayer.ui b/src/showplayer.ui index bca9e6e..d27f83e 100644 --- a/src/showplayer.ui +++ b/src/showplayer.ui @@ -6,12 +6,12 @@ 0 0 - 1200 - 800 + 276 + 112 - + 0 0 @@ -19,167 +19,137 @@ Show Player - - - - 10 - 10 - 131 - 111 - - - - GO - - - Space - - - - - - 150 - 10 - 661 - 111 - - - - - 0 - 0 - - - - - - 90 - 40 - 311 - 31 - - - - Active Cue - - - - - - 90 - 80 - 311 - 21 - - - - Next Cue - - - - - - 0 - 40 - 91 - 31 - - - - - - - 10 - 80 - 64 - 23 - - - - - - - 570 - 0 - 91 - 31 - - - - ... - - - P - - - - - - - 9 - 229 - 1200 - 561 - - - - - 0 - 0 - - - - - - - 130 - 130 - 201 - 26 - - - - - - - ... + + + + + Qt::Vertical + + + + Qt::Horizontal + + + + + 0 + 0 + + + + GO + + + Space + + + + + + + + + + + Active Cue + + + + + + + true + + + + + + + Next Cue + + + + + + + + + 0 + 0 + + + + Qt::ClickFocus + + + ... + + + P + + + + + + + QLayout::SetMinimumSize + + + + + ... + + + + + + + ... + + + + + + + ... + + + + + + + + + 1 + + + QLayout::SetMaximumSize + + + + + + true + + + + 0 + 0 + + + + Qt::StrongFocus + + + true + + + Qt::ImhPreferLowercase - - - - - ... - - - - - - - ... - - - - - - - - - 9 - 160 - 761 - 80 - - - - - 1 - - - QLayout::SetMaximumSize - - - + + +