]> Some of my projects - localmylist.git/commitdiff
Add setting to hide empty anime.
authorAPTX <marek321@gmail.com>
Thu, 25 Apr 2013 15:00:10 +0000 (17:00 +0200)
committerAPTX <marek321@gmail.com>
Thu, 25 Apr 2013 15:00:10 +0000 (17:00 +0200)
These entries come from the MyList export. These entries are wishlist entries.

localmylist-management/mainwindow.cpp
localmylist-management/mylistfiltermodel.cpp
localmylist-management/mylistfiltermodel.h
localmylist/share/schema/default_config.sql

index 98e7a88e7414d2edfb3c2aa83dfd1df2f4b954c3..670c694626ecd7cb78c216fee2656c5978041855 100644 (file)
@@ -78,6 +78,8 @@ MainWindow::MainWindow(QWidget *parent) :
        reportResultModel = new QSqlQueryModel(this);
        ui->reportResultView->setModel(reportResultModel);
 
+       myListFilterModel->configChanged();
+
        setAcceptDrops(true);
 
        if (autostartDirectoryWatcher)
index f0a074523a64ac6fe199e4586feb5d8653e181fc..108e3cfae530177e101199143fb5197cc0bec031 100644 (file)
@@ -1,14 +1,23 @@
 #include "mylistfiltermodel.h"
 
+#include "mylist.h"
+#include "settings.h"
 #include "mylistmodel.h"
 #include "mylistnode.h"
 
 #include <QDebug>
 
 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());
 }
index f6564199025d5182983a0f8a04558343fcfee6d5..5b8df70d1d88f43934d5cc45ca3f147a052e3e65 100644 (file)
@@ -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
index 1f3165dbbc90948166c74ae4fafd701315d8df0b..3997932dcfe33ca4fe6706ea8b38ec4c7dd7a0fd 100644 (file)
@@ -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);