Source code for validator_mixins
'''
Validator MixIns
by Patrick Ruoff in 2012
'''
import wx
import string
ACCEPT_ALPHA = 1
ACCEPT_NUM = 2
ACCEPT_MINUS = 4
ACCEPT_POINT = 8
ACCEPT_UINT = ACCEPT_NUM
ACCEPT_INT = ACCEPT_NUM | ACCEPT_MINUS
ACCEPT_UFLOAT = ACCEPT_NUM | ACCEPT_POINT
ACCEPT_FLOAT = ACCEPT_NUM | ACCEPT_MINUS | ACCEPT_POINT
[docs]class CTextFilterMixin(object):
""" A text filter, accepting only specified characters """
flag = None;
def __init__(self, flag):
""" Construct a CTextFilterMixin which accepts the characters specified by the *flag* bitfield
(see above for possible values) """
super(CTextFilterMixin, self).__init__();
self.flag = flag;
self.Bind(wx.EVT_CHAR, self.OnChar);
[docs] def OnChar(self, event):
key = event.GetKeyCode();
if key < wx.WXK_SPACE or key == wx.WXK_DELETE or key > 255:
event.Skip();
return;
if (self.flag & ACCEPT_ALPHA and chr(key) in string.letters) or \
(self.flag & ACCEPT_NUM and chr(key) in string.digits ) or \
(self.flag & ACCEPT_MINUS and chr(key)=='-' ) or \
(self.flag & ACCEPT_POINT and chr(key)=='.' ):
event.Skip();
return;
if not wx.Validator_IsSilent():
wx.Bell();
print 'not skip'
[docs]def MixIn(V, VM):
""" Mixin function: mixes the ValidatorMixin *VM* to the Validator *V*,
returns a new Validator inheriting from both """
class C(V, VM):
def __init__(self, v_args, vm_args):
V.__init__(self, *v_args);
VM.__init__(self, *vm_args);
self.vm_args = vm_args
def Clone(self):
clone = V.Clone(self);
clone.__class__ = C;
VM.__init__(clone, *self.vm_args);
return clone;
return C;