src/eric7/Tasks/TaskFilter.py

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

eric ide

mercurial