eric6/Graphics/UMLDialog.py

changeset 8270
6ba3564b7161
parent 8269
87f521f359d5
child 8273
698ae46f40a4
child 8276
1436fd09d1e1
equal deleted inserted replaced
8269:87f521f359d5 8270:6ba3564b7161
45 @keyparam kwargs diagram specific data 45 @keyparam kwargs diagram specific data
46 """ 46 """
47 super().__init__(parent) 47 super().__init__(parent)
48 self.setObjectName("UMLDialog") 48 self.setObjectName("UMLDialog")
49 49
50 self.__project = project
50 self.__diagramType = diagramType 51 self.__diagramType = diagramType
51 self.__project = project 52 self.__diagramTypeString = {
53 UMLDialog.ClassDiagram: "Class Diagram",
54 UMLDialog.PackageDiagram: "Package Diagram",
55 UMLDialog.ImportsDiagram: "Imports Diagram",
56 UMLDialog.ApplicationDiagram: "Application Diagram",
57 }.get(diagramType, "Illegal Diagram Type")
52 58
53 from .UMLGraphicsView import UMLGraphicsView 59 from .UMLGraphicsView import UMLGraphicsView
54 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) 60 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0)
55 self.umlView = UMLGraphicsView(self.scene, parent=self) 61 self.umlView = UMLGraphicsView(self.scene, parent=self)
56 self.builder = self.__diagramBuilder( 62 self.builder = self.__diagramBuilder(
65 71
66 self.setCentralWidget(self.umlView) 72 self.setCentralWidget(self.umlView)
67 73
68 self.umlView.relayout.connect(self.__relayout) 74 self.umlView.relayout.connect(self.__relayout)
69 75
70 self.setWindowTitle(self.__diagramTypeString()) 76 self.setWindowTitle(self.__diagramTypeString)
71 77
72 def __initActions(self): 78 def __initActions(self):
73 """ 79 """
74 Private slot to initialize the actions. 80 Private slot to initialize the actions.
75 """ 81 """
189 return ApplicationDiagramBuilder( 195 return ApplicationDiagramBuilder(
190 self, self.umlView, self.__project, **kwargs) 196 self, self.umlView, self.__project, **kwargs)
191 else: 197 else:
192 return None 198 return None
193 199
194 def __diagramTypeString(self):
195 """
196 Private method to generate a readable string for the diagram type.
197
198 @return readable type string (string)
199 """
200 if self.__diagramType == UMLDialog.ClassDiagram:
201 return "Class Diagram"
202 elif self.__diagramType == UMLDialog.PackageDiagram:
203 return "Package Diagram"
204 elif self.__diagramType == UMLDialog.ImportsDiagram:
205 return "Imports Diagram"
206 elif self.__diagramType == UMLDialog.ApplicationDiagram:
207 return "Application Diagram"
208 else:
209 return "Illegal Diagram Type"
210
211 def __save(self): 200 def __save(self):
212 """ 201 """
213 Private slot to save the diagram with the current name. 202 Private slot to save the diagram with the current name.
214 """ 203 """
215 self.__saveAs(self.__fileName) 204 self.__saveAs(self.__fileName)
216 205
206 # TODO: change this to save file in JSON format
217 @pyqtSlot() 207 @pyqtSlot()
218 def __saveAs(self, filename=""): 208 def __saveAs(self, filename=""):
219 """ 209 """
220 Private slot to save the diagram. 210 Private slot to save the diagram.
221 211
248 filename = fname 238 filename = fname
249 239
250 lines = [ 240 lines = [
251 "version: 1.0", 241 "version: 1.0",
252 "diagram_type: {0} ({1})".format( 242 "diagram_type: {0} ({1})".format(
253 self.__diagramType, self.__diagramTypeString()), 243 self.__diagramType, self.__diagramTypeString),
254 "scene_size: {0};{1}".format(self.scene.width(), 244 "scene_size: {0};{1}".format(self.scene.width(),
255 self.scene.height()), 245 self.scene.height()),
256 ] 246 ]
257 persistenceData = self.builder.getPersistenceData() 247 persistenceData = self.builder.getPersistenceData()
258 if persistenceData: 248 if persistenceData:
271 """<p>Reason: {1}</p>""").format(filename, str(err))) 261 """<p>Reason: {1}</p>""").format(filename, str(err)))
272 return 262 return
273 263
274 self.__fileName = filename 264 self.__fileName = filename
275 265
266 # TODO: add loading of file in JSON format
267 # TODO: delete the current one with eric7
276 def load(self): 268 def load(self):
277 """ 269 """
278 Public method to load a diagram from a file. 270 Public method to load a diagram from a file.
279 271
280 @return flag indicating success (boolean) 272 @return flag indicating success (boolean)
323 key, value = lines[linenum].split(": ", 1) 315 key, value = lines[linenum].split(": ", 1)
324 if key.strip() != "diagram_type": 316 if key.strip() != "diagram_type":
325 self.__showInvalidDataMessage(filename, linenum) 317 self.__showInvalidDataMessage(filename, linenum)
326 return False 318 return False
327 try: 319 try:
328 self.__diagramType = int(value.strip().split(None, 1)[0]) 320 diagramType, diagramTypeString = value.strip().split(None, 1)
321 self.__diagramType = int(self.__diagramType)
322 self.__diagramTypeString = diagramTypeString[1:-1]
323 # remove opening an closing bracket
329 except ValueError: 324 except ValueError:
330 self.__showInvalidDataMessage(filename, linenum) 325 self.__showInvalidDataMessage(filename, linenum)
331 return False 326 return False
332 self.scene.clear() 327 self.scene.clear()
333 self.builder = self.__diagramBuilder(self.__diagramType, "") 328 self.builder = self.__diagramBuilder(self.__diagramType, "")
366 self.__showInvalidDataMessage(filename) 361 self.__showInvalidDataMessage(filename)
367 return False 362 return False
368 363
369 # everything worked fine, so remember the file name and set the 364 # everything worked fine, so remember the file name and set the
370 # window title 365 # window title
371 self.setWindowTitle(self.__diagramTypeString()) 366 self.setWindowTitle(self.__diagramTypeString)
372 self.__fileName = filename 367 self.__fileName = filename
373 368
374 return True 369 return True
375 370
376 def __showInvalidDataMessage(self, filename, linenum=-1): 371 def __showInvalidDataMessage(self, filename, linenum=-1):

eric ide

mercurial