def __init__(self):
        super().__init__()
        fields = QFormLayout()
        self.regulations = list()

        self.reaction_name = QLineEdit()
        self.transcription_rate = QLineEdit()
        self.transcription_rate.setValidator(helper.get_double_validator())

        self.transcribed_species = common_widgets.make_species_combo()
        self.transcribed_species.currentIndexChanged.connect(self._transcribed_species_current_index_changed)

        self.is_regulated = QCheckBox("Is Regulated")
        self.is_regulated.stateChanged.connect(self._is_regulated_state_changed)

        self.regulation_settings_panel = self._make_regulation_settings_panel()

        fields.addRow(QLabel("Reaction name"), self.reaction_name)
        fields.addRow(QLabel("Transcription rate"), self.transcription_rate)
        fields.addRow(QLabel("Transcribed species: "), self.transcribed_species)
        fields.addRow(self.is_regulated)
        fields.addRow(self.regulation_settings_panel)

        self._is_regulated_state_changed()
        self.setLayout(fields)
    def _init_fields(self):
        fields = QFormLayout()

        self.lhs = common_widgets.make_species_combo()
        self.rhs = QLineEdit()
        self.rhs.setValidator(helper.get_double_validator())
        self.rhs.setPlaceholderText("Constraint value")
        self.sign_combo = QComboBox()
        self.sign_combo.addItems([">=", "<="])

        constraint_box = QHBoxLayout()
        constraint_box.addWidget(self.lhs)
        constraint_box.addWidget(self.sign_combo)
        constraint_box.addWidget(self.rhs)
        fields.addRow("Constraint (e.g. X >= 20)", constraint_box)

        self.time_lb = QLineEdit()
        self.time_lb.setValidator(helper.get_double_validator())
        self.time_lb.setPlaceholderText("Start")
        self.time_ub = QLineEdit()
        self.time_ub.setValidator(helper.get_double_validator())
        self.time_ub.setPlaceholderText("End")

        time_box = QHBoxLayout()
        time_box.addWidget(self.time_lb)
        time_box.addWidget(QLabel("-"))
        time_box.addWidget(self.time_ub)
        fields.addRow("Time period (e.g. 0 - 20)", time_box)

        self.layout.addLayout(fields)
    def _init_custom_reaction_fields(self):
        fields = QFormLayout()

        self.reaction_name4 = QLineEdit()
        fields.addRow(QLabel("Reaction name"), self.reaction_name4)
        self.equation = QLineEdit()
        fields.addRow(QLabel("Equation: "), self.equation)
        self.reactant = common_widgets.make_species_combo()
        fields.addRow(QLabel("Reactant: "), self.reactant)
        self.product = common_widgets.make_species_combo()
        fields.addRow(QLabel("Product: "), self.product)

        self.custom_fields = QWidget()
        self.custom_fields.setLayout(fields)
        self.properties_layout.addWidget(self.custom_fields)
        self.custom_fields.hide()
    def _init_translation_fields(self):
        fields = QFormLayout()

        self.reaction_name2 = QLineEdit()
        fields.addRow(QLabel("Reaction name"), self.reaction_name2)
        self.translation_rate = QLineEdit()
        self.translation_rate.setValidator(helper.get_double_validator())
        fields.addRow(QLabel("Translation rate: "), self.translation_rate)
        self.translated_mrna = common_widgets.make_species_combo()
        fields.addRow(QLabel("Translated mRNA: "), self.translated_mrna)
        self.produced_protein = common_widgets.make_species_combo()
        fields.addRow(QLabel("Produced protein: "), self.produced_protein)

        self.translation_fields = QWidget()
        self.translation_fields.setLayout(fields)
        self.properties_layout.addWidget(self.translation_fields)
        self.translation_fields.hide()
    def _init_degradation_fields(self):
        fields = QFormLayout()

        self.reaction_name3 = QLineEdit()
        fields.addRow(QLabel("Reaction name"), self.reaction_name3)
        self.decay_rate = QLineEdit()
        self.decay_rate.setValidator(helper.get_double_validator())
        fields.addRow(QLabel("Decay rate: "), self.decay_rate)
        self.decaying_species = common_widgets.make_species_combo()
        fields.addRow(QLabel("Decaying species: "), self.decaying_species)

        self.degradation_fields = QWidget()
        self.degradation_fields.setLayout(fields)
        self.properties_layout.addWidget(self.degradation_fields)
        self.degradation_fields.hide()
    def _make_add_regulation_box(self):
        self.activation_radio = QRadioButton("Activation")
        self.repression_radio = QRadioButton("Repression")

        self.regulator = common_widgets.make_species_combo()
        self.k = QLineEdit()
        self.k.setValidator(helper.get_double_validator())

        self.add_button = QPushButton("Add regulation")
        self.add_button.clicked.connect(self._add_regulation_clicked)

        fields = QFormLayout()
        fields.addRow(self.activation_radio, self.repression_radio)
        fields.addRow(QLabel("Regulating species:"), self.regulator)
        fields.addRow(QLabel("K:"), self.k)
        fields.addRow(self.add_button)

        add_regulation_box = QGroupBox()
        add_regulation_box.setLayout(fields)
        return add_regulation_box