Graphics/UMLDialog.py

changeset 2992
dbdf27746da5
parent 2953
703452a2876f
child 2997
7f0ef975da9e
equal deleted inserted replaced
2991:226481ff40d1 2992:dbdf27746da5
50 self.__project = project 50 self.__project = project
51 51
52 from .UMLGraphicsView import UMLGraphicsView 52 from .UMLGraphicsView import UMLGraphicsView
53 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) 53 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0)
54 self.umlView = UMLGraphicsView(self.scene, parent=self) 54 self.umlView = UMLGraphicsView(self.scene, parent=self)
55 self.builder = self.__diagramBuilder(self.__diagramType, path, **kwargs) 55 self.builder = self.__diagramBuilder(
56 self.__diagramType, path, **kwargs)
56 if self.builder and initBuilder: 57 if self.builder and initBuilder:
57 self.builder.initialize() 58 self.builder.initialize()
58 59
59 self.__fileName = "" 60 self.__fileName = ""
60 61
102 self.printAct.triggered[()].connect(self.umlView.printDiagram) 103 self.printAct.triggered[()].connect(self.umlView.printDiagram)
103 104
104 self.printPreviewAct = \ 105 self.printPreviewAct = \
105 QAction(UI.PixmapCache.getIcon("printPreview.png"), 106 QAction(UI.PixmapCache.getIcon("printPreview.png"),
106 self.trUtf8("Print Preview"), self) 107 self.trUtf8("Print Preview"), self)
107 self.printPreviewAct.triggered[()].connect(self.umlView.printPreviewDiagram) 108 self.printPreviewAct.triggered[()].connect(
109 self.umlView.printPreviewDiagram)
108 110
109 def __initToolBars(self): 111 def __initToolBars(self):
110 """ 112 """
111 Private slot to initialize the toolbars. 113 Private slot to initialize the toolbars.
112 """ 114 """
152 def __diagramBuilder(self, diagramType, path, **kwargs): 154 def __diagramBuilder(self, diagramType, path, **kwargs):
153 """ 155 """
154 Private method to instantiate a diagram builder object. 156 Private method to instantiate a diagram builder object.
155 157
156 @param diagramType type of the diagram 158 @param diagramType type of the diagram
157 (one of ApplicationDiagram, ClassDiagram, ImportsDiagram, PackageDiagram) 159 (one of ApplicationDiagram, ClassDiagram, ImportsDiagram,
160 PackageDiagram)
158 @param path file or directory path to build the diagram from (string) 161 @param path file or directory path to build the diagram from (string)
159 @keyparam kwargs diagram specific data 162 @keyparam kwargs diagram specific data
160 @return reference to the instantiated diagram builder 163 @return reference to the instantiated diagram builder
161 @exception ValueError raised to indicate an illegal diagram type 164 @exception ValueError raised to indicate an illegal diagram type
162 """ 165 """
163 if diagramType == UMLDialog.ClassDiagram: 166 if diagramType == UMLDialog.ClassDiagram:
164 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder 167 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder
165 return UMLClassDiagramBuilder(self, self.umlView, self.__project, path, 168 return UMLClassDiagramBuilder(
166 **kwargs) 169 self, self.umlView, self.__project, path, **kwargs)
167 elif diagramType == UMLDialog.PackageDiagram: 170 elif diagramType == UMLDialog.PackageDiagram:
168 from .PackageDiagramBuilder import PackageDiagramBuilder 171 from .PackageDiagramBuilder import PackageDiagramBuilder
169 return PackageDiagramBuilder(self, self.umlView, self.__project, path, 172 return PackageDiagramBuilder(
170 **kwargs) 173 self, self.umlView, self.__project, path, **kwargs)
171 elif diagramType == UMLDialog.ImportsDiagram: 174 elif diagramType == UMLDialog.ImportsDiagram:
172 from .ImportsDiagramBuilder import ImportsDiagramBuilder 175 from .ImportsDiagramBuilder import ImportsDiagramBuilder
173 return ImportsDiagramBuilder(self, self.umlView, self.__project, path, 176 return ImportsDiagramBuilder(
174 **kwargs) 177 self, self.umlView, self.__project, path, **kwargs)
175 elif diagramType == UMLDialog.ApplicationDiagram: 178 elif diagramType == UMLDialog.ApplicationDiagram:
176 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder 179 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder
177 return ApplicationDiagramBuilder(self, self.umlView, self.__project, 180 return ApplicationDiagramBuilder(self, self.umlView, self.__project,
178 **kwargs) 181 **kwargs)
179 elif diagramType == UMLDialog.NoDiagram: 182 elif diagramType == UMLDialog.NoDiagram:
180 return None 183 return None
181 else: 184 else:
182 raise ValueError( 185 raise ValueError(self.trUtf8(
183 self.trUtf8("Illegal diagram type '{0}' given.").format(diagramType)) 186 "Illegal diagram type '{0}' given.").format(diagramType))
184 187
185 def __diagramTypeString(self): 188 def __diagramTypeString(self):
186 """ 189 """
187 Private method to generate a readable string for the diagram type. 190 Private method to generate a readable string for the diagram type.
188 191
238 241
239 lines = [ 242 lines = [
240 "version: 1.0", 243 "version: 1.0",
241 "diagram_type: {0} ({1})".format(self.__diagramType, 244 "diagram_type: {0} ({1})".format(self.__diagramType,
242 self.__diagramTypeString()), 245 self.__diagramTypeString()),
243 "scene_size: {0};{1}".format(self.scene.width(), self.scene.height()), 246 "scene_size: {0};{1}".format(self.scene.width(),
247 self.scene.height()),
244 ] 248 ]
245 persistenceData = self.builder.getPersistenceData() 249 persistenceData = self.builder.getPersistenceData()
246 if persistenceData: 250 if persistenceData:
247 lines.append("builder_data: {0}".format(persistenceData)) 251 lines.append("builder_data: {0}".format(persistenceData))
248 lines.extend(self.umlView.getPersistenceData()) 252 lines.extend(self.umlView.getPersistenceData())
252 f.write("\n".join(lines)) 256 f.write("\n".join(lines))
253 f.close() 257 f.close()
254 except (IOError, OSError) as err: 258 except (IOError, OSError) as err:
255 E5MessageBox.critical(self, 259 E5MessageBox.critical(self,
256 self.trUtf8("Save Diagram"), 260 self.trUtf8("Save Diagram"),
257 self.trUtf8("""<p>The file <b>{0}</b> could not be saved.</p>""" 261 self.trUtf8(
258 """<p>Reason: {1}</p>""").format(filename, str(err))) 262 """<p>The file <b>{0}</b> could not be saved.</p>"""
263 """<p>Reason: {1}</p>""").format(filename, str(err)))
259 return 264 return
260 265
261 self.__fileName = filename 266 self.__fileName = filename
262 267
263 def load(self): 268 def load(self):
280 data = f.read() 285 data = f.read()
281 f.close() 286 f.close()
282 except (IOError, OSError) as err: 287 except (IOError, OSError) as err:
283 E5MessageBox.critical(self, 288 E5MessageBox.critical(self,
284 self.trUtf8("Load Diagram"), 289 self.trUtf8("Load Diagram"),
285 self.trUtf8("""<p>The file <b>{0}</b> could not be read.</p>""" 290 self.trUtf8(
286 """<p>Reason: {1}</p>""").format(filename, str(err))) 291 """<p>The file <b>{0}</b> could not be read.</p>"""
292 """<p>Reason: {1}</p>""").format(filename, str(err)))
287 return False 293 return False
288 294
289 lines = data.splitlines() 295 lines = data.splitlines()
290 if len(lines) < 3: 296 if len(lines) < 3:
291 self.__showInvalidDataMessage(filename) 297 self.__showInvalidDataMessage(filename)
293 299
294 try: 300 try:
295 # step 1: check version 301 # step 1: check version
296 linenum = 0 302 linenum = 0
297 key, value = lines[linenum].split(": ", 1) 303 key, value = lines[linenum].split(": ", 1)
298 if key.strip() != "version" or value.strip() not in UMLDialog.FileVersions: 304 if key.strip() != "version" or \
305 value.strip() not in UMLDialog.FileVersions:
299 self.__showInvalidDataMessage(filename, linenum) 306 self.__showInvalidDataMessage(filename, linenum)
300 return False 307 return False
301 else: 308 else:
302 version = value 309 version = value
303 310
337 self.__showInvalidDataMessage(filename, linenum) 344 self.__showInvalidDataMessage(filename, linenum)
338 return False 345 return False
339 linenum += 1 346 linenum += 1
340 347
341 # step 5: extract the graphics items 348 # step 5: extract the graphics items
342 ok, vlinenum = self.umlView.parsePersistenceData(version, lines[linenum:]) 349 ok, vlinenum = self.umlView.parsePersistenceData(
350 version, lines[linenum:])
343 if not ok: 351 if not ok:
344 self.__showInvalidDataMessage(filename, linenum + vlinenum) 352 self.__showInvalidDataMessage(filename, linenum + vlinenum)
345 return False 353 return False
346 354
347 except IndexError: 355 except IndexError:

eric ide

mercurial