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): |