|
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,menuSelect |
9 | 9 |
|
10 | 10 | # --------------------------------------------------------------------------------
|
11 | 11 | # Experiments_tab
|
@@ -46,9 +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.QPushButton('select task') |
| 49 | + self.task_select = menuSelect(dirs['tasks'],'select task') |
50 | 50 | self.hardware_test_label = QtGui.QLabel('Hardware test:')
|
51 |
| - self.hardware_test_select = QtGui.QPushButton('no hardware test') |
| 51 | + self.hardware_test_select = menuSelect(dirs['tasks'],'no hardware test',add_default=True) |
52 | 52 | self.data_dir_label = QtGui.QLabel('Data dir:')
|
53 | 53 | self.data_dir_text = QtGui.QLineEdit(dirs['data'])
|
54 | 54 | self.data_dir_button = QtGui.QPushButton('')
|
@@ -85,6 +85,7 @@ def __init__(self, parent=None):
|
85 | 85 | self.variables_groupbox = QtGui.QGroupBox('Variables')
|
86 | 86 | self.variablesbox_layout = QtGui.QHBoxLayout(self.variables_groupbox)
|
87 | 87 | self.variables_table = VariablesTable(self)
|
| 88 | + self.task_select.set_callback(self.variables_table.task_changed) |
88 | 89 | self.variablesbox_layout.addWidget(self.variables_table)
|
89 | 90 |
|
90 | 91 | # Initialise widgets
|
@@ -132,50 +133,11 @@ def experiment_changed(self, experiment_name):
|
132 | 133 | return
|
133 | 134 | self.load_experiment(experiment_name)
|
134 | 135 |
|
135 |
| - def create_callback(self,btn,text): |
136 |
| - def fxn(): |
137 |
| - if btn.text() != text: |
138 |
| - btn.setText(text) |
139 |
| - btn.adjustSize() |
140 |
| - self.variables_table.task_changed(text) |
141 |
| - return fxn |
142 |
| - |
143 |
| - def create_menu(self,menuButton): |
144 |
| - taskMenu = QtGui.QMenu() |
145 |
| - task_root = dirs['tasks'] |
146 |
| - |
147 |
| - if menuButton is self.hardware_test_select: |
148 |
| - taskMenu.addAction('no hardware test',self.create_callback(menuButton,'no hardware test')) |
149 |
| - taskMenu.addSeparator() |
150 |
| - previous_menu = taskMenu |
151 |
| - current_menu = taskMenu |
152 |
| - for dirName, subdirList, fileList in os.walk(task_root): |
153 |
| - subfolder = dirName.split(task_root)[1][1:] |
154 |
| - if subfolder: |
155 |
| - if any(".py" in filename for filename in fileList): # only add submenu if there are .py files inside |
156 |
| - sub_menu = current_menu.addMenu(subfolder.split(os.path.sep)[-1]) |
157 |
| - for filename in fileList: |
158 |
| - if filename.endswith('.py'): |
159 |
| - menuItem = filename[:-3] |
160 |
| - sub_menu.addAction(menuItem,self.create_callback(menuButton,os.path.join(subfolder,menuItem))) |
161 |
| - if subdirList: # continue down to next level |
162 |
| - previous_menu = current_menu |
163 |
| - current_menu = sub_menu |
164 |
| - else: # return up to previous level |
165 |
| - current_menu = previous_menu |
166 |
| - else: # list top level files |
167 |
| - for filename in fileList: |
168 |
| - if filename.endswith('.py'): |
169 |
| - menuItem = filename[:-3] |
170 |
| - taskMenu.addAction(menuItem,self.create_callback(menuButton,menuItem)) |
171 |
| - return taskMenu |
172 |
| - |
173 |
| - |
174 | 136 | def refresh(self):
|
175 | 137 | '''Called periodically when not running to update available task, ports, experiments.'''
|
176 | 138 | if self.GUI_main.available_tasks_changed:
|
177 |
| - self.task_select.setMenu(self.create_menu(self.task_select)) |
178 |
| - self.hardware_test_select.setMenu(self.create_menu(self.hardware_test_select)) |
| 139 | + self.task_select.update_menu() |
| 140 | + self.hardware_test_select.update_menu() |
179 | 141 | self.GUI_main.available_tasks_changed = False
|
180 | 142 | if self.GUI_main.available_experiments_changed:
|
181 | 143 | cbox_update_options(self.experiment_select, self.GUI_main.available_experiments)
|
|
0 commit comments