summaryrefslogtreecommitdiffstats
path: root/seriestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-18 14:42:26 +0200
committerArno <am@disconnect.de>2010-07-18 14:42:26 +0200
commita59ac6eb3cebdd4e3f41552c21f14165203c1ab2 (patch)
tree0ff0cec23fce7b08f02bc9acffa4adda02b906c2 /seriestreewidget.cpp
parent6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c (diff)
downloadSheMov-a59ac6eb3cebdd4e3f41552c21f14165203c1ab2.tar.gz
SheMov-a59ac6eb3cebdd4e3f41552c21f14165203c1ab2.tar.bz2
SheMov-a59ac6eb3cebdd4e3f41552c21f14165203c1ab2.zip
Implemented add covers
Finally we can add covers to already existsing series. Seems to work, but I encountered a crash when merging series while testing... Unfortunately I don't know the cause.
Diffstat (limited to 'seriestreewidget.cpp')
-rw-r--r--seriestreewidget.cpp113
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;
+ }
+}