15 |
15 |
16 class TaskFilter: |
16 class TaskFilter: |
17 """ |
17 """ |
18 Class implementing a filter for tasks. |
18 Class implementing a filter for tasks. |
19 """ |
19 """ |
|
20 |
20 def __init__(self): |
21 def __init__(self): |
21 """ |
22 """ |
22 Constructor |
23 Constructor |
23 """ |
24 """ |
24 self.active = False |
25 self.active = False |
25 |
26 |
26 self.summaryFilter = None |
27 self.summaryFilter = None |
27 self.filenameFilter = "" |
28 self.filenameFilter = "" |
28 self.typeFilter = TaskType.NONE |
29 self.typeFilter = TaskType.NONE |
29 # task type |
30 # task type |
30 |
31 |
31 self.scopeFilter = None |
32 self.scopeFilter = None |
32 #- global (False) or project (True) |
33 # - global (False) or project (True) |
33 |
34 |
34 self.statusFilter = None |
35 self.statusFilter = None |
35 #- not completed (False) or completed (True) |
36 # - not completed (False) or completed (True) |
36 |
37 |
37 self.prioritiesFilter = None |
38 self.prioritiesFilter = None |
38 #- list of priorities |
39 # - list of priorities |
39 |
40 |
40 def setActive(self, enabled): |
41 def setActive(self, enabled): |
41 """ |
42 """ |
42 Public method to activate the filter. |
43 Public method to activate the filter. |
43 |
44 |
44 @param enabled flag indicating the activation state (boolean) |
45 @param enabled flag indicating the activation state (boolean) |
45 """ |
46 """ |
46 self.active = enabled |
47 self.active = enabled |
47 |
48 |
48 def setSummaryFilter(self, filterStr): |
49 def setSummaryFilter(self, filterStr): |
49 """ |
50 """ |
50 Public method to set the description filter. |
51 Public method to set the description filter. |
51 |
52 |
52 @param filterStr a regular expression for the description filter |
53 @param filterStr a regular expression for the description filter |
53 to set (string) or None |
54 to set (string) or None |
54 """ |
55 """ |
55 if not filterStr: |
56 if not filterStr: |
56 self.summaryFilter = None |
57 self.summaryFilter = None |
57 else: |
58 else: |
58 self.summaryFilter = re.compile(filterStr) |
59 self.summaryFilter = re.compile(filterStr) |
59 |
60 |
60 def setFileNameFilter(self, filterStr): |
61 def setFileNameFilter(self, filterStr): |
61 """ |
62 """ |
62 Public method to set the filename filter. |
63 Public method to set the filename filter. |
63 |
64 |
64 @param filterStr a wildcard expression for the filename filter |
65 @param filterStr a wildcard expression for the filename filter |
65 to set (string) or None |
66 to set (string) or None |
66 """ |
67 """ |
67 self.filenameFilter = filterStr |
68 self.filenameFilter = filterStr |
68 |
69 |
69 def setTypeFilter(self, taskType): |
70 def setTypeFilter(self, taskType): |
70 """ |
71 """ |
71 Public method to set the type filter. |
72 Public method to set the type filter. |
72 |
73 |
73 @param taskType type of the task |
74 @param taskType type of the task |
74 @type TaskType |
75 @type TaskType |
75 """ |
76 """ |
76 self.typeFilter = taskType |
77 self.typeFilter = taskType |
77 |
78 |
78 def setScopeFilter(self, scope): |
79 def setScopeFilter(self, scope): |
79 """ |
80 """ |
80 Public method to set the scope filter. |
81 Public method to set the scope filter. |
81 |
82 |
82 @param scope flag indicating a project task (boolean) or None |
83 @param scope flag indicating a project task (boolean) or None |
83 """ |
84 """ |
84 self.scopeFilter = scope |
85 self.scopeFilter = scope |
85 |
86 |
86 def setStatusFilter(self, status): |
87 def setStatusFilter(self, status): |
87 """ |
88 """ |
88 Public method to set the status filter. |
89 Public method to set the status filter. |
89 |
90 |
90 @param status flag indicating a completed task (boolean) or None |
91 @param status flag indicating a completed task (boolean) or None |
91 """ |
92 """ |
92 self.statusFilter = status |
93 self.statusFilter = status |
93 |
94 |
94 def setPrioritiesFilter(self, priorities): |
95 def setPrioritiesFilter(self, priorities): |
95 """ |
96 """ |
96 Public method to set the priorities filter. |
97 Public method to set the priorities filter. |
97 |
98 |
98 @param priorities list of task priorities or None |
99 @param priorities list of task priorities or None |
99 @type list of TaskPriority or None |
100 @type list of TaskPriority or None |
100 """ |
101 """ |
101 self.prioritiesFilter = priorities |
102 self.prioritiesFilter = priorities |
102 |
103 |
103 def hasActiveFilter(self): |
104 def hasActiveFilter(self): |
104 """ |
105 """ |
105 Public method to check for active filters. |
106 Public method to check for active filters. |
106 |
107 |
107 @return flag indicating an active filter was found (boolean) |
108 @return flag indicating an active filter was found (boolean) |
108 """ |
109 """ |
109 return ( |
110 return ( |
110 self.summaryFilter is not None or |
111 self.summaryFilter is not None |
111 bool(self.filenameFilter) or |
112 or bool(self.filenameFilter) |
112 self.typeFilter != TaskType.NONE or |
113 or self.typeFilter != TaskType.NONE |
113 self.scopeFilter is not None or |
114 or self.scopeFilter is not None |
114 self.statusFilter is not None or |
115 or self.statusFilter is not None |
115 self.prioritiesFilter is not None |
116 or self.prioritiesFilter is not None |
116 ) |
117 ) |
117 |
118 |
118 def showTask(self, task): |
119 def showTask(self, task): |
119 """ |
120 """ |
120 Public method to check, if a task should be shown. |
121 Public method to check, if a task should be shown. |
121 |
122 |
122 @param task reference to the task object to check (Task) |
123 @param task reference to the task object to check (Task) |
123 @return flag indicating whether the task should be shown (boolean) |
124 @return flag indicating whether the task should be shown (boolean) |
124 """ |
125 """ |
125 if not self.active: |
126 if not self.active: |
126 return True |
127 return True |
127 |
128 |
128 if ( |
129 if self.summaryFilter and self.summaryFilter.search(task.summary) is None: |
129 self.summaryFilter and |
130 return False |
130 self.summaryFilter.search(task.summary) is None |
131 |
|
132 if self.filenameFilter and not fnmatch.fnmatch( |
|
133 task.filename, self.filenameFilter |
131 ): |
134 ): |
132 return False |
135 return False |
133 |
136 |
|
137 if self.typeFilter != TaskType.NONE and self.typeFilter != task.taskType: |
|
138 return False |
|
139 |
|
140 if self.scopeFilter is not None and self.scopeFilter != task._isProjectTask: |
|
141 return False |
|
142 |
|
143 if self.statusFilter is not None and self.statusFilter != task.completed: |
|
144 return False |
|
145 |
134 if ( |
146 if ( |
135 self.filenameFilter and |
147 self.prioritiesFilter is not None |
136 not fnmatch.fnmatch(task.filename, self.filenameFilter) |
148 and task.priority not in self.prioritiesFilter |
137 ): |
149 ): |
138 return False |
150 return False |
139 |
151 |
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 |
152 return True |