#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
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());
}
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
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);