diff -r fb0ef164f536 -r 698ae46f40a4 eric6/Graphics/UMLDialog.py --- a/eric6/Graphics/UMLDialog.py Fri Apr 02 11:59:41 2021 +0200 +++ b/eric6/Graphics/UMLDialog.py Sat May 01 14:27:20 2021 +0200 @@ -21,6 +21,7 @@ """ Class implementing a dialog showing UML like diagrams. """ + # convert to Enum NoDiagram = 255 ClassDiagram = 0 PackageDiagram = 1 @@ -43,11 +44,17 @@ builder (boolean) @keyparam kwargs diagram specific data """ - super(UMLDialog, self).__init__(parent) + super().__init__(parent) self.setObjectName("UMLDialog") + self.__project = project self.__diagramType = diagramType - self.__project = project + self.__diagramTypeString = { + UMLDialog.ClassDiagram: "Class Diagram", + UMLDialog.PackageDiagram: "Package Diagram", + UMLDialog.ImportsDiagram: "Imports Diagram", + UMLDialog.ApplicationDiagram: "Application Diagram", + }.get(diagramType, "Illegal Diagram Type") from .UMLGraphicsView import UMLGraphicsView self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) @@ -66,7 +73,7 @@ self.umlView.relayout.connect(self.__relayout) - self.setWindowTitle(self.__diagramTypeString()) + self.setWindowTitle(self.__diagramTypeString) def __initActions(self): """ @@ -142,7 +149,7 @@ """ if not fromFile and self.builder: self.builder.buildDiagram() - super(UMLDialog, self).show() + super().show() def __relayout(self): """ @@ -163,6 +170,14 @@ @return reference to the instantiated diagram builder @exception ValueError raised to indicate an illegal diagram type """ + if diagramType not in ( + UMLDialog.ClassDiagram, UMLDialog.PackageDiagram, + UMLDialog.ImportsDiagram, UMLDialog.ApplicationDiagram, + UMLDialog.NoDiagram + ): + raise ValueError(self.tr( + "Illegal diagram type '{0}' given.").format(diagramType)) + if diagramType == UMLDialog.ClassDiagram: from .UMLClassDiagramBuilder import UMLClassDiagramBuilder return UMLClassDiagramBuilder( @@ -179,28 +194,8 @@ from .ApplicationDiagramBuilder import ApplicationDiagramBuilder return ApplicationDiagramBuilder( self, self.umlView, self.__project, **kwargs) - elif diagramType == UMLDialog.NoDiagram: + else: return None - else: - raise ValueError(self.tr( - "Illegal diagram type '{0}' given.").format(diagramType)) - - def __diagramTypeString(self): - """ - Private method to generate a readable string for the diagram type. - - @return readable type string (string) - """ - if self.__diagramType == UMLDialog.ClassDiagram: - return "Class Diagram" - elif self.__diagramType == UMLDialog.PackageDiagram: - return "Package Diagram" - elif self.__diagramType == UMLDialog.ImportsDiagram: - return "Imports Diagram" - elif self.__diagramType == UMLDialog.ApplicationDiagram: - return "Application Diagram" - else: - return "Illegal Diagram Type" def __save(self): """ @@ -208,6 +203,7 @@ """ self.__saveAs(self.__fileName) + # TODO: change this to save file in JSON format @pyqtSlot() def __saveAs(self, filename=""): """ @@ -244,7 +240,7 @@ lines = [ "version: 1.0", "diagram_type: {0} ({1})".format( - self.__diagramType, self.__diagramTypeString()), + self.__diagramType, self.__diagramTypeString), "scene_size: {0};{1}".format(self.scene.width(), self.scene.height()), ] @@ -267,6 +263,8 @@ self.__fileName = filename + # TODO: add loading of file in JSON format + # TODO: delete the current one with eric7 def load(self): """ Public method to load a diagram from a file. @@ -319,7 +317,10 @@ self.__showInvalidDataMessage(filename, linenum) return False try: - self.__diagramType = int(value.strip().split(None, 1)[0]) + diagramType, diagramTypeString = value.strip().split(None, 1) + self.__diagramType = int(self.__diagramType) + self.__diagramTypeString = diagramTypeString[1:-1] + # remove opening an closing bracket except ValueError: self.__showInvalidDataMessage(filename, linenum) return False @@ -362,7 +363,7 @@ # everything worked fine, so remember the file name and set the # window title - self.setWindowTitle(self.__diagramTypeString()) + self.setWindowTitle(self.__diagramTypeString) self.__fileName = filename return True @@ -374,11 +375,12 @@ @param filename name of the file containing the invalid data (string) @param linenum number of the invalid line (integer) """ - if linenum < 0: - msg = self.tr("""<p>The file <b>{0}</b> does not contain""" - """ valid data.</p>""").format(filename) - else: - msg = self.tr("""<p>The file <b>{0}</b> does not contain""" - """ valid data.</p><p>Invalid line: {1}</p>""" - ).format(filename, linenum + 1) + msg = ( + self.tr("""<p>The file <b>{0}</b> does not contain""" + """ valid data.</p>""").format(filename) + if linenum < 0 else + self.tr("""<p>The file <b>{0}</b> does not contain""" + """ valid data.</p><p>Invalid line: {1}</p>""" + ).format(filename, linenum + 1) + ) E5MessageBox.critical(self, self.tr("Load Diagram"), msg)