9 |
9 |
10 |
10 |
11 import os |
11 import os |
12 import shutil |
12 import shutil |
13 |
13 |
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, \ |
14 from PyQt5.QtCore import ( |
15 QIODevice, QObject, QUuid |
15 pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, QIODevice, QObject, QUuid |
|
16 ) |
16 from PyQt5.QtGui import QCursor |
17 from PyQt5.QtGui import QCursor |
17 from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar |
18 from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar |
18 |
19 |
19 from Globals import recentNameMultiProject |
20 from Globals import recentNameMultiProject |
20 |
21 |
199 def __extractCategories(self): |
200 def __extractCategories(self): |
200 """ |
201 """ |
201 Private slot to extract the categories used in the project definitions. |
202 Private slot to extract the categories used in the project definitions. |
202 """ |
203 """ |
203 for project in self.__projects.values(): |
204 for project in self.__projects.values(): |
204 if project['category'] and \ |
205 if ( |
205 project['category'] not in self.categories: |
206 project['category'] and |
|
207 project['category'] not in self.categories |
|
208 ): |
206 self.categories.append(project['category']) |
209 self.categories.append(project['category']) |
207 |
210 |
208 def getCategories(self): |
211 def getCategories(self): |
209 """ |
212 """ |
210 Public method to get the list of defined categories. |
213 Public method to get the list of defined categories. |
269 |
272 |
270 f = QFile(fn) |
273 f = QFile(fn) |
271 if f.open(QIODevice.WriteOnly): |
274 if f.open(QIODevice.WriteOnly): |
272 from E5XML.MultiProjectWriter import MultiProjectWriter |
275 from E5XML.MultiProjectWriter import MultiProjectWriter |
273 MultiProjectWriter( |
276 MultiProjectWriter( |
274 f, self, os.path.splitext(os.path.basename(fn))[0])\ |
277 f, |
275 .writeXML() |
278 self, os.path.splitext(os.path.basename(fn))[0] |
|
279 ).writeXML() |
276 res = True |
280 res = True |
277 else: |
281 else: |
278 E5MessageBox.critical( |
282 E5MessageBox.critical( |
279 self.ui, |
283 self.ui, |
280 self.tr("Save multiproject file"), |
284 self.tr("Save multiproject file"), |
319 if not startdir: |
323 if not startdir: |
320 startdir = Preferences.getMultiProject("Workspace") |
324 startdir = Preferences.getMultiProject("Workspace") |
321 dlg = AddProjectDialog(self.ui, startdir=startdir, |
325 dlg = AddProjectDialog(self.ui, startdir=startdir, |
322 categories=self.categories, category=category) |
326 categories=self.categories, category=category) |
323 if dlg.exec_() == QDialog.Accepted: |
327 if dlg.exec_() == QDialog.Accepted: |
324 name, filename, isMaster, description, category, uid = \ |
328 name, filename, isMaster, description, category, uid = ( |
325 dlg.getData() |
329 dlg.getData() |
|
330 ) |
326 |
331 |
327 # step 1: check, if project was already added |
332 # step 1: check, if project was already added |
328 for project in self.__projects.values(): |
333 for project in self.__projects.values(): |
329 if project['file'] == filename: |
334 if project['file'] == filename: |
330 return |
335 return |
373 " already):"), |
378 " already):"), |
374 mode=E5PathPickerModes.DirectoryMode, |
379 mode=E5PathPickerModes.DirectoryMode, |
375 path=srcProjectDirectory, |
380 path=srcProjectDirectory, |
376 defaultDirectory=startdir, |
381 defaultDirectory=startdir, |
377 ) |
382 ) |
378 if ok and dstProjectDirectory and \ |
383 if ( |
379 not os.path.exists(dstProjectDirectory): |
384 ok and |
|
385 dstProjectDirectory and |
|
386 not os.path.exists(dstProjectDirectory) |
|
387 ): |
380 try: |
388 try: |
381 shutil.copytree(srcProjectDirectory, dstProjectDirectory) |
389 shutil.copytree(srcProjectDirectory, dstProjectDirectory) |
382 except shutil.Error: |
390 except shutil.Error: |
383 E5MessageBox.critical( |
391 E5MessageBox.critical( |
384 self.parent(), |
392 self.parent(), |
592 """ |
600 """ |
593 defaultFilter = self.tr("Multiproject Files (*.e5m)") |
601 defaultFilter = self.tr("Multiproject Files (*.e5m)") |
594 if self.ppath: |
602 if self.ppath: |
595 defaultPath = self.ppath |
603 defaultPath = self.ppath |
596 else: |
604 else: |
597 defaultPath = Preferences.getMultiProject("Workspace") or \ |
605 defaultPath = ( |
|
606 Preferences.getMultiProject("Workspace") or |
598 Utilities.getHomeDir() |
607 Utilities.getHomeDir() |
|
608 ) |
599 fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
609 fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
600 self.parent(), |
610 self.parent(), |
601 self.tr("Save multiproject as"), |
611 self.tr("Save multiproject as"), |
602 defaultPath, |
612 defaultPath, |
603 self.tr("Multiproject Files (*.e5m)"), |
613 self.tr("Multiproject Files (*.e5m)"), |
975 @param reopen flag indicating, that the master project should be |
985 @param reopen flag indicating, that the master project should be |
976 reopened, if it has been opened already (boolean) |
986 reopened, if it has been opened already (boolean) |
977 """ |
987 """ |
978 for project in self.__projects.values(): |
988 for project in self.__projects.values(): |
979 if project['master']: |
989 if project['master']: |
980 if reopen or \ |
990 if ( |
981 not self.projectObject.isOpen() or \ |
991 reopen or |
982 self.projectObject.getProjectFile() != project['file']: |
992 not self.projectObject.isOpen() or |
|
993 self.projectObject.getProjectFile() != project['file'] |
|
994 ): |
983 self.openProject(project['file']) |
995 self.openProject(project['file']) |
984 return |
996 return |
985 |
997 |
986 def getMasterProjectFile(self): |
998 def getMasterProjectFile(self): |
987 """ |
999 """ |