diff options
Diffstat (limited to 'editfiledialog.cpp')
-rw-r--r-- | editfiledialog.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/editfiledialog.cpp b/editfiledialog.cpp new file mode 100644 index 0000000..15d4836 --- /dev/null +++ b/editfiledialog.cpp @@ -0,0 +1,124 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QLineEdit> +#include <QComboBox> +#include <QFormLayout> +#include <QGroupBox> +#include <QIntValidator> +#include <QHBoxLayout> +#include <QGridLayout> +#include <QPushButton> +#include <QVBoxLayout> +#include <QSqlDatabase> +#include <QSqlQuery> + +#include "editfiledialog.h" +#include "smglobals.h" +#include "helper.h" + +EditFileDialog::EditFileDialog(QWidget *parent) : QDialog(parent){ + mFiletypeMap = SmGlobals::instance()->filetypeMap(); + setupGui(); + setWindowTitle(tr("Edit file...")); +} + +void EditFileDialog::setupGui(){ + mFileName = new QLineEdit; + mFileName->setReadOnly(true); + mMd5Sum = new QLineEdit; + mMd5Sum->setReadOnly(true); + mMd5Sum->setFont(QFont("courier")); + QFormLayout *lineEditL = new QFormLayout; + lineEditL->addRow(tr("Filename"), mFileName); + lineEditL->addRow(tr("MD5"), mMd5Sum); + QGroupBox *dvdNoGB = new QGroupBox(tr("DVD No.")); + mDvdNo= new QLineEdit; + QIntValidator *validator = new QIntValidator; + mDvdNo->setValidator(validator); + QHBoxLayout *dvdNoGBL = new QHBoxLayout; + dvdNoGBL->addWidget(mDvdNo); + dvdNoGB->setLayout(dvdNoGBL); + QGroupBox *qualityGB = new QGroupBox(tr("Quality")); + mQuality = new QLineEdit; + mQuality->setValidator(validator); + QHBoxLayout *qualityGBL = new QHBoxLayout; + qualityGBL->addWidget(mQuality); + qualityGB->setLayout(qualityGBL); + QGroupBox *durationGB = new QGroupBox(tr("Duration")); + mDuration = new QLineEdit; + QHBoxLayout *durationGBL = new QHBoxLayout; + durationGBL->addWidget(mDuration); + durationGB->setLayout(durationGBL); + QGroupBox *fileTypeGB = new QGroupBox(tr("Filetype")); + mFileType = new QComboBox; + QStringList fileTypes = mFiletypeMap.values(); + std::sort(fileTypes.begin(), fileTypes.end()); + mFileType->addItems(fileTypes); + QHBoxLayout *fileTypeGBL = new QHBoxLayout; + fileTypeGBL->addWidget(mFileType); + fileTypeGB->setLayout(fileTypeGBL); + QGridLayout *propertyGrid = new QGridLayout; + propertyGrid->addWidget(dvdNoGB, 0, 0); + propertyGrid->addWidget(qualityGB, 0, 1); + propertyGrid->addWidget(durationGB, 1, 0); + propertyGrid->addWidget(fileTypeGB, 1, 1); + QPushButton *updateB = new QPushButton(tr("Update!")); + connect(updateB, &QPushButton::clicked, this, &EditFileDialog::accept); + QPushButton *cancelB = new QPushButton(tr("Cancel")); + connect(cancelB, &QPushButton::clicked, this, &EditFileDialog::reject); + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + buttonLayout->addWidget(updateB); + buttonLayout->addWidget(cancelB); + buttonLayout->addStretch(); + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(lineEditL); + mainLayout->addLayout(propertyGrid); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); + setMinimumWidth(640); +} + +void EditFileDialog::initDlg(QString md5sum, QString fullPath){ + QSqlDatabase db = QSqlDatabase::database("treedb"); + QSqlQuery dataQ(db); + dataQ.prepare("SELECT idvd, sifiletype, siquality, tfilename FROM files WHERE cmd5sum = :md5"); + dataQ.bindValue(":md5", md5sum); + dataQ.exec(); + while(dataQ.next()){ + int dvdNo = dataQ.value(0).toInt(); + if(dvdNo == 0){ + dvdNo = -1; + } + mDvdNo->setText(QString::number(dvdNo)); + mQuality->setText(QString::number(dataQ.value(2).toInt())); + int fileType = dataQ.value(1).toInt(); + mFileType->setCurrentText(mFiletypeMap.value(fileType)); + mFileName->setText(dataQ.value(3).toString()); + } + mMd5Sum->setText(md5sum); + QVariantMap ffmpegMap = Helper::ffmpegData(fullPath); + mDurationSecs = ffmpegMap.value("duration").toDouble(); + QString durString = Helper::durationFromSecs(mDurationSecs); + mDuration->setText(durString); +} + +void EditFileDialog::accept(){ + QSqlDatabase db = QSqlDatabase::database("treedb"); + QSqlQuery updateQ(db); + updateQ.prepare("UPDATE files SET sifiletype = :ft, siquality = :fq, idvd = :dvd, iduration = :dur WHERE cmd5sum = :md5"); + updateQ.bindValue(":md5", mMd5Sum->text()); + updateQ.bindValue(":fq", mQuality->text().toInt()); + updateQ.bindValue(":dvd", mDvdNo->text().toInt()); + updateQ.bindValue(":dur", mDurationSecs); + QString fileType = mFileType->currentText(); + int ft = mFiletypeMap.key(fileType); + updateQ.bindValue(":ft", ft); + updateQ.exec(); + QDialog::accept(); +} |