src/eric7/Graphics/UMLDialog.py

branch
server
changeset 10631
00f5aae565a3
parent 10595
59579e8aff98
child 10633
dda7e43934dc
equal deleted inserted replaced
10630:552a790fd9bc 10631:00f5aae565a3
15 from PyQt6.QtGui import QAction 15 from PyQt6.QtGui import QAction
16 from PyQt6.QtWidgets import QGraphicsScene, QToolBar 16 from PyQt6.QtWidgets import QGraphicsScene, QToolBar
17 17
18 from eric7.EricGui import EricPixmapCache 18 from eric7.EricGui import EricPixmapCache
19 from eric7.EricWidgets import EricFileDialog, EricMessageBox 19 from eric7.EricWidgets import EricFileDialog, EricMessageBox
20 from eric7.EricWidgets.EricApplication import ericApp
20 from eric7.EricWidgets.EricMainWindow import EricMainWindow 21 from eric7.EricWidgets.EricMainWindow import EricMainWindow
22 from eric7.RemoteServerInterface import EricServerFileDialog
23 from eric7.SystemUtilities import FileSystemUtilities
21 24
22 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder 25 from .ApplicationDiagramBuilder import ApplicationDiagramBuilder
23 from .ImportsDiagramBuilder import ImportsDiagramBuilder 26 from .ImportsDiagramBuilder import ImportsDiagramBuilder
24 from .PackageDiagramBuilder import PackageDiagramBuilder 27 from .PackageDiagramBuilder import PackageDiagramBuilder
25 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder 28 from .UMLClassDiagramBuilder import UMLClassDiagramBuilder
84 super().__init__(parent) 87 super().__init__(parent)
85 self.setObjectName("UMLDialog") 88 self.setObjectName("UMLDialog")
86 89
87 self.__project = project 90 self.__project = project
88 self.__diagramType = diagramType 91 self.__diagramType = diagramType
92 self.__remotefsInterface = (
93 ericApp().getObject("EricServer").getServiceInterface("FileSystem")
94 )
89 95
90 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) 96 self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0)
91 self.umlView = UMLGraphicsView(self.scene, parent=self) 97 self.umlView = UMLGraphicsView(self.scene, parent=self)
92 self.builder = self.__diagramBuilder(self.__diagramType, path, **kwargs) 98 self.builder = self.__diagramBuilder(self.__diagramType, path, **kwargs)
93 if self.builder and initBuilder: 99 if self.builder and initBuilder:
241 247
242 @param filename name of the file to write to 248 @param filename name of the file to write to
243 @type str 249 @type str
244 """ 250 """
245 if not filename: 251 if not filename:
246 fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( 252 if FileSystemUtilities.isRemoteFileName(self.__project.getProjectPath()):
247 self, 253 fname, selectedFilter = EricServerFileDialog.getSaveFileNameAndFilter(
248 self.tr("Save Diagram"), 254 self,
249 "", 255 self.tr("Save Diagram"),
250 self.tr("Eric Graphics File (*.egj);;All Files (*)"), 256 self.__project.getProjectPath(),
251 "", 257 self.tr("Eric Graphics File (*.egj);;All Files (*)"),
252 EricFileDialog.DontConfirmOverwrite, 258 "",
253 ) 259 )
254 if not fname: 260 if not fname:
255 return 261 return
256 262
257 fpath = pathlib.Path(fname) 263 ext = self.__remotefsInterface.splitext(fname)[1]
258 if not fpath.suffix: 264 if not ext:
259 ex = selectedFilter.split("(*")[1].split(")")[0] 265 ex = selectedFilter.split("(*")[1].split(")")[0]
260 if ex: 266 if ex:
261 fpath = fpath.with_suffix(ex) 267 fname += ex
262 if fpath.exists(): 268 filename = fname
269 fileExists = self.__remotefsInterface.exists(filename)
270 else:
271 fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
272 self,
273 self.tr("Save Diagram"),
274 self.__project.getProjectPath(),
275 self.tr("Eric Graphics File (*.egj);;All Files (*)"),
276 "",
277 EricFileDialog.DontConfirmOverwrite,
278 )
279 if not fname:
280 return
281
282 fpath = pathlib.Path(fname)
283 if not fpath.suffix:
284 ex = selectedFilter.split("(*")[1].split(")")[0]
285 if ex:
286 fpath = fpath.with_suffix(ex)
287 fileExists = fpath.exists()
288 filename = str(fpath)
289
290 if fileExists:
263 res = EricMessageBox.yesNo( 291 res = EricMessageBox.yesNo(
264 self, 292 self,
265 self.tr("Save Diagram"), 293 self.tr("Save Diagram"),
266 self.tr( 294 self.tr(
267 "<p>The file <b>{0}</b> already exists. Overwrite it?</p>" 295 "<p>The file <b>{0}</b> exists already. Overwrite it?</p>"
268 ).format(fpath), 296 ).format(filename),
269 icon=EricMessageBox.Warning, 297 icon=EricMessageBox.Warning,
270 ) 298 )
271 if not res: 299 if not res:
272 return 300 return
273 filename = str(fpath) 301 ##filename = str(fpath)
274 302
275 res = self.__writeJsonGraphicsFile(filename) 303 res = self.__writeJsonGraphicsFile(filename)
276 304
277 if res: 305 if res:
278 # save the file name only in case of success 306 # save the file name only in case of success
287 @type str 315 @type str
288 @return flag indicating success 316 @return flag indicating success
289 @rtype bool 317 @rtype bool
290 """ 318 """
291 if not filename: 319 if not filename:
292 filename = EricFileDialog.getOpenFileName( 320 if FileSystemUtilities.isRemoteFileName(self.__project.getProjectPath()):
293 self, 321 filename = EricServerFileDialog.getOpenFileName(
294 self.tr("Load Diagram"), 322 self,
295 "", 323 self.tr("Load Diagram"),
296 self.tr("Eric Graphics File (*.egj);;All Files (*)"), 324 self.__project.getProjectPath(),
297 ) 325 self.tr("Eric Graphics File (*.egj);;All Files (*)"),
326 )
327 else:
328 filename = EricFileDialog.getOpenFileName(
329 self,
330 self.tr("Load Diagram"),
331 self.__project.getProjectPath(),
332 self.tr("Eric Graphics File (*.egj);;All Files (*)"),
333 )
298 if not filename: 334 if not filename:
299 # Canceled by user 335 # Canceled by user
300 return False 336 return False
301 337
302 return self.__readJsonGraphicsFile(filename) 338 return self.__readJsonGraphicsFile(filename)
341 "view": self.umlView.toDict(), 377 "view": self.umlView.toDict(),
342 } 378 }
343 379
344 try: 380 try:
345 jsonString = json.dumps(data, indent=2) 381 jsonString = json.dumps(data, indent=2)
346 with open(filename, "w") as f: 382 if FileSystemUtilities.isRemoteFileName(filename):
347 f.write(jsonString) 383 self.__remotefsInterface.writeFile(filename, jsonString.encode("utf-8"))
384 else:
385 with open(filename, "w") as f:
386 f.write(jsonString)
348 return True 387 return True
349 except (OSError, TypeError) as err: 388 except (OSError, TypeError) as err:
350 EricMessageBox.critical( 389 EricMessageBox.critical(
351 self, 390 self,
352 self.tr("Save Diagram"), 391 self.tr("Save Diagram"),
366 @type str 405 @type str
367 @return flag indicating a successful read 406 @return flag indicating a successful read
368 @rtype bool 407 @rtype bool
369 """ 408 """
370 try: 409 try:
371 with open(filename, "r") as f: 410 if FileSystemUtilities.isRemoteFileName(filename):
372 jsonString = f.read() 411 bdata = self.__remotefsInterface.readFile(filename)
412 jsonString = bdata.decode("utf-8")
413 else:
414 with open(filename, "r") as f:
415 jsonString = f.read()
373 data = json.loads(jsonString) 416 data = json.loads(jsonString)
374 except (OSError, json.JSONDecodeError) as err: 417 except (OSError, json.JSONDecodeError) as err:
375 EricMessageBox.critical( 418 EricMessageBox.critical(
376 None, 419 None,
377 self.tr("Load Diagram"), 420 self.tr("Load Diagram"),

eric ide

mercurial