Skip to content

Commit

Permalink
ENH: restore tab completely when loading a session for all tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
leloup314 committed Jan 10, 2018
1 parent 301439c commit 21e6a39
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 4 deletions.
58 changes: 54 additions & 4 deletions testbeam_analysis/gui/gui_widgets/option_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ def __init__(self, name, default_value, optional, tooltip, dtype, parent=None):

slider.valueChanged.connect(lambda v: self.edit.setText(str(v)))
slider.valueChanged.connect(lambda _: self._emit_value())
self.edit.returnPressed.connect(lambda: slider.setMaximum(max((2 * float(self.edit.text())), 1)))
self.edit.returnPressed.connect(lambda: slider.setValue(float(self.edit.text())))
# Signal editingFinished respects validator; emitted when return/enter pressed or edit out of focus
self.edit.editingFinished.connect(lambda: slider.setMaximum(max((2 * float(self.edit.text())), 1)))
self.edit.editingFinished.connect(lambda: slider.setValue(float(self.edit.text())))

if default_value is not None:
slider.setMaximum(max((2 * default_value), 1))
Expand All @@ -68,6 +69,12 @@ def __init__(self, name, default_value, optional, tooltip, dtype, parent=None):
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None: # value can be None
self.edit.setText(str(value))
self.update_tooltip(value)

def _set_readonly(self, value=True):

palette = QtGui.QPalette()
Expand Down Expand Up @@ -140,6 +147,12 @@ def __init__(self, name, default_value, optional, tooltip=None, parent=None):
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None: # value can be None
self.edit.setText(str(value))
self.update_tooltip(value)

def _set_readonly(self, value=True):

palette = QtGui.QPalette()
Expand Down Expand Up @@ -215,6 +228,13 @@ def __init__(self, name, default_value, optional, tooltip=None, parent=None):
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None and isinstance(value, bool): # value can be None
self.rb_t.setChecked(value is True)
self.rb_f.setChecked(value is False)
self.update_tooltip(value)

def _set_readonly(self, value=True):

palette = QtGui.QPalette()
Expand Down Expand Up @@ -304,8 +324,9 @@ def __init__(self, name, labels, default_value, optional, tooltip, dtype, parent
# http://docs.python-guide.org/en/latest/writing/gotchas/
slider.valueChanged.connect(lambda v, e=edit: e.setText(str(v)))
slider.valueChanged.connect(lambda _: self._emit_value())
edit.returnPressed.connect(lambda s=slider, e=edit: s.setMaximum(max(float(e.text()) * 2, 1)))
edit.returnPressed.connect(lambda s=slider, e=edit: s.setValue(float(e.text())))
# Signal editingFinished respects validator; emitted when return/enter pressed or edit out of focus
edit.editingFinished.connect(lambda s=slider, e=edit: s.setMaximum(max(float(e.text()) * 2, 1)))
edit.editingFinished.connect(lambda s=slider, e=edit: s.setValue(float(e.text())))

slider.setMaximum(max_val)
slider.setValue(default_value[i])
Expand All @@ -324,6 +345,13 @@ def __init__(self, name, labels, default_value, optional, tooltip, dtype, parent
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None and isinstance(value, collections.Iterable):
for i, edit in enumerate(self.edits):
edit.setText(str(int(value[i])) if 'int' in self._dtype else str(float(value[i])))
self.update_tooltip(value)

def _set_readonly(self, value=True):

palette = QtGui.QPalette()
Expand Down Expand Up @@ -454,6 +482,17 @@ def __init__(self, name, labels_x, default_value, optional, tooltip, labels_y=No
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None and isinstance(value, collections.Iterable):
for i, v in enumerate(value):
if isinstance(v, collections.Iterable):
for j in v:
self.check_boxes[i][j].setChecked(True)
else:
self.check_boxes[v].setChecked(True)
self.update_tooltip(value)

def _evaluate_state(self, init=False):

if init:
Expand Down Expand Up @@ -676,6 +715,17 @@ def __init__(self, name, labels_x, default_value, optional, tooltip, labels_y=No
def update_tooltip(self, val):
self.setToolTip('Current value: {}, (default value: {})'.format(val, self.default_value))

def load_value(self, value):

if value is not None and isinstance(value, collections.Iterable):
for i in range(len(value)):
if isinstance(value[i], collections.Iterable):
for j in range(len(value[i])):
self.spin_boxes[i][j].setValue(value[i][j])
else:
self.spin_boxes[i].setValue(value[i])
self.update_tooltip(value)

def enable_selection(self, selection=None):

if selection:
Expand Down
30 changes: 30 additions & 0 deletions testbeam_analysis/gui/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,14 @@ def load_session(self):
"""
Opens dialog to select previously saved session. Does several checks on session files content
"""
try:
if self.tw[self.current_analysis_tab()].analysis_thread.isRunning():
msg = 'Can not load while %s analysis is running.' % self.current_analysis_tab()
logging.warning(msg=msg)
return
except AttributeError:
pass

caption = 'Load session'
session_path = QtWidgets.QFileDialog.getOpenFileName(parent=self,
caption=caption,
Expand Down Expand Up @@ -669,6 +677,28 @@ def load_session(self):
self.update_tabs(tabs=tab, force=True, enable=session['enabled'][tab])
self.tw[tab].isFinished = session['status'][tab]

# Restore states of Parallel/AnalysisWidget
if tab not in self.tab_order[:2]:
if tab in self.tab_order[2:4]: # ParallelAnalysisWidget
for dut in session['calls'][tab].keys():
for func in session['calls'][tab][dut].keys():
for opt in session['calls'][tab][dut][func].keys():
try:
self.tw[tab].tw[dut].option_widgets[opt].load_value(session['calls'][tab][dut][func][opt])
# Set argument to be able to load, continue and safe a session without losing info
self.tw[tab].tw[dut]._set_argument(func, opt, session['calls'][tab][dut][func][opt])
except KeyError: # Fixed option has no option widget; KeyError
pass
else: # AnalysisWidget
for func in session['calls'][tab].keys():
for opt in session['calls'][tab][func].keys():
try:
self.tw[tab].option_widgets[opt].load_value(session['calls'][tab][func][opt])
# Set argument to be able to load, continue and safe a session without losing info
self.tw[tab]._set_argument(func, opt, session['calls'][tab][func][opt])
except KeyError: # Fixed option has no option widget; KeyError
pass

# If tab is finished, disable and show buttons, connect and plot if possible
# TODO: make this less messy
if session['status'][tab]:
Expand Down

0 comments on commit 21e6a39

Please sign in to comment.