eric6/Graphics/PackageDiagramBuilder.py

changeset 8295
3f5e8b0a338e
parent 8291
3d79b1e5bf3c
child 8400
b3eefd7e58d1
--- 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, ""

eric ide

mercurial