##// END OF EJS Templates
Fixed a bug that didn't allow callbacks to set a property...
Fixed a bug that didn't allow callbacks to set a property on the widget that triggered the callback.

File last commit:

r14391:3a93b4eb
r14392:abc5d6f5
Show More
widget_string.py
79 lines | 3.0 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
More relative imports, Travis w/ Py3.3
r14308 from .widget import Widget
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
Add string widget
r14243 class StringWidget(Widget):
target_name = Unicode('StringWidgetModel')
Jonathan Frederic
s/TextareaView/TextAreaView & s/TextboxView/TextBoxView
r14291 default_view_name = Unicode('TextBoxView')
Jonathan Frederic
Cleaned up Python widget code.
r14283
# Keys
Jonathan Frederic
Added TextBox submit event
r14391 _keys = ['value', 'disabled', 'description', 'submits']
Jonathan Frederic
Cleaned up Python widget code.
r14283 value = Unicode(help="String value")
disabled = Bool(False, help="Enable or disable user changes")
Jonathan Frederic
Added labels to basic widgets
r14292 description = Unicode(help="Description of the value this widget represents")
Jonathan Frederic
Added TextBox submit event
r14391 submits = Int(0, help="Used to capture and fire submission ")
def __init__(self, **kwargs):
super(StringWidget, self).__init__(**kwargs)
self._submission_callbacks = []
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)
def _submits_changed(self, name, old_value, new_value):
"""Handles when a string widget view is submitted."""
if new_value > old_value:
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.')