summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r--filestreewidget.cpp611
1 files changed, 0 insertions, 611 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
deleted file mode 100644
index e5af54d..0000000
--- a/filestreewidget.cpp
+++ /dev/null
@@ -1,611 +0,0 @@
-/*
- 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 <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QSettings>
-#include <QMessageBox>
-#include <QFile>
-#include <QDir>
-#include <QContextMenuEvent>
-#include <QMenu>
-#include <QLabel>
-#include <QSpinBox>
-#include <QPushButton>
-#include <QProcess>
-#include <QFileDialog>
-#include <QSettings>
-#include <QEvent>
-#include <QSettings>
-#include <QHeaderView>
-#include <QInputDialog>
-#include <QPainter>
-#include <QTextDocument>
-#include <QImage>
-#include <QHash>
-#include <QBrush>
-#include <QColor>
-#include <QPen>
-#include <QDate>
-
-#include "filestreewidget.h"
-#include "filepropertiesdialog.h"
-#include "smglobals.h"
-#include "filestreemodel.h"
-#include "seriestreewidget.h"
-#include "seriestreemodel.h"
-#include "helper.h"
-#include "pictureviewer2.h"
-#include "filepropertiesdialog.h"
-#include "hoverwindow.h"
-#include "seriestreemodel.h"
-#include "seriesmetadatamodel.h"
-#include "framecache.h"
-
-FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){
- //the view
- mView = new FilesTreeView;
- mView->setSelectionMode(QAbstractItemView::ExtendedSelection);
- mView->setEditTriggers(QAbstractItemView::NoEditTriggers);
- mModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
- mProxy = new FilesTreeSortModel(this);
- mProxy->setSourceModel(mModel);
- mView->setModel(mProxy);
- mView->setSortingEnabled(true);
- mPropDlg = new FilePropertiesDialog(this);
- QItemSelectionModel *selModel = mView->selectionModel();
- connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged()));
- connect(mView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(itemDoubleClicked(QModelIndex)));
-
- //layout
- QHBoxLayout *mainLayout = new QHBoxLayout;
- mainLayout->addWidget(mView);
- setLayout(mainLayout);
-
- //globals
- mSeriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
- mPictureViewer = SmGlobals::instance()->pictureViewer();
-}
-
-void FilesTreeWidget::resetSize(){
- mSelectedSize = 0;
- emit selectedSize(mSelectedSize);
-}
-
-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 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()){
- //create target dir acc. to seriesName
- QString seriesName = seriesIdx.data(SeriesTreeModel::NameRole).toString();
- QString dirName = seriesName.replace(' ', ".");
- QDir target(burnDir);
- target.mkdir(dirName);
- //move selected file
- QString selSource = i.data(FilesTreeModel::FullPathRole).toString();
- QString selTarget = QString("%1/%2/%3").arg(burnDir).arg(dirName).arg(i.data(FilesTreeModel::FileNameRole).toString());
- QFile::rename(selSource, selTarget);
- //copy covers
- 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);
- int fileType = mModel->fileType(files.value(name));
- switch(fileType){
- case FilesTreeModel::FrontCover:
- case FilesTreeModel::BackCover:
- case FilesTreeModel::GeneralCover:
- QFile::copy(sourceFile, targetFile);
- break;
- default:
- ;
- }
- }
- }
- }
- }
-}
-
-void FilesTreeWidget::removeFiles(){
- QModelIndexList selected = mView->selectionModel()->selectedRows();
- if(selected.isEmpty()){
- return;
- }
- QString message = QString(tr("<p>Really delete these file(s):</p><ul>"));
- foreach(QModelIndex i, selected){
- message.append(QString(tr("<li>%1</li>")).arg(i.data(FilesTreeModel::FileNameRole).toString()));
- }
- message.append("</ul>");
- int retval = QMessageBox::critical(this, tr("Question"), message, QMessageBox::Yes | QMessageBox::No);
- if(retval == QMessageBox::Yes){
- QList<QPersistentModelIndex> realSelected;
- foreach(QModelIndex i, selected){
- realSelected << mProxy->mapToSource(i);
- }
- mModel->deleteFiles(realSelected);
- }
-}
-
-void FilesTreeWidget::moveToDirectory(){
- QModelIndexList selected = mView->selectionModel()->selectedRows();
- if(selected.isEmpty()){
- return;
- }
- QSettings s;
- QString startDir = s.value("paths/selecteddir", QDir::homePath()).toString();
- QString dir = QFileDialog::getExistingDirectory(this, tr("Select directory"), startDir);
- if(!dir.isEmpty()){
- foreach(QModelIndex i, selected){
- QString source = i.data(FilesTreeModel::FullPathRole).toString();
- QString destination = QString("%1/%2").arg(dir).arg(i.data(FilesTreeModel::FileNameRole).toString());
- QFile::rename(source, destination);
- }
- }
-}
-
-void FilesTreeWidget::fileProperties(){
- QModelIndexList selected = mView->selectionModel()->selectedRows();
- if(selected.isEmpty()){
- return;
- }
- QModelIndex real = mProxy->mapToSource(selected.at(0));
- if(real.isValid()){
- int dvd = real.data(FilesTreeModel::DvdNoRole).toInt();
- if(dvd != -1){
- QMessageBox::critical(this, tr("Error"), tr("File is not available!"));
- return;
- }
- QString fullPath = real.data(FilesTreeModel::FullPathRole).toString();
- QString mimeType = Helper::mimeType(fullPath);
- mPropDlg->metaWidget()->setSeriesPartId(real.data(FilesTreeModel::SeriesPartIdRole).toInt());
- if(mimeType.startsWith("video")){
- QList<QMap<QString, QString> > fileData = mModel->streamInfo(real);
- mPropDlg->setFileName(real.data(FilesTreeModel::FileNameRole).toString());
- mPropDlg->setStreamData(fileData);
- }else if(mimeType.startsWith("image")){
- QMap<QString, QString> imageData = mModel->pictureInfo(real);
- mPropDlg->addData("Image data", imageData);
- QMap<QString, QString> textData = mModel->pictureMetaInfo(real);
- if(!textData.isEmpty()){
- mPropDlg->addData("Meta data", textData);
- }
- int fileType = real.data(FilesTreeModel::FileTypeRole).toInt();
- QString fileTypeName = mModel->fileTypes().value(fileType);
- QString seriesName = real.data(FilesTreeModel::SeriesNameRole).toString();
- QString seriesPart = QString::number(real.data(FilesTreeModel::SeriesPartRole).toInt());
- QString label = QString(tr("%1\n%2 for %3 %4")).arg(real.data(FilesTreeModel::FileNameRole).toString()).arg(fileTypeName).arg(seriesName).arg(seriesPart);
- mPropDlg->setFileName(label);
- }
- mPropDlg->exec();
- }
-}
-
-void FilesTreeWidget::edit(int column){
- QModelIndexList currentSel = mView->selectionModel()->selectedRows();
- if(currentSel.isEmpty()){
- return;
- }
- const QHash<QString, int> cols = mModel->editableColumns();
- if(!cols.values().contains(column)){
- return;
- }
- PersistenModelIndexList sIdxes;
- foreach(QModelIndex idx, currentSel){
- QModelIndex pIdx = filesTree()->model()->index(idx.row(), column, idx.parent());
- if(pIdx.isValid()){
- sIdxes << mProxy->mapToSource(pIdx);
- }
- }
- QString msg = cols.key(column);
- if(column == FilesTreeModel::FileType){
- QStringList fileTypes = mModel->fileTypes().values();
- qSort(fileTypes);
- int inputIdx = fileTypes.indexOf(sIdxes.first().data().toString());
- QString item = QInputDialog::getItem(this, msg, msg, fileTypes, inputIdx, false);
- if(!item.isEmpty()){
- int fileTypeInt = mModel->fileTypes().key(item);
- foreach(QModelIndex curIdx, sIdxes){
- mModel->setData(curIdx, fileTypeInt, Qt::EditRole);
- }
- }
- return;
- }
- bool dialogOk = false;
- int value = -1;
- if(column == FilesTreeModel::PartNo){
- value = QInputDialog::getInt(this, msg, msg, sIdxes.first().data().toInt(), -1, 2147483647, 1, &dialogOk);
- }
- if(column == FilesTreeModel::Quality){
- value = QInputDialog::getInt(this, msg, msg, sIdxes.first().data().toInt(), -1, 10, 1, &dialogOk);
- }
- if(column == FilesTreeModel::DvdNo){
- int nextDvdNo = mSeriesModel->findNextDvdNo();
- value = QInputDialog::getInt(this, msg, msg, nextDvdNo, -1, 2147483647, 1, &dialogOk);
- }
- if(dialogOk){
- foreach(QModelIndex curIdx, sIdxes){
- mModel->setData(curIdx, value, Qt::EditRole);
- }
- mModel->refresh();
- mView->expandAll();
- }
-}
-
-void FilesTreeWidget::suggest(){
- QModelIndexList currentSel = mView->selectionModel()->selectedRows();
- if(currentSel.isEmpty()){
- return;
- }
- qint64 size = 0;
- foreach(QModelIndex curIdx, currentSel){
- qint64 curSize = curIdx.data(FilesTreeModel::SizeRole).value<qint64>();
- size += curSize;
- }
- qint64 dvdSize = SmGlobals::instance()->dvdSize();
- if(size > dvdSize){
- QMessageBox::critical(this, tr("Error"), tr("File too big for a single DVD"));
- return;
- }
- qint64 neededSize = dvdSize - size;
- QModelIndex candidate = mModel->fileSizeLessThan(neededSize);
- QModelIndex real = mProxy->mapFromSource(candidate);
- if(!real.isValid() || mView->selectionModel()->isSelected(real)){
- QMessageBox::critical(this, tr("Error"), tr("Out of suggestions!"));
- return;
- }
- mView->selectionModel()->select(real, QItemSelectionModel::Select | QItemSelectionModel::Rows);
- mView->scrollTo(real, QAbstractItemView::PositionAtCenter);
-}
-
-void FilesTreeWidget::playSelected(){
- QStringList fullPaths;
- QModelIndexList selected = mView->selectionModel()->selectedRows();
- if(selected.isEmpty()){
- return;
- }
- foreach(QModelIndex idx, selected){
- fullPaths << idx.data(FilesTreeModel::FullPathRole).toString();
- }
- playItems(fullPaths);
-}
-
-void FilesTreeWidget::moveToSeries(){
- SeriesTreeWidget *vWidget = SmGlobals::instance()->seriesTreeWidget();
- QModelIndex sel = vWidget->seriesTree()->selectionModel()->currentIndex();
- QModelIndex real = vWidget->seriesProxy()->mapToSource(sel);
- QModelIndexList nfiles = mView->selectionModel()->selectedRows();
- QList<QPersistentModelIndex> files;
- foreach (QModelIndex i, nfiles){
- files << i;
- }
- FileMoveDialog fmd(real, files, 0, 0);
- fmd.exec();
-}
-
-void FilesTreeWidget::fileSelectionChanged(){
- QModelIndexList selected = mView->selectionModel()->selectedRows();
- qint64 selSize = 0;
- QStringList selectedSeries;
- foreach(QModelIndex idx, selected){
- selSize += idx.data(FilesTreeModel::SizeRole).toLongLong();
- int seriesPartId = idx.data(FilesTreeModel::SeriesPartIdRole).toInt();
- int seriesId = mSeriesModel->seriesIdByPartId(seriesPartId);
- QModelIndex seriesIdx = mSeriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId);
- if(seriesIdx.isValid()){
- QModelIndex seriesPartIdx = mSeriesModel->findValue(seriesPartId, seriesIdx, SeriesTreeModel::SeriesPartId, SeriesTreeModel::Name);
- QString seriesString = seriesPartIdx.data().toString();
- if(!selectedSeries.contains(seriesString)){
- selectedSeries << seriesString;
- }
- }
- }
- emit selectedSize(selSize);
- emit numSelected(selected.size());
- emit statusMessage(QString(tr("Series: %1")).arg(selectedSeries.join(",")));
-}
-
-void FilesTreeWidget::itemDoubleClicked(const QModelIndex &index){
- QString file = index.data(FilesTreeModel::FullPathRole).toString();
- QFileInfo fi(file);
- if(fi.exists()){
- QString mimeType = Helper::mimeType(file);
- if(mimeType.startsWith("image")){
- mPictureViewer->setFile(file);
- mPictureViewer->show();
- return;
- }else if(mimeType.startsWith("video")){
- playItems(QStringList() << file);
- }
- }else{
- QString msg = QString(tr("File %1 not found!")).arg(file);
- QMessageBox::critical(this, tr("Error"), msg);
- }
-}
-
-void FilesTreeWidget::playItems(const QStringList &paths){
- if(paths.isEmpty()){
- return;
- }
- QStringList existing;
- foreach(QString p, paths){
- QFileInfo fi(p);
- if(fi.exists()){
- existing << p;
- }
- }
- if(existing.isEmpty()){
- return;
- }
- QPair<QString, QStringList> pData = Helper::programData("movieviewer", QString());
- QString prog = pData.first;
- QStringList args = pData.second;
- args << existing;
- QProcess::startDetached(prog, args);
-}
-
-FilesTreeView::FilesTreeView(QWidget *parent) : SmTreeView("ui/headerpos", parent), mHoverPics(false){
- setAttribute(Qt::WA_Hover);
- mHoverWin = new HoverWindow(this);
-}
-
-void FilesTreeView::readSettings(){
- QSettings s;
- mHoverPics = s.value("ui/hoverpics", true).toBool();
- mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0);
- mHoverMovies = s.value("ui/hovermovies", true).toBool();
- mCursorOffest = s.value("ui/cursoroffset").toInt();
- readHeaderConfig();
-}
-
-void FilesTreeView::writeSettings(){
- writeHeaderConfig();
-}
-
-void FilesTreeView::contextMenuEvent(QContextMenuEvent *event){
- mHoverWin->hide();
- QMenu ctxMenu;
- foreach(QAction *a, actions()){
- ctxMenu.addAction(a);
- }
- ctxMenu.exec(event->globalPos());
-}
-
-bool FilesTreeView::event(QEvent *e){
- QHoverEvent *hEvent = static_cast<QHoverEvent*>(e);
- if(!hEvent){
- return SmTreeView::event(e);
- }
- QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() + mCursorOffest);
- QModelIndex curIdx = indexAt(hotSpot);
- /*
- The whole point of this if/then/else mess is to exit as early as possible
- for performance reasons. We don't want the cpu to spin at 100% only
- because something _could_ happen...
- */
- if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){
- if(!curIdx.isValid() || (!curIdx.column() == 0)){
- return exitHover();
- }
- bool toInt;
- int fileType = curIdx.data(FilesTreeModel::FileTypeRole).toInt(&toInt);
- if(!toInt){
- return exitHover();
- }
- if(fileType == FilesTreeModel::Movie){
- if(!mHoverMovies){
- return exitHover();
- }
- }else{
- if(!mHoverPics){
- return exitHover();
- }
- }
- }
- if(e->type() == QEvent::HoverEnter){
- doHover(curIdx);
- return true;
- }
- if(e->type() == QEvent::HoverMove){
- if(curIdx != mCurHover){
- doHover(curIdx);
- return true;
- }else{
- mHoverWin->setPos();
- return true;
- }
- }
- if(e->type() == QEvent::HoverLeave){
- return exitHover();
- }
- return SmTreeView::event(e);
-}
-
-bool FilesTreeView::exitHover(bool exitVal){
- mHoverWin->setVisible(false);
- mCurHover = QModelIndex();
- return exitVal;
-}
-
-void FilesTreeView::doHover(const QModelIndex &idx){
- QPixmap pm;
- bool scale = true;
- mCurHover = idx;
- if(idx.data(FilesTreeModel::FileTypeRole).toInt() == FilesTreeModel::Movie){
- pm = SmGlobals::instance()->frameCache()->entry(idx.data(FilesTreeModel::FullPathRole).toString());
- if(pm.isNull()){
- return;
- }
- scale = false;
- FilesTreeModel *filesModel = qobject_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
- if(filesModel->displayMode() == FilesTreeModel::Burn){
- QString filesData = fileNameText(idx);
- pm = annotateHover(pm, filesData);
- }
- QString metaData = metaDataText(idx);
- if(!metaData.isEmpty()){
- pm = annotateHover(pm, metaData);
- }
- scale = false;
- }else{
- if(!pm.load(idx.data(FilesTreeModel::FullPathRole).toString())){
- return;
- }
- }
- mHoverWin->setPixmap(pm, scale);
- mHoverWin->setCaption(idx.data(FilesTreeModel::FileNameRole).toString());
- mHoverWin->setPos();
- mHoverWin->setVisible(true);
-}
-
-const QString FilesTreeView::fileNameText(const QModelIndex &idx) const{
- SeriesTreeModel *seriesModel = qobject_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
- int seriesId = seriesModel->seriesIdByPartId(idx.data(FilesTreeModel::SeriesPartIdRole).toInt());
- if(seriesId == -1){
- return QString();
- }
- QModelIndex seriesIdx = seriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId);
- if(!seriesIdx.isValid()){
- return QString();
- }
- FilesTreeModel *filesModel = qobject_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
- QHash<QString, QString> files = filesModel->filesBySeriesPartId(idx.data(FilesTreeModel::SeriesPartIdRole).toInt());
- QModelIndex seriesPartIdx = seriesModel->findValue(idx.data(FilesTreeModel::SeriesPartIdRole), seriesIdx, SeriesTreeModel::SeriesPartId, SeriesTreeModel::Name);
- QString retval = QString(tr("<p style=\"text-decoration: underline; font-weight: bold\">%1</p>")).arg(seriesPartIdx.data().toString());
- retval.append(QString(tr("<p style=\"margin-bottom: 0px; padding-bottom: 0px\">Files:</p>")));
- retval.append(tr("<ul style=\"margin-top: 0px\">"));
- QHash<QString, QString>::const_iterator it = files.constBegin();
- while(it != files.constEnd()){
- retval.append(QString("<li style=\"margin-left: -10px\">%1</li>").arg(it.key()));
- ++it;
- }
- retval.append(tr("</ul>"));
- return retval;
-}
-
-const QString FilesTreeView::metaDataText(const QModelIndex &idx) const{
- if(!idx.isValid()){
- return QString();
- }
- SeriesMetadataModel *metaDataModel = qobject_cast<SeriesMetadataModel*>(SmGlobals::instance()->model("SeriesMetadata"));
- int seriesPartId = idx.data(FilesTreeModel::SeriesPartIdRole).toInt();
- if(!metaDataModel->hasRecord(seriesPartId)){
- return QString();
- }
- metaDataModel->populate(seriesPartId);
- QModelIndex mdIdx = metaDataModel->index(0, 0, QModelIndex());
- QList<QVariant> metaData = metaDataModel->dataList(mdIdx);
- QString retval("<p style=\"text-decoration: underline; font-weight: bold; margin-bottom: 10px\">Metadata</p><p style=\"margin-left: 20px\"><table>");
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Release Year</span></td><td>%1</td></tr>")).arg(QString::number(metaData.at(SeriesMetadataModel::ReleaseYear).toInt())));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Encoding Passes</span></td><td>%1</td></tr>")).arg(QString::number(metaData.at(SeriesMetadataModel::Passes).toInt())));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Release Group</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::ReleaseGroup).toString()));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Source Medium</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::SourceMedium).toString()));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Usenet Subject</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::Subject).toString()));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Encoder Options</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::EncoderOpts).toString()));
- QDate dateAdded = metaData.at(SeriesMetadataModel::Added).toDate();
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Added</span></td><td>%1</td></tr>")).arg(dateAdded.toString(Qt::ISODate)));
- retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Comment</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::Comment).toString()));
- retval.append("</table></p>");
- return retval;
-}
-
-const QPixmap FilesTreeView::annotateHover(const QPixmap &hoverImage, const QString &text) const{
- QTextDocument doc;
- doc.setHtml(text);
- doc.setTextWidth(hoverImage.width());
- QSize newPicSize(hoverImage.width(), hoverImage.height() + doc.size().height());
- QImage retImg(newPicSize, QImage::Format_ARGB32_Premultiplied);
- retImg.fill(0);
- QPainter p(&retImg);
- p.drawPixmap(0, 0, hoverImage);
- p.setRenderHint(QPainter::Antialiasing, false);
- p.setRenderHint(QPainter::TextAntialiasing, true);
- QColor bgColor(Qt::white);
- bgColor.setAlpha(70);
- QBrush brush(bgColor);
- p.setPen(QPen(Qt::NoPen));
- p.setBrush(brush);
- QRect annotateRect(0, hoverImage.height(), hoverImage.width(), doc.size().height());
- p.drawRect(annotateRect);
- p.setPen(QPen(Qt::black));
- p.translate(0, hoverImage.height());
- doc.drawContents(&p);
- return QPixmap::fromImage(retImg);
-}
-
-
-FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {}
-
-// left + right are from the sourceModel() !!!!
-bool FilesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const{
- if(left.parent() == QModelIndex()){
- return false;
- }
- if(left.column() == FilesTreeModel::SizeDisplay){
- return left.data(FilesTreeModel::SizeRole).toLongLong() < right.data(FilesTreeModel::SizeRole).toLongLong();
- }
- if(left.column() == FilesTreeModel::DvdNoRole){
- return left.data(FilesTreeModel::DvdNoRole).toInt() < right.data(FilesTreeModel::DvdNoRole).toInt();
- }
- if(left.column() == FilesTreeModel::DisplayName){
- if(left.data(FilesTreeModel::SeriesNameRole) == right.data(FilesTreeModel::SeriesNameRole)){
- return left.data(FilesTreeModel::SeriesPartRole).toInt() < right.data(FilesTreeModel::SeriesPartRole).toInt();
- }
- }
- return QSortFilterProxyModel::lessThan(left, right);
-}
-
-FileMoveDialog::FileMoveDialog(QPersistentModelIndex selected, QList<QPersistentModelIndex> files, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mFiles(files){
- QLabel *l1 = new QLabel(tr("Select destination"));
- QVBoxLayout *selectionLayout = new QVBoxLayout;
- selectionLayout->addWidget(l1);
- mTree = new SmTreeView;
- mModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
- mTree->setModel(mModel);
- selectionLayout->addWidget(mTree);
- for(int i = 1; i < SeriesTreeModel::NumFields; ++i){
- mTree->setColumnHidden(i, true);
- }
- mTree->resizeColumnToContents(0);
- mTree->setAlternatingRowColors(true);
- mTree->expand(selected);
- mTree->scrollTo(selected, QAbstractItemView::PositionAtTop);
- QHBoxLayout *buttonLayout = new QHBoxLayout;
- mOk = new QPushButton(tr("Ok"));
- connect(mOk, SIGNAL(clicked()), this, SLOT(accept()));
- mCancel = new QPushButton(tr("Cancel"));
- connect(mCancel, SIGNAL(clicked()), this, SLOT(reject()));
- buttonLayout->setAlignment(Qt::AlignRight);
- buttonLayout->addWidget(mOk);
- buttonLayout->addWidget(mCancel);
- QVBoxLayout *mainLayout = new QVBoxLayout;
- mainLayout->addLayout(selectionLayout);
- mainLayout->addLayout(buttonLayout);
- setLayout(mainLayout);
-}
-
-void FileMoveDialog::accept(){
- if(mFiles.isEmpty()){
- return;
- }
- FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
- int newSeriesIdx = mTree->selectionModel()->currentIndex().data(SeriesTreeModel::SeriesPartIdRole).toInt();
- filesModel->updateSeries(newSeriesIdx, mFiles);
- QDialog::accept();
-}