From 3b98be8b1454ffbf53c7dadb116977d01ce79cd4 Mon Sep 17 00:00:00 2001 From: snt Date: Wed, 19 Jun 2024 15:20:53 +0200 Subject: [PATCH] wip - antes de cambiar a TableWidget --- libremediaserver-audio.pro | 2 + src/cuetracklistwidget.h | 32 +++++ src/cuetrackwidget.cpp | 1 + src/cuetrackwidget.h | 282 ++++++++++++++++++------------------- 4 files changed, 174 insertions(+), 143 deletions(-) diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 3e68214..35d910f 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -2,6 +2,7 @@ TEMPLATE = app TARGET = libremediaserver-audio QT += webkitwidgets widgets HEADERS += src/libremediaserver-audio.h \ + src/editcuetrackwidget.h \ src/cuetracklistwidget.h \ src/cuetrackwidget.h \ src/showplayer.h \ @@ -26,6 +27,7 @@ HEADERS += src/libremediaserver-audio.h \ src/slidergroup.h \ src/trackdialog.h SOURCES += src/main.cpp \ + src/editcuetrackwidget.cpp \ src/cuetrackwidget.cpp \ src/showplayer.cpp \ src/clickabledoublespinbox.cpp \ diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h index ed6b71f..2fb457b 100644 --- a/src/cuetracklistwidget.h +++ b/src/cuetracklistwidget.h @@ -8,6 +8,9 @@ #include "cuetrackwidget.h" +#include +#include + class CueTrackListWidget : public QWidget { Q_OBJECT public: @@ -92,5 +95,34 @@ private slots: } } + 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 diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp index 80c31b6..3dfec06 100644 --- a/src/cuetrackwidget.cpp +++ b/src/cuetrackwidget.cpp @@ -1,4 +1,5 @@ #include "cuetrackwidget.h" +#include "editcuetrackwidget.h" #include CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) { diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h index 3d729f4..2e6f620 100644 --- a/src/cuetrackwidget.h +++ b/src/cuetrackwidget.h @@ -18,6 +18,7 @@ class CueTrackWidget : public QWidget { public: explicit CueTrackWidget(QWidget *parent = nullptr); + CueTrack track; CueTrack saveCueTrack() const; void loadCueTrack(const CueTrack &cueTrack); int getVolume() const { return volumeSpin->value() * 2.55f * 255.0f; } @@ -61,169 +62,164 @@ public: QSpinBox* exitPointSpin; QPushButton* editButton; - private: void setupUi(); void setupStatusCombo(); private slots: void editButtonClicked(); +/* + #include + #include + + bool CueTrack::saveToFile(const QString& filePath) const { + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return false; // No se pudo abrir el archivo para escritura + } + + QTextStream out(&file); + + // Escribir los datos en el archivo + out << "Volume: " << getVolume() << "\n"; + out << "Pan: " << getPan() << "\n"; + out << "Pitch: " << getPitch() << "\n"; + out << "Bus1: " << getBus1() << "\n"; + out << "Bus2: " << getBus2() << "\n"; + out << "Status: " << static_cast(getStatus()) << "\n"; + out << "FilePath: " << getFilePath() << "\n"; + out << "FadeIn: " << getFadeIn() << "\n"; + out << "FadeOut: " << getFadeOut() << "\n"; + out << "WaitIn: " << getWaitIn() << "\n"; + out << "WaitOut: " << getWaitOut() << "\n"; + out << "StopAtEnd: " << getStopAtEnd() << "\n"; + out << "Name: " << getName() << "\n"; + out << "Description: " << getDescription() << "\n"; + out << "UserNumber: " << getUserNumber() << "\n"; + out << "EntryPoint: " << getEntryPoint() << "\n"; + out << "ExitPoint: " << getExitPoint() << "\n"; + + file.close(); + return true; + } + #include + #include + + bool CueTrack::loadFromFile(const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return false; // No se pudo abrir el archivo para lectura + } + + QTextStream in(&file); + + // Leer los datos del archivo + while (!in.atEnd()) { + QString line = in.readLine(); + QStringList parts = line.split(": "); + if (parts.size() != 2) continue; // Omitir líneas mal formadas + + QString key = parts[0].trimmed(); + QString value = parts[1].trimmed(); + + if (key == "Volume") setVolume(value.toDouble()); + else if (key == "Pan") setPan(value.toDouble()); + else if (key == "Pitch") setPitch(value.toDouble()); + else if (key == "Bus1") setBus1(value.toInt()); + else if (key == "Bus2") setBus2(value.toInt()); + else if (key == "Status") setStatus(static_cast(value.toInt())); + else if (key == "FilePath") setFilePath(value); + else if (key == "FadeIn") setFadeIn(value.toDouble()); + else if (key == "FadeOut") setFadeOut(value.toDouble()); + else if (key == "WaitIn") setWaitIn(value.toDouble()); + else if (key == "WaitOut") setWaitOut(value.toDouble()); + else if (key == "StopAtEnd") setStopAtEnd(value.toInt() != 0); + else if (key == "Name") setName(value); + else if (key == "Description") setDescription(value); + else if (key == "UserNumber") setUserNumber(value.toInt()); + else if (key == "EntryPoint") setEntryPoint(value.toDouble()); + else if (key == "ExitPoint") setExitPoint(value.toDouble()); + // Añadir más campos según sea necesario + } + + file.close(); + return true; + } }; -// Definición de la clase EditCueTrackWidget -#include -#include "settings.h" +#include +#include -class EditCueTrackWidget : public QDialog { - Q_OBJECT +void saveCueTrackToXml(const CueTrack& cueTrack, const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly)) { + qWarning("No se pudo abrir el archivo para escritura."); + return; + } -public: - explicit EditCueTrackWidget(QWidget *parent = nullptr); + QXmlStreamWriter xmlWriter(&file); + xmlWriter.setAutoFormatting(true); // Para una salida más legible - void loadCueTrack(const CueTrack &cueTrack); - CueTrack saveCueTrack() const; + xmlWriter.writeStartDocument(); + xmlWriter.writeStartElement("CueTrack"); -private: - void setupUi(); - void connectSignals(); - void onBrowseButtonClicked(); + // Escribe los datos del objeto CueTrack como elementos o atributos + xmlWriter.writeTextElement("Name", cueTrack.name()); + xmlWriter.writeTextElement("Volume", QString::number(cueTrack.volume())); + xmlWriter.writeTextElement("Pan", QString::number(cueTrack.pan())); + xmlWriter.writeTextElement("Pitch", QString::number(cueTrack.pitch())); + // Añade más elementos según sea necesario - QLineEdit *filePathEdit; - QDoubleSpinBox *volumeSpin; - QDoubleSpinBox *panSpin; - QDoubleSpinBox *pitchSpin; - QDoubleSpinBox *bus1Spin; - QDoubleSpinBox *bus2Spin; - QSpinBox *fadeInSpin; - QSpinBox *fadeOutSpin; - QSpinBox *waitInSpin; - QSpinBox *waitOutSpin; - QCheckBox *stopAtEndCheck; - QLineEdit *nameEdit; - QLineEdit *descriptionEdit; - QSpinBox *userNumberSpin; - QSpinBox *entryPointSpin; - QSpinBox *exitPointSpin; - QComboBox *statusCombo; - QPushButton *browseButton; - QPushButton *saveButton; - QPushButton *cancelButton; + xmlWriter.writeEndElement(); // Cierra el elemento CueTrack + xmlWriter.writeEndDocument(); - CueTrack currentCueTrack; -}; - -EditCueTrackWidget::EditCueTrackWidget(QWidget *parent) : QDialog(parent) { - setupUi(); - connectSignals(); + file.close(); // No olvides cerrar el archivo } -void EditCueTrackWidget::setupUi() { - filePathEdit = new QLineEdit(this); - volumeSpin = new QDoubleSpinBox(this); - panSpin = new QDoubleSpinBox(this); - pitchSpin = new QDoubleSpinBox(this); - bus1Spin = new QDoubleSpinBox(this); - bus2Spin = new QDoubleSpinBox(this); - fadeInSpin = new QSpinBox(this); - fadeOutSpin = new QSpinBox(this); - waitInSpin = new QSpinBox(this); - waitOutSpin = new QSpinBox(this); - stopAtEndCheck = new QCheckBox(this); - nameEdit = new QLineEdit(this); - descriptionEdit = new QLineEdit(this); - userNumberSpin = new QSpinBox(this); - entryPointSpin = new QSpinBox(this); - exitPointSpin = new QSpinBox(this); - statusCombo = new QComboBox(this); - statusCombo->addItem("Stopped"); - statusCombo->addItem("Paused"); - statusCombo->addItem("PlayingOnce"); - statusCombo->addItem("PlayingLoop"); - statusCombo->addItem("Iddle"); - statusCombo->addItem("PlayingFolder"); - statusCombo->addItem("PlayingFolderLoop"); - statusCombo->addItem("PlayingFolderRandom"); +#include +#include - browseButton = new QPushButton("Browse...", this); - saveButton = new QPushButton("Save", this); - cancelButton = new QPushButton("Cancel", this); +bool loadCueTrackFromXml(CueTrack& cueTrack, const QString& filePath) { + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly)) { + qWarning("No se pudo abrir el archivo para lectura."); + return false; + } - QFormLayout *layout = new QFormLayout(this); - layout->addRow("User Number", userNumberSpin); - layout->addRow("Name", nameEdit); - layout->addRow("File Path", filePathEdit); - layout->addRow(browseButton); - layout->addRow("Status", statusCombo); - layout->addRow("Fade In", fadeInSpin); - layout->addRow("Fade Out", fadeOutSpin); - layout->addRow("Wait In", waitInSpin); - layout->addRow("Wait Out", waitOutSpin); - layout->addRow("Stop At End", stopAtEndCheck); - layout->addRow("Volume", volumeSpin); - layout->addRow("Bus 1", bus1Spin); - layout->addRow("Bus 2", bus2Spin); - layout->addRow("Pan", panSpin); - layout->addRow("Pitch", pitchSpin); - layout->addRow("Entry Point", entryPointSpin); - layout->addRow("Exit Point", exitPointSpin); - layout->addRow("Description", descriptionEdit); - layout->addRow(saveButton); - layout->addRow(cancelButton); + QXmlStreamReader xmlReader(&file); + + while (!xmlReader.atEnd() && !xmlReader.hasError()) { + // Lee el siguiente elemento + QXmlStreamReader::TokenType token = xmlReader.readNext(); + // Si es un elemento de inicio y el nombre del elemento es el esperado + if (token == QXmlStreamReader::StartElement) { + if (xmlReader.name() == "filePath") { + cueTrack.filePath = xmlReader.readElementText().toStdString(); + } else if (xmlReader.name() == "volume") { + cueTrack.volume = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "pan") { + cueTrack.pan = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "pitch") { + cueTrack.pitch = xmlReader.readElementText().toInt(); + } else if (xmlReader.name() == "status") { + QString statusStr = xmlReader.readElementText(); + cueTrack.status = stringToStatus(&statusStr); // Asegúrate de que esta función maneje QString correctamente + } + // Añade más campos según sea necesario + } + } + + if (xmlReader.hasError()) { + qWarning("Error al leer el archivo XML: %s", xmlReader.errorString().toUtf8().constData()); + return false; + } + + file.close(); + return true; +} } -void EditCueTrackWidget::loadCueTrack(const CueTrack &cueTrack) { - filePathEdit->setText(cueTrack.filePath.data()); - volumeSpin->setValue(cueTrack.volume); - panSpin->setValue(cueTrack.pan); - pitchSpin->setValue(cueTrack.pitch); - bus1Spin->setValue(cueTrack.bus1); - bus2Spin->setValue(cueTrack.bus2); - fadeInSpin->setValue(cueTrack.fadeIn); - fadeOutSpin->setValue(cueTrack.fadeOut); - waitInSpin->setValue(cueTrack.waitIn); - waitOutSpin->setValue(cueTrack.waitOut); - stopAtEndCheck->setChecked(cueTrack.stopAtEnd); - nameEdit->setText(cueTrack.name.data()); - descriptionEdit->setText(cueTrack.description.data()); - userNumberSpin->setValue(cueTrack.userNumber); - entryPointSpin->setValue(cueTrack.entryPoint); - exitPointSpin->setValue(cueTrack.exitPoint); - statusCombo->setCurrentIndex(statusCombo->findText(statusToString(cueTrack.status))); -} -CueTrack EditCueTrackWidget::saveCueTrack() const { - CueTrack cueTrack; - cueTrack.filePath.append(filePathEdit->text().toUtf8().constData()); - cueTrack.volume = volumeSpin->value(); - cueTrack.pan = panSpin->value(); - cueTrack.pitch = pitchSpin->value(); - cueTrack.name.append(nameEdit->text().toUtf8().constData()); - cueTrack.description.append(descriptionEdit->text().toUtf8().constData()); - cueTrack.status = static_cast(statusCombo->currentIndex()); - cueTrack.fadeIn = fadeInSpin->value(); - cueTrack.fadeOut = fadeOutSpin->value(); - cueTrack.waitIn = waitInSpin->value(); - cueTrack.waitOut = waitOutSpin->value(); - cueTrack.stopAtEnd = stopAtEndCheck->isChecked(); - cueTrack.userNumber = userNumberSpin->value(); - cueTrack.entryPoint = entryPointSpin->value(); - cueTrack.exitPoint = exitPointSpin->value(); - return cueTrack; -} - -void EditCueTrackWidget::connectSignals() { - connect(saveButton, &QPushButton::clicked, this, &EditCueTrackWidget::accept); - connect(cancelButton, &QPushButton::clicked, this, &EditCueTrackWidget::reject); - connect(browseButton, &QPushButton::clicked, this, &EditCueTrackWidget::onBrowseButtonClicked); -} - -void EditCueTrackWidget::onBrowseButtonClicked() { - QString filePath = QFileDialog::getOpenFileName(this, tr("Select File"), Settings::getInstance()->getPathMedia(), tr("Audio Files (*.mp3 *.wav *.flac)")); - if (!filePath.isEmpty()) { - filePathEdit->setText(filePath); - QDir dir; - Settings::getInstance()->setPathMedia(dir.absoluteFilePath(filePath)); - } -} +*/ #endif // CUETRACKWIDGET_H