361 |
362 |
362 self.tasks = [] |
363 self.tasks = [] |
363 self.copyTask = None |
364 self.copyTask = None |
364 self.projectOpen = False |
365 self.projectOpen = False |
365 self.project = project |
366 self.project = project |
|
367 self.projectTasksScanFilter = "" |
366 |
368 |
367 self.taskFilter = TaskFilter() |
369 self.taskFilter = TaskFilter() |
368 self.taskFilter.setActive(False) |
370 self.taskFilter.setActive(False) |
|
371 |
|
372 self.__projectTasksMenu = QMenu( |
|
373 self.trUtf8("P&roject Tasks"), self) |
|
374 self.__projectTasksMenu.addAction( |
|
375 self.trUtf8("&Regenerate project tasks"), |
|
376 self.__regenerateProjectTasks) |
|
377 self.__projectTasksMenu.addSeparator() |
|
378 self.__projectTasksMenu.addAction( |
|
379 self.trUtf8("&Configure scan options"), |
|
380 self.__configureProjectTasksScanOptions) |
369 |
381 |
370 self.__menu = QMenu(self) |
382 self.__menu = QMenu(self) |
371 self.__menu.addAction(self.trUtf8("&New Task..."), self.__newTask) |
383 self.__menu.addAction(self.trUtf8("&New Task..."), self.__newTask) |
372 self.__menu.addSeparator() |
384 self.__menu.addSeparator() |
373 self.regenerateProjectTasksItem = \ |
385 self.projectTasksMenuItem = self.__menu.addMenu(self.__projectTasksMenu) |
374 self.__menu.addAction(self.trUtf8("&Regenerate project tasks"), |
|
375 self.__regenerateProjectTasks) |
|
376 self.__menu.addSeparator() |
386 self.__menu.addSeparator() |
377 self.gotoItem = self.__menu.addAction(self.trUtf8("&Go To"), self.__goToTask) |
387 self.gotoItem = self.__menu.addAction(self.trUtf8("&Go To"), self.__goToTask) |
378 self.__menu.addSeparator() |
388 self.__menu.addSeparator() |
379 self.copyItem = self.__menu.addAction(self.trUtf8("&Copy"), self.__copyTask) |
389 self.copyItem = self.__menu.addAction(self.trUtf8("&Copy"), self.__copyTask) |
380 self.pasteItem = self.__menu.addAction(self.trUtf8("&Paste"), self.__pasteTask) |
390 self.pasteItem = self.__menu.addAction(self.trUtf8("&Paste"), self.__pasteTask) |
399 self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) |
409 self.__menu.addAction(self.trUtf8("Configure..."), self.__configure) |
400 |
410 |
401 self.__backMenu = QMenu(self) |
411 self.__backMenu = QMenu(self) |
402 self.__backMenu.addAction(self.trUtf8("&New Task..."), self.__newTask) |
412 self.__backMenu.addAction(self.trUtf8("&New Task..."), self.__newTask) |
403 self.__backMenu.addSeparator() |
413 self.__backMenu.addSeparator() |
404 self.backRegenerateProjectTasksItem = \ |
414 self.backProjectTasksMenuItem = self.__backMenu.addMenu(self.__projectTasksMenu) |
405 self.__backMenu.addAction(self.trUtf8("&Regenerate project tasks"), |
|
406 self.__regenerateProjectTasks) |
|
407 self.__backMenu.addSeparator() |
415 self.__backMenu.addSeparator() |
408 self.backPasteItem = self.__backMenu.addAction(self.trUtf8("&Paste"), |
416 self.backPasteItem = self.__backMenu.addAction(self.trUtf8("&Paste"), |
409 self.__pasteTask) |
417 self.__pasteTask) |
410 self.__backMenu.addSeparator() |
418 self.__backMenu.addSeparator() |
411 self.__backMenu.addAction(self.trUtf8("Delete Completed &Tasks"), |
419 self.__backMenu.addAction(self.trUtf8("Delete Completed &Tasks"), |
479 @param coord the position of the mouse pointer (QPoint) |
487 @param coord the position of the mouse pointer (QPoint) |
480 """ |
488 """ |
481 itm = self.itemAt(coord) |
489 itm = self.itemAt(coord) |
482 coord = self.mapToGlobal(coord) |
490 coord = self.mapToGlobal(coord) |
483 if itm is None: |
491 if itm is None: |
484 self.backRegenerateProjectTasksItem.setEnabled(self.projectOpen) |
492 self.backProjectTasksMenuItem.setEnabled(self.projectOpen) |
485 if self.copyTask: |
493 if self.copyTask: |
486 self.backPasteItem.setEnabled(True) |
494 self.backPasteItem.setEnabled(True) |
487 else: |
495 else: |
488 self.backPasteItem.setEnabled(False) |
496 self.backPasteItem.setEnabled(False) |
489 self.__backMenu.popup(coord) |
497 self.__backMenu.popup(coord) |
490 else: |
498 else: |
491 self.regenerateProjectTasksItem.setEnabled(self.projectOpen) |
499 self.projectTasksMenuItem.setEnabled(self.projectOpen) |
492 if itm.getFilename(): |
500 if itm.getFilename(): |
493 self.gotoItem.setEnabled(True) |
501 self.gotoItem.setEnabled(True) |
494 self.deleteItem.setEnabled(True) |
502 self.deleteItem.setEnabled(True) |
495 self.markCompletedItem.setEnabled(False) |
503 self.markCompletedItem.setEnabled(False) |
496 self.copyItem.setEnabled(False) |
504 self.copyItem.setEnabled(False) |
738 dlg = TaskFilterConfigDialog(self.taskFilter) |
746 dlg = TaskFilterConfigDialog(self.taskFilter) |
739 if dlg.exec_() == QDialog.Accepted: |
747 if dlg.exec_() == QDialog.Accepted: |
740 dlg.configureTaskFilter(self.taskFilter) |
748 dlg.configureTaskFilter(self.taskFilter) |
741 self.__refreshDisplay() |
749 self.__refreshDisplay() |
742 |
750 |
|
751 def __configureProjectTasksScanOptions(self): |
|
752 """ |
|
753 Private slot to configure scan options for project tasks. |
|
754 """ |
|
755 filter, ok = QInputDialog.getText( |
|
756 self, |
|
757 self.trUtf8("Scan Filter Patterns"), |
|
758 self.trUtf8("Enter filename patterns of files" |
|
759 " to be excluded separated by a comma:"), |
|
760 QLineEdit.Normal, |
|
761 self.projectTasksScanFilter) |
|
762 if ok: |
|
763 self.projectTasksScanFilter = filter |
|
764 |
743 def __regenerateProjectTasks(self): |
765 def __regenerateProjectTasks(self): |
744 """ |
766 """ |
745 Private slot to handle the "Regenerated project tasks" context menu entry. |
767 Private slot to handle the "Regenerated project tasks" context menu entry. |
746 """ |
768 """ |
747 todoMarkers = Preferences.getTasks("TasksMarkers").split() |
769 todoMarkers = Preferences.getTasks("TasksMarkers").split() |
748 bugfixMarkers = Preferences.getTasks("TasksMarkersBugfix").split() |
770 bugfixMarkers = Preferences.getTasks("TasksMarkersBugfix").split() |
749 files = self.project.pdata["SOURCES"] |
771 files = self.project.pdata["SOURCES"] |
|
772 |
|
773 # apply file filter |
|
774 filterList = [f.strip() for f in self.projectTasksScanFilter.split(",") |
|
775 if f.strip()] |
|
776 if filterList: |
|
777 for filter in filterList: |
|
778 files = [f for f in files if not fnmatch.fnmatch(f, filter)] |
750 |
779 |
751 # remove all project tasks |
780 # remove all project tasks |
752 self.clearProjectTasks() |
781 self.clearProjectTasks() |
753 |
782 |
754 # now process them |
783 # now process them |