]> git.sven.stormbind.net Git - sven/vym.git/blob - src/taskfiltermodel.cpp
Replace Pierre as the maintainer
[sven/vym.git] / src / taskfiltermodel.cpp
1 #include "taskfiltermodel.h"
2 #include "taskmodel.h"
3
4 #include <QSortFilterProxyModel>
5
6 #include "branchitem.h"
7
8 extern TaskModel *taskModel;
9
10 void TaskFilterModel::setFilter(bool b) { useFilter = b; }
11
12 void TaskFilterModel::setMapFilter(const QString &s) { mapFilter = s; }
13
14 void TaskFilterModel::setFilterNew(bool b) { filterNew = b; }
15
16 void TaskFilterModel::setFilterBlocker(bool b) { filterBlocker = b; }
17
18 void TaskFilterModel::setFilterFlags1(bool b) { filterFlags1 = b; }
19
20 void TaskFilterModel::setFilterFlags2(bool b) { filterFlags2 = b; }
21
22 void TaskFilterModel::setFilterFlags3(bool b) { filterFlags3 = b; }
23
24 bool TaskFilterModel::taskVisible(Task* task) const
25 {
26     // Filter by mapname
27     QString mapname = task->getMapName();
28     if (mapname.isEmpty())
29         mapname = "justSomePseudoMapNameForFiltering";
30     if (!mapFilter.isEmpty() && mapname != mapFilter)
31         return false;
32
33     // Filter new tasks
34     if (filterNew && task->getAwake() != Task::Morning)
35         return false;
36
37     BranchItem *bi = task->getBranch();
38
39     // Filter blocker tasks (stopsign)
40     if (filterBlocker && !bi->hasActiveFlag("stopsign") )
41         return false;
42
43     // Filter active tasks
44     if (useFilter && ((task->getSecsSleep() > 0) ||
45                       (task->getStatus() == Task::Finished)))
46         return false;
47
48     // Filter arrow flags
49     if (filterFlags1 && filterFlags2) {
50         if (bi->hasActiveFlag("arrow-up") ||
51             bi->hasActiveFlag("2arrow-up"))
52             return true;
53         else
54             return false;
55     }
56
57     if (filterFlags1 &&
58         !bi->hasActiveFlag("arrow-up"))
59         return false;
60
61     if (filterFlags2 &&
62         !bi->hasActiveFlag("2arrow-up"))
63         return false;
64
65     // Filter flags: Flags, which have neither arrow-up nor 2arrow-up
66     if (filterFlags3 &&
67         (bi->hasActiveFlag("arrow-up") ||
68          bi->hasActiveFlag("2arrow-up")))
69         return false;
70     return true;
71 }
72
73 bool TaskFilterModel::filterAcceptsRow(int sourceRow,
74                                        const QModelIndex &sourceParent) const
75 {
76     QModelIndex ix = sourceModel()->index(sourceRow, 0, sourceParent);
77
78     return taskVisible(taskModel->getTask(ix));
79 }