128 lines
3.7 KiB
C++
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
|