Added TextBox submit event

pull/37/head
Jonathan Frederic 13 years ago committed by Jonathan Frederic
parent cb0ac9c06b
commit 0d7428a903

@ -132,7 +132,8 @@ define(["notebook/js/widget"], function(widget_manager){
events: {"keyup input" : "handleChanging",
"paste input" : "handleChanging",
"cut input" : "handleChanging"},
"cut input" : "handleChanging",
"keypress input" : "handleKeypress"},
// Handles and validates user input.
handleChanging: function(e) {
@ -141,6 +142,16 @@ define(["notebook/js/widget"], function(widget_manager){
this.model.update_other_views(this);
this.user_invoked_update = false;
},
// Handles text submition
handleKeypress: function(e) {
if (e.keyCode == 13) { // Return key
this.user_invoked_update = true;
this.model.set('submits', this.model.get('submits') + 1);
this.model.update_other_views(this);
this.user_invoked_update = false;
}
},
});
widget_manager.register_widget_view('TextBoxView', TextBoxView);

@ -13,8 +13,11 @@ Represents a unicode string using a widget.
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import inspect
import types
from .widget import Widget
from IPython.utils.traitlets import Unicode, Bool, List
from IPython.utils.traitlets import Unicode, Bool, List, Int
#-----------------------------------------------------------------------------
# Classes
@ -24,7 +27,53 @@ class StringWidget(Widget):
default_view_name = Unicode('TextBoxView')
# Keys
_keys = ['value', 'disabled', 'description']
_keys = ['value', 'disabled', 'description', 'submits']
value = Unicode(help="String value")
disabled = Bool(False, help="Enable or disable user changes")
description = Unicode(help="Description of the value this widget represents")
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.')

Loading…
Cancel
Save