summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivecontroller.cpp426
-rw-r--r--archivecontroller.h92
-rw-r--r--archiveview.cpp618
-rw-r--r--archiveview.h122
-rw-r--r--newmoviewizard.cpp18
-rw-r--r--shemov.cpp176
-rw-r--r--shemov.h19
-rw-r--r--shemov.pro2
8 files changed, 13 insertions, 1460 deletions
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 <QSettings>
-#include <QProcess>
-#include <QFileInfo>
-#include <QMessageBox>
-#include <QInputDialog>
-#include <QTextEdit>
-#include <QStandardItemModel>
-#include <QAction>
-#include <QApplication>
-#include <QFileDialog>
-
-#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<QWidget*>(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<QString, QStringList> 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<int> 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<int> ids){
- mMetaEdit->clear();
- if(ids.isEmpty()){
- return;
- }
-
- QString meta;
-
- if(ids.size() == 1){
- QList<QVariant> metadata = mArchiveModel->metadataList(*ids.begin());
- if(metadata.at(0).isValid()){
- meta.append("<html><body style=\"font-family: courier new; font-weight: bold\"><table>");
- meta.append(QString("<tr><td>Release year</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::ReleaseYear).toString()));
- meta.append(QString("<tr><td>Source</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Source).toString()));
- meta.append(QString("<tr><td>Subj./Name</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Subject).toString()));
- meta.append(QString("<tr><td>Added</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Added).toDateTime().toString()));
-
- meta.append("</table>");
- QString comment = metadata.at(ArchiveModel::Comment).toString();
- if(comment.isEmpty()){
- comment = tr("(none)");
- }
- meta.append(QString("<p style=\"font-style: italic; margin-bottom: 0px\">Comments:</p><p style=\"margin-left: 10px; margin-top: 0px\">%1</p>").arg(comment));
- meta.append("</body></html>");
- }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("<html><body style=\"font-family: courier new; font-weight: bold\"><table>");
- meta.append(QString("<tr><td>Total Size</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(sizeStr));
- quint64 totalDur = tmpFModel.totalDuration();
- Helper::Duration dur(totalDur);
- meta.append(QString("<tr><td>Total Duration</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(dur.toString()));
- int moviefiles = tmpFModel.movieFilesCount();
- meta.append(QString("<tr><td>Movie files</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(QString::number(moviefiles)));
- int otherfiles = tmpFModel.otherFilesCount();
- meta.append(QString("<tr><td>Other files</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(QString::number(otherfiles)));
- meta.append("</table>");
- meta.append("</body></html>");
- }
- 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<int> 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<QString, QStringList> 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 <QObject>
-#include <QItemSelection>
-#include <QStringList>
-#include <QIcon>
-
-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<int> 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<QAction*> 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 <QComboBox>
-#include <QDialog>
#include <QHBoxLayout>
-#include <QInputDialog>
#include <QLabel>
#include <QLineEdit>
#include <QRadioButton>
-#include <QFileDialog>
-#include <QMessageBox>
#include <QPushButton>
-#include <QSettings>
-#include <QSplitter>
#include <QVBoxLayout>
-#include <QHeaderView>
-#include <QSpinBox>
#include <QGroupBox>
#include <QTextEdit>
#include <QCompleter>
#include <QStandardItemModel>
#include <QFormLayout>
-#include <QToolBar>
-#include <QDrag>
-#include <QMimeData>
-#include <QDropEvent>
#include <QApplication>
#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<ArchiveModel*>(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<const QString &>::of(&QComboBox::currentIndexChanged), mArchiveModel, QOverload<const QString &>::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<ArchiveModel*>(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<int>() << 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<int>() << 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<QVariant> curMetadata = c->archiveTreeModel()->metadataList(pId);
- e.widget()->setMetadata(curMetadata);
- int res = e.exec();
- if(res == QDialog::Accepted){
- QList<QVariant> 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("<b>This action will permanently delete the following files:</b><ul>");
- for(const QString &f : files){
- QString fli = QString("<li>%1</li>").arg(f);
- msg.append(fli);
- }
- msg.append("</ul>");
- msg.append(tr("<p>Continue?</p>"));
- 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("<b>This action will permanently delete the following files:</b><ul>");
- QList<int> fileIds;
- for(const QModelIndex &idx : selected){
- QString a = QString("<li>%1</li>").arg(idx.data(ArchiveFilesModel::FullPathRole).toString());
- msg.append(a);
- fileIds << idx.data(ArchiveFilesModel::FileIdRole).toInt();
- }
- msg.append("</ul>");
- msg.append(tr("<p>Continue?</p>"));
- 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("<ul ul style=\"margin-left: -25; margin-top: 10px; margin-right: 10px; margin-bottom: 10px\">");
- QByteArray dataBuf;
- QDataStream stream(&dataBuf, QIODevice::WriteOnly);
- stream << sel.size();
- for(const QModelIndex &i : sel){
- files.append("<li>");
- files.append(i.data(ArchiveFilesModel::FilenameRole).toString());
- stream << i.data(ArchiveFilesModel::Md5SumRole);
- files.append("</li>");
- }
- files.append("</ul>");
-
- 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<ArchiveModel*>(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<int, QVariantList> 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<SmTreeModel*>(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<SmTreeModel*>(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 \