Tasks/TaskViewer.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2525
8b507a9a2d40
parent 2997
7f0ef975da9e
child 3058
0a02c433f52d
equal deleted inserted replaced
3056:9986ec0e559a 3057:10516539f238
15 15
16 import os 16 import os
17 import fnmatch 17 import fnmatch
18 18
19 from PyQt4.QtCore import pyqtSignal, Qt 19 from PyQt4.QtCore import pyqtSignal, Qt
20 from PyQt4.QtGui import QHeaderView, QLineEdit, QTreeWidget, QDialog, QInputDialog, \ 20 from PyQt4.QtGui import QHeaderView, QLineEdit, QTreeWidget, QDialog, \
21 QApplication, QMenu, QAbstractItemView, QProgressDialog, QTreeWidgetItem 21 QInputDialog, QApplication, QMenu, QAbstractItemView, QProgressDialog, \
22 QTreeWidgetItem
22 23
23 from E5Gui.E5Application import e5App 24 from E5Gui.E5Application import e5App
24 from E5Gui import E5MessageBox 25 from E5Gui import E5MessageBox
25 26
26 from .Task import Task 27 from .Task import Task
54 self.setItemsExpandable(False) 55 self.setItemsExpandable(False)
55 self.setSortingEnabled(True) 56 self.setSortingEnabled(True)
56 57
57 self.__headerItem = QTreeWidgetItem(["", "", self.trUtf8("Summary"), 58 self.__headerItem = QTreeWidgetItem(["", "", self.trUtf8("Summary"),
58 self.trUtf8("Filename"), self.trUtf8("Line"), ""]) 59 self.trUtf8("Filename"), self.trUtf8("Line"), ""])
59 self.__headerItem.setIcon(0, UI.PixmapCache.getIcon("taskCompleted.png")) 60 self.__headerItem.setIcon(
60 self.__headerItem.setIcon(1, UI.PixmapCache.getIcon("taskPriority.png")) 61 0, UI.PixmapCache.getIcon("taskCompleted.png"))
62 self.__headerItem.setIcon(
63 1, UI.PixmapCache.getIcon("taskPriority.png"))
61 self.setHeaderItem(self.__headerItem) 64 self.setHeaderItem(self.__headerItem)
62 65
63 self.header().setSortIndicator(2, Qt.AscendingOrder) 66 self.header().setSortIndicator(2, Qt.AscendingOrder)
64 self.__resizeColumns() 67 self.__resizeColumns()
65 68
86 self.__configureProjectTasksScanOptions) 89 self.__configureProjectTasksScanOptions)
87 90
88 self.__menu = QMenu(self) 91 self.__menu = QMenu(self)
89 self.__menu.addAction(self.trUtf8("&New Task..."), self.__newTask) 92 self.__menu.addAction(self.trUtf8("&New Task..."), self.__newTask)
90 self.__menu.addSeparator() 93 self.__menu.addSeparator()
91 self.projectTasksMenuItem = self.__menu.addMenu(self.__projectTasksMenu) 94 self.projectTasksMenuItem = self.__menu.addMenu(
92 self.__menu.addSeparator() 95 self.__projectTasksMenu)
93 self.gotoItem = self.__menu.addAction(self.trUtf8("&Go To"), self.__goToTask) 96 self.__menu.addSeparator()
94 self.__menu.addSeparator() 97 self.gotoItem = self.__menu.addAction(
95 self.copyItem = self.__menu.addAction(self.trUtf8("&Copy"), self.__copyTask) 98 self.trUtf8("&Go To"), self.__goToTask)
96 self.pasteItem = self.__menu.addAction(self.trUtf8("&Paste"), self.__pasteTask) 99 self.__menu.addSeparator()
97 self.deleteItem = self.__menu.addAction(self.trUtf8("&Delete"), self.__deleteTask) 100 self.copyItem = self.__menu.addAction(
98 self.__menu.addSeparator() 101 self.trUtf8("&Copy"), self.__copyTask)
99 self.markCompletedItem = self.__menu.addAction(self.trUtf8("&Mark Completed"), 102 self.pasteItem = self.__menu.addAction(
100 self.__markCompleted) 103 self.trUtf8("&Paste"), self.__pasteTask)
101 self.__menu.addAction(self.trUtf8("Delete Completed &Tasks"), 104 self.deleteItem = self.__menu.addAction(
102 self.__deleteCompleted) 105 self.trUtf8("&Delete"), self.__deleteTask)
103 self.__menu.addSeparator() 106 self.__menu.addSeparator()
104 self.__menu.addAction(self.trUtf8("P&roperties..."), self.__editTaskProperties) 107 self.markCompletedItem = self.__menu.addAction(
105 self.__menu.addSeparator() 108 self.trUtf8("&Mark Completed"), self.__markCompleted)
106 self.__menuFilteredAct = self.__menu.addAction(self.trUtf8("&Filtered display")) 109 self.__menu.addAction(
110 self.trUtf8("Delete Completed &Tasks"), self.__deleteCompleted)
111 self.__menu.addSeparator()
112 self.__menu.addAction(
113 self.trUtf8("P&roperties..."), self.__editTaskProperties)
114 self.__menu.addSeparator()
115 self.__menuFilteredAct = self.__menu.addAction(
116 self.trUtf8("&Filtered display"))
107 self.__menuFilteredAct.setCheckable(True) 117 self.__menuFilteredAct.setCheckable(True)
108 self.__menuFilteredAct.setChecked(False) 118 self.__menuFilteredAct.setChecked(False)
109 self.__menuFilteredAct.triggered[bool].connect(self.__activateFilter) 119 self.__menuFilteredAct.triggered[bool].connect(self.__activateFilter)
110 self.__menu.addAction(self.trUtf8("Filter c&onfiguration..."), 120 self.__menu.addAction(
111 self.__configureFilter) 121 self.trUtf8("Filter c&onfiguration..."), self.__configureFilter)
112 self.__menu.addSeparator() 122 self.__menu.addSeparator()
113 self.__menu.addAction(self.trUtf8("Resi&ze columns"), self.__resizeColumns) 123 self.__menu.addAction(
124 self.trUtf8("Resi&ze columns"), self.__resizeColumns)
114 self.__menu.addSeparator() 125 self.__menu.addSeparator()
115 self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) 126 self.__menu.addAction(self.trUtf8("Configure..."), self.__configure)
116 127
117 self.__backMenu = QMenu(self) 128 self.__backMenu = QMenu(self)
118 self.__backMenu.addAction(self.trUtf8("&New Task..."), self.__newTask) 129 self.__backMenu.addAction(self.trUtf8("&New Task..."), self.__newTask)
119 self.__backMenu.addSeparator() 130 self.__backMenu.addSeparator()
120 self.backProjectTasksMenuItem = self.__backMenu.addMenu(self.__projectTasksMenu) 131 self.backProjectTasksMenuItem = self.__backMenu.addMenu(
132 self.__projectTasksMenu)
121 self.__backMenu.addSeparator() 133 self.__backMenu.addSeparator()
122 self.backPasteItem = self.__backMenu.addAction(self.trUtf8("&Paste"), 134 self.backPasteItem = self.__backMenu.addAction(
123 self.__pasteTask) 135 self.trUtf8("&Paste"), self.__pasteTask)
124 self.__backMenu.addSeparator() 136 self.__backMenu.addSeparator()
125 self.__backMenu.addAction(self.trUtf8("Delete Completed &Tasks"), 137 self.__backMenu.addAction(
126 self.__deleteCompleted) 138 self.trUtf8("Delete Completed &Tasks"), self.__deleteCompleted)
127 self.__backMenu.addSeparator() 139 self.__backMenu.addSeparator()
128 self.__backMenuFilteredAct = \ 140 self.__backMenuFilteredAct = self.__backMenu.addAction(
129 self.__backMenu.addAction(self.trUtf8("&Filtered display")) 141 self.trUtf8("&Filtered display"))
130 self.__backMenuFilteredAct.setCheckable(True) 142 self.__backMenuFilteredAct.setCheckable(True)
131 self.__backMenuFilteredAct.setChecked(False) 143 self.__backMenuFilteredAct.setChecked(False)
132 self.__backMenuFilteredAct.triggered[bool].connect(self.__activateFilter) 144 self.__backMenuFilteredAct.triggered[bool].connect(
133 self.__backMenu.addAction(self.trUtf8("Filter c&onfiguration..."), 145 self.__activateFilter)
134 self.__configureFilter) 146 self.__backMenu.addAction(
147 self.trUtf8("Filter c&onfiguration..."), self.__configureFilter)
135 self.__backMenu.addSeparator() 148 self.__backMenu.addSeparator()
136 self.__backMenu.addAction(self.trUtf8("Resi&ze columns"), self.__resizeColumns) 149 self.__backMenu.addAction(
150 self.trUtf8("Resi&ze columns"), self.__resizeColumns)
137 self.__backMenu.addSeparator() 151 self.__backMenu.addSeparator()
138 self.__backMenu.addAction(self.trUtf8("Configure..."), self.__configure) 152 self.__backMenu.addAction(
153 self.trUtf8("Configure..."), self.__configure)
139 154
140 self.__activating = False 155 self.__activating = False
141 156
142 self.setContextMenuPolicy(Qt.CustomContextMenu) 157 self.setContextMenuPolicy(Qt.CustomContextMenu)
143 self.customContextMenuRequested.connect(self.__showContextMenu) 158 self.customContextMenuRequested.connect(self.__showContextMenu)
275 Task.TypeWarning, Task.TypeNote) 290 Task.TypeWarning, Task.TypeNote)
276 @param description explanatory text of the task (string) 291 @param description explanatory text of the task (string)
277 """ 292 """
278 self.addTask(summary, filename=filename, lineno=lineno, 293 self.addTask(summary, filename=filename, lineno=lineno,
279 isProjectTask=( 294 isProjectTask=(
280 self.project and self.project.isProjectSource(filename)), 295 self.project and
296 self.project.isProjectSource(filename)),
281 taskType=taskType, description=description) 297 taskType=taskType, description=description)
282 298
283 def getProjectTasks(self): 299 def getProjectTasks(self):
284 """ 300 """
285 Public method to retrieve all project related tasks. 301 Public method to retrieve all project related tasks.
347 self.__projectTasksSaveTimer.changeOccurred() 363 self.__projectTasksSaveTimer.changeOccurred()
348 del task 364 del task
349 365
350 def __editTaskProperties(self): 366 def __editTaskProperties(self):
351 """ 367 """
352 Private slot to handle the "Properties" context menu entry 368 Private slot to handle the "Properties" context menu entry.
353 """ 369 """
354 from .TaskPropertiesDialog import TaskPropertiesDialog 370 from .TaskPropertiesDialog import TaskPropertiesDialog
355 task = self.currentItem() 371 task = self.currentItem()
356 dlg = TaskPropertiesDialog(task, self, self.projectOpen) 372 dlg = TaskPropertiesDialog(task, self, self.projectOpen)
357 ro = task.getFilename() != "" 373 ro = task.getFilename() != ""
372 """ 388 """
373 from .TaskPropertiesDialog import TaskPropertiesDialog 389 from .TaskPropertiesDialog import TaskPropertiesDialog
374 dlg = TaskPropertiesDialog(None, self, self.projectOpen) 390 dlg = TaskPropertiesDialog(None, self, self.projectOpen)
375 if dlg.exec_() == QDialog.Accepted: 391 if dlg.exec_() == QDialog.Accepted:
376 data = dlg.getData() 392 data = dlg.getData()
377 self.addTask(data[0], data[1], completed=data[2], isProjectTask=data[3], 393 self.addTask(data[0], data[1], completed=data[2],
378 description=data[4]) 394 isProjectTask=data[3], description=data[4])
379 395
380 def __markCompleted(self): 396 def __markCompleted(self):
381 """ 397 """
382 Private slot to handle the "Mark Completed" context menu entry. 398 Private slot to handle the "Mark Completed" context menu entry.
383 """ 399 """
460 @param on flag indicating the filter state (boolean) 476 @param on flag indicating the filter state (boolean)
461 """ 477 """
462 if on and not self.taskFilter.hasActiveFilter(): 478 if on and not self.taskFilter.hasActiveFilter():
463 res = E5MessageBox.yesNo(self, 479 res = E5MessageBox.yesNo(self,
464 self.trUtf8("Activate task filter"), 480 self.trUtf8("Activate task filter"),
465 self.trUtf8("""The task filter doesn't have any active filters.""" 481 self.trUtf8(
466 """ Do you want to configure the filter settings?"""), 482 """The task filter doesn't have any active filters."""
483 """ Do you want to configure the filter settings?"""),
467 yesDefault=True) 484 yesDefault=True)
468 if not res: 485 if not res:
469 on = False 486 on = False
470 else: 487 else:
471 self.__configureFilter() 488 self.__configureFilter()
500 if ok: 517 if ok:
501 self.projectTasksScanFilter = filter 518 self.projectTasksScanFilter = filter
502 519
503 def __regenerateProjectTasks(self): 520 def __regenerateProjectTasks(self):
504 """ 521 """
505 Private slot to handle the "Regenerated project tasks" context menu entry. 522 Private slot to handle the "Regenerated project tasks" context menu
523 entry.
506 """ 524 """
507 markers = { 525 markers = {
508 Task.TypeWarning: Preferences.getTasks("TasksWarningMarkers").split(), 526 Task.TypeWarning:
527 Preferences.getTasks("TasksWarningMarkers").split(),
509 Task.TypeNote: Preferences.getTasks("TasksNoteMarkers").split(), 528 Task.TypeNote: Preferences.getTasks("TasksNoteMarkers").split(),
510 Task.TypeTodo: Preferences.getTasks("TasksTodoMarkers").split(), 529 Task.TypeTodo: Preferences.getTasks("TasksTodoMarkers").split(),
511 Task.TypeFixme: Preferences.getTasks("TasksFixmeMarkers").split(), 530 Task.TypeFixme: Preferences.getTasks("TasksFixmeMarkers").split(),
512 } 531 }
513 files = self.project.pdata["SOURCES"] 532 files = self.project.pdata["SOURCES"]

eric ide

mercurial