Tasks/TaskViewer.py

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

eric ide

mercurial