Patches from Will Sadkin:
MaskedEditMixin: - fixed size calculations on changing fonts - fixed tabbing logic now that tab events are entered into the control by default (ie event.Skip()) if wx.TE_PROCESS_TAB is set - fixed code attempting to fix the selection after focus events generated on control destruction, to prevent tracebacks TextCtrl, ComboBox - Added support for XRC - Fixed sizing calculation code - Added SetFont() override method that will recalculate the size if this is called. - Added AppendItems() for ComboBox NumCtrl: - prevented ctrl from accepting same grouping and decimal character, - fixed issue preventing paste from working if decimal char was different than '.' TimeCtrl: - Fixed default value to use 24hour time (which will be converted appropriately if format supports it, and added code to check if local timezone uses "AM/PM" for this concept; if not, control now defaults to 24hour format, and disallows the am/pm form. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -54,11 +54,6 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
|
||||
**kwargs):
|
||||
|
||||
|
||||
# This is necessary, because wxComboBox currently provides no
|
||||
# method for determining later if this was specified in the
|
||||
# constructor for the control...
|
||||
self.__readonly = style & wx.CB_READONLY == wx.CB_READONLY
|
||||
|
||||
kwargs['choices'] = choices ## set up maskededit to work with choice list too
|
||||
|
||||
## Since combobox completion is case-insensitive, always validate same way
|
||||
@@ -80,15 +75,56 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
|
||||
choices=choices, style=style|wx.WANTS_CHARS,
|
||||
validator=validator,
|
||||
name=name)
|
||||
|
||||
self.controlInitialized = True
|
||||
|
||||
self._PostInit(style=style, setupEventHandling=setupEventHandling,
|
||||
name=name, value=value, **kwargs)
|
||||
|
||||
|
||||
def _PostInit(self, style=wx.CB_DROPDOWN,
|
||||
setupEventHandling = True, ## setup event handling by default):
|
||||
name = "maskedComboBox", value='', **kwargs):
|
||||
|
||||
# This is necessary, because wxComboBox currently provides no
|
||||
# method for determining later if this was specified in the
|
||||
# constructor for the control...
|
||||
self.__readonly = style & wx.CB_READONLY == wx.CB_READONLY
|
||||
|
||||
if not hasattr(self, 'controlInitialized'):
|
||||
|
||||
self.controlInitialized = True ## must have been called via XRC, therefore base class is constructed
|
||||
if not kwargs.has_key('choices'):
|
||||
choices=[]
|
||||
kwargs['choices'] = choices ## set up maskededit to work with choice list too
|
||||
self._choices = []
|
||||
|
||||
## Since combobox completion is case-insensitive, always validate same way
|
||||
if not kwargs.has_key('compareNoCase'):
|
||||
kwargs['compareNoCase'] = True
|
||||
|
||||
MaskedEditMixin.__init__( self, name, **kwargs )
|
||||
|
||||
self._choices = self._ctrl_constraints._choices
|
||||
## dbg('self._choices:', self._choices)
|
||||
|
||||
if self._ctrl_constraints._alignRight:
|
||||
choices = [choice.rjust(self._masklength) for choice in choices]
|
||||
else:
|
||||
choices = [choice.ljust(self._masklength) for choice in choices]
|
||||
wx.ComboBox.Clear(self)
|
||||
wx.ComboBox.AppendItems(self, choices)
|
||||
|
||||
|
||||
# Set control font - fixed width by default
|
||||
self._setFont()
|
||||
|
||||
if self._autofit:
|
||||
self.SetClientSize(self._CalcSize())
|
||||
self.SetSizeHints(self.GetSize())
|
||||
width = self.GetSize().width
|
||||
height = self.GetBestSize().height
|
||||
self.SetSize((width, height))
|
||||
self.SetSizeHints((width, height))
|
||||
|
||||
|
||||
if value:
|
||||
# ensure value is width of the mask of the control:
|
||||
@@ -134,6 +170,19 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
|
||||
return (size[0]+20, size[1])
|
||||
|
||||
|
||||
def SetFont(self, *args, **kwargs):
|
||||
""" Set the font, then recalculate control size, if appropriate. """
|
||||
wx.ComboBox.SetFont(self, *args, **kwargs)
|
||||
if self._autofit:
|
||||
dbg('calculated size:', self._CalcSize())
|
||||
self.SetClientSize(self._CalcSize())
|
||||
width = self.GetSize().width
|
||||
height = self.GetBestSize().height
|
||||
dbg('setting client size to:', (width, height))
|
||||
self.SetSize((width, height))
|
||||
self.SetSizeHints((width, height))
|
||||
|
||||
|
||||
def _GetSelection(self):
|
||||
"""
|
||||
Allow mixin to get the text selection of this control.
|
||||
@@ -306,7 +355,6 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
|
||||
else:
|
||||
wx.ComboBox.Undo() # else revert to base control behavior
|
||||
|
||||
|
||||
def Append( self, choice, clientData=None ):
|
||||
"""
|
||||
This function override is necessary so we can keep track of any additions to the list
|
||||
@@ -352,6 +400,13 @@ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
|
||||
wx.ComboBox.Append(self, choice, clientData)
|
||||
|
||||
|
||||
def AppendItems( self, choices ):
|
||||
"""
|
||||
AppendItems() is handled in terms of Append, to avoid code replication.
|
||||
"""
|
||||
for choice in choices:
|
||||
self.Append(choice)
|
||||
|
||||
|
||||
def Clear( self ):
|
||||
"""
|
||||
@@ -544,3 +599,30 @@ class ComboBox( BaseMaskedComboBox, MaskedEditAccessorsMixin ):
|
||||
pass
|
||||
|
||||
|
||||
class PreMaskedComboBox( BaseMaskedComboBox, MaskedEditAccessorsMixin ):
|
||||
"""
|
||||
This allows us to use XRC subclassing.
|
||||
"""
|
||||
# This should really be wx.EVT_WINDOW_CREATE but it is not
|
||||
# currently delivered for native controls on all platforms, so
|
||||
# we'll use EVT_SIZE instead. It should happen shortly after the
|
||||
# control is created as the control is set to its "best" size.
|
||||
_firstEventType = wx.EVT_SIZE
|
||||
|
||||
def __init__(self):
|
||||
pre = wx.PreComboBox()
|
||||
self.PostCreate(pre)
|
||||
self.Bind(self._firstEventType, self.OnCreate)
|
||||
|
||||
|
||||
def OnCreate(self, evt):
|
||||
self.Unbind(self._firstEventType)
|
||||
self._PostInit()
|
||||
|
||||
i=0
|
||||
## CHANGELOG:
|
||||
## ====================
|
||||
## Version 1.1
|
||||
## 1. Added .SetFont() method that properly resizes control
|
||||
## 2. Modified control to support construction via XRC mechanism.
|
||||
## 3. Added AppendItems() to conform with latest combobox.
|
||||
|
Reference in New Issue
Block a user