]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/taskfiltermodel.cpp
New upstream version 2.9.22
[sven/vym.git] / src / taskfiltermodel.cpp
diff --git a/src/taskfiltermodel.cpp b/src/taskfiltermodel.cpp
new file mode 100644 (file)
index 0000000..8346f22
--- /dev/null
@@ -0,0 +1,79 @@
+#include "taskfiltermodel.h"
+#include "taskmodel.h"
+
+#include <QSortFilterProxyModel>
+
+#include "branchitem.h"
+
+extern TaskModel *taskModel;
+
+void TaskFilterModel::setFilter(bool b) { useFilter = b; }
+
+void TaskFilterModel::setMapFilter(const QString &s) { mapFilter = s; }
+
+void TaskFilterModel::setFilterNew(bool b) { filterNew = b; }
+
+void TaskFilterModel::setFilterBlocker(bool b) { filterBlocker = b; }
+
+void TaskFilterModel::setFilterFlags1(bool b) { filterFlags1 = b; }
+
+void TaskFilterModel::setFilterFlags2(bool b) { filterFlags2 = b; }
+
+void TaskFilterModel::setFilterFlags3(bool b) { filterFlags3 = b; }
+
+bool TaskFilterModel::taskVisible(Task* task) const
+{
+    // Filter by mapname
+    QString mapname = task->getMapName();
+    if (mapname.isEmpty())
+        mapname = "justSomePseudoMapNameForFiltering";
+    if (!mapFilter.isEmpty() && mapname != mapFilter)
+        return false;
+
+    // Filter new tasks
+    if (filterNew && task->getAwake() != Task::Morning)
+        return false;
+
+    BranchItem *bi = task->getBranch();
+
+    // Filter blocker tasks (stopsign)
+    if (filterBlocker && !bi->hasActiveFlag("stopsign") )
+        return false;
+
+    // Filter active tasks
+    if (useFilter && ((task->getSecsSleep() > 0) ||
+                      (task->getStatus() == Task::Finished)))
+        return false;
+
+    // Filter arrow flags
+    if (filterFlags1 && filterFlags2) {
+        if (bi->hasActiveFlag("arrow-up") ||
+            bi->hasActiveFlag("2arrow-up"))
+            return true;
+        else
+            return false;
+    }
+
+    if (filterFlags1 &&
+        !bi->hasActiveFlag("arrow-up"))
+        return false;
+
+    if (filterFlags2 &&
+        !bi->hasActiveFlag("2arrow-up"))
+        return false;
+
+    // Filter flags: Flags, which have neither arrow-up nor 2arrow-up
+    if (filterFlags3 &&
+        (bi->hasActiveFlag("arrow-up") ||
+         bi->hasActiveFlag("2arrow-up")))
+        return false;
+    return true;
+}
+
+bool TaskFilterModel::filterAcceptsRow(int sourceRow,
+                                       const QModelIndex &sourceParent) const
+{
+    QModelIndex ix = sourceModel()->index(sourceRow, 0, sourceParent);
+
+    return taskVisible(taskModel->getTask(ix));
+}