From: APTX Date: Thu, 25 Apr 2013 15:00:10 +0000 (+0200) Subject: Add setting to hide empty anime. X-Git-Url: https://gitweb.tyo.aptx.org/?a=commitdiff_plain;h=a8a675fe147530fdcc941c7be232176286354eda;p=localmylist.git Add setting to hide empty anime. These entries come from the MyList export. These entries are wishlist entries. --- diff --git a/localmylist-management/mainwindow.cpp b/localmylist-management/mainwindow.cpp index 98e7a88..670c694 100644 --- a/localmylist-management/mainwindow.cpp +++ b/localmylist-management/mainwindow.cpp @@ -78,6 +78,8 @@ MainWindow::MainWindow(QWidget *parent) : reportResultModel = new QSqlQueryModel(this); ui->reportResultView->setModel(reportResultModel); + myListFilterModel->configChanged(); + setAcceptDrops(true); if (autostartDirectoryWatcher) diff --git a/localmylist-management/mylistfiltermodel.cpp b/localmylist-management/mylistfiltermodel.cpp index f0a0745..108e3cf 100644 --- a/localmylist-management/mylistfiltermodel.cpp +++ b/localmylist-management/mylistfiltermodel.cpp @@ -1,14 +1,23 @@ #include "mylistfiltermodel.h" +#include "mylist.h" +#include "settings.h" #include "mylistmodel.h" #include "mylistnode.h" #include MyListFilterModel::MyListFilterModel(QObject *parent) : - QSortFilterProxyModel(parent) + QSortFilterProxyModel(parent), m_hideEmptyAnime(false) { setFilterCaseSensitivity(Qt::CaseInsensitive); + + connect(LocalMyList::instance()->database(), SIGNAL(configChanged()), this, SLOT(configChanged())); +} + +bool MyListFilterModel::hideEmptyAnime() const +{ + return m_hideEmptyAnime; } LocalMyList::MyListModel *MyListFilterModel::myListModel() const @@ -24,11 +33,35 @@ LocalMyList::MyListNode *MyListFilterModel::node(const QModelIndex &idx) const return myListModel()->node(mapToSource(idx)); } +void MyListFilterModel::setHideEmptyAnime(bool hide) +{ + if (m_hideEmptyAnime == hide) + return; + + m_hideEmptyAnime = hide; + + if (LocalMyList::instance()->settings()->get("myListHideEmptyAnime", hide) != hide) + { + LocalMyList::instance()->settings()->set("myListHideEmptyAnime", hide); + LocalMyList::instance()->settings()->commit(); + } + invalidateFilter(); + emit hideEmptyAnimeChanged(hide); +} + +void MyListFilterModel::configChanged() +{ + setHideEmptyAnime(LocalMyList::instance()->settings()->get("myListHideEmptyAnime", false)); +} + bool MyListFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { if (source_parent.isValid()) return true; - QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + if (m_hideEmptyAnime && !sourceModel()->rowCount(idx) && !sourceModel()->canFetchMore(idx)) + return false; + return sourceModel()->data(idx).toString().contains(filterRegExp()); } diff --git a/localmylist-management/mylistfiltermodel.h b/localmylist-management/mylistfiltermodel.h index f656419..5b8df70 100644 --- a/localmylist-management/mylistfiltermodel.h +++ b/localmylist-management/mylistfiltermodel.h @@ -11,15 +11,29 @@ namespace LocalMyList { class MyListFilterModel : public QSortFilterProxyModel { Q_OBJECT + Q_PROPERTY(bool hideEmptyAnime READ hideEmptyAnime WRITE setHideEmptyAnime NOTIFY hideEmptyAnimeChanged) + public: explicit MyListFilterModel(QObject *parent = 0); + bool hideEmptyAnime() const; + public slots: LocalMyList::MyListModel *myListModel() const; LocalMyList::MyListNode *node(const QModelIndex &idx) const; + void setHideEmptyAnime(bool hide); + + void configChanged(); + +signals: + void hideEmptyAnimeChanged(bool arg); + protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; + +private: + bool m_hideEmptyAnime; }; #endif // MYLISTFILTERMODEL_H diff --git a/localmylist/share/schema/default_config.sql b/localmylist/share/schema/default_config.sql index 1f3165d..3997932 100644 --- a/localmylist/share/schema/default_config.sql +++ b/localmylist/share/schema/default_config.sql @@ -28,6 +28,8 @@ INSERT INTO config VALUES ('fileFilters', '*.mkv *.mp4 *.ogg *.ogm *.wmv *.avi * INSERT INTO config VALUES ('anidbTitleUrl', 'http://anidb.net/api/anime-titles.dat.gz', true); +INSERT INTO config VALUES ('myListHideEmptyAnime', '0', true); + -- Episode types INSERT INTO episode_type VALUES ('', 'Normal', 0); INSERT INTO episode_type VALUES ('S', 'Special', 1);