Tasks/TaskFilter.py

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

eric ide

mercurial