src/eric7/Debugger/EditBreakpointDialog.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 9653
e67609152c5e
child 10417
c6011e501282
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) 2003 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to edit breakpoint properties.
"""

import os.path

from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QComboBox, QDialog, QDialogButtonBox

from eric7.EricWidgets.EricPathPicker import EricPathPickerModes

from .Ui_EditBreakpointDialog import Ui_EditBreakpointDialog


class EditBreakpointDialog(QDialog, Ui_EditBreakpointDialog):
    """
    Class implementing a dialog to edit breakpoint properties.
    """

    def __init__(
        self,
        breakPointId,
        properties,
        condHistory,
        parent=None,
        name=None,
        modal=False,
        addMode=False,
        filenameHistory=None,
    ):
        """
        Constructor

        @param breakPointId id of the breakpoint (tuple)
                (filename, linenumber)
        @param properties properties for the breakpoint (tuple)
                (condition, temporary flag, enabled flag, ignore count)
        @param condHistory the list of conditionals history (list of strings)
        @param parent the parent of this dialog (QWidget)
        @param name the widget name of this dialog (string)
        @param modal flag indicating a modal dialog (boolean)
        @param addMode flag indicating the add mode (boolean)
        @param filenameHistory list of recently used file names
            (list of strings)
        """
        super().__init__(parent)
        self.setupUi(self)
        if name:
            self.setObjectName(name)
        self.setModal(modal)

        self.filenamePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
        self.filenamePicker.setSizeAdjustPolicy(
            QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon
        )

        fn, lineno = breakPointId

        if not addMode:
            cond, temp, enabled, count = properties

            # set the filename
            if fn is not None:
                self.filenamePicker.setEditText(fn)

            # set the line number
            self.linenoSpinBox.setValue(lineno)

            # set the condition
            if cond is None:
                cond = ""
            try:
                curr = condHistory.index(cond)
            except ValueError:
                condHistory.insert(0, cond)
                curr = 0
            self.conditionCombo.addItems(condHistory)
            self.conditionCombo.setCurrentIndex(curr)

            # set the ignore count
            self.ignoreSpinBox.setValue(count)

            # set the checkboxes
            self.temporaryCheckBox.setChecked(temp)
            self.enabledCheckBox.setChecked(enabled)

            self.filenamePicker.setEnabled(False)
            self.linenoSpinBox.setEnabled(False)
            self.conditionCombo.setFocus()
        else:
            self.setWindowTitle(self.tr("Add Breakpoint"))
            # set the filename
            if fn is None:
                fn = ""
            try:
                curr = filenameHistory.index(fn)
            except ValueError:
                filenameHistory.insert(0, fn)
                curr = 0
            self.filenamePicker.addItems(filenameHistory)
            self.filenamePicker.setCurrentIndex(curr)

            # set the condition
            cond = ""
            try:
                curr = condHistory.index(cond)
            except ValueError:
                condHistory.insert(0, cond)
                curr = 0
            self.conditionCombo.addItems(condHistory)
            self.conditionCombo.setCurrentIndex(curr)

            if not fn:
                self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
                    False
                )

        # set completer of condition combobox to be case sensitive
        self.conditionCombo.completer().setCaseSensitivity(
            Qt.CaseSensitivity.CaseSensitive
        )

        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())

    def on_filenamePicker_editTextChanged(self, fn):
        """
        Private slot to handle the change of the filename.

        @param fn text of the filename edit (string)
        """
        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(bool(fn))

    def getData(self):
        """
        Public method to retrieve the entered data.

        @return a tuple containing the breakpoints new properties
            (condition, temporary flag, enabled flag, ignore count)
        """
        return (
            self.conditionCombo.currentText(),
            self.temporaryCheckBox.isChecked(),
            self.enabledCheckBox.isChecked(),
            self.ignoreSpinBox.value(),
        )

    def getAddData(self):
        """
        Public method to retrieve the entered data for an add.

        @return a tuple containing the new breakpoints properties
            (filename, lineno, condition, temporary flag, enabled flag,
            ignore count)
        """
        fn = self.filenamePicker.currentText()
        fn = os.path.expanduser(os.path.expandvars(fn)) if fn else None

        return (
            fn,
            self.linenoSpinBox.value(),
            self.conditionCombo.currentText(),
            self.temporaryCheckBox.isChecked(),
            self.enabledCheckBox.isChecked(),
            self.ignoreSpinBox.value(),
        )

eric ide

mercurial