X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=src%2Ftaskfiltermodel.cpp;fp=src%2Ftaskfiltermodel.cpp;h=8346f22b794f0431674ceb20889dc94fa1cc3831;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=0000000000000000000000000000000000000000;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/src/taskfiltermodel.cpp b/src/taskfiltermodel.cpp new file mode 100644 index 0000000..8346f22 --- /dev/null +++ b/src/taskfiltermodel.cpp @@ -0,0 +1,79 @@ +#include "taskfiltermodel.h" +#include "taskmodel.h" + +#include + +#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)); +}