diff options
Diffstat (limited to 'seriestreewidget.cpp')
-rw-r--r-- | seriestreewidget.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index fdc9770..8abd359 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -17,11 +17,18 @@ #include <QAction> #include <QMessageBox> #include <QSettings> +#include <QFileDialog> +#include <QSettings> +#include <QFileInfo> +#include <QComboBox> +#include <QFile> #include "seriestreewidget.h" #include "smtreemodel.h" #include "smmodelsingleton.h" #include "seriestreemodel.h" +#include "filestreemodel.h" +#include "helper.h" SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ //filter bar @@ -52,6 +59,9 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ connect(mView, SIGNAL(expanded(QModelIndex)), this, SLOT(itemExpanded(QModelIndex))); connect(mView, SIGNAL(collapsed(QModelIndex)), this, SLOT(itemCollaped(QModelIndex))); + //cover dialog + mCoverDialog = new AddCoverDialog(this); + //layout QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(filterLayout); @@ -193,6 +203,39 @@ void SeriesTreeWidget::itemCollaped(const QModelIndex &what){ } } +void SeriesTreeWidget::addCover(){ + QModelIndexList selected = mView->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return; + } + if(selected.count() > 1){ + QMessageBox::critical(this, tr("Error"), tr("Please don't select more than one item when adding covers.")); + return; + } + QModelIndex real = mProxy->mapToSource(selected.at(0)); + if(real.data(SeriesTreeModel::TypeRole).toInt() != SeriesTreeModel::Part){ + QMessageBox::critical(this, tr("Error"), tr("Please select a series part when adding covers.")); + return; + } + int retval = mCoverDialog->exec(); + if(retval == QDialog::Accepted){ + QString fileName = mCoverDialog->file(); + QFileInfo fi(fileName); + if(fi.exists()){ + FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel")); + int seriesPartId = real.data(SeriesTreeModel::SeriesPartIdRole).toInt(); + int type = mCoverDialog->fileType(); + if(filesModel->addFile(fileName, type, 0, -1, seriesPartId, -1)){ + QString md5sum = Helper::md5Sum(fileName); + QString targetFile = Helper::createArchivePath(fileName, md5sum); + QFile::rename(fileName, targetFile); + filesModel->setIds(QList<int>() << seriesPartId); + emit filesReload(); + } + } + } +} + SeriesTreeView::SeriesTreeView(QWidget *parent) : QTreeView(parent) {} void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ @@ -211,3 +254,73 @@ bool SeriesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &r } return QSortFilterProxyModel::lessThan(left, right); } + +AddCoverDialog::AddCoverDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ + //File selection + QLabel *l1 = new QLabel(tr("Select file")); + mFile = new QLineEdit; + QPushButton *mSelectFile = new QPushButton(tr("Browse...")); + connect(mSelectFile, SIGNAL(clicked()), this, SLOT(selectFile())); + QHBoxLayout *fileLayout = new QHBoxLayout; + fileLayout->addWidget(l1); + fileLayout->addWidget(mFile); + fileLayout->addWidget(mSelectFile); + + //file type + mFilesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel")); + QHash<int, QString> coverTypes = mFilesModel->coverTypes(); + mFileType = new QComboBox; + QStringList types; + foreach(QString t, coverTypes.values()){ + types << t; + } + mFileType->addItems(types); + QHBoxLayout *typesLayout = new QHBoxLayout; + typesLayout->setAlignment(Qt::AlignCenter); + typesLayout->addWidget(mFileType); + connect(mFileType, SIGNAL(currentIndexChanged(QString)), this, SLOT(typeChanged(QString))); + + //buttons + mOk = new QPushButton(tr("Ok")); + connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + buttonLayout->addWidget(mOk); + buttonLayout->addWidget(mCancel); + + //main layout + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(fileLayout); + mainLayout->addLayout(typesLayout); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); +} + +const QString AddCoverDialog::file() const { + return mFile->text(); +} + +void AddCoverDialog::selectFile(){ + QString startDir = mLastOpenedDir; + if(startDir.isEmpty()){ + QSettings s; + startDir = s.value("paths/selecteddir").toString(); + } + QString file = QFileDialog::getOpenFileName(this, tr("Select cover"), startDir); + mFile->setText(file); + QFileInfo fi(file); + mLastOpenedDir = fi.absolutePath(); +} + +void AddCoverDialog::typeChanged(const QString &type){ + QHash<int, QString>::const_iterator it = mFilesModel->coverTypes().constBegin(); + while(it != mFilesModel->coverTypes().constEnd()){ + if(it.value() == type){ + mCurrentType = it.key(); + return; + } + ++it; + } +} |