--- a/eric6/Graphics/PackageDiagramBuilder.py Thu May 06 19:46:00 2021 +0200 +++ b/eric6/Graphics/PackageDiagramBuilder.py Sat May 08 18:34:08 2021 +0200 @@ -222,13 +222,15 @@ return modules = self.__buildModulesDict() - if not modules: + subpackages = self.__buildSubpackagesDict() + + if not modules and not subpackages: ct = QGraphicsTextItem(None) self.scene.addItem(ct) - ct.setHtml( - self.tr( - "The package <b>'{0}'</b> does not contain any modules.") - .format(self.package)) + ct.setHtml(self.buildErrorMessage( + self.tr("The package <b>'{0}'</b> does not contain any modules" + " or subpackages.").format(self.package) + )) return # step 1: build all classes found in the modules @@ -239,13 +241,13 @@ for cls in list(module.classes.keys()): classesFound = True self.__addLocalClass(cls, module.classes[cls], 0, 0) - if not classesFound: + if not classesFound and not subpackages: ct = QGraphicsTextItem(None) self.scene.addItem(ct) - ct.setHtml( - self.tr( - "The package <b>'{0}'</b> does not contain any classes.") - .format(self.package)) + ct.setHtml(self.buildErrorMessage( + self.tr("The package <b>'{0}'</b> does not contain any" + " classes or subpackages.").format(self.package) + )) return # step 2: build the class hierarchies @@ -296,7 +298,6 @@ del todo[0] # step 3: build the subpackages - subpackages = self.__buildSubpackagesDict() for subpackage in sorted(subpackages.keys()): self.__addPackage(subpackage, subpackages[subpackage], 0, 0) nodes.append(subpackage) @@ -528,3 +529,40 @@ ) return data + + def fromDict(self, version, data): + """ + Public method to populate the class with data persisted by 'toDict()'. + + @param version version of the data + @type str + @param data dictionary containing the persisted data + @type dict + @return tuple containing a flag indicating success and an info + message in case the diagram belongs to a different project + @rtype tuple of (bool, str) + """ + try: + self.noAttrs = data["no_attributes"] + + package = Utilities.toNativeSeparators(data["package"]) + if os.path.isabs(package): + self.package = package + self.__relPackage = "" + else: + # relative package paths indicate a project package + if data["project_name"] != self.project.getProjectName(): + msg = self.tr( + "<p>The diagram belongs to project <b>{0}</b>." + " Please open it and try again.</p>" + ).format(data["project_name"]) + return False, msg + + self.__relPackage = package + self.package = self.project.getAbsolutePath(package) + except KeyError: + return False, "" + + self.initialize() + + return True, ""