##// END OF EJS Templates
sync=True isntead of a keys list
sync=True isntead of a keys list

File last commit:

r14588:f1c37426
r14588:f1c37426
Show More
widget_string.py
92 lines | 3.2 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
s/Widget/DOMWidget s/BaseWidget/Widget
r14540 class StringWidget(DOMWidget):
Jonathan Frederic
Add string widget
r14243 target_name = Unicode('StringWidgetModel')
Jonathan Frederic
s/default_view_name/view_name
r14541 view_name = Unicode('TextBoxView')
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
def __init__(self, **kwargs):
super(StringWidget, self).__init__(**kwargs)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 self._submission_callbacks = []
self.on_msg(self._handle_string_msg)
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
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':
self._handle_submit()
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:
self._submission_callbacks.append(callback)
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 def _handle_submit(self):
Jonathan Frederic
Added TextBox submit event
r14391 """Handles when a string widget view is submitted."""
Jonathan Frederic
Changed on_submit to use custom messages instead of stateful communcation
r14402 for handler in self._submission_callbacks:
if callable(handler):
argspec = inspect.getargspec(handler)
nargs = len(argspec[0])
# Bound methods have an additional 'self' argument
if isinstance(handler, types.MethodType):
nargs -= 1
# Call the callback
if nargs == 0:
handler()
elif nargs == 1:
handler(self)
else:
raise TypeError('StringWidget submit callback must ' \
'accept 0 or 1 arguments.')