def remove_subject(self, subject): for i in reversed(range(self.n_variables)): if self.cellWidget(i, 1).currentText() == subject: self.removeRow(i) self.n_variables -= 1 self.update_available() null_resize(self)
def add_subject(self, setup=None, subject=None): '''Add row to table allowing extra subject to be specified.''' setup_cbox = QtGui.QComboBox() setup_cbox.addItems(self.available_setups if self. available_setups else ['select setup']) setup_cbox.activated.connect(self.update_available_setups) remove_button = QtGui.QPushButton('remove') ind = QtCore.QPersistentModelIndex(self.model().index( self.n_subjects, 2)) remove_button.clicked.connect(lambda: self.remove_subject(ind.row())) add_button = QtGui.QPushButton('add') add_button.clicked.connect(self.add_subject) self.setCellWidget(self.n_subjects, 0, setup_cbox) self.setCellWidget(self.n_subjects, 2, remove_button) self.insertRow(self.n_subjects + 1) self.setCellWidget(self.n_subjects + 1, 2, add_button) if setup: cbox_set_item(setup_cbox, setup) if subject: subject_item = QtGui.QTableWidgetItem() subject_item.setText(subject) self.setItem(self.n_subjects, 1, subject_item) self.n_subjects += 1 self.update_available_setups() null_resize(self)
def remove_subject(self, subject_n): '''Remove specified row from table''' if self.item(subject_n, 2): s_name = self.item(subject_n, 2).text() self.parent().parent().variables_table.remove_subject(s_name) self.removeRow(subject_n) self.n_subjects -= 1 self.update_available_setups() self.update_subjects() null_resize(self)
def swap_with_above(self, row): if self.n_variables > row > 0: new_widgets = Variable_row(self) new_widgets.copy_vals_from_row(row) self.removeRow(row) # delete old row above_row = row - 1 self.insertRow(above_row) # insert new row new_widgets.put_into_table( row_index=above_row) # populate new row with widgets self.connect_buttons(above_row) # connect new buttons to functions self.reconnect_buttons( row ) # disconnect swapped row buttons and reconnect to its new row index self.update_available() null_resize(self)
def add_row(self, varname=None, row_dict=None): # populate row with widgets new_widgets = Variable_row(self, varname, row_dict) new_widgets.put_into_table(row_index=self.n_variables) # connect buttons to functions self.connect_buttons(self.n_variables) # insert another row and shift down "add" button self.insertRow(self.n_variables + 1) self.setCellWidget(self.n_variables + 1, 10, self.add_button) self.n_variables += 1 self.update_available() null_resize(self)
def add_variable(self, var_dict=None): '''Add a row to the variables table.''' variable_cbox = QtGui.QComboBox() variable_cbox.activated.connect(self.update_available) subject_cbox = QtGui.QComboBox() subject_cbox.activated.connect(self.update_available) persistent = TableCheckbox() summary = TableCheckbox() remove_button = QtGui.QPushButton('remove') ind = QtCore.QPersistentModelIndex(self.model().index( self.n_variables, 2)) remove_button.clicked.connect(lambda: self.remove_variable(ind.row())) remove_button.setIcon(QtGui.QIcon("gui/icons/remove.svg")) add_button = QtGui.QPushButton(' add ') add_button.setIcon(QtGui.QIcon("gui/icons/add.svg")) add_button.clicked.connect(self.add_variable) self.insertRow(self.n_variables + 1) self.setCellWidget(self.n_variables, 0, variable_cbox) self.setCellWidget(self.n_variables, 1, subject_cbox) self.setCellWidget(self.n_variables, 3, persistent) self.setCellWidget(self.n_variables, 4, summary) self.setCellWidget(self.n_variables, 5, remove_button) self.setCellWidget(self.n_variables + 1, 5, add_button) if var_dict: # Set cell values from provided dictionary. variable_cbox.addItems([var_dict['name']]) subject_cbox.addItems([var_dict['subject']]) value_item = QtGui.QTableWidgetItem() value_item.setText(var_dict['value']) self.setItem(self.n_variables, 2, value_item) persistent.setChecked(var_dict['persistent']) summary.setChecked(var_dict['summary']) else: variable_cbox.addItems(['select variable'] + self.available_variables) if self.n_variables > 0: # Set variable to previous variable if available. v_name = str( self.cellWidget(self.n_variables - 1, 0).currentText()) if v_name in self.available_variables: cbox_set_item(variable_cbox, v_name) subject_cbox.addItems(self.available_subjects(v_name)) self.n_variables += 1 self.update_available() null_resize(self)
def task_changed(self, task): '''Remove variables that are not defined in the new task.''' pattern = "[\n\r]v\.(?P<vname>\w+)\s*\=" try: with open(os.path.join(tasks_dir, task + '.py'), "r") as file: file_content = file.read() except FileNotFoundError: return self.variable_names = [] for v_name in re.findall(pattern, file_content): if not v_name in [var_name for var_name in self.variable_names]: self.variable_names.append(v_name) # Remove variables that are not in new task. for i in reversed(range(self.n_variables)): if not self.cellWidget(i, 0).currentText() in self.variable_names: self.removeRow(i) self.n_variables -= 1 null_resize(self) self.update_available()
def add_subject(self, setup=None, subject=None, do_run=None): '''Add row to table allowing extra subject to be specified.''' setup_cbox = QtGui.QComboBox() setup_cbox.addItems(self.available_setups if self. available_setups else ['select setup']) if self.unallocated_setups: setup_cbox.setCurrentIndex( self.available_setups.index(self.unallocated_setups[0])) setup_cbox.activated.connect(self.update_available_setups) remove_button = QtGui.QPushButton('remove') remove_button.setIcon(QtGui.QIcon("gui/icons/remove.svg")) ind = QtCore.QPersistentModelIndex(self.model().index( self.n_subjects, 2)) remove_button.clicked.connect(lambda: self.remove_subject(ind.row())) add_button = QtGui.QPushButton('add') add_button.setIcon(QtGui.QIcon("gui/icons/add.svg")) add_button.clicked.connect(self.add_subject) run_checkbox = TableCheckbox() if do_run == None: run_checkbox.setChecked( True) #new subjects are set to "Run" by default else: run_checkbox.setChecked(do_run) self.setCellWidget(self.n_subjects, 0, run_checkbox) self.setCellWidget(self.n_subjects, 1, setup_cbox) self.setCellWidget(self.n_subjects, 3, remove_button) self.insertRow(self.n_subjects + 1) self.setCellWidget(self.n_subjects + 1, 3, add_button) if setup: cbox_set_item(setup_cbox, setup) if subject: subject_item = QtGui.QTableWidgetItem() subject_item.setText(subject) self.setItem(self.n_subjects, 2, subject_item) self.n_subjects += 1 self.update_available_setups() null_resize(self)
def remove_row(self, variable_n): self.removeRow(variable_n) self.n_variables -= 1 self.update_available() null_resize(self)