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()