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) |