Example #1
0
    def __init__(self, session=None, parent=None):
        super(ExperimentsTab, self).__init__(parent)
        self.session = session
        self.redis_conn = Redis()

        self.current_experiment = None

        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)

        # experiments
        self.experiment_box = QtGui.QGroupBox(self, title="Experiments")
        self.experiment_box.setSizePolicy(QtGui.QSizePolicy.Minimum,
                                          QtGui.QSizePolicy.Minimum)
        self.layout.addWidget(self.experiment_box, 0, 0)
        self.experiment_box_layout = QtGui.QGridLayout(self.experiment_box)
        self.experiment_box.setLayout(self.experiment_box_layout)

        self.experiment_list = ExperimentComboBox(session=session)
        self.experiment_list.currentIndexChanged.connect(
            self.update_current_experiment)
        self.experiment_box_layout.addWidget(self.experiment_list, 0, 0)

        self.new_experiment_button = QtGui.QPushButton("New Experiment")
        self.new_experiment_button.released.connect(self.new_experiment)
        self.experiment_box_layout.addWidget(self.new_experiment_button, 0, 1)

        # data sources
        self.data_box = QtGui.QGroupBox(self,
                                        title="Trials for this Experiment")
        self.data_box.setSizePolicy(QtGui.QSizePolicy.Expanding,
                                    QtGui.QSizePolicy.Expanding)
        self.layout.addWidget(self.data_box, 1, 0, 1, 1)

        self.data_box_layout = QtGui.QGridLayout(self.data_box)
        self.data_box.setLayout(self.data_box_layout)

        self.trial_table = QtGui.QTableView(self)
        #        self.trial_table.doubleClicked.connect(self.edit_racer)
        #        self.trial_table.activated.connect(self.update_current_trial)
        self.trial_table.setSelectionBehavior(
            QtGui.QAbstractItemView.SelectRows)
        self.trial_table_model = SQLAlchemyTableModel(
            session, Trial, [('Type', Trial.discriminator, 'discriminator'),
                             ('Name', Trial.name, 'name'),
                             ('Reps', Trial.reps, 'reps'),
                             ('Start', Trial.start_date, 'start_date'),
                             ('End', Trial.end_date, 'end_date')])

        self.trial_table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.trial_table.customContextMenuRequested.connect(
            self.display_context_menu)
        self.trial_table.doubleClicked.connect(self.edit_trial)
        self.trial_table.setSelectionMode(
            QtGui.QAbstractItemView.SingleSelection)

        self.trial_table_selection_model = QtGui.QItemSelectionModel(
            self.trial_table_model)
        self.trial_table.setModel(self.trial_table_selection_model.model())
        self.trial_table.setSelectionModel(self.trial_table_selection_model)
        self.trial_table_selection_model.selectionChanged.connect(
            self.update_current_trial)

        self.data_box_layout.addWidget(self.trial_table, 0, 0, 2, 1)

        self.add_trial_button = QtGui.QPushButton("New Trial")
        self.data_box_layout.addWidget(self.add_trial_button, 0, 1)
        self.add_trial_button.released.connect(self.new_trial)

        self.trial_details_box = QtGui.QGroupBox("Trial Details")
        self.trial_details_box.setSizePolicy(QtGui.QSizePolicy.Minimum,
                                             QtGui.QSizePolicy.Minimum)
        self.data_box_layout.addWidget(self.trial_details_box, 2, 0, 1, 1)
        self.trial_details_box_layout = QtGui.QGridLayout(
            self.trial_details_box)

        self.echo_trial_details = EchoTrialDetailsWidget()
        self.trial_details_box_layout.addWidget(self.echo_trial_details, 0, 0,
                                                1, 1)
        self.echo_trial_details.hide()

        self.http_trial_details = HttpTrialDetailsWidget()
        self.trial_details_box_layout.addWidget(self.http_trial_details, 0, 0,
                                                1, 1)

        self.racer_settings_widget = RacerDetailsWidget()
        self.trial_details_box_layout.addWidget(self.racer_settings_widget, 1,
                                                0, 1, 1)

        self.trial_status = TrialStatusWidget()
        #        self.trial_status.trial_edit.connect(self.show_edit_dialog)
        self.trial_status.trial_started.connect(self.start_trial)
        self.trial_status.trial_stopped.connect(self.stop_trial)
        self.trial_status.trial_refreshed.connect(self.update_trial_details)
        self.trial_status.trial_edit.connect(self.edit_trial)
        self.trial_details_box_layout.addWidget(self.trial_status, 0, 1, 2, 1)

        self.update_current_experiment(0)
        self.trial_table.resizeColumnsToContents()