|
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 |