src/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveBuiltin/ProjectHelper.py

branch
eric7
changeset 11068
15f0385e0471
parent 10439
21c28b0f9e41
child 11090
f5f5f5803935
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveBuiltin/ProjectHelper.py	Sun Dec 01 18:17:51 2024 +0100
@@ -0,0 +1,270 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the shelve extension project helper.
+"""
+
+from PyQt6.QtWidgets import QMenu
+
+from eric7.EricGui.EricAction import EricAction
+from eric7.EricWidgets import EricMessageBox
+
+from ..HgExtensionProjectHelper import HgExtensionProjectHelper
+
+
+class ShelveProjectHelper(HgExtensionProjectHelper):
+    """
+    Class implementing the shelve extension project helper.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+    def initActions(self):
+        """
+        Public method to generate the action objects.
+        """
+        self.hgShelveAct = EricAction(
+            self.tr("Shelve changes"),
+            self.tr("Shelve changes..."),
+            0,
+            0,
+            self,
+            "mercurial_shelve",
+        )
+        self.hgShelveAct.setStatusTip(
+            self.tr("Shelve all current changes of the project")
+        )
+        self.hgShelveAct.setWhatsThis(
+            self.tr(
+                """<b>Shelve changes</b>"""
+                """<p>This shelves all current changes of the project.</p>"""
+            )
+        )
+        self.hgShelveAct.triggered.connect(self.__hgShelve)
+        self.actions.append(self.hgShelveAct)
+
+        self.hgShelveBrowserAct = EricAction(
+            self.tr("Show shelve browser"),
+            self.tr("Show shelve browser..."),
+            0,
+            0,
+            self,
+            "mercurial_shelve_browser",
+        )
+        self.hgShelveBrowserAct.setStatusTip(self.tr("Show a dialog with all shelves"))
+        self.hgShelveBrowserAct.setWhatsThis(
+            self.tr(
+                """<b>Show shelve browser...</b>"""
+                """<p>This shows a dialog listing all available shelves."""
+                """ Actions on these shelves may be executed via the"""
+                """ context menu.</p>"""
+            )
+        )
+        self.hgShelveBrowserAct.triggered.connect(self.__hgShelveBrowser)
+        self.actions.append(self.hgShelveBrowserAct)
+
+        self.hgUnshelveAct = EricAction(
+            self.tr("Restore shelved change"),
+            self.tr("Restore shelved change..."),
+            0,
+            0,
+            self,
+            "mercurial_unshelve",
+        )
+        self.hgUnshelveAct.setStatusTip(
+            self.tr("Restore a shelved change to the project directory")
+        )
+        self.hgUnshelveAct.setWhatsThis(
+            self.tr(
+                """<b>Restore shelved change</b>"""
+                """<p>This restore a shelved change to the project directory."""
+                """</p>"""
+            )
+        )
+        self.hgUnshelveAct.triggered.connect(self.__hgUnshelve)
+        self.actions.append(self.hgUnshelveAct)
+
+        self.hgUnshelveAbortAct = EricAction(
+            self.tr("Abort restore"),
+            self.tr("Abort restore..."),
+            0,
+            0,
+            self,
+            "mercurial_unshelve_abort",
+        )
+        self.hgUnshelveAbortAct.setStatusTip(
+            self.tr("Abort the restore operation in progress")
+        )
+        self.hgUnshelveAbortAct.setWhatsThis(
+            self.tr(
+                """<b>Abort restore</b>"""
+                """<p>This aborts the restore operation in progress and reverts"""
+                """ already applied changes.</p>"""
+            )
+        )
+        self.hgUnshelveAbortAct.triggered.connect(self.__hgUnshelveAbort)
+        self.actions.append(self.hgUnshelveAbortAct)
+
+        self.hgUnshelveContinueAct = EricAction(
+            self.tr("Continue restore"),
+            self.tr("Continue restore..."),
+            0,
+            0,
+            self,
+            "mercurial_unshelve_continue",
+        )
+        self.hgUnshelveContinueAct.setStatusTip(
+            self.tr("Continue the restore operation in progress")
+        )
+        self.hgUnshelveContinueAct.setWhatsThis(
+            self.tr(
+                """<b>Continue restore</b>"""
+                """<p>This continues the restore operation in progress.</p>"""
+            )
+        )
+        self.hgUnshelveContinueAct.triggered.connect(self.__hgUnshelveContinue)
+        self.actions.append(self.hgUnshelveContinueAct)
+
+        self.hgShelveDeleteAct = EricAction(
+            self.tr("Delete shelved changes"),
+            self.tr("Delete shelved changes..."),
+            0,
+            0,
+            self,
+            "mercurial_shelve_delete",
+        )
+        self.hgShelveDeleteAct.setWhatsThis(
+            self.tr(
+                """<b>Delete shelved changes...</b>"""
+                """<p>This opens a dialog to select the shelved changes to"""
+                """ delete and deletes the selected ones.</p>"""
+            )
+        )
+        self.hgShelveDeleteAct.triggered.connect(self.__hgDeleteShelves)
+        self.actions.append(self.hgShelveDeleteAct)
+
+        self.hgShelveCleanupAct = EricAction(
+            self.tr("Delete ALL shelved changes"),
+            self.tr("Delete ALL shelved changes"),
+            0,
+            0,
+            self,
+            "mercurial_shelve_cleanup",
+        )
+        self.hgShelveCleanupAct.setWhatsThis(
+            self.tr(
+                """<b>Delete ALL shelved changes</b>"""
+                """<p>This deletes all shelved changes.</p>"""
+            )
+        )
+        self.hgShelveCleanupAct.triggered.connect(self.__hgCleanupShelves)
+        self.actions.append(self.hgShelveCleanupAct)
+
+    def initMenu(self, mainMenu):
+        """
+        Public method to generate the extension menu.
+
+        @param mainMenu reference to the main menu
+        @type QMenu
+        @return populated menu
+        @rtype QMenu
+        """
+        menu = QMenu(self.menuTitle(), mainMenu)
+        menu.setTearOffEnabled(True)
+
+        menu.addAction(self.hgShelveAct)
+        menu.addSeparator()
+        menu.addAction(self.hgShelveBrowserAct)
+        menu.addSeparator()
+        menu.addAction(self.hgUnshelveAct)
+        menu.addAction(self.hgUnshelveContinueAct)
+        menu.addAction(self.hgUnshelveAbortAct)
+        menu.addSeparator()
+        menu.addAction(self.hgShelveDeleteAct)
+        menu.addAction(self.hgShelveCleanupAct)
+
+        return menu
+
+    def menuTitle(self):
+        """
+        Public method to get the menu title.
+
+        @return title of the menu
+        @rtype str
+        """
+        return self.tr("Shelve")
+
+    def __reopenProject(self, shouldReopen, title):
+        """
+        Private method to reopen the project if needed and wanted.
+
+        @param shouldReopen flag indicating that the project should
+            be reopened
+        @type bool
+        @param title title of the message box
+        @type str
+        """
+        if shouldReopen:
+            res = EricMessageBox.yesNo(
+                None,
+                title,
+                self.tr("""The project should be reread. Do this now?"""),
+                yesDefault=True,
+            )
+            if res:
+                self.project.reopenProject()
+
+    def __hgShelve(self):
+        """
+        Private slot used to shelve all current changes.
+        """
+        shouldReopen = self.vcs.getBuiltinObject("shelve").hgShelve(
+            self.project.getProjectPath()
+        )
+        self.__reopenProject(shouldReopen, self.tr("Shelve"))
+
+    def __hgShelveBrowser(self):
+        """
+        Private slot to show the shelve browser dialog.
+        """
+        self.vcs.getBuiltinObject("shelve").hgShelveBrowser()
+
+    def __hgUnshelve(self):
+        """
+        Private slot used to restore a shelved change.
+        """
+        shouldReopen = self.vcs.getBuiltinObject("shelve").hgUnshelve()
+        self.__reopenProject(shouldReopen, self.tr("Unshelve"))
+
+    def __hgUnshelveAbort(self):
+        """
+        Private slot used to abort an ongoing restore operation.
+        """
+        shouldReopen = self.vcs.getBuiltinObject("shelve").hgUnshelveAbort()
+        self.__reopenProject(shouldReopen, self.tr("Abort Unshelve"))
+
+    def __hgUnshelveContinue(self):
+        """
+        Private slot used to continue an ongoing restore operation.
+        """
+        shouldReopen = self.vcs.getBuiltinObject("shelve").hgUnshelveContinue()
+        self.__reopenProject(shouldReopen, self.tr("Continue Unshelve"))
+
+    def __hgDeleteShelves(self):
+        """
+        Private slot to delete selected shelves.
+        """
+        self.vcs.getBuiltinObject("shelve").hgDeleteShelves()
+
+    def __hgCleanupShelves(self):
+        """
+        Private slot to delete all shelves.
+        """
+        self.vcs.getBuiltinObject("shelve").hgCleanupShelves()

eric ide

mercurial