5
5
6
6
from config .paths import dirs
7
7
from 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
9
9
10
10
# --------------------------------------------------------------------------------
11
11
# Experiments_tab
@@ -46,11 +46,9 @@ def __init__(self, parent=None):
46
46
self .name_label = QtGui .QLabel ('Experiment name:' )
47
47
self .name_text = QtGui .QLineEdit ()
48
48
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' )
51
50
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 )
54
52
self .data_dir_label = QtGui .QLabel ('Data dir:' )
55
53
self .data_dir_text = QtGui .QLineEdit (dirs ['data' ])
56
54
self .data_dir_button = QtGui .QPushButton ('' )
@@ -87,19 +85,17 @@ def __init__(self, parent=None):
87
85
self .variables_groupbox = QtGui .QGroupBox ('Variables' )
88
86
self .variablesbox_layout = QtGui .QHBoxLayout (self .variables_groupbox )
89
87
self .variables_table = VariablesTable (self )
88
+ self .task_select .set_callback (self .variables_table .task_changed )
90
89
self .variablesbox_layout .addWidget (self .variables_table )
91
90
92
91
# Initialise widgets
93
92
self .experiment_select .addItems (['select experiment' ])
94
- self .task_select .addItems (['select task' ])
95
- self .hardware_test_select .addItems (['no hardware test' ])
96
93
97
94
# Connect signals.
98
95
self .name_text .textChanged .connect (self .name_edited )
99
96
self .data_dir_text .textEdited .connect (lambda : setattr (self , 'custom_dir' , True ))
100
97
self .data_dir_button .clicked .connect (self .select_data_dir )
101
98
self .experiment_select .activated [str ].connect (self .experiment_changed )
102
- self .task_select .activated [str ].connect (self .variables_table .task_changed )
103
99
self .new_button .clicked .connect (lambda : self .new_experiment (dialog = True ))
104
100
self .delete_button .clicked .connect (self .delete_experiment )
105
101
self .save_button .clicked .connect (self .save_experiment )
@@ -140,8 +136,8 @@ def experiment_changed(self, experiment_name):
140
136
def refresh (self ):
141
137
'''Called periodically when not running to update available task, ports, experiments.'''
142
138
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 ( )
145
141
self .GUI_main .available_tasks_changed = False
146
142
if self .GUI_main .available_experiments_changed :
147
143
cbox_update_options (self .experiment_select , self .GUI_main .available_experiments )
@@ -157,11 +153,11 @@ def refresh(self):
157
153
if (str (self .name_text .text ()) == '' ) and not self .custom_dir :
158
154
self .data_dir_text .setText (dirs ['data' ])
159
155
160
- def experiment_dict (self ,filtered = False ):
156
+ def experiment_dict (self , filtered = False ):
161
157
'''Return the current state of the experiments tab as a dictionary.'''
162
158
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 ()),
165
161
'data_dir' : self .data_dir_text .text (),
166
162
'subjects' : self .subjects_table .subjects_dict (filtered ),
167
163
'variables' : self .variables_table .variables_list (),
@@ -177,8 +173,8 @@ def new_experiment(self, dialog=True):
177
173
self .subjects_table .reset ()
178
174
self .variables_table .reset ()
179
175
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' )
182
178
self .subset_warning_checkbox .setChecked (True )
183
179
self .saved_exp_dict = self .experiment_dict ()
184
180
self .saved_exp_path = None
@@ -238,8 +234,14 @@ def load_experiment(self, experiment_name):
238
234
with open (exp_path ,'r' ) as exp_file :
239
235
experiment = json .loads (exp_file .read ())
240
236
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' )
243
245
cbox_set_item (self .experiment_select , experiment ['name' ])
244
246
self .subset_warning_checkbox .setChecked (experiment ['subset_warning' ])
245
247
self .variables_table .task_changed (experiment ['task' ])
@@ -254,7 +256,6 @@ def run_experiment(self):
254
256
'''Check that the experiment is valid. Prompt user to save experiment if
255
257
it is new or has been edited. Then run experiment.'''
256
258
experiment = self .experiment_dict (filtered = True )
257
-
258
259
if not experiment ['name' ]:
259
260
invalid_run_experiment_dialog (self , 'Experiment must have a name.' )
260
261
return
0 commit comments