diff -r 4e8b98454baa -r 800c432b34c8 eric7/Tasks/TaskPropertiesDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/Tasks/TaskPropertiesDialog.py Sat May 15 18:45:04 2021 +0200 @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the task properties dialog. +""" + +import time + +from PyQt5.QtWidgets import QDialog + +from E5Gui.E5Completers import E5FileCompleter + +from .Ui_TaskPropertiesDialog import Ui_TaskPropertiesDialog + +from .Task import TaskType, TaskPriority + + +class TaskPropertiesDialog(QDialog, Ui_TaskPropertiesDialog): + """ + Class implementing the task properties dialog. + """ + def __init__(self, task=None, parent=None, projectOpen=False): + """ + Constructor + + @param task the task object to be shown + @type Task + @param parent the parent widget + @type QWidget + @param projectOpen flag indicating status of the project + @type bool + """ + super().__init__(parent) + self.setupUi(self) + + self.filenameCompleter = E5FileCompleter(self.filenameEdit) + + self.typeCombo.addItem(self.tr("Bugfix"), TaskType.FIXME) + self.typeCombo.addItem(self.tr("Warning"), TaskType.WARNING) + self.typeCombo.addItem(self.tr("ToDo"), TaskType.TODO) + self.typeCombo.addItem(self.tr("Note"), TaskType.NOTE) + self.typeCombo.addItem(self.tr("Test"), TaskType.TEST) + self.typeCombo.addItem(self.tr("Documentation"), TaskType.DOCU) + + if task is not None: + self.summaryEdit.setText(task.summary) + self.descriptionEdit.setText(task.description) + self.creationLabel.setText( + time.strftime("%Y-%m-%d, %H:%M:%S", + time.localtime(task.created))) + self.priorityCombo.setCurrentIndex(task.priority.value) + self.projectCheckBox.setChecked(task._isProjectTask) + self.completedCheckBox.setChecked(task.completed) + self.filenameEdit.setText(task.filename) + if task.lineno: + self.linenoEdit.setText(str(task.lineno)) + index = self.typeCombo.findData(task.taskType) + self.typeCombo.setCurrentIndex(index) + self.__setMode(bool(task.filename), projectOpen) + else: + self.projectCheckBox.setChecked(projectOpen) + self.typeCombo.setCurrentIndex(2) # TaskType.TODO + self.__setMode(False, projectOpen) + + def __setMode(self, isFileTask, projectOpen): + """ + Private method to show or hide dialog elements depending on the task + kind. + + @param isFileTask flag indicating a file task (i.e. extracted task) + @type bool + @param projectOpen flag indicating status of the project + @type bool + """ + self.__isFileTaskMode = isFileTask + if self.__isFileTaskMode: + self.descriptionEdit.hide() + self.descriptionLabel.hide() + self.manualTaskFrame.hide() + + msh = self.minimumSizeHint() + self.resize(max(self.width(), msh.width()), msh.height()) + else: + self.fileTaskFrame.hide() + + self.summaryEdit.setReadOnly(isFileTask) + self.projectCheckBox.setEnabled(projectOpen and not isFileTask) + + def isManualTaskMode(self): + """ + Public method to check, if the dialog is in manual task mode. + + @return flag indicating manual task mode + @rtype bool + """ + return not self.__isFileTaskMode + + def setSubTaskMode(self, projectTask): + """ + Public slot to set the sub-task mode. + + @param projectTask flag indicating a project related task (boolean) + """ + self.projectCheckBox.setChecked(projectTask) + self.projectCheckBox.setEnabled(False) + + def getData(self): + """ + Public method to retrieve the dialogs data. + + @return tuple of description, priority, type, completion flag, + project flag and long text + @rtype tuple of (str, TaskPriority, TaskType, bool, bool, str) + """ + return (self.summaryEdit.text(), + TaskPriority(self.priorityCombo.currentIndex()), + TaskType(self.typeCombo.currentData()), + self.completedCheckBox.isChecked(), + self.projectCheckBox.isChecked(), + self.descriptionEdit.toPlainText())