Skip to content

Commit 85bf745

Browse files
RDRD
authored andcommitted
Masked combobox fixes from Werner
git-svn-id: http://svn.wxwidgets.org/svn/wx/wxPython@73168 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1 parent 2121967 commit 85bf745

2 files changed

Lines changed: 24 additions & 12 deletions

File tree

trunk/wx/lib/masked/combobox.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ def __init__( self, parent, id=-1, value = '',
9191

9292
kwargs['choices'] = choices ## set up maskededit to work with choice list too
9393

94+
self._prevSelection = (-1, -1)
95+
9496
## Since combobox completion is case-insensitive, always validate same way
9597
if not kwargs.has_key('compareNoCase'):
9698
kwargs['compareNoCase'] = True
@@ -234,7 +236,8 @@ def _SetSelection(self, sel_start, sel_to):
234236
REQUIRED by any class derived from MaskedEditMixin.
235237
"""
236238
## dbg('MaskedComboBox::_SetSelection: setting mark to (%d, %d)' % (sel_start, sel_to))
237-
return self.SetMark( sel_start, sel_to )
239+
if not self.__readonly:
240+
return self.SetMark( sel_start, sel_to )
238241

239242

240243
def _GetInsertionPoint(self):
@@ -249,7 +252,8 @@ def _GetInsertionPoint(self):
249252

250253
def _SetInsertionPoint(self, pos):
251254
## dbg('MaskedComboBox::_SetInsertionPoint(%d)' % pos)
252-
self.SetInsertionPoint(pos)
255+
if not self.__readonly:
256+
self.SetInsertionPoint(pos)
253257

254258

255259
def IsEmpty(*args, **kw):
@@ -417,10 +421,11 @@ def Undo(self):
417421
This function defines the undo operation for the control. (The default
418422
undo is 1-deep.)
419423
"""
420-
if self._mask:
421-
self._Undo()
422-
else:
423-
wx.ComboBox.Undo() # else revert to base control behavior
424+
if not self.__readonly:
425+
if self._mask:
426+
self._Undo()
427+
else:
428+
wx.ComboBox.Undo(self) # else revert to base control behavior
424429

425430
def Append( self, choice, clientData=None ):
426431
"""

trunk/wx/lib/masked/maskededit.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2864,16 +2864,20 @@ def _calcSize(self, size=None):
28642864
wAdjust = 8
28652865
elif isinstance(self, wx.lib.masked.combobox.ComboBox):
28662866
if self._masklength > 10:
2867-
sizing_text = 'FDSJKLREUI' * (self._masklength/10)
2867+
tC, sC = divmod(self._masklength, 10.0)
2868+
sizing_text = 'FDSJKLREUI' * int(tC)
2869+
sizing_text += 'M' * int(sC)
28682870
wAdjust = 26
28692871
else:
2870-
sizing_text = 'M' * self._masklength
2872+
sizing_text = 'MJ' * (self._masklength/2)
28712873
wAdjust = 4
28722874
else:
28732875
if self._masklength > 10:
2874-
sizing_text = 'FDSJKLREUI' * (self._masklength/10)
2876+
tC, sC = divmod(self._masklength, 10.0)
2877+
sizing_text = 'FDSJKLREUI' * int(tC)
2878+
sizing_text += 'M' * int(sC)
28752879
else:
2876-
sizing_text = 'M' * self._masklength
2880+
sizing_text = 'MJ' * (self._masklength/2)
28772881
wAdjust = 4
28782882
if wx.Platform != "__WXMSW__": # give it a little extra space
28792883
sizing_text += 'M'
@@ -3784,8 +3788,11 @@ def _OnChangeField(self, event):
37843788
## dbg('current pos:', pos)
37853789
sel_start, sel_to = self._GetSelection()
37863790

3787-
if self._masklength < 0: # no fields; process tab normally
3788-
self._AdjustField(pos)
3791+
# no fields; process tab normally
3792+
# sel_to == -1 would cause an index error in _FindField
3793+
if self._masklength < 0 or sel_to == -1:
3794+
if pos != -1:
3795+
self._AdjustField(pos)
37893796
if event.GetKeyCode() == wx.WXK_TAB:
37903797
## dbg('tab to next ctrl')
37913798
# As of 2.5.2, you don't call event.Skip() to do

0 commit comments

Comments
 (0)