diff options
author | Arno <am@disconnect.de> | 2010-07-18 11:33:04 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-07-18 11:33:04 +0200 |
commit | 88791c89ac1066a9c0118120e10ec3cc19c2ec72 (patch) | |
tree | efe64de5f51bc4ab5821da7114ed9ebac16cccf7 /filestreewidget.cpp | |
parent | a7a6b1c9f8f718b3082e6cc373459a1eba508848 (diff) | |
download | SheMov-88791c89ac1066a9c0118120e10ec3cc19c2ec72.tar.gz SheMov-88791c89ac1066a9c0118120e10ec3cc19c2ec72.tar.bz2 SheMov-88791c89ac1066a9c0118120e10ec3cc19c2ec72.zip |
Implemented "move to burn directory" for TreeWidget
Files from the archive can be moved to a configurable directory with
this function. The specified files won't be deleted from the database.
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r-- | filestreewidget.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 7af3f6f..d3d5ad4 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -6,6 +6,12 @@ */ #include <QHBoxLayout> +#include <QSettings> +#include <QMessageBox> +#include <QFile> +#include <QDir> +#include <QContextMenuEvent> +#include <QMenu> #include <QDebug> @@ -13,6 +19,7 @@ #include "smmodelsingleton.h" #include "filestreemodel.h" #include "seriestreemodel.h" +#include "helper.h" FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){ //the view @@ -36,6 +43,46 @@ FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSi mSeriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel")); } +void FilesTreeWidget::moveToBurn(){ + QModelIndexList selected = mView->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return; + } + QSettings s; + QString burnDir = s.value("paths/burn").toString(); + if(burnDir.isEmpty()){ + QMessageBox::critical(this, tr("Error"), tr("No target directory configured.")); + return; + } + foreach(QModelIndex i, selected){ + int type = i.data(FilesTreeModel::FileTypeRole).toInt(); + if(type == FilesTreeModel::BackCover || type == FilesTreeModel::FrontCover || type == FilesTreeModel::GeneralCover){ + continue; + } + int seriesPartId = i.data(FilesTreeModel::SeriesPartIdRole).toInt(); + int seriesId = mSeriesModel->seriesIdByPartId(seriesPartId); + if(seriesId != -1){ + QModelIndex seriesIdx = mSeriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId); + if(seriesIdx.isValid()){ + QString seriesName = seriesIdx.data(SeriesTreeModel::NameRole).toString(); + QString dirName = seriesName.replace(' ', "."); + QDir target(burnDir); + target.mkdir(dirName); + const QHash<QString, QString> files = mModel->filesBySeriesPartId(seriesPartId); + foreach(QString name, files.keys()){ + QString sourceFile = Helper::createArchivePath(name, files.value(name)); + QString targetFile = QString("%1/%2/%3").arg(burnDir).arg(dirName).arg(name); + if(name == i.data(FilesTreeModel::FileNameRole).toString()){ + QFile::rename(sourceFile, targetFile); + }else{ + QFile::copy(sourceFile, targetFile); + } + } + } + } + } +} + void FilesTreeWidget::fileSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous){ Q_UNUSED(previous); int seriesPartId = current.data(FilesTreeModel::SeriesPartIdRole).toInt(); @@ -73,6 +120,14 @@ void FilesTreeWidget::fileSelectionChanged(const QItemSelection &selected, const FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent){} +void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){ + QMenu ctxMenu; + foreach(QAction *a, actions()){ + ctxMenu.addAction(a); + } + ctxMenu.exec(event->globalPos()); +} + FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {} bool FilesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const{ |