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:
		| @@ -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): | ||||||
|   | |||||||
| @@ -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: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user