eric6/Tasks/TaskFilter.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2005 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class to store task data.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import QRegExp
13
14 from .Task import Task
15
16
17 class TaskFilter(object):
18 """
19 Class implementing a filter for tasks.
20 """
21 def __init__(self):
22 """
23 Constructor
24 """
25 self.active = False
26
27 self.summaryFilter = None
28 self.filenameFilter = None
29 self.typeFilter = Task.TypeNone
30 # task type
31
32 self.scopeFilter = None
33 # global (False) or project (True)
34
35 self.statusFilter = None
36 # uncompleted (False) or completed (True)
37
38 self.prioritiesFilter = None
39 # list of priorities [0 (high), 1 (normal), 2 (low)]
40
41 def setActive(self, enabled):
42 """
43 Public method to activate the filter.
44
45 @param enabled flag indicating the activation state (boolean)
46 """
47 self.active = enabled
48
49 def setSummaryFilter(self, filterStr):
50 """
51 Public method to set the description filter.
52
53 @param filterStr a regular expression for the description filter
54 to set (string) or None
55 """
56 if not filterStr:
57 self.summaryFilter = None
58 else:
59 self.summaryFilter = QRegExp(filterStr)
60
61 def setFileNameFilter(self, filterStr):
62 """
63 Public method to set the filename filter.
64
65 @param filterStr a wildcard expression for the filename filter
66 to set (string) or None
67 """
68 if not filterStr:
69 self.filenameFilter = None
70 else:
71 self.filenameFilter = QRegExp(filterStr)
72 self.filenameFilter.setPatternSyntax(QRegExp.Wildcard)
73
74 def setTypeFilter(self, taskType):
75 """
76 Public method to set the type filter.
77
78 @param taskType type of the task (one of Task.TypeNone, Task.TypeFixme,
79 Task.TypeTodo, Task.TypeWarning, Task.TypeNote)
80 """
81 self.typeFilter = taskType
82
83 def setScopeFilter(self, scope):
84 """
85 Public method to set the scope filter.
86
87 @param scope flag indicating a project task (boolean) or None
88 """
89 self.scopeFilter = scope
90
91 def setStatusFilter(self, status):
92 """
93 Public method to set the status filter.
94
95 @param status flag indicating a completed task (boolean) or None
96 """
97 self.statusFilter = status
98
99 def setPrioritiesFilter(self, priorities):
100 """
101 Public method to set the priorities filter.
102
103 @param priorities list of task priorities (list of integer) or None
104 """
105 self.prioritiesFilter = priorities
106
107 def hasActiveFilter(self):
108 """
109 Public method to check for active filters.
110
111 @return flag indicating an active filter was found (boolean)
112 """
113 return self.summaryFilter is not None or \
114 self.filenameFilter is not None or \
115 self.typeFilter != Task.TypeNone or \
116 self.scopeFilter is not None or \
117 self.statusFilter is not None or \
118 self.prioritiesFilter is not None
119
120 def showTask(self, task):
121 """
122 Public method to check, if a task should be shown.
123
124 @param task reference to the task object to check (Task)
125 @return flag indicating whether the task should be shown (boolean)
126 """
127 if not self.active:
128 return True
129
130 if self.summaryFilter and \
131 self.summaryFilter.indexIn(task.summary) == -1:
132 return False
133
134 if self.filenameFilter and \
135 not self.filenameFilter.exactMatch(task.filename):
136 return False
137
138 if self.typeFilter != Task.TypeNone and \
139 self.typeFilter != task.taskType:
140 return False
141
142 if self.scopeFilter is not None and \
143 self.scopeFilter != task._isProjectTask:
144 return False
145
146 if self.statusFilter is not None and \
147 self.statusFilter != task.completed:
148 return False
149
150 if self.prioritiesFilter is not None and \
151 task.priority not in self.prioritiesFilter:
152 return False
153
154 return True

eric ide

mercurial