src/eric7/MultiProject/MultiProject.py

branch
eric7
changeset 10595
59579e8aff98
parent 10503
6a37b6ac3928
child 10758
1fd5ea95c0e3
equal deleted inserted replaced
10593:b7ebfc2e47d4 10595:59579e8aff98
10 import contextlib 10 import contextlib
11 import os 11 import os
12 import pathlib 12 import pathlib
13 import shutil 13 import shutil
14 14
15 from PyQt6.QtCore import QFile, QIODevice, QObject, QUuid, pyqtSignal, pyqtSlot 15 from PyQt6.QtCore import QObject, QUuid, pyqtSignal, pyqtSlot
16 from PyQt6.QtWidgets import QDialog, QMenu, QToolBar 16 from PyQt6.QtWidgets import QDialog, QMenu, QToolBar
17 17
18 from eric7 import Preferences 18 from eric7 import Preferences
19 from eric7.EricGui import EricPixmapCache 19 from eric7.EricGui import EricPixmapCache
20 from eric7.EricGui.EricAction import EricAction, createActionGroup 20 from eric7.EricGui.EricAction import EricAction, createActionGroup
21 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor 21 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
22 from eric7.EricWidgets import EricFileDialog, EricMessageBox, EricPathPickerDialog 22 from eric7.EricWidgets import EricFileDialog, EricMessageBox, EricPathPickerDialog
23 from eric7.EricWidgets.EricPathPickerDialog import EricPathPickerModes 23 from eric7.EricWidgets.EricPathPickerDialog import EricPathPickerModes
24 from eric7.EricXML.MultiProjectReader import MultiProjectReader
25 from eric7.Globals import recentNameMultiProject 24 from eric7.Globals import recentNameMultiProject
26 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities 25 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities
27 26
28 from .MultiProjectFile import MultiProjectFile 27 from .MultiProjectFile import MultiProjectFile
29 from .MultiProjectProjectMeta import MultiProjectProjectMeta 28 from .MultiProjectProjectMeta import MultiProjectProjectMeta
199 """ 198 """
200 return [c for c in self.categories if c] 199 return [c for c in self.categories if c]
201 200
202 def __readMultiProject(self, fn): 201 def __readMultiProject(self, fn):
203 """ 202 """
204 Private method to read in a multi project (.emj, .e4m, .e5m) file. 203 Private method to read in a multi project (.emj) file.
205 204
206 @param fn filename of the multi project file to be read 205 @param fn filename of the multi project file to be read
207 @type str 206 @type str
208 @return flag indicating success 207 @return flag indicating success
209 @rtype bool 208 @rtype bool
210 """ 209 """
211 if os.path.splitext(fn)[1] == ".emj": 210 with EricOverrideCursor():
212 # new JSON based format 211 res = self.__multiProjectFile.readFile(fn)
213 with EricOverrideCursor():
214 res = self.__multiProjectFile.readFile(fn)
215 else:
216 # old XML based format
217 f = QFile(fn)
218 if f.open(QIODevice.OpenModeFlag.ReadOnly):
219 with EricOverrideCursor():
220 reader = MultiProjectReader(f, self)
221 reader.readXML()
222 f.close()
223 res = not reader.hasError()
224 else:
225 EricMessageBox.critical(
226 self.ui,
227 self.tr("Read Multi Project File"),
228 self.tr(
229 "<p>The multi project file <b>{0}</b> could not be read.</p>"
230 ).format(fn),
231 )
232 res = False
233 212
234 if res: 213 if res:
235 self.pfile = os.path.abspath(fn) 214 self.pfile = os.path.abspath(fn)
236 self.ppath = os.path.abspath(os.path.dirname(fn)) 215 self.ppath = os.path.abspath(os.path.dirname(fn))
237 216
517 if fn is None: 496 if fn is None:
518 fn = EricFileDialog.getOpenFileName( 497 fn = EricFileDialog.getOpenFileName(
519 self.parent(), 498 self.parent(),
520 self.tr("Open Multi Project"), 499 self.tr("Open Multi Project"),
521 Preferences.getMultiProject("Workspace") or OSUtilities.getHomeDir(), 500 Preferences.getMultiProject("Workspace") or OSUtilities.getHomeDir(),
522 self.tr( 501 self.tr("Multi Project Files (*.emj)"),
523 "Multi Project Files (*.emj);;"
524 "XML Multi Project Files (*.e5m *.e4m)"
525 ),
526 ) 502 )
527 503
528 if fn == "": 504 if fn == "":
529 fn = None 505 fn = None
530 506
551 @return flag indicating success 527 @return flag indicating success
552 @rtype bool 528 @rtype bool
553 """ 529 """
554 if self.isDirty(): 530 if self.isDirty():
555 if len(self.pfile) > 0: 531 if len(self.pfile) > 0:
556 if self.pfile.endswith((".e4m", ".e5m")):
557 self.pfile = self.pfile.replace(".e4m", ".emj").replace(
558 ".e5m", ".emj"
559 )
560 self.__syncRecent()
561 ok = self.__writeMultiProject() 532 ok = self.__writeMultiProject()
562 else: 533 else:
563 ok = self.saveMultiProjectAs() 534 ok = self.saveMultiProjectAs()
564 else: 535 else:
565 ok = True 536 ok = True

eric ide

mercurial