summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-18 11:33:04 +0200
committerArno <am@disconnect.de>2010-07-18 11:33:04 +0200
commit88791c89ac1066a9c0118120e10ec3cc19c2ec72 (patch)
treeefe64de5f51bc4ab5821da7114ed9ebac16cccf7 /filestreewidget.cpp
parenta7a6b1c9f8f718b3082e6cc373459a1eba508848 (diff)
downloadSheMov-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.cpp55
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 &current, 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{