lms-audio/src/cuetracklistwidget.h
2024-06-19 15:20:53 +02:00

128 lines
3.7 KiB
C++

#ifndef CUETRACKLISTWIDGET_H
#define CUETRACKLISTWIDGET_H
#include <QWidget>
#include <QScrollArea>
#include <QEvent>
#include <QKeyEvent>
#include <QShortcut>
#include "cuetrackwidget.h"
#include <QTableWidget>
#include <QTableWidgetItem>
class CueTrackListWidget : public QWidget {
Q_OBJECT
public:
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();
containerWidget = new QWidget();
containerWidget->setLayout(layout);
scrollArea = new QScrollArea(this);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(containerWidget);
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) {
widget->setParent(containerWidget);
layout->addWidget(widget);
if (m_size == 0)
widget->setStyle(true);
widget->show();
m_size++;
containerWidget->update();
containerWidget->adjustSize();
}
void removeCueTrackWidget(size_t index) {
if (index >= m_size) return;
QLayoutItem* item = layout->takeAt(index);
if (item) {
delete item->widget();
delete item;
m_size--;
}
}
CueTrackWidget* getTrackAtIndex(size_t index) {
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)->setStyle(false);
selectedIndex--;
getTrackAtIndex(selectedIndex)->setStyle(true);
}
}
void key_down() {
if (selectedIndex < m_size - 1 && m_size > 0) {
getTrackAtIndex(selectedIndex)->setStyle(false);
selectedIndex++;
getTrackAtIndex(selectedIndex)->setStyle(true);
}
}
void displayCueTrackInTable(QTableWidget* tableWidget, const CueTrack& cueTrack) {
// Configura las columnas si aún no están configuradas
if (tableWidget->columnCount() == 0) {
tableWidget->setColumnCount(5); // Ajusta según el número de propiedades a mostrar
QStringList headers = {"Nombre", "Volumen", "Pan", "Pitch", "Estado"};
tableWidget->setHorizontalHeaderLabels(headers);
}
int currentRow = tableWidget->rowCount();
tableWidget->insertRow(currentRow);
// Nombre
tableWidget->setItem(currentRow, 0, new QTableWidgetItem(cueTrack.name));
// Volumen
tableWidget->setItem(currentRow, 1, new QTableWidgetItem(QString::number(cueTrack.volume)));
// Pan
tableWidget->setItem(currentRow, 2, new QTableWidgetItem(QString::number(cueTrack.pan)));
// Pitch
tableWidget->setItem(currentRow, 3, new QTableWidgetItem(QString::number(cueTrack.pitch)));
// Estado
QString statusStr; // Asume que tienes una función para convertir el estado a QString
statusStr = statusToString(cueTrack.status); // Implementa esta función según tu lógica
tableWidget->setItem(currentRow, 4, new QTableWidgetItem(statusStr));
}
};
#endif