Esempio n. 1
0
 def loadIntegerFloatList(self, font, src, dst):
     values = " ".join(str(val) for val in getattr(font.info, src))
     setattr(self, dst + "Edit", QLineEdit(values, self))
     validator = QRegularExpressionValidator(self)
     validator.setRegularExpression(
         QRegularExpression("(-?\d+(.\d+)?\s*)*"))
     getattr(self, dst + "Edit").setValidator(validator)
Esempio n. 2
0
 def loadIntegerFloatList(self, font, src, dst):
     values = " ".join(str(val) for val in getattr(font.info, src))
     setattr(self, dst + "Edit", QLineEdit(values, self))
     validator = QRegularExpressionValidator(self)
     validator.setRegularExpression(
         QRegularExpression("(-?\d+(.\d+)?\s*)*"))
     getattr(self, dst + "Edit").setValidator(validator)
Esempio n. 3
0
    def __init__(self, parent=None):
        super(GotoLineDialog, self).__init__(parent)
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle(self.tr("Go to…"))

        self.lineEdit = QLineEdit(self)
        validator = QRegularExpressionValidator(self)
        validator.setRegularExpression(
            QRegularExpression("(^[1-9][0-9]*(:[1-9][0-9]*)?$)?"))
        self.lineEdit.setValidator(validator)
        self.lineEdit.returnPressed.connect(self.accept)
        label = QLabel(self.tr("Enter a row:column to go to"), self)

        layout = QVBoxLayout(self)
        layout.addWidget(self.lineEdit)
        layout.addWidget(label)
        self.setLayout(layout)
Esempio n. 4
0
    def __init__(self, parent=None):
        super(GotoLineDialog, self).__init__(parent)
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle(self.tr("Go to…"))

        self.lineEdit = QLineEdit(self)
        validator = QRegularExpressionValidator(self)
        validator.setRegularExpression(
            QRegularExpression("(^[1-9][0-9]*(:[1-9][0-9]*)?$)?"))
        self.lineEdit.setValidator(validator)
        self.lineEdit.returnPressed.connect(self.accept)
        label = QLabel(self.tr("Enter a row:column to go to"), self)

        layout = QVBoxLayout(self)
        layout.addWidget(self.lineEdit)
        layout.addWidget(label)
        self.setLayout(layout)
def VersionValidator(parent):
    validator = QRegularExpressionValidator(parent)
    validator.setRegularExpression(
        QRegularExpression("([0-9]+\\.[0-9]+\\.[0-9]+)?"))
    return validator
def VersionValidator(parent):
    validator = QRegularExpressionValidator(parent)
    validator.setRegularExpression(QRegularExpression("([0-9]+\\.[0-9]+\\.[0-9]+)?"))
    return validator
Esempio n. 7
0
class ReactionAttributesDisplayWidget(QWidget, Ui_ReactionAttribs):

    changed = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(ReactionAttributesDisplayWidget, self).__init__(parent)
        self.setupUi(self)
        self.model = None
        self.reaction = None
        self.default_id_border = self.idLineEdit.styleSheet()

        # Setup validator for SBML compliant ids
        self.validator = QRegularExpressionValidator()
        self.validator.setRegularExpression(
            QRegularExpression(r"^[a-zA-Z0-9_]*$"))
        self.idLineEdit.setValidator(self.validator)

        # Toggle id status
        self.validate_id()
        self.setup_connections()

    def setup_connections(self):
        # Connect validators
        self.idLineEdit.textChanged.connect(self.validate_id)

        # Connect inputs to changed
        self.idLineEdit.textChanged.connect(self.changed.emit)
        self.nameLineEdit.textChanged.connect(self.changed.emit)
        self.subsystemLineEdit.textChanged.connect(self.changed.emit)
        self.upperBoundInput.valueChanged.connect(self.changed.emit)
        self.lowerBoundInput.valueChanged.connect(self.changed.emit)
        self.objectiveCoefficientInput.valueChanged.connect(self.changed.emit)

        # Connect setting of the boundaries
        self.upperBoundInput.valueChanged.connect(self.set_range_lower_bound)
        self.lowerBoundInput.valueChanged.connect(self.set_range_upper_bound)

    def set_item(self, reaction, model):
        self.model = model
        self.reaction = reaction

        if reaction:
            # Set the range for the boundary inputs
            self.upperBoundInput.setRange(reaction.lower_bound,
                                          max(reaction.upper_bound, 1000.))
            self.lowerBoundInput.setRange(min(reaction.lower_bound, -1000.),
                                          reaction.upper_bound)

        self.populate_widgets()

    def save_state(self):
        """ Save the current content of the input widgets to the reaction

        This slot is triggered by the accepted() signal of the dialog.
        """

        if self.reaction.id != self.idLineEdit.text():
            self.reaction.id = self.idLineEdit.text()
            self.model.repair(rebuild_relationships=False)
        self.reaction.name = self.nameLineEdit.text()
        self.reaction.lower_bound = self.lowerBoundInput.value()
        self.reaction.upper_bound = self.upperBoundInput.value()
        self.reaction.subsystem = self.subsystemLineEdit.text()
        if self.reaction.model:
            self.reaction.objective_coefficient = self.objectiveCoefficientInput.value(
            )

    @property
    def content_changed(self):
        """ Check if the content of the input widgets is different
        from the original information of the reaction """

        if self.reaction:
            return (
                self.idLineEdit.text() != self.reaction.id
                or self.nameLineEdit.text() != self.reaction.name
                or self.subsystemLineEdit.text() != self.reaction.subsystem
                or self.upperBoundInput.value() != self.reaction.upper_bound
                or self.lowerBoundInput.value() != self.reaction.lower_bound
                or self.objectiveCoefficientInput.value() !=
                self.reaction.objective_coefficient)
        else:
            return False

    def clear_information(self):
        """ Clear all information in the input widgets
        that are direct children of the dialog """

        self.idLineEdit.clear()
        self.nameLineEdit.clear()
        self.subsystemLineEdit.clear()
        self.upperBoundInput.clear()
        self.lowerBoundInput.clear()
        self.objectiveCoefficientInput.clear()

    def populate_widgets(self):
        """ Update the information displayed in the individual input elements """
        self.clear_information()

        if self.reaction is not None:
            self.idLineEdit.setText(self.reaction.id)
            self.idLineEdit.setCursorPosition(0)
            self.nameLineEdit.setText(self.reaction.name)
            self.nameLineEdit.setCursorPosition(0)
            self.subsystemLineEdit.setText(self.reaction.subsystem)
            self.subsystemLineEdit.setCursorPosition(0)
            self.upperBoundInput.setValue(self.reaction.upper_bound)
            self.lowerBoundInput.setValue(self.reaction.lower_bound)
            self.objectiveCoefficientInput.setValue(
                self.reaction.objective_coefficient)
            # Disable objective coefficient input if model not set
            self.objectiveCoefficientInput.setEnabled(
                self.reaction.model is not None)
            self.setWindowTitle(self.reaction.id)

            # Set the subsystem completer
            completer = QCompleter(list(self.model.subsystems.keys()), self)
            completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
            self.subsystemLineEdit.setCompleter(completer)

    @QtCore.pyqtSlot(str)
    def validate_id(self, new_id=None):
        if not new_id:
            self.idLineEdit.setStyleSheet("border: 1px solid red;")
            self.labelIdStatus.setToolTip("Empty Id!")
            self.labelIdStatus.setVisible(True)
        elif self.reaction and new_id != self.reaction.id and new_id in self.model.reactions:
            self.idLineEdit.setStyleSheet("border: 1px solid red;")
            self.labelIdStatus.setToolTip("Id exists already in model!")
            self.labelIdStatus.setVisible(True)
        else:
            self.idLineEdit.setStyleSheet(self.default_id_border)
            self.labelIdStatus.setVisible(False)

    def valid_inputs(self):
        """ Check that all input elements that are required to have a valid input
        actually do so """

        if self.reaction and self.idLineEdit.text():
            return (self.idLineEdit.text() not in self.model.reactions
                    or self.idLineEdit.text() == self.reaction.id)
        else:
            return False

    @QtCore.pyqtSlot()
    def set_range_upper_bound(self):
        """ Dynamically adjust the minimum range of the upperbound input
         to match the lower bound set

         This slot is triggered by the valueChanged-signal of the
         lower_bound input widget
         """
        self.upperBoundInput.setMinimum(self.lowerBoundInput.value())

    @QtCore.pyqtSlot()
    def set_range_lower_bound(self):
        """ Dynamically adjust the maxmimum range of the lowerbound input
        to match the upper bound set

        This slot is triggered by the valueChanged-signal of the
        upper_bound input widget
        """
        self.lowerBoundInput.setMaximum(self.upperBoundInput.value())