Merged modifications from the 2.6 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -696,6 +696,8 @@ Event Handling
|
||||
self._SetKeycodeHandler(WXK_UP, self.IncrementValue)
|
||||
self._SetKeyHandler('-', self._OnChangeSign)
|
||||
|
||||
(Setting a func of None removes any keyhandler for the given key.)
|
||||
|
||||
"Navigation" keys are assumed to change the cursor position, and
|
||||
therefore don't cause automatic motion of the cursor as insertable
|
||||
characters do.
|
||||
@@ -2106,7 +2108,10 @@ class MaskedEditMixin:
|
||||
used by the control. <func> should take the event as argument
|
||||
and return False if no further action on the key is necessary.
|
||||
"""
|
||||
self._keyhandlers[keycode] = func
|
||||
if func:
|
||||
self._keyhandlers[keycode] = func
|
||||
elif self._keyhandlers.has_key(keycode):
|
||||
del self._keyhandlers[keycode]
|
||||
|
||||
|
||||
def _SetKeyHandler(self, char, func):
|
||||
@@ -2126,6 +2131,9 @@ class MaskedEditMixin:
|
||||
self._nav.append(keycode)
|
||||
if handler:
|
||||
self._keyhandlers[keycode] = handler
|
||||
elif self.keyhandlers.has_key(keycode):
|
||||
del self._keyhandlers[keycode]
|
||||
|
||||
|
||||
|
||||
def _AddNavKey(self, char, handler=None):
|
||||
@@ -2154,6 +2162,8 @@ class MaskedEditMixin:
|
||||
self._nav.append(keycode)
|
||||
if func:
|
||||
self._keyhandlers[keycode] = func
|
||||
elif self.keyhandlers.has_key(keycode):
|
||||
del self._keyhandlers[keycode]
|
||||
|
||||
|
||||
def _processMask(self, mask):
|
||||
@@ -2611,6 +2621,12 @@ class MaskedEditMixin:
|
||||
keycode = ord(key)
|
||||
if not self._keyhandlers.has_key(keycode):
|
||||
self._SetKeyHandler(key, self._OnChangeSign)
|
||||
elif self._isInt or self._isFloat:
|
||||
signkeys = ['-', '+', ' ', '(', ')']
|
||||
for key in signkeys:
|
||||
keycode = ord(key)
|
||||
if self._keyhandlers.has_key(keycode) and self._keyhandlers[keycode] == self._OnChangeSign:
|
||||
self._SetKeyHandler(key, None)
|
||||
|
||||
|
||||
|
||||
@@ -2674,14 +2690,15 @@ class MaskedEditMixin:
|
||||
self._SetKeycodeHandler(wx.WXK_UP, self._OnUpNumeric) # (adds "shift" to up arrow, and calls _OnChangeField)
|
||||
|
||||
# On ., truncate contents right of cursor to decimal point (if any)
|
||||
# leaves cusor after decimal point if floating point, otherwise at 0.
|
||||
if not self._keyhandlers.has_key(ord(self._decimalChar)):
|
||||
# leaves cursor after decimal point if floating point, otherwise at 0.
|
||||
if not self._keyhandlers.has_key(ord(self._decimalChar)) or self._keyhandlers[ord(self._decimalChar)] != self._OnDecimalPoint:
|
||||
self._SetKeyHandler(self._decimalChar, self._OnDecimalPoint)
|
||||
if not self._keyhandlers.has_key(ord(self._shiftDecimalChar)):
|
||||
|
||||
if not self._keyhandlers.has_key(ord(self._shiftDecimalChar)) or self._keyhandlers[ord(self._shiftDecimalChar)] != self._OnChangeField:
|
||||
self._SetKeyHandler(self._shiftDecimalChar, self._OnChangeField) # (Shift-'.' == '>' on US keyboards)
|
||||
|
||||
# Allow selective insert of groupchar in numbers:
|
||||
if not self._keyhandlers.has_key(ord(self._fields[0]._groupChar)):
|
||||
if not self._keyhandlers.has_key(ord(self._fields[0]._groupChar)) or self._keyhandlers[ord(self._fields[0]._groupChar)] != self._OnGroupChar:
|
||||
self._SetKeyHandler(self._fields[0]._groupChar, self._OnGroupChar)
|
||||
|
||||
## dbg(indent=0, suspend=0)
|
||||
@@ -3784,13 +3801,17 @@ class MaskedEditMixin:
|
||||
value = self._eraseSelection()
|
||||
integer = self._fields[0]
|
||||
start, end = integer._extent
|
||||
sel_start, sel_to = self._GetSelection()
|
||||
|
||||
#### dbg('adjusted pos:', pos)
|
||||
if chr(key) in ('-','+','(', ')') or (chr(key) == " " and pos == self._signpos):
|
||||
cursign = self._isNeg
|
||||
## dbg('cursign:', cursign)
|
||||
if chr(key) in ('-','(', ')'):
|
||||
self._isNeg = (not self._isNeg) ## flip value
|
||||
if sel_start <= self._signpos:
|
||||
self._isNeg = True
|
||||
else:
|
||||
self._isNeg = (not self._isNeg) ## flip value
|
||||
else:
|
||||
self._isNeg = False
|
||||
## dbg('isNeg?', self._isNeg)
|
||||
@@ -4098,7 +4119,7 @@ class MaskedEditMixin:
|
||||
# first space for sign, and last one if using parens.
|
||||
if( self._signOk
|
||||
and ((pos == self._signpos and key in (ord('-'), ord('+'), ord(' ')) )
|
||||
or self._useParens and pos == self._masklength -1)):
|
||||
or (self._useParens and pos == self._masklength -1))):
|
||||
## dbg('adjusted pos:', pos, indent=0)
|
||||
return pos
|
||||
|
||||
@@ -4106,6 +4127,7 @@ class MaskedEditMixin:
|
||||
field = self._FindField(pos)
|
||||
|
||||
## dbg('field._insertRight?', field._insertRight)
|
||||
## if self._signOk: dbg('self._signpos:', self._signpos)
|
||||
if field._insertRight: # if allow right-insert
|
||||
start, end = field._extent
|
||||
slice = self._GetValue()[start:end].strip()
|
||||
@@ -4140,12 +4162,14 @@ class MaskedEditMixin:
|
||||
## # restore selection
|
||||
## self._SetSelection(sel_start, pos)
|
||||
|
||||
elif self._signOk and sel_start == 0: # if selected to beginning and signed,
|
||||
# if selected to beginning and signed, and not changing sign explicitly:
|
||||
elif self._signOk and sel_start == 0 and key not in (ord('-'), ord('+'), ord(' ')):
|
||||
# adjust to past reserved sign position:
|
||||
pos = self._fields[0]._extent[0]
|
||||
## dbg('adjusting field to ', pos)
|
||||
self._SetInsertionPoint(pos)
|
||||
# restore selection
|
||||
self._SetSelection(pos, sel_to)
|
||||
# but keep original selection, to allow replacement of any sign:
|
||||
self._SetSelection(0, sel_to)
|
||||
else:
|
||||
pass # leave position/selection alone
|
||||
|
||||
@@ -4526,11 +4550,11 @@ class MaskedEditMixin:
|
||||
if self._signOk:
|
||||
text, signpos, right_signpos = self._getSignedValue()
|
||||
## dbg('text: "%s", signpos:' % text, signpos)
|
||||
if text and signpos != self._signpos:
|
||||
self._signpos = signpos
|
||||
if not text or text[signpos] not in ('-','('):
|
||||
self._isNeg = False
|
||||
## dbg('no valid sign found; new sign:', self._isNeg)
|
||||
if text and signpos != self._signpos:
|
||||
self._signpos = signpos
|
||||
elif text and self._valid and not self._isNeg and text[signpos] in ('-', '('):
|
||||
## dbg('setting _isNeg to True')
|
||||
self._isNeg = True
|
||||
@@ -5352,6 +5376,8 @@ class MaskedEditMixin:
|
||||
field = self._FindField(self._GetInsertionPoint())
|
||||
edit_start, edit_end = field._extent
|
||||
if field._selectOnFieldEntry:
|
||||
if self._isFloat or self._isInt and field == self._fields[0]:
|
||||
edit_start = 0
|
||||
self._SetInsertionPoint(edit_start)
|
||||
self._SetSelection(edit_start, edit_end)
|
||||
|
||||
@@ -5368,8 +5394,8 @@ class MaskedEditMixin:
|
||||
|
||||
if integer._selectOnFieldEntry:
|
||||
## dbg('select on field entry:')
|
||||
self._SetInsertionPoint(edit_start)
|
||||
self._SetSelection(edit_start, edit_end)
|
||||
self._SetInsertionPoint(0)
|
||||
self._SetSelection(0, edit_end)
|
||||
|
||||
elif integer._insertRight:
|
||||
## dbg('moving insertion point to end')
|
||||
@@ -6546,6 +6572,22 @@ __i=0
|
||||
|
||||
## CHANGELOG:
|
||||
## ====================
|
||||
## Version 1.9
|
||||
## 1. Now ignores kill focus events when being destroyed.
|
||||
## 2. Added missing call to set insertion point on changing fields.
|
||||
## 3. Modified SetKeyHandler() to accept None as means of removing one.
|
||||
## 4. Fixed keyhandler processing for group and decimal character changes.
|
||||
## 5. Fixed a problem that prevented input into the integer digit of a
|
||||
## integerwidth=1 numctrl, if the current value was 0.
|
||||
## 6. Fixed logic involving processing of "_signOk" flag, to remove default
|
||||
## sign key handlers if false, so that SetAllowNegative(False) in the
|
||||
## NumCtrl works properly.
|
||||
## 7. Fixed selection logic for numeric controls so that if selectOnFieldEntry
|
||||
## is true, and the integer portion of an integer format control is selected
|
||||
## and the sign position is selected, the sign keys will always result in a
|
||||
## negative value, rather than toggling the previous sign.
|
||||
##
|
||||
##
|
||||
## Version 1.8
|
||||
## 1. Fixed bug involving incorrect variable name, causing combobox autocomplete to fail.
|
||||
## 2. Added proper support for unicode version of wxPython
|
||||
|
Reference in New Issue
Block a user