From 26dfde02bd98a3a78ddacdb16681c640dfc1ad5e Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 5 Apr 2018 19:52:50 +0200 Subject: Weed out old archive view and archivecontroller Unfortunately, it is so convoluted code that there's most likely a lot of cruft left, so call it work in progress... --- archivecontroller.cpp | 426 ---------------------------------- archivecontroller.h | 92 -------- archiveview.cpp | 618 -------------------------------------------------- archiveview.h | 122 ---------- newmoviewizard.cpp | 18 +- shemov.cpp | 176 -------------- shemov.h | 19 -- shemov.pro | 2 - 8 files changed, 13 insertions(+), 1460 deletions(-) delete mode 100644 archivecontroller.cpp delete mode 100644 archivecontroller.h diff --git a/archivecontroller.cpp b/archivecontroller.cpp deleted file mode 100644 index b250337..0000000 --- a/archivecontroller.cpp +++ /dev/null @@ -1,426 +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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "archivecontroller.h" -#include "archivemodel.h" -#include "archiveview.h" -#include "pictureviewer2.h" -#include "filepropertiesdialog.h" -#include "smglobals.h" -#include "helper.h" - -ArchiveController::ArchiveController(QObject *parent) : QObject(parent) { - if(parent){ - mParentWidget = qobject_cast(this->parent()); - } - readConfig(); -} - -void ArchiveController::setArchiveView(ArchiveView *view){ - mArchiveView = view; -} - -void ArchiveController::setArchiveTree(ArchiveTree *atree, ArchiveProxy *aproxy){ - mArchiveTree = atree; - mArchiveProxy = aproxy; - mArchiveSelection = mArchiveTree->selectionModel(); -} - -void ArchiveController::setArchiveFiles(ArchiveFiles *afiles, ArchiveFilesProxy *afilesproxy){ - mArchiveFiles = afiles; - mArchiveFilesProxy = afilesproxy; - mFileSelection = mArchiveFiles->selectionModel(); -} - -void ArchiveController::setModels(ArchiveModel *amodel, ArchiveFilesModel *afilesmodel){ - mArchiveModel = amodel; - mArchiveFilesModel = afilesmodel; -} - -void ArchiveController::setMappingModels(QStandardItemModel *actorModel, QStandardItemModel *genreModel){ - mActorModel = actorModel; - mGenreModel = genreModel; -} - -void ArchiveController::init(){ - connect(mArchiveSelection, &QItemSelectionModel::selectionChanged, this, &ArchiveController::treeSelectionChanged); - connect(mArchiveFiles, &ArchiveFiles::doubleClicked, this, &ArchiveController::fileDoubleClicked); - connect(mFileSelection, &QItemSelectionModel::selectionChanged, this, &ArchiveController::fileSelectionChanged); -} - -void ArchiveController::setSeriesPart(int seriesPartId){ - QModelIndex res = mArchiveModel->findRecursive(seriesPartId, ArchiveModel::SeriesPartId, mArchiveModel->rootIndex()); - if(res.isValid()){ - mArchiveView->clearFilter(); - QModelIndex real = mArchiveView->archiveProxy()->mapFromSource(res); - mArchiveTree->scrollTo(real, QAbstractItemView::PositionAtCenter); - mArchiveTree->selectionModel()->select(real, QItemSelectionModel::Rows | QItemSelectionModel::SelectCurrent); - } -} - -void ArchiveController::playSelectedFiles(){ - QModelIndexList sel = mFileSelection->selectedRows(); - QStringList files; - for(const QModelIndex &i : sel){ - if(i.data(ArchiveFilesModel::FileTypeRole).toInt() == FT_MOVIE){ - QString fullPath = i.data(ArchiveFilesModel::FullPathRole).toString(); - QFileInfo fi(fullPath); - if(fi.exists()){ - files << fullPath; - } - } - } - if(!files.isEmpty()){ - QPair playerData = Helper::programData("movieviewer"); - QStringList args = playerData.second; - args << files; - QProcess::startDetached(playerData.first, args); - } -} - -void ArchiveController::editQuality(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::Quality); - if(sel.isEmpty()){ - return; - } - bool ok; - int quality = QInputDialog::getInt(mParentWidget, tr("Set Quality"), tr("Quality"), 7, 1, 10, 1, &ok); - if(ok){ - for(const QModelIndex &i : sel){ - QModelIndex real = mArchiveFilesProxy->mapToSource(i); - if(mArchiveFilesModel->isMovie(real)){ - mArchiveFilesModel->setData(real, quality, ArchiveFilesModel::QualityRole); - } - } - } -} - -void ArchiveController::editDvdNo(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::DvdNo); - if(sel.isEmpty()){ - return; - } - bool ok; - int dvdNo = QInputDialog::getInt(mParentWidget, tr("Set DVD no."), tr("Number (-1 for local)"), mArchiveFilesModel->nextDvd(), -1, 1024 * 1024, 1, &ok); - if(ok){ - for(const QModelIndex &i : sel){ - QModelIndex real = mArchiveFilesProxy->mapToSource(i); - if(mArchiveFilesModel->isMovie(real)){ - mArchiveFilesModel->setData(real, dvdNo, ArchiveFilesModel::DvdNoRole); - } - } - } -} - -void ArchiveController::editFileType(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::FileType); - if(sel.isEmpty()){ - return; - } - bool ok; - QStringList types = QStringList() << tr("Movie") << tr("Front Cover") << tr("Back Cover") << tr("General Cover"); - QString item = QInputDialog::getItem(mParentWidget, tr("Set file type"), tr("Type:"), types, 0, false, &ok); - if(ok && !item.isEmpty()){ - int newType = 0; - if(item == tr("Movie")){ - newType = FT_MOVIE; - }else if(item == tr("Front Cover")){ - newType = FT_FRONTCOVER; - }else if(item == tr("Back Cover")){ - newType = FT_BACKCOVER; - }else if(item == tr("General Cover")){ - newType = FT_GENERALCOVER; - } - if(newType){ - for(const QModelIndex &i : sel){ - QModelIndex real = mArchiveFilesProxy->mapToSource(i); - mArchiveFilesModel->setData(real, newType, ArchiveFilesModel::FileTypeRole); - } - mArchiveFilesModel->refresh(); - mArchiveFiles->expandAll(); - } - } -} - -void ArchiveController::editFileNo(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::FileNumber); - if(sel.isEmpty()){ - return; - } - bool ok; - int fileNo = QInputDialog::getInt(mParentWidget, tr("Set DVD no."), tr("Number (-1 for none)"), -1, -1, 1024 * 1024, 1, &ok); - if(ok){ - for(const QModelIndex &i : sel){ - QModelIndex real = mArchiveFilesProxy->mapToSource(i); - if(mArchiveFilesModel->isMovie(real)){ - mArchiveFilesModel->setData(real, fileNo, ArchiveFilesModel::FileNumberRole); - } - } - } -} - -void ArchiveController::showProperties(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::FullPath); - if(sel.isEmpty()){ - return; - } - QModelIndex first = sel.first(); - FilePropertiesDialog dlg(first.data().toString()); - dlg.exec(); -} - -void ArchiveController::showPreview(){ - QModelIndexList sel = mFileSelection->selectedRows(ArchiveFilesModel::FullPath); - if(sel.isEmpty()){ - return; - } - QString first = sel.first().data().toString(); - PictureViewer2 *pv = SmGlobals::instance()->pictureViewer(); - pv->setShowMappingItem(false); - QFileInfo fi(first); - if(!fi.exists()){ - pv->setFile(); - }else if(sel.first().data(ArchiveFilesModel::FileTypeRole).toInt() == FT_MOVIE){ - qApp->setOverrideCursor(Qt::BusyCursor); - QPixmap preview = Helper::preview(first); - if(!preview.isNull()){ - pv->setPixmap(preview); - pv->show(); - }else{ - pv->setFile(); - } - qApp->restoreOverrideCursor(); - }else{ - pv->setFile(first); - } - pv->show(); -} - -void ArchiveController::addActionForTree(QAction *a){ - mActionsForTree << a; - mArchiveTree->addAction(a); -} - -void ArchiveController::addFiles(){ - QSettings s; - QString startDir = s.value("paths/coverpath").toString(); - QStringList covers = QFileDialog::getOpenFileNames(mArchiveView, tr("Select covers"), startDir); - if(covers.isEmpty()){ - return; - } - QModelIndex part = mArchiveSelection->currentIndex(); - if(!part.isValid()){ - QMessageBox::critical(mArchiveView, tr("Error"), tr("No part selected!")); - return; - } - mArchiveModel->addFiles(part.data(ArchiveModel::SeriesPartIdRole).toInt(), covers); - mArchiveFilesModel->refresh(); - mArchiveFiles->expandAll(); -} - -void ArchiveController::readConfig(){ - mActorIcon = SmGlobals::instance()->iconFor("actor"); - mGenreIcon = SmGlobals::instance()->iconFor("genre"); - mMetaIcon = SmGlobals::instance()->iconFor("meta"); -} - -void ArchiveController::moveFilesToSeriespart(const QStringList &md5Sums, int newSeriesPart){ - for(const QString &md5 : md5Sums){ - mArchiveFilesModel->updateSeriesPartForFile(md5, newSeriesPart); - } - mArchiveFilesModel->refresh(); -} - -void ArchiveController::treeSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ - Q_UNUSED(selected); - Q_UNUSED(deselected); - QModelIndexList sel = mapToSource(mArchiveProxy, mArchiveSelection->selectedRows()); - if(sel.isEmpty()){ - return; - } - QSet ids; - for(const QModelIndex &idx : sel){ - ids.unite(mArchiveModel->seriesPartIds(idx)); - } - mArchiveFilesModel->populate(ids); - mArchiveFiles->expandToDepth(0); - mArchiveView->setCurrentArchivePath(mArchiveModel->indexToPath(sel.first())); - QStringList actors = mArchiveModel->actors(ids); - mActorModel->clear(); - for(const QString &actor : actors){ - QStandardItem *newItem = new QStandardItem(mActorIcon, actor); - mActorModel->appendRow(newItem); - } - QStringList genres = mArchiveModel->genres(ids); - mGenreModel->clear(); - for(const QString &genre : genres){ - QStandardItem *newItem = new QStandardItem(mGenreIcon, genre); - mGenreModel->appendRow(newItem); - } - - getMetadata(ids); - - int nodeType = sel.first().data(ArchiveModel::TypeRole).toInt(); - for(QAction *a : mActionsForTree){ - int aData = a->data().toInt(); - bool enabled = aData & nodeType; - a->setEnabled(enabled); - } -} - -void ArchiveController::setMetadata(QTextEdit *metaEdit){ - mMetaEdit = metaEdit; -} - -void ArchiveController::getMetadata(QSet ids){ - mMetaEdit->clear(); - if(ids.isEmpty()){ - return; - } - - QString meta; - - if(ids.size() == 1){ - QList metadata = mArchiveModel->metadataList(*ids.begin()); - if(metadata.at(0).isValid()){ - meta.append(""); - meta.append(QString("").arg(metadata.at(ArchiveModel::ReleaseYear).toString())); - meta.append(QString("").arg(metadata.at(ArchiveModel::Source).toString())); - meta.append(QString("").arg(metadata.at(ArchiveModel::Subject).toString())); - meta.append(QString("").arg(metadata.at(ArchiveModel::Added).toDateTime().toString())); - - meta.append("
Release year%1
Source%1
Subj./Name%1
Added%1
"); - QString comment = metadata.at(ArchiveModel::Comment).toString(); - if(comment.isEmpty()){ - comment = tr("(none)"); - } - meta.append(QString("

Comments:

%1

").arg(comment)); - meta.append(""); - }else{ - meta = tr("No metadata available"); - } - }else{ - QStringList tmpH; - for(int i = 0; i < ArchiveFilesModel::NumFields; ++i){ - tmpH << ""; - } - tmpH.reserve(ArchiveFilesModel::NumFields); - ArchiveFilesModel tmpFModel(tmpH, this); - tmpFModel.populate(ids); - quint64 totalSize = tmpFModel.totalSize(); - QString sizeStr; - QLocale l; - if(totalSize / 1024 / 1024 / 1024 > 0){ //display GB - double ts = (double)totalSize / 1024.0 / 1024.0 / 1024.0; - sizeStr = QString("%1 GB").arg(l.toString(ts)); - }else if(totalSize / 1024 / 1024 > 0){ //display MB - double ts = (double)totalSize / 1024.0 / 1024.0; - sizeStr = QString("%1 MB").arg(l.toString(ts)); - }else if(totalSize == 0){ - sizeStr = tr("n/a"); - } - meta.append(""); - meta.append(QString("").arg(sizeStr)); - quint64 totalDur = tmpFModel.totalDuration(); - Helper::Duration dur(totalDur); - meta.append(QString("").arg(dur.toString())); - int moviefiles = tmpFModel.movieFilesCount(); - meta.append(QString("").arg(QString::number(moviefiles))); - int otherfiles = tmpFModel.otherFilesCount(); - meta.append(QString("").arg(QString::number(otherfiles))); - meta.append("
Total Size%1
Total Duration%1
Movie files%1
Other files%1
"); - meta.append(""); - } - mMetaEdit->setHtml(meta); -} - -void ArchiveController::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ - Q_UNUSED(selected); - Q_UNUSED(deselected); - QModelIndexList sel = mapToSource(mArchiveFilesProxy, mFileSelection->selectedRows()); - if(sel.isEmpty()){ - return; - } - qint64 size = 0; - qint64 duration = 0; - bool maybeMore = false; - QSet seriesParts; - for(const QModelIndex &i : sel){ - seriesParts << i.data(ArchiveFilesModel::SeriesPartIdRole).toInt(); - size += i.data(ArchiveFilesModel::SizeRole).toInt(); - int type = i.data(ArchiveFilesModel::FileTypeRole).toInt(); - if(type == FT_MOVIE){ - int dur = i.data(ArchiveFilesModel::SizeDurRole).toInt(); - duration += dur; - if(dur == 0){ - maybeMore = true; - } - } - } - getMetadata(seriesParts); - emit sizeChanged(size); - emit durationChanged(duration, maybeMore); -} - -void ArchiveController::fileDoubleClicked(const QModelIndex &idx){ - if(!idx.isValid()){ - return; - } - int type = idx.data(ArchiveFilesModel::FileTypeRole).toInt(); - if(type == FT_MOVIE){ - QString fullPath = idx.data(ArchiveFilesModel::FullPathRole).toString(); - QFileInfo fi(fullPath); - if(!fi.exists()){ - QString msg = QString(tr("%1 not available!")).arg(idx.data(ArchiveFilesModel::FilenameRole).toString()); - QMessageBox::critical(mParentWidget, tr("Error"), msg); - return; - } - QPair playerData = Helper::programData("movieviewer"); - QStringList args = playerData.second; - args << idx.data(ArchiveFilesModel::FullPathRole).toString(); - QProcess::startDetached(playerData.first, args); - return; - }else if(type == FT_ORIGIN){ - return; - } - PictureViewer2 *pv = SmGlobals::instance()->pictureViewer(); - QModelIndex parent = idx.parent(); - const QAbstractItemModel *parentModel = parent.model(); - QStringList paths; - if(parent.isValid()){ - int row = 0; - QModelIndex child = parentModel->index(row, ArchiveFilesModel::FullPath, parent); - while(child.isValid()){ - paths << child.data().toString(); - ++row; - child = parentModel->index(row, ArchiveFilesModel::FullPath, parent); - } - } - pv->setShowMarkItem(false); - pv->addFiles(paths); - pv->selectPic(idx.data(ArchiveFilesModel::FullPathRole).toString()); - pv->show(); -} - -QModelIndexList ArchiveController::mapToSource(const QSortFilterProxyModel *proxy, const QModelIndexList idxs) const{ - QModelIndexList retval; - for(const QModelIndex &idx : idxs){ - retval << proxy->mapToSource(idx); - } - return retval; -} diff --git a/archivecontroller.h b/archivecontroller.h deleted file mode 100644 index d3197e3..0000000 --- a/archivecontroller.h +++ /dev/null @@ -1,92 +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. -*/ - -#ifndef ARCHIVECONTROLLER_H -#define ARCHIVECONTROLLER_H - -#include -#include -#include -#include - -class ArchiveView; -class ArchiveTree; -class ArchiveProxy; -class ArchiveFiles; -class ArchiveFilesProxy; -class ArchiveModel; -class ArchiveFilesModel; -class QItemSelectionModel; -class QSortFilterProxyModel; -class QStandardItemModel; -class QTextEdit; -class QAction; - -class ArchiveController : public QObject { - Q_OBJECT - public: - explicit ArchiveController(QObject *parent = 0); - void setArchiveView(ArchiveView *view); - void setArchiveTree(ArchiveTree *atree, ArchiveProxy *aproxy); - void setArchiveFiles(ArchiveFiles *afiles, ArchiveFilesProxy *afilesproxy); - void setModels(ArchiveModel *amodel, ArchiveFilesModel *afilesmodel); - void setMappingModels(QStandardItemModel *actorModel, QStandardItemModel *genreModel); - void setMetadata(QTextEdit *metaEdit); - ArchiveFilesModel *archiveFilesModel() { return mArchiveFilesModel; } - ArchiveFiles *archiveFiles() { return mArchiveFiles; } - ArchiveModel *archiveTreeModel() { return mArchiveModel; } - ArchiveTree *archiveTree() { return mArchiveTree; } - ArchiveView *archiveView() { return mArchiveView; } - void setSeriesPart(int seriesPartId); - void init(); - - public slots: - void treeSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void playSelectedFiles(); - void editQuality(); - void editDvdNo(); - void editFileType(); - void editFileNo(); - void showProperties(); - void showPreview(); - void addActionForTree(QAction *a); - void addFiles(); - void readConfig(); - void moveFilesToSeriespart(const QStringList &md5Sums, int newSeriesPart); - - private slots: - void fileDoubleClicked(const QModelIndex &idx); - void getMetadata(QSet ids); - - signals: - void sizeChanged(qint64 newSize); - void durationChanged(qint64 newDuration, bool maybeMore); - - private: - QModelIndexList mapToSource(const QSortFilterProxyModel *proxy, const QModelIndexList idxs) const; - ArchiveView *mArchiveView; - ArchiveTree *mArchiveTree; - ArchiveProxy *mArchiveProxy; - QItemSelectionModel *mArchiveSelection; - ArchiveFiles *mArchiveFiles; - ArchiveFilesProxy *mArchiveFilesProxy; - ArchiveModel *mArchiveModel; - ArchiveFilesModel *mArchiveFilesModel; - QItemSelectionModel *mFileSelection; - QStandardItemModel *mActorModel; - QStandardItemModel *mGenreModel; - QTextEdit *mMetaEdit; - QWidget *mParentWidget; - QList mActionsForTree; - QIcon mActorIcon; - QIcon mGenreIcon; - QIcon mMetaIcon; - QIcon mFileIcon; -}; - -#endif // ARCHIVECONTROLLER_H diff --git a/archiveview.cpp b/archiveview.cpp index 8463201..c931c9c 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -6,640 +6,22 @@ */ #include -#include #include -#include #include #include #include -#include -#include #include -#include -#include #include -#include -#include #include #include #include #include #include -#include -#include -#include -#include #include #include "archiveview.h" -#include "archivecontroller.h" -#include "mappingtablewidget.h" -#include "delegates.h" #include "smglobals.h" #include "helper.h" -#include "delegates.h" -#include "smdialog.h" - -ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { - QSettings s; - mArchiveModel = static_cast(SmGlobals::instance()->model("ArchiveModel")); - connect(mArchiveModel, &ArchiveModel::needRefresh, this, &ArchiveView::refreshArchive); - connect(mArchiveModel, &ArchiveModel::databaseError, this, &ArchiveView::showDatabaseError); - - mProxy = new ArchiveProxy; - mProxy->setSourceModel(mArchiveModel); - mTree = new ArchiveTree; - mTree->setModel(mProxy); - mTree->setColumnHidden(ArchiveModel::GenericId, true); - mTree->setColumnHidden(ArchiveModel::SeriesPartId, true); - mTree->setColumnHidden(ArchiveModel::SeriesPart, true); - mTree->setColumnHidden(ArchiveModel::Type, true); - mTree->setColumnHidden(ArchiveModel::Favorite, true); - mTree->setColumnHidden(ArchiveModel::Subtitle, true); - mTree->setColumnHidden(ArchiveModel::Count, true); - mTree->resizeColumnToContents(ArchiveModel::Name); - mTree->setSortingEnabled(true); - mTree->setEditTriggers(QAbstractItemView::NoEditTriggers); - connect(mTree, &ArchiveTree::expanded, this, &ArchiveView::expandItem); - connect(mTree, &ArchiveTree::collapsed, this, &ArchiveView::collapseItem); - mTree->sortByColumn(0, Qt::AscendingOrder); - - QString sortOrderName = s.value("archivemodel/sortorder", "Series Name").toString(); - mSortOrder = new QComboBox; - mSortOrder->addItems(mArchiveModel->availableOrders()); - mSortOrder->setCurrentText(sortOrderName); - // this is _not_ redundant! when sortOrderName is the first - // item in the list, nothing will happen otherwise! - mArchiveModel->setOrder(sortOrderName); - connect(mSortOrder, QOverload::of(&QComboBox::currentIndexChanged), mArchiveModel, QOverload::of(&ArchiveModel::setOrder)); - connect(mArchiveModel, &ArchiveModel::modelReset, this, &ArchiveView::doSelection); - - QLabel *l1 = new QLabel(tr("Filter")); - mFilter = new QLineEdit; - QString savedFilter = s.value("archivemodel/filter", QString()).toString(); - connect(mFilter, &QLineEdit::returnPressed, this, &ArchiveView::setFilter); - QPushButton *filter = new QPushButton(tr("Filter")); - connect(filter, &QPushButton::clicked, this, &ArchiveView::setFilter); - QPushButton *clear = new QPushButton(tr("Clear")); - mFilter->setText(savedFilter); - connect(clear, &QPushButton::clicked, this, &ArchiveView::clearFilter); - mProxy->setFilter(savedFilter, currentSortOrder()); - QHBoxLayout *filterLayout = new QHBoxLayout; - filterLayout->addWidget(l1); - filterLayout->addWidget(mFilter); - filterLayout->addWidget(filter); - filterLayout->addWidget(clear); - QVBoxLayout *treeLayout = new QVBoxLayout; - treeLayout->addWidget(mSortOrder); - treeLayout->addLayout(filterLayout); - treeLayout->addWidget(mTree); - QWidget *treeWidget = new QWidget; - treeWidget->setLayout(treeLayout); - - mToolBar = new QToolBar; - mToolBar->setIconSize(QSize(16,16)); - - mFiles = new ArchiveFiles; - mFiles->setItemDelegateForColumn(ArchiveFilesModel::FileType, new FileTypeDelegate(this)); - mFiles->setItemDelegateForColumn(ArchiveFilesModel::DvdNo, new DvdNoDelegate(this)); - mFiles->setItemDelegateForColumn(ArchiveFilesModel::Size, new SizeDelegate(this)); - mFiles->setItemDelegateForColumn(ArchiveFilesModel::SizeDur, new DurationDelegate(this)); - mFiles->setItemDelegateForColumn(ArchiveFilesModel::FileNumber, new EmptyDelegate(this)); - mFiles->setSelectionMode(QAbstractItemView::ExtendedSelection); - mFiles->setSelectionBehavior(QAbstractItemView::SelectRows); - mFilesModel = new ArchiveFilesModel(QStringList() << QChar(0x26A7) << tr("Seriespartid") << tr("Filename") << tr("Md5Sum") << tr("Size") << tr("Dvd") << tr("Type") << tr("No") << tr("Q") << tr("Fileid") << tr("S/Dur") << tr("Full Path") << tr("Series Name") << tr("Series Part") << tr("Subtitle "), this); - mFilesProxy = new ArchiveFilesProxy; - mFilesProxy->setSourceModel(mFilesModel); - mFiles->setModel(mFilesProxy); - mFiles->setSourceModel(mFilesModel); - - mActorView = new SmTreeView; - mActorView->setHeaderHidden(true); - mActorModel = new QStandardItemModel(this); - mActorView->setModel(mActorModel); - QGroupBox *actorBox = new QGroupBox(tr("Actors")); - QHBoxLayout *actorLayout = new QHBoxLayout; - actorLayout->addWidget(mActorView); - actorBox->setLayout(actorLayout); - - mGenreView = new SmTreeView; - mGenreView->setHeaderHidden(true); - mGenreModel = new QStandardItemModel(this); - mGenreView->setModel(mGenreModel); - QGroupBox *genreBox = new QGroupBox(tr("Genres")); - QHBoxLayout *genreLayout = new QHBoxLayout; - genreLayout->addWidget(mGenreView); - genreBox->setLayout(genreLayout); - - QGroupBox *metadataBox = new QGroupBox("Metadata/Comment"); - QVBoxLayout *metadataLayout = new QVBoxLayout; - mMeta = new QTextEdit; - mMeta->setReadOnly(true); - metadataLayout->addWidget(mMeta); - metadataBox->setLayout(metadataLayout); - - QHBoxLayout *bottomRightLayout = new QHBoxLayout; - bottomRightLayout->addWidget(actorBox, 1); - bottomRightLayout->addWidget(genreBox, 1); - bottomRightLayout->addWidget(metadataBox, 2); - QWidget *bottomRightWidget = new QWidget; - bottomRightWidget->setLayout(bottomRightLayout); - - QVBoxLayout *topRightLayout = new QVBoxLayout; - topRightLayout->addWidget(mToolBar); - topRightLayout->addWidget(mFiles); - QWidget *topRightWidget = new QWidget; - topRightWidget->setLayout(topRightLayout); - - mRightSplitter = new QSplitter(Qt::Vertical); - mRightSplitter->addWidget(topRightWidget); - mRightSplitter->addWidget(bottomRightWidget); - mRightSplitter->setStretchFactor(0, 4); - - mTreeSplitter = new QSplitter(Qt::Horizontal); - mTreeSplitter->addWidget(treeWidget); - mTreeSplitter->addWidget(mRightSplitter); - mTreeSplitter->setStretchFactor(0, 1); - mTreeSplitter->setStretchFactor(1, 4); - QHBoxLayout *mainLayout = new QHBoxLayout; - mainLayout->addWidget(mTreeSplitter); - - setLayout(mainLayout); - - initController(); -} - -int ArchiveView::currentSortOrder() const { - return mArchiveModel->availableOrdersHash().value(mSortOrder->currentText()); -} - -void ArchiveView::readSettings(){ - QSettings s; - QVariantList list; - list = s.value("archivemodel/expandedgenres").toList(); - mExpandedItems[ArchiveModel::Genre] = list; - list = s.value("archivemodel/expandedactors").toList(); - mExpandedItems[ArchiveModel::Actor] = list; - list = s.value("archivemodel/expandedseries").toList(); - mExpandedItems[ArchiveModel::SeriesName] = list; - list = s.value("archivemodel/expandedlocalfiles").toList(); - mExpandedItems[ArchiveModel::Local] = list; - list = s.value("archivemodel/expandedfavorites").toList(); - mExpandedItems[ArchiveModel::FavoriteOrder] = list; - mCurrentArchivePath = s.value("archivemodel/selectedseries").toStringList(); - QByteArray splitterState = s.value("archivemodel/vsplitter").toByteArray(); - mTreeSplitter->restoreState(splitterState); - QByteArray hSplitterState = s.value("archivemodel/hsplitter").toByteArray(); - mRightSplitter->restoreState(hSplitterState); - doSelection(); - mFiles->readHeaderConfig(); - mFiles->setSortingEnabled(true); -} - -void ArchiveView::writeSettings() { - QSettings s; - s.setValue("archivemodel/sortorder", mSortOrder->currentText()); - s.setValue("archivemodel/filter", mFilter->text()); - s.setValue("archivemodel/expandedgenres", mExpandedItems.value(ArchiveModel::Genre)); - s.setValue("archivemodel/expandedactors", mExpandedItems.value(ArchiveModel::Actor)); - s.setValue("archivemodel/expandedseries", mExpandedItems.value(ArchiveModel::SeriesName)); - s.setValue("archivemodel/expandedlocalfiles", mExpandedItems.value(ArchiveModel::Local)); - s.setValue("archivemodel/expandedfavorites", mExpandedItems.value(ArchiveModel::FavoriteOrder)); - s.setValue("archivemodel/selectedseries", mCurrentArchivePath); - s.setValue("archivemodel/vsplitter", mTreeSplitter->saveState()); - s.setValue("archivemodel/hsplitter", mRightSplitter->saveState()); - mFiles->writeHeaderConfig(); -} - -void ArchiveView::refreshArchive(){ - writeSettings(); - mArchiveModel->refresh(); - doSelection(); -} - -void ArchiveView::doSelection(){ - QVariantList list = mExpandedItems.value(currentSortOrder()); - for(const QVariant &p : list){ - QStringList path = p.toStringList(); - QModelIndexList expand = mArchiveModel->pathToIndex(path); - for(const QModelIndex &idx : expand){ - mTree->setExpanded(mProxy->mapFromSource(idx), true); - } - } - if(!mCurrentArchivePath.isEmpty()){ - QModelIndexList l = mArchiveModel->pathToIndex(mCurrentArchivePath); - if(!l.isEmpty()){ - QModelIndex sel = mProxy->mapFromSource(l.last()); - mTree->selectionModel()->select(sel, QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect); - } - } -} - -void ArchiveView::setFilter(){ - QString filter = mFilter->text(); - mProxy->setFilter(filter, currentSortOrder()); - mTree->expandAll(); -} - -void ArchiveView::clearFilter(){ - mFilter->clear(); - mProxy->setFilter(QString(), currentSortOrder()); - mTree->collapseAll(); -} - -void ArchiveView::showDatabaseError(const QString &errorMsg){ - QMessageBox::critical(this, tr("Database Error"), errorMsg); -} - -void ArchiveView::expandItem(const QModelIndex &idx){ - QModelIndex realIdx = mProxy->mapToSource(idx); - if(realIdx.isValid()){ - QStringList path = mArchiveModel->indexToPath(realIdx); - QVariantList list = mExpandedItems.value(currentSortOrder()); - if(!list.contains(path)){ - list << mArchiveModel->indexToPath(realIdx); - } - mExpandedItems[currentSortOrder()] = list; - } -} - -void ArchiveView::collapseItem(const QModelIndex &idx){ - QModelIndex realIdx = mProxy->mapToSource(idx); - if(realIdx.isValid()){ - QVariantList list = mExpandedItems.value(currentSortOrder()); - list.removeAll(mArchiveModel->indexToPath(realIdx)); - mExpandedItems[currentSortOrder()] = list; - } -} - -void ArchiveView::initController(){ - mController = new ArchiveController(this); - mController->setArchiveView(this); - mController->setArchiveTree(mTree, mProxy); - mController->setArchiveFiles(mFiles, mFilesProxy); - mController->setModels(mArchiveModel, mFilesModel); - mController->setMappingModels(mActorModel, mGenreModel); - mController->setMetadata(mMeta); - mController->init(); - SmGlobals::instance()->setArchiveController(mController); -} - -ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) { - setAcceptDrops(true); - -} - -void ArchiveTree::setModel(ArchiveProxy *model){ - mProxy = model; - mModel = qobject_cast(mProxy->sourceModel()); - QTreeView::setModel(model); -} - -void ArchiveTree::edit(){ - QModelIndex idx = firstSelected(); - if(idx.isValid()){ - QString currentName = idx.data(ArchiveModel::NameRole).toString(); - QString question = QString(tr("Rename %1 to:")).arg(currentName); - QString newName = QInputDialog::getText(this, tr("Rename"), question, QLineEdit::Normal, currentName); - if(!newName.isEmpty()){ - QModelIndex realIdx = mProxy->mapToSource(idx); - mModel->setData(realIdx, newName, Qt::EditRole); - } - } -} - -void ArchiveTree::remove(){ - QModelIndex idx = firstSelected(); - if(idx.isValid()){ - QString warningMsg = QString("Really remove %1?").arg(idx.data().toString()); - int retval = QMessageBox::warning(this, tr("Question"), warningMsg, QMessageBox::Yes | QMessageBox::No); - if(retval == QMessageBox::Yes){ - QModelIndex realIdx = mProxy->mapToSource(idx); - if(!mModel->removeNode(realIdx)){ - impossible(); - } - } - } -} - -void ArchiveTree::editActors(){ - MappingEditor e(tr("Actors"), this); - QStringList actors = mModel->allActors(); - e.widget()->fillCompleter(actors); - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - QStringList curActors = mModel->actors(QSet() << pId); - e.widget()->setDecorationItem(SmGlobals::instance()->iconFor("actor")); - e.widget()->setCurrentItems(curActors); - int res = e.exec(); - if(res == QDialog::Accepted){ - QStringList selActors = e.widget()->items(); - mModel->setActors(pId, selActors); - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->treeSelectionChanged(QItemSelection(), QItemSelection()); - } -} - -void ArchiveTree::editGenres(){ - MappingEditor e(tr("Genres"), this); - QStringList genres = mModel->allGenres(); - e.widget()->fillCompleter(genres); - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - QStringList curGenres = mModel->genres(QSet() << pId); - e.widget()->setDecorationItem(SmGlobals::instance()->iconFor("genre")); - e.widget()->setCurrentItems(curGenres); - int res = e.exec(); - if(res == QDialog::Accepted){ - QStringList selGenres = e.widget()->items(); - mModel->setGenres(pId, selGenres); - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->treeSelectionChanged(QItemSelection(), QItemSelection()); - } -} - -void ArchiveTree::editMetadata(){ - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - MetadataEditor e(this); - ArchiveController *c = SmGlobals::instance()->archiveController(); - int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - QList curMetadata = c->archiveTreeModel()->metadataList(pId); - e.widget()->setMetadata(curMetadata); - int res = e.exec(); - if(res == QDialog::Accepted){ - QList data = e.widget()->metadata(); - mModel->setMetadata(pId, data); - c->treeSelectionChanged(QItemSelection(), QItemSelection()); - } -} - -void ArchiveTree::editSeriesPart(){ - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - int curPart = idx.data(ArchiveModel::SeriesPartRole).toInt(); - QString subtitle = idx.data(ArchiveModel::SubtitleRole).toString(); - PartEditor e(this); - e.setPartNo(curPart); - e.setSubtitle(subtitle); - int res = e.exec(); - if(res == QDialog::Accepted){ - int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->archiveTreeModel()->setPartNo(pId, e.partNo(), e.subtitle()); - mModel->refresh(); - } -} - -void ArchiveTree::markAsFavorite(){ - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - bool fav = idx.data(ArchiveModel::FavoriteRole).toBool(); - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->archiveTreeModel()->setFavorite(pId, !fav); -} - -void ArchiveTree::deleteFromTree(){ - QModelIndex idx = firstSelected(); - if(!idx.isValid()){ - return; - } - int type = idx.data(ArchiveModel::TypeRole).toInt(); - ArchiveController *c = SmGlobals::instance()->archiveController(); - ArchiveFilesModel *fm = c->archiveFilesModel(); - ArchiveModel *am = c->archiveTreeModel(); - if(type == ArchiveModel::SeriesPartNode){ - int seriesPartId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); - QStringList files = fm->filesForSeriespart(seriesPartId); - if(!files.isEmpty()){ - QString msg = tr("This action will permanently delete the following files:
    "); - for(const QString &f : files){ - QString fli = QString("
  • %1
  • ").arg(f); - msg.append(fli); - } - msg.append("
"); - msg.append(tr("

Continue?

")); - int answer = QMessageBox::warning(0, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No); - if(answer == QMessageBox::Yes){ - am->deleteSeriesPart(seriesPartId); - } - }else{ - am->deleteSeriesPart(seriesPartId); - } - am->refresh(); - } - if(type == ArchiveModel::SeriesNode){ - if(mProxy->hasChildren(idx)){ - QMessageBox::critical(0, tr("Critical"), tr("Series is not empty!"), QMessageBox::Ok); - return; - } - int seriesId = idx.data(ArchiveModel::GenericIdRole).toInt(); - if(seriesId > 0){ - QString msg = QString(tr("Really delete series %1?")).arg(idx.data(ArchiveModel::NameRole).toString()); - int retval = QMessageBox::question(0, tr("Question"), msg, QMessageBox::Ok | QMessageBox::Cancel); - if(retval == QMessageBox::Ok){ - am->deleteSeries(seriesId); - am->refresh(); - } - } - } -} - -void ArchiveTree::newPart(){ - SeriesPartsDialog pDlg(this); - int retval = pDlg.exec(); - if(retval == QDialog::Accepted){ - QString subtitle = pDlg.subtitle(); - int partno = pDlg.partNo(); - QModelIndex sel = firstSelected(); - QModelIndex rSel = mProxy->mapToSource(sel); - mModel->addSeriesPart(partno, subtitle, rSel); - mModel->refresh(); - } -} - - -void ArchiveTree::dragEnterEvent(QDragEnterEvent *e){ - if(e->mimeData()->hasFormat("application/x-shemov-file")){ - e->acceptProposedAction(); - }else{ - e->ignore(); - } -} - -void ArchiveTree::dragMoveEvent(QDragMoveEvent *e){ - QModelIndex idx = indexAt(e->pos()); - if(idx.isValid()){ - int flags = idx.flags(); - if(flags & Qt::ItemIsDropEnabled){ - e->acceptProposedAction(); - return; - } - } - e->ignore(); - return; -} - -void ArchiveTree::dropEvent(QDropEvent *e){ - QDataStream stream(e->mimeData()->data("application/x-shemov-file")); - int size; - stream >> size; - QString question = QString(tr("Really move %1 items?")).arg(QString::number(size)); - int retval = QMessageBox::question(this, tr("Question"), question); - if(retval == QMessageBox::Yes){ - QModelIndex dropIdx = indexAt(e->pos()); - if(dropIdx.isValid()){ - int newPartId = dropIdx.data(ArchiveModel::SeriesPartIdRole).toInt(); - ArchiveController *c = SmGlobals::instance()->archiveController(); - QStringList md5Sums; - for(int i = 0; i < size; ++i){ - QVariant md5; - stream >> md5; - md5Sums << md5.toString(); - } - c->moveFilesToSeriespart(md5Sums, newPartId); - c->archiveFiles()->expandAll(); - e->accept(); - return; - } - } - e->ignore(); -} - -void ArchiveTree::impossible(const QString msg){ - QMessageBox::critical(this, tr("Error"), msg); -} - -QModelIndex ArchiveTree::firstSelected(){ - QModelIndexList idxs = selectionModel()->selectedRows(); - if(idxs.isEmpty()){ - return QModelIndex(); - } - return idxs.first(); -} - -ArchiveFiles::ArchiveFiles(const QString &headerSettings, QWidget *parent) : SmTreeView(headerSettings, parent){ - setEditTriggers(QAbstractItemView::NoEditTriggers); - setDragEnabled(true); -} - -void ArchiveFiles::deleteFromFiles(){ - QModelIndexList selected = selectionModel()->selectedRows(); - QString msg = tr("This action will permanently delete the following files:
    "); - QList fileIds; - for(const QModelIndex &idx : selected){ - QString a = QString("
  • %1
  • ").arg(idx.data(ArchiveFilesModel::FullPathRole).toString()); - msg.append(a); - fileIds << idx.data(ArchiveFilesModel::FileIdRole).toInt(); - } - msg.append("
"); - msg.append(tr("

Continue?

")); - int answer = QMessageBox::warning(0, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No); - if(answer == QMessageBox::Yes){ - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->archiveTreeModel()->removeFiles(fileIds); - c->archiveTreeModel()->refresh(); - } -} - -void ArchiveFiles::mousePressEvent(QMouseEvent *e){ - if(e->button() == Qt::LeftButton){ - mDragStartPos = e->pos(); - } - return SmTreeView::mousePressEvent(e); -} - -void ArchiveFiles::mouseMoveEvent(QMouseEvent *e){ - if(!(e->buttons() & Qt::LeftButton)){ - return; - } - if((e->pos() - mDragStartPos).manhattanLength() < qApp->startDragDistance()){ - return; - } - - QModelIndexList sel = selectionModel()->selectedRows(); - if(sel.isEmpty()){ - return; - } - - QString files("
    "); - QByteArray dataBuf; - QDataStream stream(&dataBuf, QIODevice::WriteOnly); - stream << sel.size(); - for(const QModelIndex &i : sel){ - files.append("
  • "); - files.append(i.data(ArchiveFilesModel::FilenameRole).toString()); - stream << i.data(ArchiveFilesModel::Md5SumRole); - files.append("
  • "); - } - files.append("
"); - - QLabel dragLabel(files); - QPixmap dragPixmap(dragLabel.size()); - dragLabel.render(&dragPixmap); - - QDrag *drag = new QDrag(this); - QMimeData *mimeData = new QMimeData; - mimeData->setData("application/x-shemov-file", dataBuf); - drag->setMimeData(mimeData); - drag->setPixmap(dragPixmap); - drag->exec(Qt::MoveAction | Qt::CopyAction); -} - -ArchiveProxy::ArchiveProxy(QObject *parent) : QSortFilterProxyModel(parent) {} - -void ArchiveProxy::setFilter(const QString &filter, int sortOrder){ - mFilter = QRegExp(filter); - mSortOrder = sortOrder; - invalidateFilter(); -} - -bool ArchiveProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - if(mFilter.isEmpty()){ - return true; - } - QModelIndex nameIdx = sourceModel()->index(sourceRow, ArchiveModel::Name, sourceParent); - ArchiveModel *model = qobject_cast(sourceModel()); - return model->matchRecursive(nameIdx, mFilter); -} - -bool ArchiveProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const{ - QString l = left.data().toString(); - QString r = right.data().toString(); - QRegExp nrRex("( \\d+$)"); - int lPos = nrRex.indexIn(l); - if(lPos != -1){ - int lNum = nrRex.cap(0).toInt(); - int rPos = nrRex.indexIn(r); - int rNum = -1; - if(rPos != -1){ - rNum = nrRex.cap(0).toInt(); - } - if(lNum > -1 && rNum > -1){ - QString lNoNum = l.mid(0, lPos); - QString rNoNum = r.mid(0, rPos); - if(lNoNum == rNoNum){ - return lNum < rNum; - } - } - } - return l < r; -} - -ArchiveFilesProxy::ArchiveFilesProxy(QObject *parent) : QSortFilterProxyModel(parent) {} /* Mapping Editor Widget */ diff --git a/archiveview.h b/archiveview.h index 867b482..1d0f50f 100644 --- a/archiveview.h +++ b/archiveview.h @@ -20,12 +20,6 @@ class QComboBox; class QLabel; class QLineEdit; class QSortFilterProxyModel; -class ArchiveTree; -class ArchiveFiles; -class ArchiveProxy; -class ArchiveFilesProxy; -class ArchiveController; -class QSplitter; class QTextEdit; class QCompleter; class QStandardItemModel; @@ -35,122 +29,6 @@ class QMouseEvent; class QDragEnterEvent; class QRadioButton; -class ArchiveView : public QWidget { - Q_OBJECT - public: - explicit ArchiveView(QWidget *parent = 0); - int currentSortOrder() const; - void readSettings(); - void writeSettings(); - void setCurrentArchivePath(const QStringList &p) { mCurrentArchivePath = p; } - ArchiveModel *archiveModel() { return mArchiveModel; } - ArchiveTree *archiveTree() { return mTree; } - ArchiveProxy *archiveProxy() { return mProxy; } - QToolBar *toolBar() { return mToolBar; } - - public slots: - void refreshArchive(); - void doSelection(); - void clearFilter(); - - private slots: - void setFilter(); - void showDatabaseError(const QString &errorMsg); - void expandItem(const QModelIndex &idx); - void collapseItem(const QModelIndex &idx); - - private: - void initController(); - QComboBox *mSortOrder; - QLineEdit *mFilter; - ArchiveTree *mTree; - ArchiveFiles *mFiles; - ArchiveModel *mArchiveModel; - ArchiveFilesModel *mFilesModel; - ArchiveProxy *mProxy; - ArchiveFilesProxy *mFilesProxy; - QHash mExpandedItems; - ArchiveController *mController; - QStringList mCurrentArchivePath; - SmTreeView *mActorView; - SmTreeView *mGenreView; - QTextEdit *mMeta; - QStandardItemModel *mActorModel; - QStandardItemModel *mGenreModel; - QSplitter *mTreeSplitter; - QSplitter *mRightSplitter; - QToolBar *mToolBar; -}; - -class ArchiveTree : public SmTreeView { - Q_OBJECT - public: - explicit ArchiveTree(QWidget *parent = 0); - virtual void setModel(ArchiveProxy *model); - - public slots: - void edit(); - void remove(); - void editActors(); - void editGenres(); - void editMetadata(); - void editSeriesPart(); - void markAsFavorite(); - void deleteFromTree(); - void newPart(); - - protected: - virtual void dragEnterEvent(QDragEnterEvent *e); - virtual void dragMoveEvent(QDragMoveEvent *e); - virtual void dropEvent(QDropEvent *e); - - private: - void impossible(const QString msg = tr("Unable to perform function!")); - QModelIndex firstSelected(); - ArchiveProxy *mProxy; - ArchiveModel *mModel; -}; - -class ArchiveFiles : public SmTreeView { - Q_OBJECT - public: - explicit ArchiveFiles(const QString &headerSettings = "afilesheaders", QWidget *parent = 0); - void setSourceModel(ArchiveFilesModel *m) { mSourceModel = m; } - - public slots: - void deleteFromFiles(); - - protected: - virtual void mousePressEvent(QMouseEvent *e); - virtual void mouseMoveEvent(QMouseEvent *e); - - private: - QPoint mDragStartPos; - ArchiveFilesModel *mSourceModel; -}; - -class ArchiveProxy : public QSortFilterProxyModel { - Q_OBJECT - public: - ArchiveProxy(QObject *parent = 0); - - public slots: - void setFilter(const QString &filter, int sortOrder); - - protected: - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; - virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; - - private: - QRegExp mFilter; - int mSortOrder; -}; - -class ArchiveFilesProxy : public QSortFilterProxyModel { - Q_OBJECT - public: - explicit ArchiveFilesProxy(QObject *parent = 0); -}; /* separate widget since we need it in NewMovieWizard * and editing genres, actors in the new ArchiveView */ diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index c68cf42..59eb2ec 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -35,8 +35,6 @@ #include "delegates.h" #include "helper.h" #include "pictureviewer2.h" -#include "archivemodel.h" -#include "archivecontroller.h" #include "archiveview.h" NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){ @@ -601,12 +599,22 @@ MovieMappingPage::MovieMappingPage(const QString &table, QWidget *parent) : QWiz } void MovieMappingPage::initializePage(){ - ArchiveController *c = SmGlobals::instance()->archiveController(); + QSqlDatabase db = QSqlDatabase::database("treedb"); if(mTable.toLower() == "actors"){ - mWidget->fillCompleter(c->archiveTreeModel()->allActors()); + QStringList actors; + QSqlQuery actorsQ("SELECT tactorname FROM actors", db); + while(actorsQ.next()){ + actors << actorsQ.value(0).toString(); + } + mWidget->fillCompleter(actors); mWidget->setDecorationItem(SmGlobals::instance()->iconFor("actor")); }else if(mTable.toLower() == "genres"){ - mWidget->fillCompleter(c->archiveTreeModel()->allGenres()); + QStringList genres; + QSqlQuery genresQ("SELECT tgenrename FROM genres", db); + while(genresQ.next()){ + genres << genresQ.value(0).toString(); + } + mWidget->fillCompleter(genres); mWidget->setDecorationItem(SmGlobals::instance()->iconFor("genre")); } QSettings s; diff --git a/shemov.cpp b/shemov.cpp index 78f8216..576611f 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -30,7 +30,6 @@ #include "newpicsdialog.h" #include "pictureswidget.h" #include "archiveview.h" -#include "archivecontroller.h" #include "archivebrowser.h" #include "searchdialog.h" #include "randomtab.h" @@ -122,13 +121,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla mMovieWidget = new MovieWidget; mTab->addTab(mMovieWidget, "MW"); - //experimental - splash.showMessage(tr("Creating Movie archive..."), Qt::AlignHCenter, Qt::yellow); - qApp->processEvents(); - mArchive = new ArchiveView; - mTab->addTab(mArchive, "Movies"); - connect(mArchive->archiveModel(), &ArchiveModel::message, this, &SheMov::statusbarMessage); - //pictures splash.showMessage(tr("Creating Picture Archive..."), Qt::AlignHCenter, Qt::yellow); qApp->processEvents(); @@ -159,14 +151,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla //misc dialogs splash.showMessage(tr("Creating misc. Dialogs..."), Qt::AlignHCenter, Qt::yellow); qApp->processEvents(); - ArchiveController *c = SmGlobals::instance()->archiveController(); - mSearchDialog = new SearchDialog(this); - connect(mSearchDialog, &SearchDialog::searchResultClicked, this, &SheMov::searchResult); - - //experimental archive - connect(c, &ArchiveController::sizeChanged, this, &SheMov::setSize); - connect(c, &ArchiveController::durationChanged, this, &SheMov::setDuration); - connect(c->archiveTreeModel(), &ArchiveModel::windowTitle, this, &SheMov::setWindowTitle); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); @@ -183,7 +167,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla qApp->processEvents(); connect(mTab, &QTabWidget::currentChanged, this, &SheMov::tabChanged); connect(this, &SheMov::configChanged, picViewer, &PictureViewer2::readSettings); - connect(this, &SheMov::configChanged, c->archiveTreeModel(), &ArchiveModel::readConfig); connect(this, &SheMov::configChanged, mFileWidget, &FSWidget::readSettings); QWidget *centralWidget = new QWidget; @@ -193,7 +176,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla show(); splash.finish(this); mPicWidget->readSettings(); - mArchive->readSettings(); mArchiveBrowser->readConfig(); readSettings(); setWindowState(Qt::WindowMaximized); @@ -202,7 +184,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla void SheMov::closeEvent(QCloseEvent *event){ mPicWidget->picViewer2()->writeSettings(); mPicWidget->writeSettings(); - mArchive->writeSettings(); mArchiveBrowser->writeSettings(); writeSettings(); SmGlobals *globals = SmGlobals::instance(); @@ -234,7 +215,6 @@ void SheMov::tabChanged(int newTab){ } mEditPicMenuA->setVisible(newTab == Pictures); mViewPicMenuA->setVisible(newTab == Pictures); - mArchiveViewMenuA->setVisible(newTab == Movies); mArchiveMenuA->setVisible(newTab == Movies); mPicActionGroup->setEnabled(newTab == Pictures); mPVSelectAllA->disconnect(); @@ -243,13 +223,10 @@ void SheMov::tabChanged(int newTab){ mArchiveBrowserViewMenuA->setVisible(newTab == ArchiveBrowserTab); mRandomEditMenuA->setVisible(newTab == RandomDisp); statusbarMessage(QString()); - ArchiveController *c = SmGlobals::instance()->archiveController(); switch(newTab){ case FileManager: break; case Movies: - c->fileSelectionChanged(QItemSelection(), QItemSelection()); - c->archiveTreeModel()->setWindowTitle(); break; case Pictures: connect(mPVSelectAllA, &QAction::triggered, mPicWidget->picView(), &PictureView::setPVAll); @@ -384,17 +361,11 @@ void SheMov::createStatusbar(){ } void SheMov::createActions(){ - //headers mPicsTreeHeaderGroup = new QActionGroup(this); SmTreeModel *picFilesModel = static_cast(SmGlobals::instance()->model("PicFiles")); createHeaderMapper(picFilesModel, mPicWidget->picView(), mPicsTreeHeaderGroup); mPicWidget->picView()->setHeaderGroup(mPicsTreeHeaderGroup); - mArchiveFilesAG = new QActionGroup(this); - ArchiveController *controller = SmGlobals::instance()->archiveController(); - SmTreeModel *afilesmodel = controller->archiveFilesModel(); - createHeaderMapper(afilesmodel, controller->archiveFiles(), mArchiveFilesAG); - controller->archiveFiles()->setHeaderGroup(mArchiveFilesAG); SmTreeModel *abrowsermodel = static_cast(SmGlobals::instance()->model("BrowserModel")); mArchiveBrowserAG = new QActionGroup(this); createHeaderMapper(abrowsermodel, mArchiveBrowser->archiveTree(), mArchiveBrowserAG); @@ -496,85 +467,6 @@ void SheMov::createActions(){ /* picView(er) END Actions! */ - // ArchiveView actions - ArchiveController *c = SmGlobals::instance()->archiveController(); - // edit - mArchiveViewRenameA = new QAction(tr("Edit..."), this); - mArchiveViewRenameA->setData(ArchiveModel::AllNodes); - connect(mArchiveViewRenameA, &QAction::triggered, c->archiveTree(), &ArchiveTree::edit); - // edit actors - mArchiveViewActorsA = new QAction(tr("Edit actors..."), this); - mArchiveViewActorsA->setData(ArchiveModel::SeriesPartNode); - connect(mArchiveViewActorsA, &QAction::triggered, c->archiveTree(), &ArchiveTree::editActors); - // edit genres - mArchiveViewGenresA = new QAction(tr("Edit genres..."), this); - mArchiveViewGenresA->setData(ArchiveModel::SeriesPartNode); - connect(mArchiveViewGenresA, &QAction::triggered, c->archiveTree(), &ArchiveTree::editGenres); - // edit part no and subtitle - mArchiveViewPartnoA = new QAction(tr("Edit Part No..."), this); - mArchiveViewPartnoA->setData(ArchiveModel::SeriesPartNode); - connect(mArchiveViewPartnoA, &QAction::triggered, c->archiveTree(), &ArchiveTree::editSeriesPart); - // edit metadata - mArchiveViewMetadataA = new QAction(tr("Edit metadata..."), this); - mArchiveViewMetadataA->setData(ArchiveModel::SeriesPartNode); - // add Covers - connect(mArchiveViewMetadataA, &QAction::triggered, c->archiveTree(), &ArchiveTree::editMetadata); - mArchiveViewAddCoversA = new QAction(QIcon(":/huge_bra.png"), tr("Add Files..."), this); - mArchiveViewAddCoversA->setData(ArchiveModel::SeriesPartNode); - connect(mArchiveViewAddCoversA, &QAction::triggered, c, &ArchiveController::addFiles); - //collapse and expand... - mArchiveViewExpandAllA = new QAction(tr("Expand all"), this); - mArchiveViewExpandAllA->setData(ArchiveModel::AllNodes); - connect(mArchiveViewExpandAllA, &QAction::triggered, c->archiveTree(), &ArchiveTree::expandAll); - mArchiveViewCollapseAllA = new QAction(tr("Collapse all"), this); - mArchiveViewCollapseAllA->setData(ArchiveModel::AllNodes); - connect(mArchiveViewCollapseAllA, &QAction::triggered, c->archiveTree(), &ArchiveTree::collapseAll); - // refresh all - mArchiveViewRefreshA = new QAction(tr("Refresh"), this); - mArchiveViewRefreshA->setData(ArchiveModel::AllNodes); - connect(mArchiveViewRefreshA, &QAction::triggered, c->archiveView(), &ArchiveView::refreshArchive); - // mark as favorite - mArchiveViewMarkFavA = new QAction(tr("Mark as favorite"), this); - mArchiveViewMarkFavA->setData(ArchiveModel::SeriesPartNode); - connect(mArchiveViewMarkFavA, &QAction::triggered, c->archiveTree(), &ArchiveTree::markAsFavorite); - //delete from Tree - mArchiveViewDeleteA = new QAction(QIcon(":/delete.png"), tr("Delete..."), this); - int deleteMask = 0; - deleteMask |= ArchiveModel::SeriesNode; - deleteMask |= ArchiveModel::SeriesPartNode; - mArchiveViewDeleteA->setData(deleteMask); - connect(mArchiveViewDeleteA, &QAction::triggered, c->archiveTree(), &ArchiveTree::deleteFromTree); - //add new series part - mArchiveViewNewPartA = new QAction(QIcon(":/french_maid_dress.png"), tr("New..."), this); - mArchiveViewNewPartA->setData(ArchiveModel::SeriesNode); - connect(mArchiveViewNewPartA, &QAction::triggered, c->archiveTree(), &ArchiveTree::newPart); - - // ArchiveFiles actions <- ArchiveView! - // play selected - mArchiveFilesPlayA = new QAction(tr("Play selected..."), this); - connect(mArchiveFilesPlayA, &QAction::triggered, c, &ArchiveController::playSelectedFiles); - // set quality - mArchiveFilesQualityA = new QAction(QIcon(":/letter_q.png"), tr("Set Quality..."), this); - connect(mArchiveFilesQualityA, &QAction::triggered, c, &ArchiveController::editQuality); - // set dvd - mArchiveFilesDvdNoA = new QAction(QIcon(":/letter_d.png"), tr("Set Dvd No. ..."), this); - connect(mArchiveFilesDvdNoA, &QAction::triggered, c, &ArchiveController::editDvdNo); - // set file type - mArchiveFilesTypeA = new QAction(QIcon(":/letter_t.png"), tr("Set file type..."), this); - connect(mArchiveFilesTypeA, &QAction::triggered, c, &ArchiveController::editFileType); - // set file no - mArchiveFilesFileNoA = new QAction(QIcon(":/letter_n.png"), tr("Set File No. ..."), this); - connect(mArchiveFilesFileNoA, &QAction::triggered, c, &ArchiveController::editFileNo); - // show properties - mArchiveFilesPropertiesA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Properties..."), this); - connect(mArchiveFilesPropertiesA, &QAction::triggered, c, &ArchiveController::showProperties); - // preview - mArchiveFilesPreviewA = new QAction(QIcon(":/male_chastity_belt.png"), tr("Preview..."), this); - connect(mArchiveFilesPreviewA, &QAction::triggered, c, &ArchiveController::showPreview); - // delete from archive - mArchiveRemoveFilesA = new QAction(QIcon(":/delete.png"), tr("Remove..."), this); - connect(mArchiveRemoveFilesA, &QAction::triggered, c->archiveFiles(), &ArchiveFiles::deleteFromFiles); - //ArchiveBrowser Actions mArchiveBrowserMoveToBurnA = new QAction(QIcon(":/shackles.png"), tr("Move to burn..."), this); connect(mArchiveBrowserMoveToBurnA, &QAction::triggered, mArchiveBrowser, &ArchiveBrowser::moveToBurn); @@ -649,14 +541,6 @@ void SheMov::createMenus(){ mArchiveBrowserViewMenu->addSeparator(); mArchiveBrowserViewMenu->addAction(mArchiveBrowserRefreshA); - //Movie archive - QMenu *archiveHeaderMenu = new QMenu(tr("Show headers"), this); - archiveHeaderMenu->addActions(mArchiveFilesAG->actions()); - mArchiveViewMenu = new QMenu(tr("&View"), this); - archiveHeaderMenu->addActions(mArchiveFilesAG->actions()); - mArchiveViewMenu->addMenu(archiveHeaderMenu); - mArchiveViewMenuA = menuBar()->addMenu(mArchiveViewMenu); - QMenu *helpMenu = new QMenu(tr("&Help"), this); helpMenu->addAction(mAboutShemovA); helpMenu->addAction(mAboutQtA); @@ -664,44 +548,6 @@ void SheMov::createMenus(){ helpMenu->addAction(mStatisticsA); menuBar()->addMenu(helpMenu); - // Movie archive - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->addActionForTree(mArchiveViewRenameA); - c->addActionForTree(mArchiveViewNewPartA); - c->addActionForTree(createSeparator()); - c->addActionForTree(mArchiveViewActorsA); - c->addActionForTree(mArchiveViewGenresA); - c->addActionForTree(mArchiveViewPartnoA); - c->addActionForTree(mArchiveViewMetadataA); - c->addActionForTree(mArchiveViewAddCoversA); - c->addActionForTree(createSeparator()); - c->addActionForTree(mArchiveViewMarkFavA); - c->addActionForTree(createSeparator()); - c->addActionForTree(mArchiveViewExpandAllA); - c->addActionForTree(mArchiveViewCollapseAllA); - c->addActionForTree(createSeparator()); - c->addActionForTree(mArchiveViewDeleteA); - c->addActionForTree(createSeparator()); - c->addActionForTree(mArchiveViewRefreshA); - QMenu *archiveTreeM = new QMenu(tr("Archive"), this); - archiveTreeM->addActions(c->archiveTree()->actions()); - - // Archive files (exp.) - c->archiveFiles()->addAction(mArchiveFilesPlayA); - c->archiveFiles()->addAction(createSeparator()); - c->archiveFiles()->addAction(mArchiveFilesQualityA); - c->archiveFiles()->addAction(mArchiveFilesDvdNoA); - c->archiveFiles()->addAction(mArchiveFilesTypeA); - c->archiveFiles()->addAction(mArchiveFilesFileNoA); - c->archiveFiles()->addAction(createSeparator()); - c->archiveFiles()->addAction(mArchiveRemoveFilesA); - c->archiveFiles()->addAction(createSeparator()); - c->archiveFiles()->addAction(mArchiveFilesPreviewA); - c->archiveFiles()->addAction(createSeparator()); - c->archiveFiles()->addAction(mArchiveFilesPropertiesA); - QMenu *archiveFilesM = new QMenu(tr("Files"), this); - archiveFilesM->addActions(c->archiveFiles()->actions()); - // ArchiveBrowser context menu mArchiveBrowser->archiveTree()->addAction(mArchiveBrowserPlaySelectedA); mArchiveBrowser->archiveTree()->addAction(createSeparator()); @@ -713,26 +559,12 @@ void SheMov::createMenus(){ mArchiveBrowser->archiveTree()->addAction(createSeparator()); mArchiveBrowser->archiveTree()->addAction(mArchiveBrowserRefreshA); - mArchiveEditMenu->addMenu(archiveTreeM); - mArchiveEditMenu->addMenu(archiveFilesM); - // Random mRandomEditMenu = mRandomTab->editMenu(); mRandomEditMenuA = menuBar()->insertMenu(mArchiveMenuA, mRandomEditMenu); } void SheMov::createToolBar(){ - mArchive->toolBar()->addAction(mArchiveFilesQualityA); - mArchive->toolBar()->addAction(mArchiveFilesDvdNoA); - mArchive->toolBar()->addAction(mArchiveFilesTypeA); - mArchive->toolBar()->addAction(mArchiveFilesFileNoA); - mArchive->toolBar()->addSeparator(); - mArchive->toolBar()->addAction(mArchiveFilesPreviewA); - mArchive->toolBar()->addAction(mArchiveFilesPropertiesA); - mArchive->toolBar()->addAction(mArchiveViewAddCoversA); - mArchive->toolBar()->addSeparator(); - mArchive->toolBar()->addAction(mConfigA); - mArchiveBrowser->toolBar()->addAction(mArchiveBrowserPlaySelectedA); mArchiveBrowser->toolBar()->addSeparator(); mArchiveBrowser->toolBar()->addAction(mArchiveBrowserRefreshA); @@ -813,11 +645,3 @@ void SheMov::toggleHover(QObject *object){ emit configChanged(); } } - -void SheMov::searchResult(int seriesPartId){ - mSearchDialog->hide(); - mTab->setCurrentIndex(Movies); - ArchiveController *c = SmGlobals::instance()->archiveController(); - c->archiveTree()->setFocus(); - c->setSeriesPart(seriesPartId); -} diff --git a/shemov.h b/shemov.h index cb1e8ce..c91a89b 100644 --- a/shemov.h +++ b/shemov.h @@ -48,7 +48,6 @@ class SheMov : public QMainWindow { void setDuration(qint64 dur, bool maybeMore); void checkConsistency(); void toggleHover(QObject *object); - void searchResult(int seriesPartId); void analyzeActors(); void analyzeGenres(); void analyzeSeries(); @@ -105,21 +104,6 @@ class SheMov : public QMainWindow { QActionGroup *mPicActionGroup; //EndActions - //ArchiveView actions - QAction *mArchiveViewRenameA; - QAction *mArchiveViewActorsA; - QAction *mArchiveViewGenresA; - QAction *mArchiveViewPartnoA; - QAction *mArchiveViewMetadataA; - QAction *mArchiveViewRefreshA; - QAction *mArchiveViewMarkFavA; - QAction *mArchiveViewAddCoversA; - QAction *mArchiveViewExpandAllA; - QAction *mArchiveViewCollapseAllA; - QAction *mArchiveViewDeleteA; - QAction *mArchiveViewNewPartA; - QActionGroup *mArchiveFilesAG; - //ArchiveBrowser QAction *mArchiveBrowserViewMenuA; QAction *mArchiveBrowserMoveToBurnA; @@ -151,13 +135,11 @@ class SheMov : public QMainWindow { QMenu *mArchiveEditMenu; QMenu *mPlaySelectedTimesMenuFS; QMenu *mPicViewMenu; - QMenu *mArchiveViewMenu; QMenu *mArchiveBrowserViewMenu; QMenu *mRandomEditMenu; QAction *mEditFSMenuA; QAction *mEditPicMenuA; QAction *mViewPicMenuA; - QAction *mArchiveViewMenuA; QAction *mRandomEditMenuA; @@ -165,7 +147,6 @@ class SheMov : public QMainWindow { QTabWidget *mTab; SearchDialog *mSearchDialog; PicturesWidget *mPicWidget; - ArchiveView *mArchive; ArchiveBrowser *mArchiveBrowser; RandomTab *mRandomTab; FSWidget* mFileWidget; //rename me! diff --git a/shemov.pro b/shemov.pro index 8fdaa07..baa8137 100644 --- a/shemov.pro +++ b/shemov.pro @@ -34,7 +34,6 @@ SOURCES = main.cpp \ smtreeview.cpp \ archivemodel.cpp \ archiveview.cpp \ - archivecontroller.cpp \ delegates.cpp \ archivebrowser.cpp \ archivebrowsermodel.cpp \ @@ -77,7 +76,6 @@ HEADERS = \ smtreeview.h \ archivemodel.h \ archiveview.h \ - archivecontroller.h \ delegates.h \ archivebrowser.h \ archivebrowsermodel.h \ -- cgit v1.2.3-70-g09d2