220 self.tr("The directory <b>'{0}'</b> is not a package.") |
220 self.tr("The directory <b>'{0}'</b> is not a package.") |
221 .format(self.package)) |
221 .format(self.package)) |
222 return |
222 return |
223 |
223 |
224 modules = self.__buildModulesDict() |
224 modules = self.__buildModulesDict() |
225 if not modules: |
225 subpackages = self.__buildSubpackagesDict() |
|
226 |
|
227 if not modules and not subpackages: |
226 ct = QGraphicsTextItem(None) |
228 ct = QGraphicsTextItem(None) |
227 self.scene.addItem(ct) |
229 self.scene.addItem(ct) |
228 ct.setHtml( |
230 ct.setHtml(self.buildErrorMessage( |
229 self.tr( |
231 self.tr("The package <b>'{0}'</b> does not contain any modules" |
230 "The package <b>'{0}'</b> does not contain any modules.") |
232 " or subpackages.").format(self.package) |
231 .format(self.package)) |
233 )) |
232 return |
234 return |
233 |
235 |
234 # step 1: build all classes found in the modules |
236 # step 1: build all classes found in the modules |
235 classesFound = False |
237 classesFound = False |
236 |
238 |
237 for modName in list(modules.keys()): |
239 for modName in list(modules.keys()): |
238 module = modules[modName] |
240 module = modules[modName] |
239 for cls in list(module.classes.keys()): |
241 for cls in list(module.classes.keys()): |
240 classesFound = True |
242 classesFound = True |
241 self.__addLocalClass(cls, module.classes[cls], 0, 0) |
243 self.__addLocalClass(cls, module.classes[cls], 0, 0) |
242 if not classesFound: |
244 if not classesFound and not subpackages: |
243 ct = QGraphicsTextItem(None) |
245 ct = QGraphicsTextItem(None) |
244 self.scene.addItem(ct) |
246 self.scene.addItem(ct) |
245 ct.setHtml( |
247 ct.setHtml(self.buildErrorMessage( |
246 self.tr( |
248 self.tr("The package <b>'{0}'</b> does not contain any" |
247 "The package <b>'{0}'</b> does not contain any classes.") |
249 " classes or subpackages.").format(self.package) |
248 .format(self.package)) |
250 )) |
249 return |
251 return |
250 |
252 |
251 # step 2: build the class hierarchies |
253 # step 2: build the class hierarchies |
252 routes = [] |
254 routes = [] |
253 nodes = [] |
255 nodes = [] |
294 routes.append((className, child)) |
296 routes.append((className, child)) |
295 |
297 |
296 del todo[0] |
298 del todo[0] |
297 |
299 |
298 # step 3: build the subpackages |
300 # step 3: build the subpackages |
299 subpackages = self.__buildSubpackagesDict() |
|
300 for subpackage in sorted(subpackages.keys()): |
301 for subpackage in sorted(subpackages.keys()): |
301 self.__addPackage(subpackage, subpackages[subpackage], 0, 0) |
302 self.__addPackage(subpackage, subpackages[subpackage], 0, 0) |
302 nodes.append(subpackage) |
303 nodes.append(subpackage) |
303 |
304 |
304 self.__arrangeClasses(nodes, routes[:]) |
305 self.__arrangeClasses(nodes, routes[:]) |
526 if self.__relPackage else |
527 if self.__relPackage else |
527 Utilities.fromNativeSeparators(self.package) |
528 Utilities.fromNativeSeparators(self.package) |
528 ) |
529 ) |
529 |
530 |
530 return data |
531 return data |
|
532 |
|
533 def fromDict(self, version, data): |
|
534 """ |
|
535 Public method to populate the class with data persisted by 'toDict()'. |
|
536 |
|
537 @param version version of the data |
|
538 @type str |
|
539 @param data dictionary containing the persisted data |
|
540 @type dict |
|
541 @return tuple containing a flag indicating success and an info |
|
542 message in case the diagram belongs to a different project |
|
543 @rtype tuple of (bool, str) |
|
544 """ |
|
545 try: |
|
546 self.noAttrs = data["no_attributes"] |
|
547 |
|
548 package = Utilities.toNativeSeparators(data["package"]) |
|
549 if os.path.isabs(package): |
|
550 self.package = package |
|
551 self.__relPackage = "" |
|
552 else: |
|
553 # relative package paths indicate a project package |
|
554 if data["project_name"] != self.project.getProjectName(): |
|
555 msg = self.tr( |
|
556 "<p>The diagram belongs to project <b>{0}</b>." |
|
557 " Please open it and try again.</p>" |
|
558 ).format(data["project_name"]) |
|
559 return False, msg |
|
560 |
|
561 self.__relPackage = package |
|
562 self.package = self.project.getAbsolutePath(package) |
|
563 except KeyError: |
|
564 return False, "" |
|
565 |
|
566 self.initialize() |
|
567 |
|
568 return True, "" |