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;