Skip to content

Commit

Permalink
Added source selection to Accumulator Widget #201
Browse files Browse the repository at this point in the history
  • Loading branch information
mliberty1 committed Jul 14, 2023
1 parent 0c7948b commit 55e98c6
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -14,6 +14,7 @@ This file contains the list of changes made to pyjoulescope_ui.
* Improved launch error handling.
* Bundle error information and submit to support #210
* Prompt the user with recovery options #204
* Added source selection to Accumulator Widget #201
* Added manual "Report Issue" option.
* Renamed joulescope_ui.json to joulescope_ui.json_plus to avoid name collision.
* Bumped dependency versions:
Expand Down
40 changes: 35 additions & 5 deletions joulescope_ui/widgets/accumulator/accumulator_widget.py
Expand Up @@ -83,15 +83,14 @@ def on_pubsub_register(self):
for topic, fn in self._subscribers:
pubsub_singleton.subscribe(topic, fn, ['pub', 'retain'])

def closeEvent(self, event):
def on_pubsub_unregister(self):
self._disconnect()
self._statistics = None
return super().closeEvent(event)
for topic, fn in self._subscribers:
pubsub_singleton.unsubscribe(topic, fn)

def _disconnect(self):
pubsub_singleton.unsubscribe_all(self._on_statistics_fn)
for topic, fn in self._subscribers:
pubsub_singleton.unsubscribe(topic, fn)
self.repaint()

@property
Expand Down Expand Up @@ -124,8 +123,17 @@ def _on_default_statistics_stream_source(self, value):
if source_prev != source_next:
self._connect()

def on_setting_statistics_stream_source(self, value):
source_prev = self.source
self._statistics_stream_source = value
source_next = self.source
if source_prev != source_next:
self._connect()

def _on_statistic_stream_source_list(self, value):
self._devices = ['default'] + value
self._disconnect()
self._connect()

def _on_global_statistics_stream_enable(self, value):
self._hold_global = not bool(value)
Expand Down Expand Up @@ -185,7 +193,29 @@ def mousePressEvent(self, event):
menu.addAction(units_toggle)
units_toggle.triggered.connect(lambda: self._on_units(toggle_units))

source_menu = menu.addMenu(N_('Source'))
source_group = QtGui.QActionGroup(source_menu)
source_group.setExclusive(True)
source_menu_items = []
for device in self._devices:
a = QtGui.QAction(device, source_group, checkable=True)
if device == 'default':
a.setChecked(self._statistics_stream_source in [None, 'default'])
else:
a.setChecked(device == self._statistics_stream_source)
a.triggered.connect(self._construct_source_action(device))
source_menu.addAction(a)
source_menu_items.append(a)

style_action = settings_action_create(self, menu)
menu.popup(event.globalPos())
self._menu = [menu, field_toggle, units_toggle, style_action]
self._menu = [
menu, field_toggle, units_toggle,
source_group, source_menu, source_menu_items,
style_action]
event.accept()

def _construct_source_action(self, source):
def fn():
self.statistics_stream_source = source
return fn

0 comments on commit 55e98c6

Please sign in to comment.