src/eric7/Plugins/VcsPlugins/vcsGit/GitWorktreeAddDialog.py

Wed, 04 Oct 2023 17:50:59 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 04 Oct 2023 17:50:59 +0200
branch
eric7
changeset 10217
7888177e7463
parent 9971
773ad1f1ed22
child 10439
21c28b0f9e41
permissions
-rw-r--r--

Fixed in issue with several editable combo box selectors, that the value could not be changed if the edited text differed by case only. This was caused by the standard QComboBox completer.

# -*- coding: utf-8 -*-

# Copyright (c) 2022 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to enter the data for a 'git worktree add' operation.
"""

from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QDialog, QDialogButtonBox

from eric7.EricWidgets.EricPathPicker import EricPathPickerModes

from .Ui_GitWorktreeAddDialog import Ui_GitWorktreeAddDialog


class GitWorktreeAddDialog(QDialog, Ui_GitWorktreeAddDialog):
    """
    Class implementing a dialog to enter the data for a 'git worktree add' operation.
    """

    def __init__(self, parentDirectory, tagsList, branchesList, parent=None):
        """
        Constructor

        @param parentDirectory path of the worktrees parent directory
        @type str
        @param tagsList list of tags
        @type list of str
        @param branchesList list of branches
        @type list of str
        @param parent reference to the parent widget (defaults to None)
        @type QWidget (optional)
        """
        super().__init__(parent)
        self.setupUi(self)

        self.__parentDirectory = parentDirectory

        self.worktreePathPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
        self.worktreePathPicker.setDefaultDirectory(parentDirectory)
        self.worktreePathPicker.setText(parentDirectory)

        self.tagCombo.addItems(sorted(tagsList))
        self.branchCombo.addItems(["main"] + sorted(branchesList))

        self.__updateOK()

    def __updateOK(self):
        """
        Private method to set the enabled state of the OK button.
        """
        enable = True
        if self.revButton.isChecked():
            enable = self.revEdit.text() != ""
        elif self.tagButton.isChecked():
            enable = self.tagCombo.currentText() != ""
        elif self.branchButton.isChecked():
            enable = self.branchCombo.currentText() != ""

        worktreePath = self.worktreePathPicker.text()
        enable &= bool(worktreePath) and worktreePath not in (
            self.__parentDirectory,
            self.__parentDirectory + "/",
            self.__parentDirectory + "\\",
        )

        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(enable)

    @pyqtSlot(str)
    def on_worktreePathPicker_textChanged(self, worktree):
        """
        Private slot handling a change of the worktree path.

        @param worktree entered worktree path
        @type str
        """
        self.__updateOK()

    @pyqtSlot(bool)
    def on_revButton_toggled(self, checked):
        """
        Private slot to handle changes of the rev select button.

        @param checked state of the button
        @type bool
        """
        self.__updateOK()

    @pyqtSlot(str)
    def on_revEdit_textChanged(self, txt):
        """
        Private slot to handle changes of the rev edit.

        @param txt text of the edit
        @type str
        """
        self.__updateOK()

    @pyqtSlot(bool)
    def on_tagButton_toggled(self, checked):
        """
        Private slot to handle changes of the Tag select button.

        @param checked state of the button
        @type bool
        """
        self.__updateOK()

    @pyqtSlot(str)
    def on_tagCombo_editTextChanged(self, txt):
        """
        Private slot to handle changes of the Tag combo.

        @param txt text of the combo
        @type str
        """
        self.__updateOK()

    @pyqtSlot(bool)
    def on_branchButton_toggled(self, checked):
        """
        Private slot to handle changes of the Branch select button.

        @param checked state of the button
        @type bool
        """
        self.__updateOK()

    @pyqtSlot(str)
    def on_branchCombo_editTextChanged(self, txt):
        """
        Private slot to handle changes of the Branch combo.

        @param txt text of the combo
        @type str
        """
        self.__updateOK()

    def getParameters(self):
        """
        Public method to get the entered parameters for the 'git worktree add'
        operation.

        @return dictionary containing the entered data. This dictionary has these keys.
            <ul>
            <li>path: path for the new worktree</li>
            <li>branch: name for the worktree branch</li>
            <li>force_branch: enforce creating the branch</li>
            <li>lock: flag indicating to lock the worktree</li>
            <li>lock_reason: optional reason string for the lock</li>
            <li>detach: flag indicating to detach the HEAD in the new worktree</li>
            <li>commit: commit to check out in the new worktree (branch, tag, commit ID
                or empty for HEAD) </li>
            <li>force: flag indicating to enforce the worktree creation</li>
            </ul>
        @rtype dict
        """
        if self.revButton.isChecked():
            commit = self.revEdit.text()
        elif self.tagButton.isChecked():
            commit = self.tagCombo.currentText()
        elif self.branchButton.isChecked():
            commit = self.branchCombo.currentText()
        else:
            commit = ""

        return {
            "path": self.worktreePathPicker.text(),
            "branch": self.branchNameEdit.text(),
            "force_branch": self.forceBranchCheckBox.isChecked(),
            "lock": self.lockCheckBox.isChecked(),
            "lock_reason": self.lockReasonEdit.text(),
            "detach": self.detachCheckBox.isChecked(),
            "commit": commit,
            "force": self.forceCheckBox.isChecked(),
        }

eric ide

mercurial