77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
#
|
|
# Python GUI - Text fields - Generic
|
|
#
|
|
|
|
from GUI.Properties import overridable_property
|
|
from GUI.Actions import ActionBase, action_property
|
|
from GUI import application
|
|
from GUI import Control
|
|
from GUI import EditCmdHandler
|
|
|
|
class TextField(Control, ActionBase, EditCmdHandler):
|
|
"""A control for entering and editing small amounts of text."""
|
|
|
|
text = overridable_property('text')
|
|
selection = overridable_property('selection', "Range of text selected.")
|
|
multiline = overridable_property('multiline', "Multiple text lines allowed.")
|
|
password = overridable_property('password', "Display characters obfuscated.")
|
|
enter_action = action_property('enter_action', "Action to be performed "
|
|
"when the Return or Enter key is pressed.")
|
|
escape_action = action_property('escape_action', "Action to be performed "
|
|
"when the Escape key is pressed.")
|
|
|
|
_may_be_password = True
|
|
|
|
#_tabbable = True
|
|
_default_tab_stop = True
|
|
_user_tab_stop_override = False
|
|
_enter_action = 'do_default_action'
|
|
_escape_action = 'do_cancel_action'
|
|
|
|
_intercept_tab_key = True
|
|
|
|
def __init__(self, **kwds):
|
|
self._multiline = kwds.pop('multiline')
|
|
Control.__init__(self, **kwds)
|
|
|
|
def get_multiline(self):
|
|
return self._multiline
|
|
|
|
def key_down(self, event):
|
|
#print "GTextField.key_down for", self ###
|
|
c = event.char
|
|
if c == '\r':
|
|
if event.key == 'enter' or not self._multiline:
|
|
self.do_enter_action()
|
|
return
|
|
if c == '\x1b':
|
|
self.do_escape_action()
|
|
return
|
|
if c == '\t':
|
|
if self._intercept_tab_key:
|
|
self.pass_event_to_next_handler(event)
|
|
return
|
|
Control.key_down(self, event)
|
|
|
|
def setup_menus(self, m):
|
|
Control.setup_menus(self, m)
|
|
EditCmdHandler.setup_menus(self, m)
|
|
|
|
def do_enter_action(self):
|
|
self.do_named_action('enter_action')
|
|
|
|
def do_escape_action(self):
|
|
self.do_named_action('escape_action')
|
|
|
|
def get_text_length(self):
|
|
# Implementations can override this if they have a more
|
|
# efficient way of getting the text length.
|
|
return len(self.text)
|
|
|
|
def get_value(self):
|
|
return self.text
|
|
|
|
def set_value(self, x):
|
|
self.text = x
|
|
|