55
66from config .paths import dirs
77from gui .dialogs import invalid_run_experiment_dialog , invalid_save_experiment_dialog ,unrun_subjects_dialog
8- from gui .utility import TableCheckbox , cbox_update_options , cbox_set_item , null_resize , variable_constants , init_keyboard_shortcuts
8+ from gui .utility import TableCheckbox , cbox_update_options , cbox_set_item , null_resize , variable_constants , init_keyboard_shortcuts , TaskSelectMenu
99
1010# --------------------------------------------------------------------------------
1111# Experiments_tab
@@ -46,11 +46,9 @@ def __init__(self, parent=None):
4646 self .name_label = QtGui .QLabel ('Experiment name:' )
4747 self .name_text = QtGui .QLineEdit ()
4848 self .task_label = QtGui .QLabel ('Task:' )
49- self .task_select = QtGui .QComboBox ()
50- self .task_select .setFixedWidth (150 )
49+ self .task_select = TaskSelectMenu (dirs ['tasks' ],'select task' )
5150 self .hardware_test_label = QtGui .QLabel ('Hardware test:' )
52- self .hardware_test_select = QtGui .QComboBox ()
53- self .hardware_test_select .setFixedWidth (150 )
51+ self .hardware_test_select = TaskSelectMenu (dirs ['tasks' ],'no hardware test' ,add_default = True )
5452 self .data_dir_label = QtGui .QLabel ('Data dir:' )
5553 self .data_dir_text = QtGui .QLineEdit (dirs ['data' ])
5654 self .data_dir_button = QtGui .QPushButton ('' )
@@ -87,19 +85,17 @@ def __init__(self, parent=None):
8785 self .variables_groupbox = QtGui .QGroupBox ('Variables' )
8886 self .variablesbox_layout = QtGui .QHBoxLayout (self .variables_groupbox )
8987 self .variables_table = VariablesTable (self )
88+ self .task_select .set_callback (self .variables_table .task_changed )
9089 self .variablesbox_layout .addWidget (self .variables_table )
9190
9291 # Initialise widgets
9392 self .experiment_select .addItems (['select experiment' ])
94- self .task_select .addItems (['select task' ])
95- self .hardware_test_select .addItems (['no hardware test' ])
9693
9794 # Connect signals.
9895 self .name_text .textChanged .connect (self .name_edited )
9996 self .data_dir_text .textEdited .connect (lambda : setattr (self , 'custom_dir' , True ))
10097 self .data_dir_button .clicked .connect (self .select_data_dir )
10198 self .experiment_select .activated [str ].connect (self .experiment_changed )
102- self .task_select .activated [str ].connect (self .variables_table .task_changed )
10399 self .new_button .clicked .connect (lambda : self .new_experiment (dialog = True ))
104100 self .delete_button .clicked .connect (self .delete_experiment )
105101 self .save_button .clicked .connect (self .save_experiment )
@@ -140,8 +136,8 @@ def experiment_changed(self, experiment_name):
140136 def refresh (self ):
141137 '''Called periodically when not running to update available task, ports, experiments.'''
142138 if self .GUI_main .available_tasks_changed :
143- cbox_update_options ( self .task_select , self . GUI_main . available_tasks )
144- cbox_update_options ( self .hardware_test_select , [ 'no hardware test' ] + self . GUI_main . available_tasks )
139+ self .task_select . update_menu ( )
140+ self .hardware_test_select . update_menu ( )
145141 self .GUI_main .available_tasks_changed = False
146142 if self .GUI_main .available_experiments_changed :
147143 cbox_update_options (self .experiment_select , self .GUI_main .available_experiments )
@@ -157,11 +153,11 @@ def refresh(self):
157153 if (str (self .name_text .text ()) == '' ) and not self .custom_dir :
158154 self .data_dir_text .setText (dirs ['data' ])
159155
160- def experiment_dict (self ,filtered = False ):
156+ def experiment_dict (self , filtered = False ):
161157 '''Return the current state of the experiments tab as a dictionary.'''
162158 return {'name' : self .name_text .text (),
163- 'task' : str (self .task_select .currentText ()),
164- 'hardware_test' : str (self .hardware_test_select .currentText ()),
159+ 'task' : str (self .task_select .text ()),
160+ 'hardware_test' : str (self .hardware_test_select .text ()),
165161 'data_dir' : self .data_dir_text .text (),
166162 'subjects' : self .subjects_table .subjects_dict (filtered ),
167163 'variables' : self .variables_table .variables_list (),
@@ -177,8 +173,8 @@ def new_experiment(self, dialog=True):
177173 self .subjects_table .reset ()
178174 self .variables_table .reset ()
179175 cbox_set_item (self .experiment_select , 'select experiment' , insert = True )
180- cbox_set_item ( self .task_select , 'select task' , insert = True )
181- cbox_set_item ( self .hardware_test_select , 'no hardware test' , insert = True )
176+ self .task_select . setText ( 'select task' )
177+ self .hardware_test_select . setText ( 'no hardware test' )
182178 self .subset_warning_checkbox .setChecked (True )
183179 self .saved_exp_dict = self .experiment_dict ()
184180 self .saved_exp_path = None
@@ -238,8 +234,14 @@ def load_experiment(self, experiment_name):
238234 with open (exp_path ,'r' ) as exp_file :
239235 experiment = json .loads (exp_file .read ())
240236 self .name_text .setText (experiment ['name' ])
241- cbox_set_item (self .task_select , experiment ['task' ])
242- cbox_set_item (self .hardware_test_select , experiment ['hardware_test' ])
237+ if experiment ['task' ] in self .GUI_main .available_tasks :
238+ self .task_select .setText (experiment ['task' ])
239+ else :
240+ self .task_select .setText ('select task' )
241+ if experiment ['hardware_test' ] in self .GUI_main .available_tasks :
242+ self .hardware_test_select .setText (experiment ['hardware_test' ])
243+ else :
244+ self .hardware_test_select .setText ('no hardware test' )
243245 cbox_set_item (self .experiment_select , experiment ['name' ])
244246 self .subset_warning_checkbox .setChecked (experiment ['subset_warning' ])
245247 self .variables_table .task_changed (experiment ['task' ])
@@ -254,7 +256,6 @@ def run_experiment(self):
254256 '''Check that the experiment is valid. Prompt user to save experiment if
255257 it is new or has been edited. Then run experiment.'''
256258 experiment = self .experiment_dict (filtered = True )
257-
258259 if not experiment ['name' ]:
259260 invalid_run_experiment_dialog (self , 'Experiment must have a name.' )
260261 return
0 commit comments