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)