Patch from Will Sadkin

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33436 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2005-04-08 21:31:25 +00:00
parent 40ca944974
commit 281c105455
2 changed files with 28 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ from wx.lib.masked import *
# be a good place to implement the 2.3 logger class # be a good place to implement the 2.3 logger class
from wx.tools.dbg import Logger from wx.tools.dbg import Logger
##dbg = Logger() ##dbg = Logger()
##dbg(enable=0) ##dbg(enable=1)
## ---------- ---------- ---------- ---------- ---------- ---------- ---------- ## ---------- ---------- ---------- ---------- ---------- ---------- ----------
## Because calling SetSelection programmatically does not fire EVT_COMBOBOX ## Because calling SetSelection programmatically does not fire EVT_COMBOBOX
@@ -197,6 +197,7 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
Allow mixin to get the text selection of this control. Allow mixin to get the text selection of this control.
REQUIRED by any class derived from MaskedEditMixin. REQUIRED by any class derived from MaskedEditMixin.
""" """
## dbg('MaskedComboBox::_GetSelection()')
return self.GetMark() return self.GetMark()
def _SetSelection(self, sel_start, sel_to): def _SetSelection(self, sel_start, sel_to):
@@ -204,13 +205,22 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
Allow mixin to set the text selection of this control. Allow mixin to set the text selection of this control.
REQUIRED by any class derived from MaskedEditMixin. REQUIRED by any class derived from MaskedEditMixin.
""" """
## dbg('MaskedComboBox::_SetSelection: setting mark to (%d, %d)' % (sel_start, sel_to))
return self.SetMark( sel_start, sel_to ) return self.SetMark( sel_start, sel_to )
def _GetInsertionPoint(self): def _GetInsertionPoint(self):
return self.GetInsertionPoint() ## dbg('MaskedComboBox::_GetInsertionPoint()', indent=1)
## ret = self.GetInsertionPoint()
# work around new bug in 2.5, in which the insertion point
# returned is always at the right side of the selection,
# rather than the start, as is the case with TextCtrl.
ret = self.GetMark()[0]
## dbg('returned', ret, indent=0)
return ret
def _SetInsertionPoint(self, pos): def _SetInsertionPoint(self, pos):
## dbg('MaskedComboBox::_SetInsertionPoint(%d)' % pos)
self.SetInsertionPoint(pos) self.SetInsertionPoint(pos)
@@ -482,6 +492,12 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
## dbg('computed selection:', sel_start, sel_to, indent=0, suspend=0) ## dbg('computed selection:', sel_start, sel_to, indent=0, suspend=0)
return sel_start, sel_to return sel_start, sel_to
else:
def GetMark(self):
## dbg('MaskedComboBox::GetMark()', indent = 1)
ret = wx.ComboBox.GetMark(self)
## dbg('returned', ret, indent=0)
return ret
def SetSelection(self, index): def SetSelection(self, index):

View File

@@ -2952,6 +2952,7 @@ class MaskedEditMixin:
if pos == year2dig and unadjusted[year2dig] != newstr[year2dig]: if pos == year2dig and unadjusted[year2dig] != newstr[year2dig]:
newpos = pos+2 newpos = pos+2
## dbg('queuing insertion point: (%d)' % newpos)
wx.CallAfter(self._SetInsertionPoint, newpos) wx.CallAfter(self._SetInsertionPoint, newpos)
if match_field is not None: if match_field is not None:
@@ -2964,6 +2965,8 @@ class MaskedEditMixin:
else: else:
newfield = self._FindField(newpos) newfield = self._FindField(newpos)
if newfield != field and newfield._selectOnFieldEntry: if newfield != field and newfield._selectOnFieldEntry:
## dbg('queuing insertion point: (%d)' % newfield._extent[0])
wx.CallAfter(self._SetInsertionPoint, newfield._extent[0])
## dbg('queuing selection: (%d, %d)' % (newfield._extent[0], newfield._extent[1])) ## dbg('queuing selection: (%d, %d)' % (newfield._extent[0], newfield._extent[1]))
wx.CallAfter(self._SetSelection, newfield._extent[0], newfield._extent[1]) wx.CallAfter(self._SetSelection, newfield._extent[0], newfield._extent[1])
else: else:
@@ -4022,7 +4025,9 @@ class MaskedEditMixin:
## dbg('match found:', choice) ## dbg('match found:', choice)
match = index match = index
break break
else: dbg('choice: "%s" - no match' % choice) else:
## dbg('choice: "%s" - no match' % choice)
pass
if match is not None: if match is not None:
## dbg('matched', match) ## dbg('matched', match)
pass pass
@@ -4936,7 +4941,7 @@ class MaskedEditMixin:
old_right_signpos = text.find(')') old_right_signpos = text.find(')')
if field._allowInsert and not field._insertRight and sel_to <= end and sel_start >= start: if field._allowInsert and not field._insertRight and sel_to <= end and sel_start >= start:
# inserting within a left-insert-capable field ## dbg('inserting within a left-insert-capable field')
field_len = end - start field_len = end - start
before = text[start:sel_start] before = text[start:sel_start]
after = text[sel_to:end].strip() after = text[sel_to:end].strip()
@@ -4965,6 +4970,9 @@ class MaskedEditMixin:
char = char.decode(self._defaultEncoding) char = char.decode(self._defaultEncoding)
newtext = left + char + right newtext = left + char + right
#### dbg('left: "%s"' % left)
#### dbg('right: "%s"' % right)
#### dbg('newtext: "%s"' % newtext)
if self._signOk and self._useParens: if self._signOk and self._useParens:
# Balance parentheses: # Balance parentheses: