diff options
-rw-r--r-- | archivetreeview.cpp | 61 | ||||
-rw-r--r-- | archivetreeview.h | 3 | ||||
-rw-r--r-- | filestreemodel.cpp | 47 | ||||
-rw-r--r-- | filestreemodel.h | 5 | ||||
-rw-r--r-- | filestreewidget.cpp | 4 | ||||
-rw-r--r-- | shemov.cpp | 24 |
6 files changed, 67 insertions, 77 deletions
diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 65eb11f..0fa471d 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -46,7 +46,7 @@ #include "seriesmetadatamodel.h" #include "helper.h" -ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ +ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent), mShowAllFiles(false){ // models mActorsModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("actors")); mGenresModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("genres")); @@ -106,28 +106,43 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ void ArchiveTreeView::setFileViewMode(int mode){ mSeriesModel->setRowFilter(mode); mSeriesWidget->seriesProxy()->invalidate(); + mFilesModel->setMode(mode); + showAllFiles(mShowAllFiles); constructWindowTitle(); mSeriesWidget->expandItems(); } -void ArchiveTreeView::showAllFiles(){ - int seriesRow = 0; - QModelIndex series = mSeriesModel->index(seriesRow, 0, QModelIndex()); - QList<int> ids; - while(series.isValid()){ - int childRow = 0; - QModelIndex child = mSeriesModel->index(childRow, 0, series); - while(child.isValid()){ - if(mSeriesWidget->seriesProxy()->acceptedByFilter(child.row(), child.parent())){ - ids << child.data(SeriesTreeModel::SeriesPartIdRole).toInt(); +void ArchiveTreeView::showAllFiles(bool toggled){ + mShowAllFiles = toggled; + if(mShowAllFiles){ + int seriesRow = 0; + QModelIndex series = mSeriesModel->index(seriesRow, 0, QModelIndex()); + QList<int> ids; + while(series.isValid()){ + int childRow = 0; + QModelIndex child = mSeriesModel->index(childRow, 0, series); + while(child.isValid()){ + if(mSeriesWidget->seriesProxy()->acceptedByFilter(child.row(), child.parent())){ + ids << child.data(SeriesTreeModel::SeriesPartIdRole).toInt(); + } + child = mSeriesModel->index(++childRow, 0, child.parent()); } - child = mSeriesModel->index(++childRow, 0, child.parent()); + series = mSeriesModel->index(++seriesRow, 0, series.parent()); + } + mFilesModel->setIds(ids); + mFilesWidget->filesTree()->expandAll(); + mFilesWidget->filesTree()->resizeColumnToContents(0); + }else{ + QModelIndexList selectedSeries = mSeriesWidget->seriesTree()->selectionModel()->selectedRows(); + QModelIndex selected; + if(selectedSeries.isEmpty()){ + selected = mSeriesWidget->seriesProxy()->index(0, 0); + }else{ + selected = selectedSeries.at(0); } - series = mSeriesModel->index(++seriesRow, 0, series.parent()); + mSeriesWidget->seriesTree()->selectionModel()->setCurrentIndex(selected, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + currentChanged(QItemSelection(), QItemSelection()); } - mFilesModel->setIds(ids); - mFilesWidget->filesTree()->expandAll(); - mFilesWidget->filesTree()->resizeColumnToContents(0); } void ArchiveTreeView::cleanDatabase(const QString &table){ @@ -312,8 +327,18 @@ void ArchiveTreeView::invalidateSorting(){ } void ArchiveTreeView::constructWindowTitle(){ - QString modeString = mFilesModel->modeName(mFilesModel->mode()); - mWindowTitle = QString("Movie Archive - [%1]").arg(modeString); + int rowFilter = mSeriesModel->rowFilter(); + mWindowTitle = QString(tr("Movie Archive")); + switch(rowFilter){ + case SeriesTreeModel::Archived: + mWindowTitle.append(tr(" - [Archived]")); + break; + case SeriesTreeModel::Local: + mWindowTitle.append(tr(" - [Local]")); + break; + default: + ; + } emit needWindowTitleChange(mWindowTitle); } diff --git a/archivetreeview.h b/archivetreeview.h index 15a27c5..68b0091 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -47,7 +47,7 @@ class ArchiveTreeView : public QWidget public slots: void setFileViewMode(int mode); - void showAllFiles(); + void showAllFiles(bool toggled); void cleanDatabase(const QString &table); void showNoCoverDialog(); void selectMovie(const QModelIndex &idx); @@ -81,6 +81,7 @@ class ArchiveTreeView : public QWidget //misc QString mWindowTitle; NoCoverMovieDialog *mNoCoverDialog; + bool mShowAllFiles; }; class NoCoverMovieModel : public SmTreeModel { diff --git a/filestreemodel.cpp b/filestreemodel.cpp index 5b776dc..e6bfde5 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -25,7 +25,7 @@ #include "seriestreemodel.h" #include "smglobals.h" -FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mMode(Normal), mMagic(0xAABBCCDD){ +FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), /*mMode(Normal),*/ mMagic(0xAABBCCDD){ //database setup mDb = QSqlDatabase::database("treedb"); mUpdateDvdQuery = new QSqlQuery(mDb); @@ -55,11 +55,6 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo mCoverTypes = mFileTypes; mCoverTypes.remove(1); - //mode names - mModeNames.insert(Normal, "Normal"); - mModeNames.insert(Archived, "Archived"); - mModeNames.insert(Local, "Local"); - //misc mSeriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel")); readCache(); @@ -81,13 +76,6 @@ FilesTreeModel::~FilesTreeModel(){ mDb = QSqlDatabase(); } -const QString FilesTreeModel::modeName(int mode) const{ - if(mode == -1){ - return QString(); - } - return mModeNames.value(mode); -} - void FilesTreeModel::setIds(const QList<int> &seriesPartIds){ QStringList ids; foreach(int s, seriesPartIds){ @@ -99,25 +87,6 @@ void FilesTreeModel::setIds(const QList<int> &seriesPartIds){ populate(filesQuery); } -void FilesTreeModel::setMode(int mode){ - QSqlQuery modeQuery(mDb); - bool queryOk = false; - switch(mode){ - case Local: - queryOk = modeQuery.prepare("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id, series.tseries_name, seriesparts.iseriespart, seriesparts.bfavorite FROM files, seriesparts, series WHERE files.idvd = -1 AND files.sifiletype = 1 AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); - break; - case Archived: - queryOk = modeQuery.prepare("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id, series.tseries_name, seriesparts.iseriespart, seriesparts.bfavorite FROM files, seriesparts, series WHERE files.idvd != -1 AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id"); - break; - default: - ; - } - if(queryOk){ - populate(modeQuery); - } - mMode = mode; -} - QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ if(!index.isValid()){ return QVariant(); @@ -159,7 +128,7 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ return item->data(index.column()); } if(role == Qt::ToolTipRole){ - if((mMode == Archived) && (item->data(FileType) == Movie)){ + if((mMode == SeriesTreeModel::Archived) && (item->data(FileType) == Movie)){ int seriesPartId = item->data(SeriesPartId).toInt(); int seriesId = mSeriesModel->seriesIdByPartId(seriesPartId); if(seriesId != -1){ @@ -275,6 +244,16 @@ bool FilesTreeModel::setData(const QModelIndex &index, const QVariant &value, in mUpdateDvdQuery->bindValue(":dvd", value); if(mUpdateDvdQuery->exec()){ item->setData(DvdNo, value); + bool isLocal = (value.toInt() == -1) ? true : false; + if(mode() == SeriesTreeModel::Local){ + if(!isLocal){ + removeRow(index.row(), index.parent()); + } + }else if(mode() == SeriesTreeModel::Archived){ + if(isLocal){ + removeRow(index.row(), index.parent()); + } + } return true; } } @@ -331,7 +310,7 @@ Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{ if(mEditableColumns.values().contains(index.column())){ retval |= Qt::ItemIsEditable; } - if(mode() == Local){ + if(mode() == SeriesTreeModel::Local){ if(index.data(FavoriteRole).toBool() == true){ int inverse = ~Qt::ItemIsSelectable; retval &= inverse; diff --git a/filestreemodel.h b/filestreemodel.h index ac47faa..9054368 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -26,18 +26,16 @@ class FilesTreeModel : public SmTreeModel { enum CustomRoles { FileNameRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, DvdNoRole = Qt::UserRole + 4, SizeDisplayRole = Qt::UserRole + 5, FileTypeRole = Qt::UserRole + 6, Md5SumRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, SeriesPartIdRole = Qt::UserRole + 9, QualityRole = Qt::UserRole + 10, FilesIdRole = Qt::UserRole + 11, SeriesPartRole = Qt::UserRole + 12, DisplayNameRole = Qt::UserRole + 13, SizeDurationRole = Qt::UserRole + 14, SeriesNameRole = Qt::UserRole + 15, FavoriteRole = Qt::UserRole + 16 }; enum FileTypes { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 }; enum Fields { FileName = 0, PartNo = 1, SizeDisplay = 2, Quality = 3, DvdNo = 4, FullPath = 5, Size = 6, FileType = 7, Md5Sum = 8, SeriesPartId = 9, FilesId = 10, SeriesPart = 11, DisplayName = 12, SizeDuration = 13, SeriesName = 14, Favorite = 15 }; - enum Mode { Normal = 0, Archived = 1, Local = 2 }; explicit FilesTreeModel(QStringList &headers, QObject *parent = 0); const QHash<int, QString> fileTypes() const { return mFileTypes; } const QHash<int, QString> coverTypes() const { return mCoverTypes; } - const QString modeName(int mode = -1) const; const QHash<QString, int> editableColumns() const { return mEditableColumns; } int mode() const { return mMode; } ~FilesTreeModel(); //data + flags void setIds(const QList<int> &seriesPartIds); - void setMode(int mode); + void setMode(int mode) { mMode = mode; } QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); Qt::ItemFlags flags(const QModelIndex &index) const; @@ -79,7 +77,6 @@ class FilesTreeModel : public SmTreeModel { //misc QHash<int, QString> mFileTypes; QHash<int, QString> mCoverTypes; - QHash<int, QString> mModeNames; QHash<QString, QString> mPicsDurationCache; QHash<QString, int> mEditableColumns; SeriesTreeModel *mSeriesModel; diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 678abb1..983ddeb 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -235,7 +235,6 @@ void FilesTreeWidget::edit(int column){ } if(dialogOk){ foreach(QModelIndex curIdx, sIdxes){ - mModel->setData(curIdx, value, Qt::EditRole); if(column == FilesTreeModel::DvdNo){ if(curIdx.data(FilesTreeModel::FileTypeRole).toInt() == FilesTreeModel::Movie){ QModelIndex seriesIdx = mSeriesModel->findRecursive(curIdx.data(FilesTreeModel::SeriesPartIdRole), SeriesTreeModel::SeriesPartId, mSeriesModel->index(0, 0, QModelIndex())); @@ -246,6 +245,7 @@ void FilesTreeWidget::edit(int column){ } } } + mModel->setData(curIdx, value, Qt::EditRole); } } } @@ -433,7 +433,7 @@ void FilesTreeView::doHover(const QModelIndex &idx){ } scale = false; FilesTreeModel *filesModel = qobject_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel")); - if(filesModel->mode() == FilesTreeModel::Local){ + if(filesModel->mode() == SeriesTreeModel::Local){ QString filesData = fileNameText(idx); pm = annotateHover(pm, filesData); } @@ -45,6 +45,7 @@ #include "archivetreeview.h" #include "smglobals.h" #include "seriestreewidget.h" +#include "seriestreemodel.h" #include "newmoviewizard.h" #include "filestreewidget.h" #include "filestreemodel.h" @@ -452,24 +453,25 @@ void SheMov::createActions(){ QSignalMapper *viewMapper = new QSignalMapper(this); mShowArchivedA = new QAction(QIcon(":/gaping_ass.png"), tr("Show archived movies"), this); mShowTreeGroup->addAction(mShowArchivedA); - viewMapper->setMapping(mShowArchivedA, 1); + viewMapper->setMapping(mShowArchivedA, SeriesTreeModel::Archived); connect(mShowArchivedA, SIGNAL(triggered()), viewMapper, SLOT(map())); mShowArchivedA->setCheckable(true); mShowLocalA = new QAction(QIcon(":/clitoris.png"), tr("Show local movies"), this); mShowTreeGroup->addAction(mShowLocalA); - viewMapper->setMapping(mShowLocalA, 2); + viewMapper->setMapping(mShowLocalA, SeriesTreeModel::Local); connect(mShowLocalA, SIGNAL(triggered()), viewMapper, SLOT(map())); mShowLocalA->setCheckable(true); mShowNormalA = new QAction(QIcon(":/nipple_up.png"), tr("Normal view"), this); mShowTreeGroup->addAction(mShowNormalA); - viewMapper->setMapping(mShowNormalA, 0); + viewMapper->setMapping(mShowNormalA, SeriesTreeModel::All); connect(mShowNormalA, SIGNAL(triggered()), viewMapper, SLOT(map())); mShowNormalA->setCheckable(true); mShowNormalA->setChecked(true); mShowNoCoverDialogA = new QAction(QIcon(":/higheels.png"), tr("List movies without cover..."), this); connect(mShowNoCoverDialogA, SIGNAL(triggered()), mATree, SLOT(showNoCoverDialog())); mShowAllFilesA = new QAction(tr("Show All files"), this); - connect(mShowAllFilesA, SIGNAL(triggered()), mATree, SLOT(showAllFiles())); + mShowAllFilesA->setCheckable(true); + connect(mShowAllFilesA, SIGNAL(toggled(bool)), mATree, SLOT(showAllFiles(bool))); //Tree view headers QHash<QString, int> headerData = filesModel->headerData(); @@ -917,20 +919,6 @@ void SheMov::readSettings(){ mTab->setCurrentIndex(currentTab); } tabChanged(currentTab); - int filesMode = s.value("ui/filestreemode", FilesTreeModel::Normal).toInt(); - switch(filesMode){ - case FilesTreeModel::Normal: - mShowNormalA->trigger(); - break; - case FilesTreeModel::Local: - mShowLocalA->trigger(); - break; - case FilesTreeModel::Archived: - mShowArchivedA->trigger(); - break; - default: - ; - } mHoverPicsA->setChecked(s.value("ui/hoverpics").toBool()); mHoverArchiveA->setChecked(s.value("ui/hoverarchive").toBool()); mHoverDirectoriesA->setChecked(s.value("ui/hoverdirs").toBool()); |