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