class _DetectorDialog(QDialog):

    def __init__(self, wdg_detector, key='', parent=None):
        QDialog.__init__(self, parent)
        self.setWindowTitle(wdg_detector.accessibleName())

        # Widgets
        self._txt_key = QLineEdit()
        self._txt_key.setValidator(QRegExpValidator(QRegExp(r"^(?!\s*$).+")))
        self._txt_key.setText(key)

        self._wdg_detector = wdg_detector

        buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

        # Layouts
        layout = QFormLayout()
        layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Fix for Mac OS
        layout.addRow('Key', self._txt_key)
        layout.addRow(self._wdg_detector)
        layout.addRow(buttons)
        self.setLayout(layout)

        # Signals
        self._txt_key.textChanged.connect(self._onChanged)
        self._txt_key.textChanged.emit('')

        buttons.accepted.connect(self._onOk)
        buttons.rejected.connect(self.reject)

    def _onChanged(self):
        if self._txt_key.hasAcceptableInput():
            self._txt_key.setStyleSheet("background: none")
        else:
            self._txt_key.setStyleSheet("background: pink")

    def _onOk(self):
        if not self._txt_key.hasAcceptableInput():
            return
        if not self._wdg_detector.hasAcceptableInput():
            return
        self.accept()

    def key(self):
        return self._txt_key.text()

    def detector(self):
        return self._wdg_detector.value()
Example #2
0
class NameWizardPage(_OptionsWizardPage):

    def __init__(self, options, parent=None):
        _OptionsWizardPage.__init__(self, options, parent)
        self.setTitle("Name")

    def _initUI(self):
        # Widgets
        self._txt_name = QLineEdit()
        self._txt_name.setValidator(QRegExpValidator(QRegExp(r"^(?!\s*$).+")))

        # Layouts
        layout = _OptionsWizardPage._initUI(self)
        layout.addRow('Name', self._txt_name)

        # Signals
        self._txt_name.textChanged.connect(self._onNameChanged)

        return layout

    def _onNameChanged(self):
        if self._txt_name.hasAcceptableInput():
            self._txt_name.setStyleSheet("background: none")
        else:
            self._txt_name.setStyleSheet("background: pink")

    def initializePage(self):
        name = self.options().name
        self._txt_name.setText(name)

    def validatePage(self):
        if not self._txt_name.hasAcceptableInput():
            return False

        self.options().name = self._txt_name.text()
        return True