summaryrefslogtreecommitdiff
path: root/src/filterlist.cpp
diff options
context:
space:
mode:
authorMikaƫl Capelle <capelle.mikael@gmail.com>2021-01-10 10:25:37 +0100
committerGitHub <noreply@github.com>2021-01-10 10:25:37 +0100
commit80e44a9e3ade61695b4807a3a900d2866138ecac (patch)
tree1ef9904664d8d34dba6692bbf5325aea8c199d08 /src/filterlist.cpp
parenteaec140f7c823012c09536175d8917dddcacdb7c (diff)
parent4a0ce804ea486744e5f6140a0ce4538d99e21ce3 (diff)
Merge pull request #1338 from Holt59/collapsible-separators
Collapsible separators (and refactoring).
Diffstat (limited to 'src/filterlist.cpp')
-rw-r--r--src/filterlist.cpp55
1 files changed, 41 insertions, 14 deletions
diff --git a/src/filterlist.cpp b/src/filterlist.cpp
index 2b72c152..4c1c6fff 100644
--- a/src/filterlist.cpp
+++ b/src/filterlist.cpp
@@ -12,7 +12,14 @@ using Criteria = ModListSortProxy::Criteria;
class FilterList::CriteriaItem : public QTreeWidgetItem
{
+
+ static constexpr int IDRole = Qt::UserRole;
+ static constexpr int TypeRole = Qt::UserRole + 1;
+
public:
+
+ static constexpr int StateRole = Qt::UserRole + 2;
+
enum States
{
FirstState = 0,
@@ -58,27 +65,40 @@ public:
void nextState()
{
- m_state = static_cast<States>(m_state + 1);
- if (m_state > LastState) {
- m_state = FirstState;
+ auto s = static_cast<States>(m_state + 1);
+ if (s > LastState) {
+ s = FirstState;
}
-
- updateState();
+ setState(s);
}
void previousState()
{
- m_state = static_cast<States>(m_state - 1);
- if (m_state < FirstState) {
- m_state = LastState;
+ auto s = static_cast<States>(m_state - 1);
+ if (s < FirstState) {
+ s = LastState;
}
+ setState(s);
+ }
- updateState();
+ QVariant data(int column, int role) const
+ {
+ if (role == StateRole) {
+ return m_state;
+ }
+ return QTreeWidgetItem::data(column, role);
+ }
+
+ void setData(int column, int role, const QVariant& value) {
+ if (role == StateRole) {
+ setState(static_cast<States>(value.toInt()));
+ }
+ else {
+ QTreeWidgetItem::setData(column, role, value);
+ }
}
private:
- const int IDRole = Qt::UserRole;
- const int TypeRole = Qt::UserRole + 1;
FilterList* m_list;
States m_state;
@@ -181,8 +201,8 @@ private:
};
-FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFactory& factory)
- : ui(ui), m_Organizer(organizer), m_factory(factory)
+FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore& core, CategoryFactory& factory)
+ : ui(ui), m_core(core), m_factory(factory)
{
auto* eventFilter = new CriteriaItemFilter(
ui->filters, [&](auto* item, int dir){ return cycleItem(item, dir); });
@@ -212,10 +232,17 @@ FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFac
void FilterList::restoreState(const Settings& s)
{
s.widgets().restoreIndex(ui->filtersSeparators);
+ s.widgets().restoreChecked(ui->filtersAnd);
+ s.widgets().restoreChecked(ui->filtersOr);
+ s.widgets().restoreTreeCheckState(ui->filters, CriteriaItem::StateRole);
+ checkCriteria();
}
void FilterList::saveState(Settings& s) const
{
+ s.widgets().saveTreeCheckState(ui->filters, CriteriaItem::StateRole);
+ s.widgets().saveChecked(ui->filtersAnd);
+ s.widgets().saveChecked(ui->filtersOr);
s.widgets().saveIndex(ui->filtersSeparators);
}
@@ -234,7 +261,7 @@ QTreeWidgetItem* FilterList::addCriteriaItem(
void FilterList::addContentCriteria()
{
- m_Organizer->modDataContents().forEachContent([this](auto const& content) {
+ m_core.modDataContents().forEachContent([this](auto const& content) {
addCriteriaItem(
nullptr, QString("<%1>").arg(tr("Contains %1").arg(content.name())),
content.id(), ModListSortProxy::TypeContent);