MultiProject/MultiProjectBrowser.py

branch
maintenance
changeset 6693
3629d88ae235
parent 6674
f7b68db81452
child 6836
93b8c77502e0
equal deleted inserted replaced
6647:2a11e1b2dcbe 6693:3629d88ae235
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
24 # TODO: add action to copy a project on disk
20 class MultiProjectBrowser(QTreeWidget): 25 class MultiProjectBrowser(QTreeWidget):
21 """ 26 """
22 Class implementing the multi project browser. 27 Class implementing the multi project browser.
23 """ 28 """
24 ProjectFileNameRole = Qt.UserRole 29 ProjectFileNameRole = Qt.UserRole
288 itm = self.currentItem() 293 itm = self.currentItem()
289 if itm is not None and itm.parent() is not None: 294 if itm is not None and itm.parent() is not None:
290 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole) 295 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
291 if uid: 296 if uid:
292 self.multiProject.removeProject(uid) 297 self.multiProject.removeProject(uid)
298
299 def __deleteProject(self):
300 """
301 Private method to handle the Delete context menu entry.
302 """
303 itm = self.currentItem()
304 if itm is not None and itm.parent() is not None:
305 projectFile = itm.data(0, MultiProjectBrowser.ProjectFileNameRole)
306 projectPath = os.path.dirname(projectFile)
307
308 if self.project.getProjectPath() == projectPath:
309 E5MessageBox.warning(
310 self,
311 self.tr("Delete Project"),
312 self.tr("""The current project cannot be deleted."""
313 """ Please close it first."""))
314 else:
315 projectFiles = glob.glob(os.path.join(projectPath, "*.e4p"))
316 if not projectFiles:
317 # Oops, that should not happen; play it save
318 res = False
319 elif len(projectFiles) == 1:
320 res = E5MessageBox.yesNo(
321 self,
322 self.tr("Delete Project"),
323 self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
324 """ {1}) really be deleted?</p>""").format(
325 itm.text(0), projectPath))
326 else:
327 res = E5MessageBox.yesNo(
328 self,
329 self.tr("Delete Project"),
330 self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
331 """ {1}) really be deleted?</p>"""
332 """<p><b>Warning:</b> It contains <b>{2}</b>"""
333 """ sub-projects.</p>""").format(
334 itm.text(0), projectPath, len(projectFiles)))
335 if res:
336 for subprojectFile in projectFiles:
337 # remove all sub-projects before deleting the directory
338 if subprojectFile != projectFile:
339 projectData = {
340 'name': "",
341 'file': subprojectFile,
342 'master': False,
343 'description': "",
344 'category': "",
345 'uid': "",
346 }
347 pitm = self.__findProjectItem(projectData)
348 if pitm:
349 uid = pitm.data(
350 0, MultiProjectBrowser.ProjectUidRole)
351 if uid:
352 self.multiProject.removeProject(uid)
353
354 uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
355 if uid:
356 self.multiProject.deleteProject(uid)
293 357
294 def __showProjectProperties(self): 358 def __showProjectProperties(self):
295 """ 359 """
296 Private method to show the data of a project entry. 360 Private method to show the data of a project entry.
297 """ 361 """
320 384
321 def __addNewProject(self): 385 def __addNewProject(self):
322 """ 386 """
323 Private method to add a new project entry. 387 Private method to add a new project entry.
324 """ 388 """
325 self.multiProject.addNewProject() 389 itm = self.currentItem()
390 if itm is not None:
391 if itm.parent() is None:
392 # current item is a category item
393 category = itm.text(0)
394 else:
395 category = itm.parent().text(0)
396 else:
397 category = ""
398 self.multiProject.addNewProject(category=category)
326 399
327 def __createPopupMenu(self): 400 def __createPopupMenu(self):
328 """ 401 """
329 Private method to create the popup menu. 402 Private method to create the popup menu.
330 """ 403 """
331 self.__menu = QMenu(self) 404 self.__menu = QMenu(self)
332 self.__menu.addAction(self.tr("Open"), self.__openItem) 405 self.__menu.addAction(self.tr("Open"), self.__openItem)
333 self.__menu.addAction(self.tr("Remove"), self.__removeProject) 406 self.__menu.addAction(self.tr("Remove from Multi Project"),
407 self.__removeProject)
408 self.__menu.addAction(self.tr("Delete from Disk"),
409 self.__deleteProject)
334 self.__menu.addAction(self.tr("Properties"), 410 self.__menu.addAction(self.tr("Properties"),
335 self.__showProjectProperties) 411 self.__showProjectProperties)
336 self.__menu.addSeparator() 412 self.__menu.addSeparator()
337 self.__menu.addAction(self.tr("Add Project..."), 413 self.__menu.addAction(self.tr("Add Project..."),
338 self.__addNewProject) 414 self.__addNewProject)

eric ide

mercurial