|
|
"""Link and DirectionalLink classes.
|
|
|
|
|
|
Propagate changes between widgets on the javascript side
|
|
|
"""
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Copyright (c) 2014, the IPython Development Team.
|
|
|
#
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
#
|
|
|
# The full license is in the file COPYING.txt, distributed with this software.
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
from .widget import Widget
|
|
|
from IPython.utils.traitlets import Unicode, Tuple, Any
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Classes
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
class Link(Widget):
|
|
|
"""Link Widget"""
|
|
|
_model_name = Unicode('LinkModel', sync=True)
|
|
|
widgets = Tuple(sync=True, allow_none=False)
|
|
|
|
|
|
def __init__(self, widgets=(), **kwargs):
|
|
|
kwargs['widgets'] = widgets
|
|
|
super(Link, self).__init__(**kwargs)
|
|
|
|
|
|
# for compatibility with traitlet links
|
|
|
def unlink(self):
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
def link(*args):
|
|
|
return Link(widgets=args)
|
|
|
|
|
|
|
|
|
class DirectionalLink(Widget):
|
|
|
"""Directional Link Widget"""
|
|
|
_model_name = Unicode('DirectionalLinkModel', sync=True)
|
|
|
targets = Any(sync=True)
|
|
|
source = Tuple(sync=True)
|
|
|
|
|
|
# Does not quite behave like other widgets but reproduces
|
|
|
# the behavior of IPython.utils.traitlets.directional_link
|
|
|
def __init__(self, source, targets=(), **kwargs):
|
|
|
kwargs['source'] = source
|
|
|
kwargs['targets'] = targets
|
|
|
super(DirectionalLink, self).__init__(**kwargs)
|
|
|
|
|
|
# for compatibility with traitlet links
|
|
|
def unlink(self):
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
def dlink(source, *targets):
|
|
|
return DirectionalLink(source, targets)
|
|
|
|