##// END OF EJS Templates
Got containers and mutlicontainers working! Yay
Got containers and mutlicontainers working! Yay

File last commit:

r14595:597c46c0
r14598:ed52e826
Show More
widget_string.py
94 lines | 3.3 KiB | text/x-python | PythonLexer
Jonathan Frederic
Cleaned up Python widget code.
r14283 """StringWidget class.
Represents a unicode string using a widget.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, 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
#-----------------------------------------------------------------------------
Jonathan Frederic
Added TextBox submit event
r14391 import inspect
import types
Jonathan Frederic
s/Widget/DOMWidget s/BaseWidget/Widget
r14540 from .widget import DOMWidget
Jonathan Frederic
Added TextBox submit event
r14391 from IPython.utils.traitlets import Unicode, Bool, List, Int
Jonathan Frederic
Add string widget
r14243
Jonathan Frederic
Cleaned up Python widget code.
r14283 #-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
Jonathan Frederic
1-to-1 widget / view mapping
r14592 class HTMLWidget(DOMWidget):
view_name = Unicode('HTMLView', sync=True)
Jonathan Frederic
Cleaned up Python widget code.
r14283
# Keys
Jonathan Frederic
sync=True isntead of a keys list
r14588 value = Unicode(help="String value", sync=True)
disabled = Bool(False, help="Enable or disable user changes", sync=True)
description = Unicode(help="Description of the value this widget represents", sync=True)
Jonathan Frederic
Added TextBox submit event
r14391
Jonathan Frederic
1-to-1 widget / view mapping
r14592 class LatexWidget(HTMLWidget):
view_name = Unicode('LatexView', sync=True)
Jonathan Frederic
Added TextBox submit event
r14391
Jonathan Frederic
1-to-1 widget / view mapping
r14592 class TextAreaWidget(HTMLWidget):
view_name = Unicode('TextAreaView', sync=True)
Jonathan Frederic
Added TextBox submit event
r14391
Jonathan Frederic
Add scroll_to_bottom method for TextAreaView (StringWidget).
r14393 def scroll_to_bottom(self):
Jonathan Frederic
Fix scroll_to_bottom
r14406 self.send({"method": "scroll_to_bottom"})
Jonathan Frederic
Add scroll_to_bottom method for TextAreaView (StringWidget).
r14393
Jonathan Frederic
1-to-1 widget / view mapping
r14592 class TextBoxWidget(HTMLWidget):
view_name = Unicode('TextBoxView', sync=True)
def __init__(self, **kwargs):
Jonathan Frederic
More fixes
r14595 super(TextBoxWidget, self).__init__(**kwargs)
Jonathan Frederic
1-to-1 widget / view mapping
r14592 self._submission_callbacks = []
self.on_msg(self._handle_string_msg)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 def _handle_string_msg(self, content):
"""Handle a msg from the front-end
Parameters
----------
content: dict
Content of the msg."""
if 'event' in content and content['event'] == 'submit':
Jonathan Frederic
1-to-1 widget / view mapping
r14592 for handler in self._submission_callbacks:
handler(self)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402
Jonathan Frederic
Added TextBox submit event
r14391 def on_submit(self, callback, remove=False):
"""Register a callback to handle text submission (triggered when the
user clicks enter).
Parameters
callback: Method handle
Function to be called when the text has been submitted. Function
can have two possible signatures:
callback()
callback(sender)
remove: bool (optional)
Whether or not to unregister the callback"""
if remove and callback in self._submission_callbacks:
self._submission_callbacks.remove(callback)
elif not remove and not callback in self._submission_callbacks:
Jonathan Frederic
1-to-1 widget / view mapping
r14592 if callable(callback):
argspec = inspect.getargspec(callback)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 nargs = len(argspec[0])
# Bound methods have an additional 'self' argument
Jonathan Frederic
1-to-1 widget / view mapping
r14592 if isinstance(callback, types.MethodType):
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 nargs -= 1
# Call the callback
if nargs == 0:
Jonathan Frederic
1-to-1 widget / view mapping
r14592 self._submission_callbacks.append(lambda sender: callback())
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 elif nargs == 1:
Jonathan Frederic
1-to-1 widget / view mapping
r14592 self._submission_callbacks.append(callback)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 else:
Jonathan Frederic
More fixes
r14595 raise TypeError('TextBoxWidget submit callback must ' \
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 'accept 0 or 1 arguments.')