def __init__(self, parent=None):

        super().__init__(parent)

        self._data = {"element1": "", "element2": "", "energy": 0}
        # Reference to function that computes pileup energy based on two emission lines
        self._compute_energy = None

        self.setWindowTitle("Pileup Peak Parameters")

        self.le_element1 = LineEditExtended()
        set_tooltip(self.le_element1,
                    "The <b>name</b> of the emission line #1")
        self.le_element2 = LineEditExtended()
        set_tooltip(self.le_element2,
                    "The <b>name</b> of the emission line #2")
        self.peak_energy = LineEditReadOnly()
        set_tooltip(
            self.peak_energy,
            "The <b>energy</b> (location) of the pileup peak center. The energy can not"
            "be edited: it is set based on the selected emission lines",
        )

        self._validator_eline = QRegExpValidator()
        # TODO: the following regex is too broad: [a-z] should be narrowed down
        self._validator_eline.setRegExp(QRegExp(r"^[A-Z][a-z]?_[KLM][a-z]\d$"))

        instructions = QLabel(
            "Specify two emission lines, e.g. Si_Ka1 and Fe_Ka1")

        grid = QGridLayout()
        grid.addWidget(QLabel("Emission line 1:"), 0, 0)
        grid.addWidget(self.le_element1, 0, 1)
        grid.addWidget(QLabel("Emission line 2:"), 1, 0)
        grid.addWidget(self.le_element2, 1, 1)
        grid.addWidget(QLabel("Peak energy, keV:"), 2, 0)
        grid.addWidget(self.peak_energy, 2, 1)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok
                                      | QDialogButtonBox.Cancel)
        button_box.button(QDialogButtonBox.Cancel).setDefault(True)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        self.pb_ok = button_box.button(QDialogButtonBox.Ok)

        vbox = QVBoxLayout()
        vbox.addWidget(instructions)
        vbox.addSpacing(10)
        vbox.addLayout(grid)
        vbox.addWidget(button_box)

        self.setLayout(vbox)

        self.le_element1.editingFinished.connect(
            self.le_element1_editing_finished)
        self.le_element2.editingFinished.connect(
            self.le_element2_editing_finished)

        self.le_element1.textChanged.connect(self.le_element1_text_changed)
        self.le_element2.textChanged.connect(self.le_element2_text_changed)
Example #2
0
 def __init__(self, parent=None):
     """Display a dialog to open a new redis connection"""
     super(OpenRedisDialog, self).__init__(parent)
     self.load_ui()
     v = QRegExpValidator(QRegExp("([^:/]+)?(:[0-9]+)?"))
     self.ui.tcp.setValidator(v)
     self.ui.tcp_option.setChecked(True)
Example #3
0
 def create_lineedit(self,
                     text,
                     option,
                     default=NoDefault,
                     tip=None,
                     alignment=Qt.Vertical,
                     regex=None,
                     restart=False,
                     word_wrap=True,
                     placeholder=None,
                     content_type=None,
                     section=None):
     label = QLabel(text)
     label.setWordWrap(word_wrap)
     edit = QLineEdit()
     edit.content_type = content_type
     layout = QVBoxLayout() if alignment == Qt.Vertical else QHBoxLayout()
     layout.addWidget(label)
     layout.addWidget(edit)
     layout.setContentsMargins(0, 0, 0, 0)
     if tip:
         edit.setToolTip(tip)
     if regex:
         edit.setValidator(QRegExpValidator(QRegExp(regex)))
     if placeholder:
         edit.setPlaceholderText(placeholder)
     self.lineedits[edit] = (section, option, default)
     widget = QWidget(self)
     widget.label = label
     widget.textbox = edit
     widget.setLayout(layout)
     edit.restart_required = restart
     edit.label_text = text
     return widget
Example #4
0
 def __init__(self, *args, **kwargs):
     """Custom line edit for naming an environment."""
     super(LineEditEnvironment, self).__init__(*args, **kwargs)
     self._validator = QRegExpValidator(self.VALID_RE)
     self.menu = QMenu(parent=self)
     self.setValidator(self._validator)
     self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
Example #5
0
 def __init__(self, *args, **kwargs):
     """Custom line edit that uses different validators for text and url."""
     super(LineEditChannel, self).__init__(*args, **kwargs)
     self._validator = QRegExpValidator(self.VALID_RE)
     self.menu = QMenu(parent=self)
     self.setValidator(self._validator)
     self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
    def __init__(self, main_window, oswebext):
        """
        desc:
            Constructor.

        arguments:
            main_window:	The main-window object.
        """

        super(oswebext_widget,
              self).__init__(main_window, ui=u'extensions.oswebext.oswebext')
        self._oswebext = oswebext
        self.ui.button_test.clicked.connect(self._test)
        self.ui.fs_checkBox.toggled.connect(self._run_linter)
        self.ui.button_jatos.clicked.connect(self._export_jatos)
        self.ui.button_convert.clicked.connect(self._convert_results)
        self.ui.plaintextedit_welcome_text.setPlainText(
            safe_decode(cfg.oswebext_welcome_text))
        self.ui.plaintextedit_welcome_text.textChanged.connect(
            lambda: setattr(cfg, 'oswebext_welcome_text',
                            self.ui.plaintextedit_welcome_text.toPlainText()))
        self.ui.plaintextedit_external_js.setPlainText(
            safe_decode(cfg.oswebext_external_js))
        self.ui.plaintextedit_external_js.textChanged.connect(
            lambda: setattr(cfg, 'oswebext_external_js',
                            self.ui.plaintextedit_external_js.toPlainText()))
        self.ui.label_version.setText(__version__)
        self.ui.linedit_subject.setValidator(
            QRegExpValidator(QRegExp("^(?:\d+(?:-\d+)?(?:,(?!$))?)+")))
        self.ui.icon_expsize_warning.setPixmap(
            QIcon.fromTheme('emblem-important').pixmap(32, 32))
        self._init_widgets()
        self._run_linter()
Example #7
0
 def create_lineedit(self,
                     text,
                     default=None,
                     tip=None,
                     alignment=Qt.Horizontal,
                     regex=None,
                     wrap=True):
     label = QLabel(text)
     label.setWordWrap(wrap)
     edit = QLineEdit()
     layout = QHBoxLayout() if alignment == Qt.Horizontal else QVBoxLayout()
     layout.addWidget(label)
     layout.addWidget(edit)
     layout.setContentsMargins(0, 0, 0, 0)
     if default:
         edit.setText(default)
     if tip:
         edit.setToolTip(tip)
     if regex:
         edit.setValidator(QRegExpValidator(QRegExp(regex)))
     widget = QWidget(self)
     widget.label = label
     widget.edit = edit
     widget.setLayout(layout)
     return widget
Example #8
0
 def __init__(self, regex=None, tooltip=None):
     super(EditableListDelegate, self).__init__()
     self.regex = regex
     self.qregex = QRegExp(regex)
     self.tooltip = tooltip
     self.validator = QRegExpValidator(self.qregex)
     self.edit = None
Example #9
0
    def __init__(self, parent, plugin, tabs, data, icon):
        QDialog.__init__(self, parent)

        # Variables
        self.plugins_tabs = []
        self.plugins_data = []
        self.plugins_instances = []
        self.add_plugin(plugin, tabs, data, icon)
        self.plugin = None  # Last plugin with focus
        self.mode = self.FILE_MODE  # By default start in this mode
        self.initial_cursors = None  # {fullpath: QCursor}
        self.initial_path = None  # Fullpath of initial active editor
        self.initial_widget = None  # Initial active editor
        self.line_number = None  # Selected line number in filer
        self.is_visible = False  # Is the switcher visible?

        help_text = _("Press <b>Enter</b> to switch files or <b>Esc</b> to "
                      "cancel.<br><br>Type to filter filenames.<br><br>"
                      "Use <b>:number</b> to go to a line, e.g. "
                      "<b><code>main:42</code></b><br>"
                      "Use <b>@symbol_text</b> to go to a symbol, e.g. "
                      "<b><code>@init</code></b>"
                      "<br><br> Press <b>Ctrl+W</b> to close current tab.<br>")

        # Either allow searching for a line number or a symbol but not both
        regex = QRegExp("([A-Za-z0-9_]{0,100}@[A-Za-z0-9_]{0,100})|" +
                        "([A-Za-z0-9_]{0,100}:{0,1}[0-9]{0,100})")

        # Widgets
        self.edit = FilesFilterLine(self)
        self.help = HelperToolButton()
        self.list = QListWidget(self)
        self.filter = KeyPressFilter()
        regex_validator = QRegExpValidator(regex, self.edit)

        # Widgets setup
        self.setWindowFlags(Qt.Popup | Qt.FramelessWindowHint)
        self.setWindowOpacity(0.95)
        self.edit.installEventFilter(self.filter)
        self.edit.setValidator(regex_validator)
        self.help.setToolTip(help_text)
        self.list.setItemDelegate(HTMLDelegate(self))

        # Layout
        edit_layout = QHBoxLayout()
        edit_layout.addWidget(self.edit)
        edit_layout.addWidget(self.help)
        layout = QVBoxLayout()
        layout.addLayout(edit_layout)
        layout.addWidget(self.list)
        self.setLayout(layout)

        # Signals
        self.rejected.connect(self.restore_initial_state)
        self.filter.sig_up_key_pressed.connect(self.previous_row)
        self.filter.sig_down_key_pressed.connect(self.next_row)
        self.edit.returnPressed.connect(self.accept)
        self.edit.textChanged.connect(self.setup)
        self.list.itemSelectionChanged.connect(self.item_selection_changed)
        self.list.clicked.connect(self.edit.setFocus)
Example #10
0
 def set_regex(self, regex):
     """
     """
     if regex:
         self.regex = regex
         self.qregex = QRegExp(regex)
         validator = QRegExpValidator(self.qregex)
         self._text.setValidator(validator)
Example #11
0
    def __init__(self, parent, regex_base=None, key_filter_dict=None):
        super(FinderLineEdit, self).__init__(parent)
        self.key_filter_dict = key_filter_dict

        if regex_base is not None:
            # Widget setup
            regex = QRegExp(regex_base + "{100}")
            self.setValidator(QRegExpValidator(regex))
Example #12
0
 def __init__(self, *args, **kwargs):
     super(ProbeBasicLathe, self).__init__(*args, **kwargs)
     self.run_from_line_Num.setValidator(QRegExpValidator(
         QRegExp("[0-9]*")))
     self.feed_unit_per_minute = 0.0
     self.feed_per_rev = 0.0
     self.css_sword = 0.0
     self.rpm_mode = 0.0
Example #13
0
 def createEditor(self, widget, option, index):
     if not index.isValid():
         return 0
     if index.column() == 0:  # only on the cells in the first column
         editor = QLineEdit(widget)
         validator = QRegExpValidator(QRegExp(self.__regex), editor)
         editor.setValidator(validator)
         return editor
     return super(RegexValidator, self).createEditor(widget, option, index)
Example #14
0
 def __init__(self, *args, **kwargs):
     super(ProbeBasicLathe, self).__init__(*args, **kwargs)
     self.run_from_line_Num.setValidator(QRegExpValidator(
         QRegExp("[0-9]*")))
     self.feed_unit_per_minute = 0.0
     self.feed_per_rev = 0.0
     self.css_sword = 0.0
     self.rpm_mode = 0.0
     self.btnMdiBksp.clicked.connect(self.mdiBackSpace_clicked)
     self.btnMdiSpace.clicked.connect(self.mdiSpace_clicked)
Example #15
0
    def __init__(self, parent, callback=None):
        super(ShortcutFinder, self).__init__(parent)
        self._parent = parent

        # Widget setup
        regex = QRegExp(VALID_FINDER_CHARS + "{100}")
        self.setValidator(QRegExpValidator(regex))

        # Signals
        if callback:
            self.textChanged.connect(callback)
Example #16
0
    def coord_line_edit(self):
        template = QRegExp(r"[-]?\d*\.?\d{0,3}")
        validator = QRegExpValidator(template)

        line = QLineEdit("0.0")
        line.setValidator(validator)
        line.setFixedWidth(60)
        # line.editingFinished.connect(self.update_dist_to_target)
        line.textChanged.connect(self.update_dist_to_target)

        return line
Example #17
0
    def __init__(self, parent, callback=None, main=None,
                 regex_base=VALID_FINDER_CHARS):
        super(FinderLineEdit, self).__init__(parent)
        self._parent = parent
        self.main = main

        # Widget setup
        regex = QRegExp(regex_base + "{100}")
        self.setValidator(QRegExpValidator(regex))

        # Signals
        if callback:
            self.textChanged.connect(callback)
Example #18
0
    def create_textbox(self, label, option, hint=None, regex=None, check=None):
        widget = QLineEdit()
        widget.setAttribute(Qt.WA_MacShowFocusRect, False)
        widget.setMinimumWidth(250)

        if regex:
            regex_validator = QRegExpValidator(QRegExp(regex))
            widget.setValidator(regex_validator)

        widget.get_value = lambda w=widget: w.text()
        widget.set_value = lambda value, w=widget: w.setText(value)
        widget.set_warning = lambda w=widget: w.setSelection(0, 1000)
        widget.textChanged.connect(
            lambda v=None, w=widget: self.options_changed(widget=w))

        self.create_widget(widget=widget,
                           option=option,
                           label=label,
                           hint=hint,
                           check=check)
Example #19
0
    def update_format_string(self):
        """
        Accept a unit to display with a channel's value

        The unit may or may not be displayed based on the :attr:`showUnits`
        attribute. Receiving a new value for the unit causes the display to
        reset.
        """
        if self.channeltype is float:
            decimal_point = locale.localeconv()['decimal_point']
            # decimal_point = '.'
            if self._show_units and self._unit != "":
                re = QRegExp('(-?)(0|([1-9][0-9]*))(\\{}[0-9]+)?( {})?'.format(
                    decimal_point, self._unit))
            else:
                re = QRegExp(
                    '(-?)(0|([1-9][0-9]*))(\\{}[0-9]+)?'.format(decimal_point))
            validator = QRegExpValidator(re, self)
            self.setValidator(validator)
        super().update_format_string()
Example #20
0
    def create_lineedit(self,
                        text,
                        default=None,
                        tip=None,
                        alignment=Qt.Horizontal,
                        regex=None,
                        wrap=True):
        """Create line-edit widget.

        :param text: key
        :type text: str
        :param default: default value
        :type default: str
        :param tip: tool tip
        :type tip: str
        :param alignment: alignment, horizontal or vertical
        :type alignment: Qt
        :param regex: regular expression
        :type regex: str
        :param wrap: wrap text
        :type wrap: bool
        :return: QWidget
        """
        label = QLabel(text)
        label.setWordWrap(wrap)
        edit = QLineEdit()
        layout = QHBoxLayout() if alignment == Qt.Horizontal else QVBoxLayout()
        layout.addWidget(label)
        layout.addWidget(edit)
        layout.setContentsMargins(0, 0, 0, 0)
        if default:
            edit.setText(default)
        if tip:
            edit.setToolTip(tip)
        if regex:
            edit.setValidator(QRegExpValidator(QRegExp(regex)))
        widget = QWidget(self)
        widget.label = label
        widget.edit = edit
        widget.setLayout(layout)
        return widget
Example #21
0
    def __init__(self, main_window, oswebext):
        """
		desc:
			Constructor.

		arguments:
			main_window:	The main-window object.
		"""

        super(oswebext_widget,
              self).__init__(main_window, ui=u'extensions.oswebext.oswebext')
        self._oswebext = oswebext
        self.ui.button_test.clicked.connect(self._test)
        self.ui.button_jatos.clicked.connect(self._export_jatos)
        self.ui.button_convert.clicked.connect(self._convert_results)
        self.ui.label_version.setText(__version__)
        self.ui.linedit_subject.setValidator(
            QRegExpValidator(QRegExp("^(?:\d+(?:-\d+)?(?:,(?!$))?)+")))
        self.ui.icon_expsize_warning.setPixmap(
            QIcon.fromTheme('emblem-important').pixmap(32, 32))
        self._run_linter()
Example #22
0
    def __init__(self, *args, **kwargs):
        super(ParametersFrame, self).__init__(*args, **kwargs)
        self.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.contentLayout = QGridLayout()

        self.setpointVoltageLabel = QLabel("Fixed voltage [3000 to 7000] V")
        self.setpointVoltageSettingLabel = QLabel()
        self.setpointVoltageInp = QLineEdit()
        self.setpointVoltageInp.setMaximumWidth(100)
        self.setpointVoltageInp.setValidator(QIntValidator(3000, 7000))
        self.setpointVoltageInp.setToolTip("Final voltage setpoint.")
        self.setpointVoltageInp.setText("3000")
        self.contentLayout.addWidget(self.setpointVoltageLabel, 0, 0, 1, 1)
        self.contentLayout.addWidget(self.setpointVoltageInp, 0, 1, 1, 1)
        self.contentLayout.addWidget(self.setpointVoltageSettingLabel, 0, 2, 1,
                                     1)

        self.stepToFixDelayLabel = QLabel("Step to Fixed delay (mm:ss)")
        self.stepToFixDelaySettingLabel = QLabel()
        self.stepToFixDelayInp = QLineEdit()
        self.stepToFixDelayInp.setMaximumWidth(100)
        self.stepToFixDelayInp.setValidator(
            QRegExpValidator(QRegExp(MIN_SEC_PATTERN)))
        self.stepToFixDelayInp.setToolTip(
            "Delay between toStep and toFixed calls.")
        self.stepToFixDelayInp.setText("05:00")

        self.contentLayout.addWidget(self.stepToFixDelayLabel, 1, 0, 1, 1)
        self.contentLayout.addWidget(self.stepToFixDelayInp, 1, 1, 1, 1)
        self.contentLayout.addWidget(self.stepToFixDelaySettingLabel, 1, 2, 1,
                                     1)

        self.setButton = QPushButton("Confirm")
        self.setButton.clicked.connect(self.confirm)
        self.setButton.setToolTip("Apply settings")
        self.contentLayout.addWidget(self.setButton, 3, 1, 1, 1)

        self.setLayout(self.contentLayout)
        self.confirm()
Example #23
0
    def __init__(self, api, parent=None):
        """Login dialog."""
        super(AuthenticationDialog, self).__init__(parent)

        self._parent = parent
        self.config = CONF
        self.api = api
        self.token = None
        self.error = None
        self.tracker = GATracker()
        self.forgot_username_url = None
        self.forgot_password_url = None

        # Widgets
        self.label_username = QLabel('Username:'******'Password:'******'<hr><br><b>Already a member? '
                                        'Sign in!</b><br>')
        # For styling purposes the label next to a ButtonLink is also a button
        # so they align adequately
        self.button_register_text = ButtonLabel('You can register by '
                                                'visiting the ')
        self.button_register = ButtonLink('Anaconda Cloud')
        self.button_register_after_text = ButtonLabel('website.')
        self.label_information = QLabel('''
            <strong>Anaconda Cloud</strong> is where packages, notebooks,
            and <br> environments are shared. It provides powerful <br>
            collaboration and package management for open <br>
            source and private projects.<br>
            ''')
        self.label_message = QLabel('')
        self.button_forgot_username = ButtonLink('I forgot my username')
        self.button_forgot_password = ButtonLink('I forgot my password')
        self.button_login = ButtonPrimary('Login')
        self.button_cancel = ButtonNormal('Cancel')

        # Widgets setup
        self.button_login.setDefault(True)
        username_validator = QRegExpValidator(self.USER_RE)
        self.text_username.setValidator(username_validator)

        self.setMinimumWidth(260)
        self.setWindowTitle('Sign in')

        # This allows to completely style the dialog with css using the frame
        self.text_password.setEchoMode(QLineEdit.Password)
        self.label_message.setVisible(False)

        # Layout
        grid_layout = QVBoxLayout()
        grid_layout.addWidget(self.label_username)
        # grid_layout.addWidget(SpacerVertical())
        grid_layout.addWidget(self.text_username)
        grid_layout.addWidget(SpacerVertical())
        grid_layout.addWidget(self.label_password)
        # grid_layout.addWidget(SpacerVertical())
        grid_layout.addWidget(self.text_password)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.label_information)

        register_layout = QHBoxLayout()
        register_layout.addWidget(self.button_register_text)
        register_layout.addWidget(self.button_register)
        register_layout.addWidget(self.button_register_after_text)
        register_layout.addStretch()
        main_layout.addLayout(register_layout)
        main_layout.addWidget(self.label_signin_text)
        main_layout.addLayout(grid_layout)
        main_layout.addWidget(SpacerVertical())
        main_layout.addWidget(self.label_message)
        main_layout.addWidget(self.button_forgot_username, 0, Qt.AlignRight)
        main_layout.addWidget(self.button_forgot_password, 0, Qt.AlignRight)

        layout_buttons = QHBoxLayout()
        layout_buttons.addStretch()
        layout_buttons.addWidget(self.button_cancel)
        layout_buttons.addWidget(SpacerHorizontal())
        layout_buttons.addWidget(self.button_login)

        main_layout.addWidget(SpacerVertical())
        main_layout.addWidget(SpacerVertical())
        main_layout.addLayout(layout_buttons)

        self.setLayout(main_layout)

        # Signals
        self.text_username.textEdited.connect(self.check_text)
        self.text_password.textEdited.connect(self.check_text)
        self.button_login.clicked.connect(self.login)
        self.button_cancel.clicked.connect(self.reject)

        # Setup
        self.check_text()
        self.update_style_sheet()
        self.text_username.setFocus()
        self.setup()
class DialogPileupPeakParameters(QDialog):
    def __init__(self, parent=None):

        super().__init__(parent)

        self._data = {"element1": "", "element2": "", "energy": 0}
        # Reference to function that computes pileup energy based on two emission lines
        self._compute_energy = None

        self.setWindowTitle("Pileup Peak Parameters")

        self.le_element1 = LineEditExtended()
        set_tooltip(self.le_element1,
                    "The <b>name</b> of the emission line #1")
        self.le_element2 = LineEditExtended()
        set_tooltip(self.le_element2,
                    "The <b>name</b> of the emission line #2")
        self.peak_energy = LineEditReadOnly()
        set_tooltip(
            self.peak_energy,
            "The <b>energy</b> (location) of the pileup peak center. The energy can not"
            "be edited: it is set based on the selected emission lines",
        )

        self._validator_eline = QRegExpValidator()
        # TODO: the following regex is too broad: [a-z] should be narrowed down
        self._validator_eline.setRegExp(QRegExp(r"^[A-Z][a-z]?_[KLM][a-z]\d$"))

        instructions = QLabel(
            "Specify two emission lines, e.g. Si_Ka1 and Fe_Ka1")

        grid = QGridLayout()
        grid.addWidget(QLabel("Emission line 1:"), 0, 0)
        grid.addWidget(self.le_element1, 0, 1)
        grid.addWidget(QLabel("Emission line 2:"), 1, 0)
        grid.addWidget(self.le_element2, 1, 1)
        grid.addWidget(QLabel("Peak energy, keV:"), 2, 0)
        grid.addWidget(self.peak_energy, 2, 1)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok
                                      | QDialogButtonBox.Cancel)
        button_box.button(QDialogButtonBox.Cancel).setDefault(True)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        self.pb_ok = button_box.button(QDialogButtonBox.Ok)

        vbox = QVBoxLayout()
        vbox.addWidget(instructions)
        vbox.addSpacing(10)
        vbox.addLayout(grid)
        vbox.addWidget(button_box)

        self.setLayout(vbox)

        self.le_element1.editingFinished.connect(
            self.le_element1_editing_finished)
        self.le_element2.editingFinished.connect(
            self.le_element2_editing_finished)

        self.le_element1.textChanged.connect(self.le_element1_text_changed)
        self.le_element2.textChanged.connect(self.le_element2_text_changed)

    def set_compute_energy_function(self, func):
        self._compute_energy = func

    def set_parameters(self, data):
        self._data = data.copy()
        self._show_data()

    def get_parameters(self):
        return self._data

    def _format_float(self, v):
        return f"{v:.12g}"

    def _show_data(self):
        self.le_element1.setText(self._data["element1"])
        self.le_element2.setText(self._data["element2"])
        self._show_energy()

    def _show_energy(self, energy=None):
        if energy is None:
            energy = self._data["energy"]
        text = self._format_float(energy)
        self.peak_energy.setText(text)
        self._validate_all()

    def _validate_le_element1(self, text=None):
        return self._validate_eline(self.le_element1, text)

    def _validate_le_element2(self, text=None):
        return self._validate_eline(self.le_element2, text)

    def _validate_peak_energy(self, energy=None):
        # Peak energy is not edited, so it is always has a valid floating point number
        #   The only problem is that it may be out of range.
        if energy is None:
            energy = self._data["energy"]
        valid = self._data["range_low"] < energy < self._data["range_high"]
        self.peak_energy.setValid(valid)
        return valid

    def _validate_all(self):
        valid = self._validate_le_element1() and self._validate_le_element2()
        # Energy doesn't influence the success of validation, but the Ok button
        #   should be disabled if energy if out of range.
        valid_energy = self._validate_peak_energy()
        self.pb_ok.setEnabled(valid and valid_energy)
        return valid

    def _validate_eline(self, le_widget, text):
        if text is None:
            text = le_widget.text()

        valid = True
        if self._validator_eline.validate(text,
                                          0)[0] != QDoubleValidator.Acceptable:
            valid = False
        else:
            # Try to compute energy for the pileup peak
            if self._compute_energy(text, text) == 0:
                valid = False
        le_widget.setValid(valid)
        return valid

    def _refresh_energy(self):
        eline1 = self._data["element1"]
        eline2 = self._data["element2"]
        try:
            energy = self._compute_energy(eline1, eline2)
            self._data["energy"] = energy
            self._show_energy()
        except Exception:
            self._data["energy"] = 0
            self._show_energy()

    def le_element1_editing_finished(self):
        if self._validate_le_element1():
            self._data["element1"] = self.le_element1.text()
            self._refresh_energy()
        else:
            self.le_element1.setText(self._data["element1"])
        self._validate_all()

    def le_element2_editing_finished(self):
        if self._validate_le_element2():
            self._data["element2"] = self.le_element2.text()
            self._refresh_energy()
        else:
            self.le_element2.setText(self._data["element2"])
        self._validate_all()

    def le_element1_text_changed(self, text):
        if self._validate_all():
            self._data["element1"] = self.le_element1.text()
            print(f"element1 - {self._data['element1']}")
            self._refresh_energy()

    def le_element2_text_changed(self, text):
        if self._validate_all():
            self._data["element2"] = self.le_element2.text()
            print(f"element2 - {self._data['element2']}")
            self._refresh_energy()
Example #25
0
    def __init__(self,
                 email=None,
                 password=None,
                 server=None,
                 port=25,
                 parent=None):
        super().__init__(parent=parent)

        self._email = email
        self._password = password
        self._server = server
        self._port = port

        mainLayout = QVBoxLayout(self)
        mainLayout.setContentsMargins(0, 0, 0, 0)
        mainLayout.setSpacing(0)

        # server widget
        serverportWidget = QWidget(self)
        serverportLayout = QHBoxLayout(serverportWidget)
        serverportLayout.setContentsMargins(10, 10, 10, 10)

        serverLabel = QLabel("SMTP服务器:")
        serverLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;")

        self.serverLineEdit = QLineEdit(self._server)
        self.serverLineEdit.setValidator(
            QRegExpValidator(QRegExp(r"[\w\-_]+(\.[\w\-_]+)+")))
        self.serverLineEdit.setPlaceholderText("SMTP服务器地址")
        self.serverLineEdit.textChanged.connect(self._setServer)

        portLabel = QLabel("端口:")
        portLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;")

        self.portLineEdit = QLineEdit(str(self._port))
        self.portLineEdit.setValidator(QRegExpValidator(QRegExp(r"^[0-9]+$")))
        self.portLineEdit.setPlaceholderText("端口号")
        self.portLineEdit.textChanged.connect(self._setPort)

        serverportLayout.addWidget(serverLabel)
        serverportLayout.addWidget(self.serverLineEdit)
        serverportLayout.addWidget(portLabel)
        serverportLayout.addWidget(self.portLineEdit)
        serverportLayout.setStretch(0, 1)
        serverportLayout.setStretch(1, 5)
        serverportLayout.setStretch(2, 1)
        serverportLayout.setStretch(3, 1)

        # email widget
        emailWidget = QWidget(self)
        emailLayout = QHBoxLayout(emailWidget)
        emailLayout.setContentsMargins(0, 0, 0, 0)

        emailLabel = QLabel("邮箱:")
        emailLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;")

        self.emailLineEdit = QLineEdit(self._email)
        self.emailLineEdit.setValidator(
            QRegExpValidator(
                QRegExp(
                    "^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"
                )))
        self.emailLineEdit.setPlaceholderText("请输入邮箱地址")
        self.emailLineEdit.textChanged.connect(self._setEmail)

        emailLayout.addWidget(emailLabel)
        emailLayout.addWidget(self.emailLineEdit)

        # password widget
        passwordWidget = QWidget(self)
        passwordLayout = QHBoxLayout(passwordWidget)
        passwordLayout.setContentsMargins(0, 0, 0, 0)

        passwordLabel = QLabel("密码:")
        passwordLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;")

        self.passwordLineEdit = QLineEdit(self._password)
        self.passwordLineEdit.setPlaceholderText("请输入密码")
        self.passwordLineEdit.textChanged.connect(self._setPassword)
        self.passwordLineEdit.setEchoMode(QLineEdit.Password)

        passwordLayout.addWidget(passwordLabel)
        passwordLayout.addWidget(self.passwordLineEdit)

        # 插入widget
        mainLayout.addWidget(serverportWidget)
        mainLayout.addWidget(emailWidget)
        mainLayout.addWidget(passwordWidget)
Example #26
0
 def __init__(self, regexp, widget, color_selector):
     QRegExpValidator.__init__(self, regexp, widget)
     self.color_selector = color_selector
def generateRegExpValidator(widget, expression):
    rx = QRegExp(expression)
    return QRegExpValidator(rx, widget)
Example #28
0
 def __init__(self, *args, **kwargs):
     super(ProbeBasic, self).__init__(*args, **kwargs)
     self.run_from_line_Num.setValidator(QRegExpValidator(
         QRegExp("[0-9]*")))
     self.btnMdiBksp.clicked.connect(self.mdiBackSpace_clicked)
     self.btnMdiSpace.clicked.connect(self.mdiSpace_clicked)
Example #29
0
 def set_regex_validation(self, regex):
     """Set the regular expression to validate content."""
     self._regex = regex
     self._reg = re.compile(regex, re.IGNORECASE)
     validator = QRegExpValidator(QRegExp(regex))
     self.lineedit.setValidator(validator)
Example #30
0
 def __init__(self, *args, **kwargs):
     super(ProbeBasic, self).__init__(*args, **kwargs)
     self.run_from_line_Num.setValidator(QRegExpValidator(QRegExp("[0-9]*")))
     self.dynatc_left.iniFilePrefix = "LEFT_"
     self.dynatc_right.iniFilePrefix = "RIGHT_"