MultiProject/MultiProject.py

changeset 6836
93b8c77502e0
parent 6653
ac800d2700d2
equal deleted inserted replaced
6835:1f08657c8407 6836:93b8c77502e0
11 11
12 import os 12 import os
13 import shutil 13 import shutil
14 14
15 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, \ 15 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, \
16 QIODevice, QObject 16 QIODevice, QObject, QUuid
17 from PyQt5.QtGui import QCursor 17 from PyQt5.QtGui import QCursor
18 from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar 18 from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar
19 19
20 from Globals import recentNameMultiProject 20 from Globals import recentNameMultiProject
21 21
22 from E5Gui.E5Action import E5Action, createActionGroup 22 from E5Gui.E5Action import E5Action, createActionGroup
23 from E5Gui import E5FileDialog, E5MessageBox 23 from E5Gui import E5FileDialog, E5MessageBox, E5PathPickerDialog
24 from E5Gui.E5PathPickerDialog import E5PathPickerModes
24 25
25 import UI.PixmapCache 26 import UI.PixmapCache
26 27
27 import Preferences 28 import Preferences
28 import Utilities 29 import Utilities
351 if category not in self.categories: 352 if category not in self.categories:
352 self.categories.append(category) 353 self.categories.append(category)
353 self.projectAdded.emit(project) 354 self.projectAdded.emit(project)
354 self.setDirty(True) 355 self.setDirty(True)
355 356
357 def copyProject(self, uid):
358 """
359 Public method to copy the project with given UID on disk.
360
361 @param uid UID of the project to copy
362 @type str
363 """
364 if uid in self.__projects:
365 startdir = self.ppath
366 if not startdir:
367 startdir = Preferences.getMultiProject("Workspace")
368 srcProject = self.__projects[uid]
369 srcProjectDirectory = os.path.dirname(srcProject["file"])
370 dstProjectDirectory, ok = E5PathPickerDialog.getPath(
371 self.parent(),
372 self.tr("Copy Project"),
373 self.tr("Enter directory for the new project (must not exist"
374 " already):"),
375 mode=E5PathPickerModes.DirectoryMode,
376 path=srcProjectDirectory,
377 defaultDirectory=startdir,
378 )
379 if ok and dstProjectDirectory and \
380 not os.path.exists(dstProjectDirectory):
381 try:
382 shutil.copytree(srcProjectDirectory, dstProjectDirectory)
383 except shutil.Error:
384 E5MessageBox.critical(
385 self.parent(),
386 self.tr("Copy Project"),
387 self.tr("<p>The source project <b>{0}</b> could not"
388 " be copied to its destination <b>{1}</b>."
389 "</p>").format(srcProjectDirectory,
390 dstProjectDirectory))
391 return
392
393 dstUid = QUuid.createUuid().toString()
394 dstProject = {
395 'name': self.tr("{0} - Copy").format(srcProject["name"]),
396 'file': os.path.join(dstProjectDirectory,
397 os.path.basename(srcProject["file"])),
398 'master': False,
399 'description': srcProject["description"],
400 'category': srcProject["category"],
401 'uid': dstUid,
402 }
403 self.__projects[dstUid] = dstProject
404 self.projectAdded.emit(dstProject)
405 self.setDirty(True)
406
356 def changeProjectProperties(self, pro): 407 def changeProjectProperties(self, pro):
357 """ 408 """
358 Public method to change the data of a project entry. 409 Public method to change the data of a project entry.
359 410
360 @param pro dictionary with the project data (string) 411 @param pro dictionary with the project data (string)

eric ide

mercurial