def update_available_setups(self, i=None):
     '''Update which setups are available for selection in dropdown menus.'''
     selected_setups = set([
         str(self.cellWidget(s, 0).currentText())
         for s in range(self.n_subjects)
     ])
     self.available_setups = sorted(list(self.all_setups - selected_setups))
     for s in range(self.n_subjects):
         cbox_update_options(self.cellWidget(s, 0), self.available_setups)
    def refresh_variable_options(self):
        fully_asigned_variables = []
        for table in self.tables:
            # determine which variables are already being used
            for row in range(table.n_variables):
                assigned_var = table.cellWidget(row, 2).currentText()
                if assigned_var != "     select variable     ":
                    fully_asigned_variables.append(assigned_var)
            self.available_vars = sorted(list(self.variable_names -
                                              set(fully_asigned_variables)),
                                         key=str.lower)

        for table in self.tables:  # Update the available options in the variable comboboxes
            for row in range(table.n_variables):
                cbox_update_options(table.cellWidget(row, 2),
                                    self.available_vars)

        index = self.tabs.currentIndex()
        if index > -1:
            self.tab_title_edit.setText(self.tabs.tabText(index))
 def refresh(self):
     '''Called periodically when not running to update available task, ports, experiments.'''
     if self.GUI_main.available_tasks_changed:
         self.task_select.update_menu(dirs['tasks'])
         self.hardware_test_select.update_menu(dirs['tasks'])
         self.GUI_main.available_tasks_changed = False
     if self.GUI_main.available_experiments_changed:
         cbox_update_options(self.experiment_select,
                             self.GUI_main.available_experiments)
         self.GUI_main.available_experiments_changed = False
     if self.GUI_main.setups_tab.available_setups_changed:
         self.subjects_table.all_setups = set(
             self.GUI_main.setups_tab.setup_names)
         self.subjects_table.update_available_setups()
     if self.saved_exp_dict != self.experiment_dict():
         self.save_button.setEnabled(True)
     else:
         self.save_button.setEnabled(False)
     if self.GUI_main.data_dir_changed:
         if (str(self.name_text.text()) == '') and not self.custom_dir:
             self.data_dir_text.setText(dirs['data'])
 def update_available(self, i=None):
     # Find out what variable-subject combinations already assigned.
     self.assigned = {v_name: [] for v_name in self.variable_names}
     for v in range(self.n_variables):
         v_name = self.cellWidget(v, 0).currentText()
         s_name = self.cellWidget(v, 1).currentText()
         if s_name and s_name not in self.subjects_table.subjects + ['all']:
             cbox_set_item(self.cellWidget(v, 1), '', insert=True)
             continue
         if v_name != 'select variable' and s_name:
             self.assigned[v_name].append(s_name)
     # Update the variables available:
     fully_asigned_variables = [
         v_n for v_n in self.assigned.keys() if 'all' in self.assigned[v_n]
     ]
     if self.subjects_table.subjects:
         fully_asigned_variables += [
             v_n for v_n in self.assigned.keys()
             if set(self.assigned[v_n]) == set(self.subjects_table.subjects)
         ]
     self.available_variables = sorted(
         list(set(self.variable_names) - set(fully_asigned_variables)),
         key=str.lower)
     # Update the available options in the variable and subject comboboxes.
     for v in range(self.n_variables):
         v_name = self.cellWidget(v, 0).currentText()
         s_name = self.cellWidget(v, 1).currentText()
         cbox_update_options(self.cellWidget(v, 0),
                             self.available_variables)
         if v_name != 'select variable':
             # If variable has no subjects assigned, set subjects to 'all'.
             if not self.assigned[v_name]:
                 self.cellWidget(v, 1).addItems(['all'])
                 self.assigned[v_name] = ['all']
                 self.available_variables.remove(v_name)
             cbox_update_options(self.cellWidget(v, 1),
                                 self.available_subjects(v_name, s_name))
 def refresh(self):
     '''Called periodically when not running to update available task, ports, experiments.'''
     if self.GUI_main.available_tasks_changed:
         cbox_update_options(self.task_select,
                             self.GUI_main.available_tasks)
         cbox_update_options(self.hardware_test_select,
                             [' no hardware test'] +
                             self.GUI_main.available_tasks)
         self.GUI_main.available_tasks_changed = False
     if self.GUI_main.available_experiments_changed:
         cbox_update_options(self.experiment_select,
                             self.GUI_main.available_experiments)
         self.GUI_main.available_experiments_changed = False
     if self.GUI_main.setups_tab.available_setups_changed:
         self.subjects_table.all_setups = set(
             self.GUI_main.setups_tab.setup_names)
         self.subjects_table.update_available_setups()