diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2015-07-23 16:36:22 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2015-11-11 21:39:35 +0100 |
commit | 2fee267dfee11bd687b4d780cb6b82924d59af3c (patch) | |
tree | 3768cd0fde949c1b99e919d0cdff958764064e79 /grc/gui/FlowGraph.py | |
parent | c9a5fabe17efe8af1c9435f746ed55c5f5790917 (diff) |
grc: open and update params from external editor
Diffstat (limited to 'grc/gui/FlowGraph.py')
-rw-r--r-- | grc/gui/FlowGraph.py | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py index fc6a711572..b27f0153db 100644 --- a/grc/gui/FlowGraph.py +++ b/grc/gui/FlowGraph.py @@ -18,12 +18,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ import random +import functools from itertools import chain from operator import methodcaller +import gobject + from . import Actions, Colors, Utils, Messages, Bars -from .Constants import SCROLL_PROXIMITY_SENSITIVITY, SCROLL_DISTANCE -from .Element import Element +from . Element import Element +from . Constants import SCROLL_PROXIMITY_SENSITIVITY, SCROLL_DISTANCE +from . external_editor import ExternalEditor class FlowGraph(Element): @@ -55,6 +59,35 @@ class FlowGraph(Element): self._context_menu = Bars.ContextMenu() self.get_context_menu = lambda: self._context_menu + self._external_updaters = {} + + def install_external_editor(self, param): + target = (param.get_parent().get_id(), param.get_key()) + + if target in self._external_updaters: + editor = self._external_updaters[target] + else: + updater = functools.partial( + self.handle_external_editor_change, target=target) + editor = self._external_updaters[target] = ExternalEditor( + name=target[0], value=param.get_value(), + callback=functools.partial(gobject.idle_add, updater) + ) + editor.start() + editor.open_editor() + + def handle_external_editor_change(self, new_value, target): + try: + block_id, param_key = target + self.get_block(block_id).get_param(param_key).set_value(new_value) + + except (IndexError, ValueError): # block no longer exists + self._external_updaters[target].stop() + del self._external_updaters[target] + return + Actions.EXTERNAL_UPDATE() + + ########################################################################### # Access Drawing Area ########################################################################### |