29 ImportsDiagram = 2 |
29 ImportsDiagram = 2 |
30 ApplicationDiagram = 3 |
30 ApplicationDiagram = 3 |
31 |
31 |
32 FileVersions = ["1.0"] |
32 FileVersions = ["1.0"] |
33 |
33 |
34 def __init__(self, diagramType, project, path="", parent=None, initBuilder=True, |
34 def __init__(self, diagramType, project, path="", parent=None, |
35 **kwargs): |
35 initBuilder=True, **kwargs): |
36 """ |
36 """ |
37 Constructor |
37 Constructor |
38 |
38 |
39 @param diagramType type of the diagram (one of ApplicationDiagram, ClassDiagram, |
39 @param diagramType type of the diagram (one of ApplicationDiagram, |
40 ImportsDiagram, NoDiagram, PackageDiagram) |
40 ClassDiagram, ImportsDiagram, NoDiagram, PackageDiagram) |
41 @param project reference to the project object (Project) |
41 @param project reference to the project object (Project) |
42 @param path file or directory path to build the diagram from (string) |
42 @param path file or directory path to build the diagram from (string) |
43 @param parent parent widget of the dialog (QWidget) |
43 @param parent parent widget of the dialog (QWidget) |
44 @keyparam initBuilder flag indicating to initialize the diagram builder (boolean) |
44 @keyparam initBuilder flag indicating to initialize the diagram |
45 @param kwargs diagram specific data |
45 builder (boolean) |
|
46 @keyparam kwargs diagram specific data |
46 """ |
47 """ |
47 super(UMLDialog, self).__init__(parent) |
48 super(UMLDialog, self).__init__(parent) |
48 self.setObjectName("UMLDialog") |
49 self.setObjectName("UMLDialog") |
49 |
50 |
50 self.__diagramType = diagramType |
51 self.__diagramType = diagramType |
51 self.__project = project |
52 self.__project = project |
52 |
53 |
53 from .UMLGraphicsView import UMLGraphicsView |
54 from .UMLGraphicsView import UMLGraphicsView |
54 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) |
55 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) |
55 self.umlView = UMLGraphicsView(self.scene, parent=self) |
56 self.umlView = UMLGraphicsView(self.scene, parent=self) |
56 self.builder = self.__diagramBuilder(self.__diagramType, path, **kwargs) |
57 self.builder = self.__diagramBuilder( |
|
58 self.__diagramType, path, **kwargs) |
57 if self.builder and initBuilder: |
59 if self.builder and initBuilder: |
58 self.builder.initialize() |
60 self.builder.initialize() |
59 |
61 |
60 self.__fileName = "" |
62 self.__fileName = "" |
61 |
63 |
103 self.printAct.triggered[()].connect(self.umlView.printDiagram) |
105 self.printAct.triggered[()].connect(self.umlView.printDiagram) |
104 |
106 |
105 self.printPreviewAct = \ |
107 self.printPreviewAct = \ |
106 QAction(UI.PixmapCache.getIcon("printPreview.png"), |
108 QAction(UI.PixmapCache.getIcon("printPreview.png"), |
107 self.trUtf8("Print Preview"), self) |
109 self.trUtf8("Print Preview"), self) |
108 self.printPreviewAct.triggered[()].connect(self.umlView.printPreviewDiagram) |
110 self.printPreviewAct.triggered[()].connect( |
|
111 self.umlView.printPreviewDiagram) |
109 |
112 |
110 def __initToolBars(self): |
113 def __initToolBars(self): |
111 """ |
114 """ |
112 Private slot to initialize the toolbars. |
115 Private slot to initialize the toolbars. |
113 """ |
116 """ |
153 def __diagramBuilder(self, diagramType, path, **kwargs): |
156 def __diagramBuilder(self, diagramType, path, **kwargs): |
154 """ |
157 """ |
155 Private method to instantiate a diagram builder object. |
158 Private method to instantiate a diagram builder object. |
156 |
159 |
157 @param diagramType type of the diagram |
160 @param diagramType type of the diagram |
158 (one of ApplicationDiagram, ClassDiagram, ImportsDiagram, PackageDiagram) |
161 (one of ApplicationDiagram, ClassDiagram, ImportsDiagram, |
|
162 PackageDiagram) |
159 @param path file or directory path to build the diagram from (string) |
163 @param path file or directory path to build the diagram from (string) |
160 @param kwargs diagram specific data |
164 @keyparam kwargs diagram specific data |
|
165 @return reference to the instantiated diagram builder |
|
166 @exception ValueError raised to indicate an illegal diagram type |
161 """ |
167 """ |
162 if diagramType == UMLDialog.ClassDiagram: |
168 if diagramType == UMLDialog.ClassDiagram: |
163 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder |
169 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder |
164 return UMLClassDiagramBuilder(self, self.umlView, self.__project, path, |
170 return UMLClassDiagramBuilder( |
165 **kwargs) |
171 self, self.umlView, self.__project, path, **kwargs) |
166 elif diagramType == UMLDialog.PackageDiagram: |
172 elif diagramType == UMLDialog.PackageDiagram: |
167 from .PackageDiagramBuilder import PackageDiagramBuilder |
173 from .PackageDiagramBuilder import PackageDiagramBuilder |
168 return PackageDiagramBuilder(self, self.umlView, self.__project, path, |
174 return PackageDiagramBuilder( |
169 **kwargs) |
175 self, self.umlView, self.__project, path, **kwargs) |
170 elif diagramType == UMLDialog.ImportsDiagram: |
176 elif diagramType == UMLDialog.ImportsDiagram: |
171 from .ImportsDiagramBuilder import ImportsDiagramBuilder |
177 from .ImportsDiagramBuilder import ImportsDiagramBuilder |
172 return ImportsDiagramBuilder(self, self.umlView, self.__project, path, |
178 return ImportsDiagramBuilder( |
173 **kwargs) |
179 self, self.umlView, self.__project, path, **kwargs) |
174 elif diagramType == UMLDialog.ApplicationDiagram: |
180 elif diagramType == UMLDialog.ApplicationDiagram: |
175 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder |
181 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder |
176 return ApplicationDiagramBuilder(self, self.umlView, self.__project, |
182 return ApplicationDiagramBuilder( |
177 **kwargs) |
183 self, self.umlView, self.__project, **kwargs) |
178 elif diagramType == UMLDialog.NoDiagram: |
184 elif diagramType == UMLDialog.NoDiagram: |
179 return None |
185 return None |
180 else: |
186 else: |
181 raise ValueError( |
187 raise ValueError(self.trUtf8( |
182 self.trUtf8("Illegal diagram type '{0}' given.").format(diagramType)) |
188 "Illegal diagram type '{0}' given.").format(diagramType)) |
183 |
189 |
184 def __diagramTypeString(self): |
190 def __diagramTypeString(self): |
185 """ |
191 """ |
186 Private method to generate a readable string for the diagram type. |
192 Private method to generate a readable string for the diagram type. |
187 |
193 |
237 |
243 |
238 lines = [ |
244 lines = [ |
239 "version: 1.0", |
245 "version: 1.0", |
240 "diagram_type: {0} ({1})".format(self.__diagramType, |
246 "diagram_type: {0} ({1})".format(self.__diagramType, |
241 self.__diagramTypeString()), |
247 self.__diagramTypeString()), |
242 "scene_size: {0};{1}".format(self.scene.width(), self.scene.height()), |
248 "scene_size: {0};{1}".format(self.scene.width(), |
|
249 self.scene.height()), |
243 ] |
250 ] |
244 persistenceData = self.builder.getPersistenceData() |
251 persistenceData = self.builder.getPersistenceData() |
245 if persistenceData: |
252 if persistenceData: |
246 lines.append("builder_data: {0}".format(persistenceData)) |
253 lines.append("builder_data: {0}".format(persistenceData)) |
247 lines.extend(self.umlView.getPersistenceData()) |
254 lines.extend(self.umlView.getPersistenceData()) |
251 f.write("\n".join(lines)) |
258 f.write("\n".join(lines)) |
252 f.close() |
259 f.close() |
253 except (IOError, OSError) as err: |
260 except (IOError, OSError) as err: |
254 E5MessageBox.critical(self, |
261 E5MessageBox.critical(self, |
255 self.trUtf8("Save Diagram"), |
262 self.trUtf8("Save Diagram"), |
256 self.trUtf8("""<p>The file <b>{0}</b> could not be saved.</p>""" |
263 self.trUtf8( |
257 """<p>Reason: {1}</p>""").format(filename, str(err))) |
264 """<p>The file <b>{0}</b> could not be saved.</p>""" |
|
265 """<p>Reason: {1}</p>""").format(filename, str(err))) |
258 return |
266 return |
259 |
267 |
260 self.__fileName = filename |
268 self.__fileName = filename |
261 |
269 |
262 def load(self): |
270 def load(self): |
279 data = f.read() |
287 data = f.read() |
280 f.close() |
288 f.close() |
281 except (IOError, OSError) as err: |
289 except (IOError, OSError) as err: |
282 E5MessageBox.critical(self, |
290 E5MessageBox.critical(self, |
283 self.trUtf8("Load Diagram"), |
291 self.trUtf8("Load Diagram"), |
284 self.trUtf8("""<p>The file <b>{0}</b> could not be read.</p>""" |
292 self.trUtf8( |
285 """<p>Reason: {1}</p>""").format(filename, str(err))) |
293 """<p>The file <b>{0}</b> could not be read.</p>""" |
|
294 """<p>Reason: {1}</p>""").format(filename, str(err))) |
286 return False |
295 return False |
287 |
296 |
288 lines = data.splitlines() |
297 lines = data.splitlines() |
289 if len(lines) < 3: |
298 if len(lines) < 3: |
290 self.__showInvalidDataMessage(filename) |
299 self.__showInvalidDataMessage(filename) |