MultiProject/MultiProjectBrowser.py

changeset 6652
dfc89403b426
parent 6645
ad476851d7e0
child 6653
ac800d2700d2
equal deleted inserted replaced
6651:e8f3b5568b21 6652:dfc89403b426
7 Module implementing the multi project browser. 7 Module implementing the multi project browser.
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 import os
13 import glob
14
12 from PyQt5.QtCore import Qt 15 from PyQt5.QtCore import Qt
13 from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QDialog, QMenu 16 from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QDialog, QMenu
14 17
15 from E5Gui.E5Application import e5App 18 from E5Gui.E5Application import e5App
19 from E5Gui import E5MessageBox
16 20
17 import UI.PixmapCache 21 import UI.PixmapCache
18 22
19 23
20 class MultiProjectBrowser(QTreeWidget): 24 class MultiProjectBrowser(QTreeWidget):
288 itm = self.currentItem() 292 itm = self.currentItem()
289 if itm is not None and itm.parent() is not None: 293 if itm is not None and itm.parent() is not None:
290 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole) 294 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
291 if uid: 295 if uid:
292 self.multiProject.removeProject(uid) 296 self.multiProject.removeProject(uid)
297
298 def __deleteProject(self):
299 """
300 Private method to handle the Delete context menu entry.
301 """
302 itm = self.currentItem()
303 if itm is not None and itm.parent() is not None:
304 projectFile = itm.data(0, MultiProjectBrowser.ProjectFileNameRole)
305 projectPath = os.path.dirname(projectFile)
306
307 if self.project.getProjectPath() == projectPath:
308 E5MessageBox.warning(
309 self,
310 self.tr("Delete Project"),
311 self.tr("""The current project cannot be deleted."""
312 """ Please close it first."""))
313 else:
314 projectFiles = glob.glob(os.path.join(projectPath, "*.e4p"))
315 if not projectFiles:
316 # Oops, that should not happen; play it save
317 res = False
318 elif len(projectFiles) == 1:
319 res = E5MessageBox.yesNo(
320 self,
321 self.tr("Delete Project"),
322 self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
323 """ {1}) really be deleted?</p>""").format(
324 itm.text(0), projectPath))
325 else:
326 res = E5MessageBox.yesNo(
327 self,
328 self.tr("Delete Project"),
329 self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
330 """ {1}) really be deleted?</p>"""
331 """<p><b>Warning:</b> It contains <b>{2}</b>"""
332 """ sub-projects.</p>""").format(
333 itm.text(0), projectPath, len(projectFiles)))
334 if res:
335 for subprojectFile in projectFiles:
336 # remove all sub-projects before deleting the directory
337 if subprojectFile != projectFile:
338 projectData = {
339 'name': "",
340 'file': subprojectFile,
341 'master': False,
342 'description': "",
343 'category': "",
344 'uid': "",
345 }
346 pitm = self.__findProjectItem(projectData)
347 if pitm:
348 uid = pitm.data(
349 0, MultiProjectBrowser.ProjectUidRole)
350 if uid:
351 self.multiProject.removeProject(uid)
352
353 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
354 if uid:
355 self.multiProject.deleteProject(uid)
293 356
294 def __showProjectProperties(self): 357 def __showProjectProperties(self):
295 """ 358 """
296 Private method to show the data of a project entry. 359 Private method to show the data of a project entry.
297 """ 360 """
328 """ 391 """
329 Private method to create the popup menu. 392 Private method to create the popup menu.
330 """ 393 """
331 self.__menu = QMenu(self) 394 self.__menu = QMenu(self)
332 self.__menu.addAction(self.tr("Open"), self.__openItem) 395 self.__menu.addAction(self.tr("Open"), self.__openItem)
333 self.__menu.addAction(self.tr("Remove"), self.__removeProject) 396 self.__menu.addAction(self.tr("Remove from Multi Project"),
397 self.__removeProject)
398 self.__menu.addAction(self.tr("Delete from Disk"),
399 self.__deleteProject)
334 self.__menu.addAction(self.tr("Properties"), 400 self.__menu.addAction(self.tr("Properties"),
335 self.__showProjectProperties) 401 self.__showProjectProperties)
336 self.__menu.addSeparator() 402 self.__menu.addSeparator()
337 self.__menu.addAction(self.tr("Add Project..."), 403 self.__menu.addAction(self.tr("Add Project..."),
338 self.__addNewProject) 404 self.__addNewProject)

eric ide

mercurial