X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/demo/MaskedEditControls.py diff --git a/wxPython/demo/MaskedEditControls.py b/wxPython/demo/MaskedEditControls.py deleted file mode 100644 index 5e83e9cc3b..0000000000 --- a/wxPython/demo/MaskedEditControls.py +++ /dev/null @@ -1,647 +0,0 @@ - -import string -import sys -import traceback - -import wx -import wx.lib.masked as masked -import wx.lib.scrolledpanel as scroll - - -class demoMixin: - """ - Centralized routines common to demo pages, to remove repetition. - """ - def labelGeneralTable(self, sizer): - description = wx.StaticText( self, -1, "Description", ) - mask = wx.StaticText( self, -1, "Mask Value" ) - formatcode = wx.StaticText( self, -1, "Format" ) - regex = wx.StaticText( self, -1, "Regexp Validator(opt.)" ) - ctrl = wx.StaticText( self, -1, "Masked TextCtrl" ) - - description.SetFont( wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD)) - mask.SetFont( wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD)) - formatcode.SetFont( wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD) ) - regex.SetFont( wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD)) - ctrl.SetFont( wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD)) - - sizer.Add(description) - sizer.Add(mask) - sizer.Add(formatcode) - sizer.Add(regex) - sizer.Add(ctrl) - - - def layoutGeneralTable(self, controls, sizer): - for control in controls: - sizer.Add( wx.StaticText( self, -1, control[0]) ) - sizer.Add( wx.StaticText( self, -1, control[1]) ) - sizer.Add( wx.StaticText( self, -1, control[3]) ) - sizer.Add( wx.StaticText( self, -1, control[4]) ) - - if control in controls: - newControl = masked.TextCtrl( self, -1, "", - mask = control[1], - excludeChars = control[2], - formatcodes = control[3], - includeChars = "", - validRegex = control[4], - validRange = control[5], - choices = control[6], - choiceRequired = True, - defaultValue = control[7], - demo = True, - name = control[0]) - self.editList.append(newControl) - sizer.Add(newControl) - - - def changeControlParams(self, event, parameter, checked_value, notchecked_value): - if event.IsChecked(): value = checked_value - else: value = notchecked_value - - kwargs = {parameter: value} - - for control in self.editList: - control.SetCtrlParameters(**kwargs) - control.Refresh() - - self.Refresh() - - - -#---------------------------------------------------------------------------- -class demoPage1(scroll.ScrolledPanel, demoMixin): - def __init__(self, parent, log): - scroll.ScrolledPanel.__init__(self, parent, -1) - self.sizer = wx.BoxSizer( wx.VERTICAL ) - self.editList = [] - - label = wx.StaticText( self, -1, """\ -Here are some basic masked TextCtrls to give you an idea of what you can do -with this control. Note that all controls have been auto-sized by including 'F' in -the format codes. - -Try entering nonsensical or partial values in validated fields to see what happens. -Note that the State and Last Name fields are list-limited (valid last names are: -Smith, Jones, Williams). Signs on numbers can be toggled with the minus key. -""") - label.SetForegroundColour( "Blue" ) - header = wx.BoxSizer( wx.HORIZONTAL ) - header.Add( label, 0, flag=wx.ALIGN_LEFT|wx.ALL, border = 5 ) - - highlight = wx.CheckBox( self, -1, "Highlight Empty" ) - disallow = wx.CheckBox( self, -1, "Disallow Empty" ) - showFill = wx.CheckBox( self, -1, "change fillChar" ) - - vbox = wx.BoxSizer( wx.VERTICAL ) - vbox.Add( highlight, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - vbox.Add( disallow, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - vbox.Add( showFill, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - header.Add((15, 0)) - header.Add(vbox, 0, flag=wx.ALIGN_LEFT|wx.ALL, border=5 ) - - self.Bind(wx.EVT_CHECKBOX, self.onHighlightEmpty, id=highlight.GetId()) - self.Bind(wx.EVT_CHECKBOX, self.onDisallowEmpty, id=disallow.GetId()) - self.Bind(wx.EVT_CHECKBOX, self.onShowFill, id=showFill.GetId()) - - grid = wx.FlexGridSizer( 0, 5, vgap=10, hgap=10 ) - self.labelGeneralTable(grid) - - # The following list is of the controls for the demo. Feel free to play around with - # the options! - controls = [ - #description mask excl format regexp range,list,initial - ("Phone No", "(###) ###-#### x:###", "", 'F^-', "^\(\d{3}\) \d{3}-\d{4}", '','',''), - ("Social Sec#", "###-##-####", "", 'F', "\d{3}-\d{2}-\d{4}", '','',''), - ("Full Name", "C{14}", "", 'F_', '^[A-Z][a-zA-Z]+ [A-Z][a-zA-Z]+', '','',''), - ("Last Name Only", "C{14}", "", 'F {list}', '^[A-Z][a-zA-Z]+', '',('Smith','Jones','Williams'),''), - ("Zip plus 4", "#{5}-#{4}", "", 'F', "\d{5}-(\s{4}|\d{4})", '','',''), - ("Customer No", "\CAA-###", "", 'F!', "C[A-Z]{2}-\d{3}", '','',''), - ("Invoice Total", "#{9}.##", "", 'F-_,', "", '','',''), - ("Integer", "#{9}", "", 'F-_', "", '','',''), - ] - - self.layoutGeneralTable(controls, grid) - self.sizer.Add( header, 0, flag=wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.sizer.Add( grid, 0, flag= wx.ALIGN_LEFT|wx.LEFT, border=5 ) - self.SetSizer(self.sizer) - self.SetupScrolling() - self.SetAutoLayout(1) - - - def onDisallowEmpty( self, event ): - """ Set emptyInvalid parameter on/off """ - self.changeControlParams( event, "emptyInvalid", True, False ) - - def onHighlightEmpty( self, event ): - """ Highlight empty values""" - self.changeControlParams( event, "emptyBackgroundColour", "Blue", "White" ) - - def onShowFill( self, event ): - """ Set fillChar parameter to '?' or ' ' """ - self.changeControlParams( event, "fillChar", '?', ' ' ) - - -class demoPage2(scroll.ScrolledPanel, demoMixin): - def __init__( self, parent, log ): - self.log = log - scroll.ScrolledPanel.__init__( self, parent, -1 ) - self.sizer = wx.BoxSizer( wx.VERTICAL ) - - label = wx.StaticText( self, -1, """\ -All these controls have been created by passing a single parameter, the autoformat code, -and use the factory class masked.Ctrl with its default controlType. -The masked package contains an internal dictionary of types and formats (autoformats). -Many of these already do complicated validation; To see some examples, try -29 Feb 2002 vs. 2004 for the date formats, or email address validation. -""") - - label.SetForegroundColour( "Blue" ) - self.sizer.Add( label, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - - description = wx.StaticText( self, -1, "Description") - autofmt = wx.StaticText( self, -1, "AutoFormat Code") - ctrl = wx.StaticText( self, -1, "Masked Ctrl") - - description.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - autofmt.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - ctrl.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - - grid = wx.FlexGridSizer( 0, 3, vgap=10, hgap=5 ) - grid.Add( description, 0, wx.ALIGN_LEFT ) - grid.Add( autofmt, 0, wx.ALIGN_LEFT ) - grid.Add( ctrl, 0, wx.ALIGN_LEFT ) - - for autoformat, desc in masked.autoformats: - grid.Add( wx.StaticText( self, -1, desc), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, autoformat), 0, wx.ALIGN_LEFT ) - grid.Add( masked.Ctrl( self, -1, "", - autoformat = autoformat, - demo = True, - name = autoformat), - 0, wx.ALIGN_LEFT ) - - self.sizer.Add( grid, 0, wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.SetSizer( self.sizer ) - self.SetAutoLayout( 1 ) - self.SetupScrolling() - - -class demoPage3(scroll.ScrolledPanel, demoMixin): - def __init__(self, parent, log): - self.log = log - scroll.ScrolledPanel.__init__(self, parent, -1) - self.sizer = wx.BoxSizer( wx.VERTICAL ) - self.editList = [] - - label = wx.StaticText( self, -1, """\ -Here masked TextCtrls that have default values. The states -control has a list of valid values, and the unsigned integer -has a legal range specified. -""") - label.SetForegroundColour( "Blue" ) - requireValid = wx.CheckBox( self, -1, "Require Valid Value" ) - self.Bind(wx.EVT_CHECKBOX, self.onRequireValid, id=requireValid.GetId()) - - header = wx.BoxSizer( wx.HORIZONTAL ) - header.Add( label, 0, flag=wx.ALIGN_LEFT|wx.ALL, border = 5) - header.Add((75, 0)) - header.Add( requireValid, 0, flag=wx.ALIGN_LEFT|wx.ALL, border=10 ) - - grid = wx.FlexGridSizer( 0, 5, vgap=10, hgap=10 ) - self.labelGeneralTable( grid ) - - controls = [ - #description mask excl format regexp range,list,initial - ("U.S. State (2 char)", "AA", "", 'F!_', "[A-Z]{2}", '', masked.states, masked.states[0]), - ("Integer (signed)", "#{6}", "", 'F-_', "", '','', ' 0 '), - ("Integer (unsigned)\n(1-399)","######", "", 'F_', "", (1,399),'', '1 '), - ("Float (signed)", "#{6}.#{9}", "", 'F-_R', "", '','', '000000.000000000'), - ("Date (MDY) + Time", "##/##/#### ##:##:## AM", 'BCDEFGHIJKLMNOQRSTUVWXYZ','DF!',"", '','', wx.DateTime_Now().Format("%m/%d/%Y %I:%M:%S %p")), - ] - self.layoutGeneralTable( controls, grid ) - - self.sizer.Add( header, 0, flag=wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.sizer.Add( grid, 0, flag=wx.ALIGN_LEFT|wx.ALL, border=5 ) - - self.SetSizer( self.sizer ) - self.SetAutoLayout( 1 ) - self.SetupScrolling() - - def onRequireValid( self, event ): - """ Set validRequired parameter on/off """ - self.changeControlParams( event, "validRequired", True, False ) - - -class demoPage4(scroll.ScrolledPanel, demoMixin): - def __init__( self, parent, log ): - self.log = log - scroll.ScrolledPanel.__init__( self, parent, -1 ) - self.sizer = wx.BoxSizer( wx.VERTICAL ) - - label = wx.StaticText( self, -1, """\ -These controls have field-specific choice lists and allow autocompletion. - -Down arrow or Page Down in an uncompleted field with an auto-completable field will attempt -to auto-complete a field if it has a choice list. -Page Down and Shift-Down arrow will also auto-complete, or cycle through the complete list. -Page Up and Shift-Up arrow will similarly cycle backwards through the list. -""") - - label.SetForegroundColour( "Blue" ) - self.sizer.Add( label, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - - description = wx.StaticText( self, -1, "Description" ) - autofmt = wx.StaticText( self, -1, "AutoFormat Code" ) - fields = wx.StaticText( self, -1, "Field Objects" ) - ctrl = wx.StaticText( self, -1, "Masked TextCtrl" ) - - description.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - autofmt.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - fields.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - ctrl.SetFont( wx.Font( 9, wx.SWISS, wx.NORMAL, wx.BOLD ) ) - - grid = wx.FlexGridSizer( 0, 4, vgap=10, hgap=10 ) - grid.Add( description, 0, wx.ALIGN_LEFT ) - grid.Add( autofmt, 0, wx.ALIGN_LEFT ) - grid.Add( fields, 0, wx.ALIGN_LEFT ) - grid.Add( ctrl, 0, wx.ALIGN_LEFT ) - - autoformat = "USPHONEFULLEXT" - fieldsDict = {0: masked.Field(choices=["617","781","508","978","413"], choiceRequired=True)} - fieldsLabel = """\ -{0: Field(choices=[ - "617","781", - "508","978","413"], - choiceRequired=True)}""" - grid.Add( wx.StaticText( self, -1, "Restricted Area Code"), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, autoformat), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, fieldsLabel), 0, wx.ALIGN_LEFT ) - grid.Add( masked.TextCtrl( self, -1, "", - autoformat = autoformat, - fields = fieldsDict, - demo = True, - name = autoformat), - 0, wx.ALIGN_LEFT ) - - autoformat = "EXPDATEMMYY" - fieldsDict = {1: masked.Field(choices=["03", "04", "05"], choiceRequired=True)} - fieldsLabel = """\ -{1: Field(choices=[ - "03", "04", "05"], - choiceRequired=True)}""" - exp = masked.TextCtrl( self, -1, "", - autoformat = autoformat, - fields = fieldsDict, - demo = True, - name = autoformat) - - grid.Add( wx.StaticText( self, -1, "Restricted Expiration"), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, autoformat), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, fieldsLabel), 0, wx.ALIGN_LEFT ) - grid.Add( exp, 0, wx.ALIGN_LEFT ) - - fieldsDict = {0: masked.Field(choices=["02134","02155"], choiceRequired=True), - 1: masked.Field(choices=["1234", "5678"], choiceRequired=False)} - fieldsLabel = """\ -{0: Field(choices=["02134","02155"], - choiceRequired=True), - 1: Field(choices=["1234", "5678"], - choiceRequired=False)}""" - autoformat = "USZIPPLUS4" - zip = masked.TextCtrl( self, -1, "", - autoformat = autoformat, - fields = fieldsDict, - demo = True, - name = autoformat) - - grid.Add( wx.StaticText( self, -1, "Restricted Zip + 4"), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, autoformat), 0, wx.ALIGN_LEFT ) - grid.Add( wx.StaticText( self, -1, fieldsLabel), 0, wx.ALIGN_LEFT ) - grid.Add( zip, 0, wx.ALIGN_LEFT ) - - self.sizer.Add( grid, 0, wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.SetSizer( self.sizer ) - self.SetAutoLayout(1) - self.SetupScrolling() - - -class demoPage5(scroll.ScrolledPanel, demoMixin): - def __init__( self, parent, log ): - self.log = log - scroll.ScrolledPanel.__init__( self, parent, -1 ) - self.sizer = wx.BoxSizer( wx.VERTICAL ) - - - labelMaskedCombos = wx.StaticText( self, -1, """\ -These are some examples of masked.ComboBox:""") - labelMaskedCombos.SetForegroundColour( "Blue" ) - - - label_statecode = wx.StaticText( self, -1, """\ -A state selector; only -"legal" values can be -entered:""") - statecode = masked.ComboBox( self, -1, masked.states[0], - choices = masked.states, - autoformat="USSTATE") - - label_statename = wx.StaticText( self, -1, """\ -A state name selector, -with auto-select:""") - - # Create this one using factory function: - statename = masked.Ctrl( self, -1, masked.state_names[0], - controlType = masked.controlTypes.COMBO, - choices = masked.state_names, - autoformat="USSTATENAME", - autoSelect=True) - statename.SetCtrlParameters(formatcodes = 'F!V_') - - - numerators = [ str(i) for i in range(1, 4) ] - denominators = [ string.ljust(str(i), 2) for i in [2,3,4,5,8,16,32,64] ] - fieldsDict = {0: masked.Field(choices=numerators, choiceRequired=False), - 1: masked.Field(choices=denominators, choiceRequired=True)} - choices = [] - for n in numerators: - for d in denominators: - if n != d: - choices.append( '%s/%s' % (n,d) ) - - - label_fraction = wx.StaticText( self, -1, """\ -A masked ComboBox for fraction selection. -Choices for each side of the fraction can -be selected with PageUp/Down:""") - - fraction = masked.Ctrl( self, -1, "", - controlType = masked.controlTypes.COMBO, - choices = choices, - choiceRequired = True, - mask = "#/##", - formatcodes = "F_", - validRegex = "^\d\/\d\d?", - fields = fieldsDict ) - - - label_code = wx.StaticText( self, -1, """\ -A masked ComboBox to validate -text from a list of numeric codes:""") - - choices = ["91", "136", "305", "4579"] - code = masked.ComboBox( self, -1, choices[0], - choices = choices, - choiceRequired = True, - formatcodes = "F_r", - mask = "####") - - label_selector = wx.StaticText( self, -1, """\ -Programmatically set -choice sets:""") - self.list_selector = wx.ComboBox(self, -1, '', choices = ['list1', 'list2', 'list3']) - self.dynamicbox = masked.Ctrl( self, -1, ' ', - controlType = masked.controlTypes.COMBO, - mask = 'XXXX', - formatcodes = 'F_', - # these are to give dropdown some initial height, - # as base control apparently only sets that size - # during initial construction : - choices = ['', '1', '2', '3', '4', '5'] ) - - self.dynamicbox.Clear() # get rid of initial choices used to size the dropdown - - - labelIpAddrs = wx.StaticText( self, -1, """\ -Here are some examples of IpAddrCtrl, a control derived from masked.TextCtrl:""") - labelIpAddrs.SetForegroundColour( "Blue" ) - - - label_ipaddr1 = wx.StaticText( self, -1, "An empty control:") - ipaddr1 = masked.IpAddrCtrl( self, -1, style = wx.TE_PROCESS_TAB ) - - - label_ipaddr2 = wx.StaticText( self, -1, "A restricted mask:") - ipaddr2 = masked.IpAddrCtrl( self, -1, mask=" 10. 1.109.###" ) - - - label_ipaddr3 = wx.StaticText( self, -1, """\ -A control with restricted legal values: -10. (1|2) . (129..255) . (0..255)""") - ipaddr3 = masked.Ctrl( self, -1, - controlType = masked.controlTypes.IPADDR, - mask=" 10. #.###.###") - ipaddr3.SetFieldParameters(0, validRegex="1|2",validRequired=False ) # requires entry to match or not allowed - - # This allows any value in penultimate field, but colors anything outside of the range invalid: - ipaddr3.SetFieldParameters(1, validRange=(129,255), validRequired=False ) - - - - labelNumerics = wx.StaticText( self, -1, """\ -Here are some useful configurations of a masked.TextCtrl for integer and floating point input that still treat -the control as a text control. (For a true numeric control, check out the masked.NumCtrl class!)""") - labelNumerics.SetForegroundColour( "Blue" ) - - label_intctrl1 = wx.StaticText( self, -1, """\ -An integer entry control with -shifting insert enabled:""") - self.intctrl1 = masked.TextCtrl(self, -1, name='intctrl', mask="#{9}", formatcodes = '_-,F>') - label_intctrl2 = wx.StaticText( self, -1, """\ - Right-insert integer entry:""") - self.intctrl2 = masked.TextCtrl(self, -1, name='intctrl', mask="#{9}", formatcodes = '_-,Fr') - - label_floatctrl = wx.StaticText( self, -1, """\ -A floating point entry control -with right-insert for ordinal:""") - self.floatctrl = masked.TextCtrl(self, -1, name='floatctrl', mask="#{9}.#{2}", formatcodes="F,_-R", useParensForNegatives=False) - self.floatctrl.SetFieldParameters(0, formatcodes='r<', validRequired=True) # right-insert, require explicit cursor movement to change fields - self.floatctrl.SetFieldParameters(1, defaultValue='00') # don't allow blank fraction - - label_numselect = wx.StaticText( self, -1, """\ -<= Programmatically set the value - of the float entry ctrl:""") - numselect = wx.ComboBox(self, -1, choices = [ '', '111', '222.22', '-3', '54321.666666666', '-1353.978', - '1234567', '-1234567', '123456789', '-123456789.1', - '1234567890.', '-1234567890.1' ]) - - parens_check = wx.CheckBox(self, -1, "Use () to indicate negatives in above controls") - - - - gridCombos = wx.FlexGridSizer( 0, 4, vgap=10, hgap = 10 ) - gridCombos.Add( label_statecode, 0, wx.ALIGN_LEFT ) - gridCombos.Add( statecode, 0, wx.ALIGN_LEFT ) - gridCombos.Add( label_fraction, 0, wx.ALIGN_LEFT ) - gridCombos.Add( fraction, 0, wx.ALIGN_LEFT ) - gridCombos.Add( label_statename, 0, wx.ALIGN_LEFT ) - gridCombos.Add( statename, 0, wx.ALIGN_LEFT ) - gridCombos.Add( label_code, 0, wx.ALIGN_LEFT ) - gridCombos.Add( code, 0, wx.ALIGN_LEFT ) - gridCombos.Add( label_selector, 0, wx.ALIGN_LEFT) - hbox = wx.BoxSizer( wx.HORIZONTAL ) - hbox.Add( self.list_selector, 0, wx.ALIGN_LEFT ) - hbox.Add(wx.StaticText(self, -1, ' => '), 0, wx.ALIGN_LEFT) - hbox.Add( self.dynamicbox, 0, wx.ALIGN_LEFT ) - gridCombos.Add( hbox, 0, wx.ALIGN_LEFT ) - - gridIpAddrs = wx.FlexGridSizer( 0, 4, vgap=10, hgap = 15 ) - gridIpAddrs.Add( label_ipaddr1, 0, wx.ALIGN_LEFT ) - gridIpAddrs.Add( ipaddr1, 0, wx.ALIGN_LEFT ) - gridIpAddrs.Add( label_ipaddr2, 0, wx.ALIGN_LEFT ) - gridIpAddrs.Add( ipaddr2, 0, wx.ALIGN_LEFT ) - gridIpAddrs.Add( label_ipaddr3, 0, wx.ALIGN_LEFT ) - gridIpAddrs.Add( ipaddr3, 0, wx.ALIGN_LEFT ) - - gridNumerics = wx.FlexGridSizer( 0, 4, vgap=10, hgap = 10 ) - gridNumerics.Add( label_intctrl1, 0, wx.ALIGN_LEFT ) - gridNumerics.Add( self.intctrl1, 0, wx.ALIGN_LEFT ) - gridNumerics.Add( label_intctrl2, 0, wx.ALIGN_RIGHT ) - gridNumerics.Add( self.intctrl2, 0, wx.ALIGN_LEFT ) - gridNumerics.Add( label_floatctrl, 0, wx.ALIGN_LEFT ) - gridNumerics.Add( self.floatctrl, 0, wx.ALIGN_LEFT ) - gridNumerics.Add( label_numselect, 0, wx.ALIGN_RIGHT ) - gridNumerics.Add( numselect, 0, wx.ALIGN_LEFT ) - - self.sizer.Add( labelMaskedCombos, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - self.sizer.Add( gridCombos, 0, wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.sizer.Add( wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, border=8 ) - self.sizer.Add( labelIpAddrs, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - self.sizer.Add( gridIpAddrs, 0, wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.sizer.Add( wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, border=8 ) - self.sizer.Add( labelNumerics, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - self.sizer.Add( gridNumerics, 0, wx.ALIGN_LEFT|wx.ALL, border=5 ) - self.sizer.Add( parens_check, 0, wx.ALIGN_LEFT|wx.ALL, 5 ) - - self.SetSizer( self.sizer ) - self.SetAutoLayout(1) - self.SetupScrolling() - - self.Bind(wx.EVT_COMBOBOX, self.OnComboSelection, id=fraction.GetId()) - self.Bind(wx.EVT_COMBOBOX, self.OnComboSelection, id=code.GetId()) - self.Bind(wx.EVT_COMBOBOX, self.OnComboSelection, id=statecode.GetId()) - self.Bind(wx.EVT_COMBOBOX, self.OnComboSelection, id=statename.GetId()) - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=code.GetId()) - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=statecode.GetId()) - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=statename.GetId()) - self.Bind(wx.EVT_COMBOBOX, self.OnListSelection, id=self.list_selector.GetId()) - - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=self.intctrl1.GetId()) - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=self.intctrl2.GetId()) - self.Bind(wx.EVT_TEXT, self.OnTextChange, id=self.floatctrl.GetId()) - self.Bind(wx.EVT_COMBOBOX, self.OnNumberSelect, id=numselect.GetId()) - self.Bind(wx.EVT_CHECKBOX, self.OnParensCheck, id=parens_check.GetId()) - - self.Bind(wx.EVT_TEXT, self.OnIpAddrChange, id=ipaddr1.GetId()) - self.Bind(wx.EVT_TEXT, self.OnIpAddrChange, id=ipaddr2.GetId()) - self.Bind(wx.EVT_TEXT, self.OnIpAddrChange, id=ipaddr3.GetId()) - - - - - def OnComboSelection( self, event ): - ctl = self.FindWindowById( event.GetId() ) - if not ctl.IsValid(): - self.log.write('current value not a valid choice') - self.log.write('new value = %s' % ctl.GetValue()) - - def OnTextChange( self, event ): - ctl = self.FindWindowById( event.GetId() ) - if ctl.IsValid(): - self.log.write('new value = %s\n' % ctl.GetValue() ) - - def OnNumberSelect( self, event ): - value = event.GetString() - # Format choice to fit into format for #{9}.#{2}, with sign position reserved: - # (ordinal + fraction == 11 + decimal point + sign == 13) - if value: - floattext = "%13.2f" % float(value) - else: - floattext = value # clear the value again - try: - self.floatctrl.SetValue(floattext) - except: - type, value, tb = sys.exc_info() - for line in traceback.format_exception_only(type, value): - self.log.write(line) - - def OnParensCheck( self, event ): - self.intctrl1.SetCtrlParameters(useParensForNegatives=event.IsChecked()) - self.intctrl2.SetCtrlParameters(useParensForNegatives=event.IsChecked()) - self.floatctrl.SetCtrlParameters(useParensForNegatives=event.IsChecked()) - - def OnIpAddrChange( self, event ): - ipaddr = self.FindWindowById( event.GetId() ) - if ipaddr.IsValid(): - self.log.write('new addr = %s\n' % ipaddr.GetAddress() ) - - def OnListSelection( self, event ): - list = self.list_selector.GetStringSelection() - formatcodes = 'F_' - if list == 'list1': - choices = ['abc', 'defg', 'hi'] - mask = 'aaaa' - elif list == 'list2': - choices = ['1', '2', '34', '567'] - formatcodes += 'r' - mask = '###' - else: - choices = masked.states - mask = 'AA' - formatcodes += '!' - self.dynamicbox.SetCtrlParameters( mask = mask, - choices = choices, - choiceRequired=True, - autoSelect=True, - formatcodes=formatcodes) - self.dynamicbox.SetValue(choices[0]) - -# --------------------------------------------------------------------- -class TestMaskedTextCtrls(wx.Notebook): - def __init__(self, parent, id, log): - wx.Notebook.__init__(self, parent, id) - self.log = log - - win = demoPage1(self, log) - self.AddPage(win, "General examples") - - win = demoPage2(self, log) - self.AddPage(win, 'Auto-formatted controls') - - win = demoPage3(self, log) - self.AddPage(win, "Using default values") - - win = demoPage4(self, log) - self.AddPage(win, 'Using auto-complete fields') - - win = demoPage5(self, log) - self.AddPage(win, 'Other masked controls') - - -#---------------------------------------------------------------------------- - -def runTest(frame, nb, log): - testWin = TestMaskedTextCtrls(nb, -1, log) - return testWin - -def RunStandalone(): - app = wx.PySimpleApp() - frame = wx.Frame(None, -1, "Test MaskedEditCtrls", size=(640, 480)) - win = TestMaskedTextCtrls(frame, -1, sys.stdout) - frame.Show(True) - app.MainLoop() -#---------------------------------------------------------------------------- -import wx.lib.masked.maskededit as maskededit -# strip out module header used for pydoc: -demodoc = '\n'.join(maskededit.__doc__.split('\n')[2:]) -overview = """ -

-""" + demodoc + """
-
-""" - -if __name__ == "__main__": - import sys,os - import run - run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])