summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivetreeview.cpp61
-rw-r--r--archivetreeview.h3
-rw-r--r--filestreemodel.cpp47
-rw-r--r--filestreemodel.h5
-rw-r--r--filestreewidget.cpp4
-rw-r--r--shemov.cpp24
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);
}
diff --git a/shemov.cpp b/shemov.cpp
index 1b871db..395cac3 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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());