Graphics/PackageDiagram.py

changeset 945
8cd4d08fa9f6
parent 791
9ec2ac20e54e
child 1112
8a7d1b9d18db
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
21 21
22 import Utilities.ModuleParser 22 import Utilities.ModuleParser
23 import Utilities 23 import Utilities
24 import Preferences 24 import Preferences
25 25
26
26 class PackageDiagram(UMLDialog): 27 class PackageDiagram(UMLDialog):
27 """ 28 """
28 Class implementing a dialog showing a UML like class diagram of a package. 29 Class implementing a dialog showing a UML like class diagram of a package.
29 """ 30 """
30 def __init__(self, package, parent = None, name = None, noAttrs = False): 31 def __init__(self, package, parent=None, name=None, noAttrs=False):
31 """ 32 """
32 Constructor 33 Constructor
33 34
34 @param package name of a python package to be shown (string) 35 @param package name of a python package to be shown (string)
35 @param parent parent widget of the view (QWidget) 36 @param parent parent widget of the view (QWidget)
82 QApplication.processEvents() 83 QApplication.processEvents()
83 for module in modules: 84 for module in modules:
84 progress.setValue(prog) 85 progress.setValue(prog)
85 QApplication.processEvents() 86 QApplication.processEvents()
86 prog += 1 87 prog += 1
87 try: 88 try:
88 mod = Utilities.ModuleParser.readModule(module) 89 mod = Utilities.ModuleParser.readModule(module)
89 except ImportError: 90 except ImportError:
90 continue 91 continue
91 else: 92 else:
92 name = mod.name 93 name = mod.name
158 if className not in nodes: 159 if className not in nodes:
159 nodes.append(className) 160 nodes.append(className)
160 else: 161 else:
161 if className in module.classes: 162 if className in module.classes:
162 # this is a local class (defined in this module) 163 # this is a local class (defined in this module)
163 self.__addLocalClass(className, module.classes[className], 164 self.__addLocalClass(className, module.classes[className],
164 0, 0) 165 0, 0)
165 elif className in module.modules: 166 elif className in module.modules:
166 # this is a local module (defined in this module) 167 # this is a local module (defined in this module)
167 self.__addLocalClass(className, module.modules[className], 168 self.__addLocalClass(className, module.modules[className],
168 0, 0, True) 169 0, 0, True)
169 else: 170 else:
170 self.__addExternalClass(className, 0, 0) 171 self.__addExternalClass(className, 0, 0)
171 nodes.append(className) 172 nodes.append(className)
172 173
180 del todo[0] 181 del todo[0]
181 182
182 self.__arrangeClasses(nodes, routes[:]) 183 self.__arrangeClasses(nodes, routes[:])
183 self.__createAssociations(routes) 184 self.__createAssociations(routes)
184 185
185 def __arrangeClasses(self, nodes, routes, whiteSpaceFactor = 1.2): 186 def __arrangeClasses(self, nodes, routes, whiteSpaceFactor=1.2):
186 """ 187 """
187 Private method to arrange the shapes on the canvas. 188 Private method to arrange the shapes on the canvas.
188 189
189 The algorithm is borrowed from Boa Constructor. 190 The algorithm is borrowed from Boa Constructor.
190 """ 191 """
246 cw.setPos(x, y) 247 cw.setPos(x, y)
247 rect = cw.sceneBoundingRect() 248 rect = cw.sceneBoundingRect()
248 x = x + rect.width() + whiteSpace 249 x = x + rect.width() + whiteSpace
249 y = y + currentHeight + verticalWhiteSpace 250 y = y + currentHeight + verticalWhiteSpace
250 251
251 def __addLocalClass(self, className, _class, x, y, isRbModule = False): 252 def __addLocalClass(self, className, _class, x, y, isRbModule=False):
252 """ 253 """
253 Private method to add a class defined in the module. 254 Private method to add a class defined in the module.
254 255
255 @param className name of the class to be as a dictionary key (string) 256 @param className name of the class to be as a dictionary key (string)
256 @param _class class to be shown (ModuleParser.Class) 257 @param _class class to be shown (ModuleParser.Class)
262 attrs = sorted(_class.attributes.keys()) 263 attrs = sorted(_class.attributes.keys())
263 name = _class.name 264 name = _class.name
264 if isRbModule: 265 if isRbModule:
265 name = "{0} (Module)".format(name) 266 name = "{0} (Module)".format(name)
266 cl = ClassModel(name, meths[:], attrs[:]) 267 cl = ClassModel(name, meths[:], attrs[:])
267 cw = ClassItem(cl, False, x, y, noAttrs = self.noAttrs, scene = self.scene) 268 cw = ClassItem(cl, False, x, y, noAttrs=self.noAttrs, scene=self.scene)
268 self.allClasses[className] = cw 269 self.allClasses[className] = cw
269 270
270 def __addExternalClass(self, _class, x, y): 271 def __addExternalClass(self, _class, x, y):
271 """ 272 """
272 Private method to add a class defined outside the module. 273 Private method to add a class defined outside the module.
277 @param _class class to be shown (string) 278 @param _class class to be shown (string)
278 @param x x-coordinate (float) 279 @param x x-coordinate (float)
279 @param y y-coordinate (float) 280 @param y y-coordinate (float)
280 """ 281 """
281 cl = ClassModel(_class) 282 cl = ClassModel(_class)
282 cw = ClassItem(cl, True, x, y, noAttrs = self.noAttrs, scene = self.scene) 283 cw = ClassItem(cl, True, x, y, noAttrs=self.noAttrs, scene=self.scene)
283 self.allClasses[_class] = cw 284 self.allClasses[_class] = cw
284 285
285 def __createAssociations(self, routes): 286 def __createAssociations(self, routes):
286 """ 287 """
287 Private method to generate the associations between the class shapes. 288 Private method to generate the associations between the class shapes.

eric ide

mercurial