X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54f9ee450905e98296e6afd1376b3d1e06a1e00f..f1b1ecf0200d1c790c2852b99d0fe20f30b3a08d:/wxPython/src/_core_ex.py diff --git a/wxPython/src/_core_ex.py b/wxPython/src/_core_ex.py index 6c6ff3b1f9..656a54a991 100644 --- a/wxPython/src/_core_ex.py +++ b/wxPython/src/_core_ex.py @@ -19,16 +19,32 @@ __wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar' #---------------------------------------------------------------------------- # Load version numbers from __version__... Ensure that major and minor -# versions are the same for both wxPython and wxWindows. +# versions are the same for both wxPython and wxWidgets. from __version__ import * __version__ = VERSION_STRING -assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWindows version mismatch" -assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWindows version mismatch" +assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWidgets version mismatch" +assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWidgets version mismatch" if RELEASE_VERSION != _core_.RELEASE_VERSION: import warnings - warnings.warn("wxPython/wxWindows release number mismatch") + warnings.warn("wxPython/wxWidgets release number mismatch") + +#---------------------------------------------------------------------------- + +# Set the default string<-->unicode conversion encoding from the +# locale. This encoding is used when string or unicode objects need +# to be converted in order to pass them to wxWidgets. Please be aware +# that the default encoding within the same locale may be slightly +# different on different platforms. For example, please see +# http://www.alanwood.net/demos/charsetdiffs.html for differences +# between the common latin/roman encodings. +import locale +default = locale.getdefaultlocale()[1] +if default: + wx.SetDefaultPyEncoding(default) +del default +del locale #---------------------------------------------------------------------------- @@ -90,39 +106,39 @@ class _wxPyUnbornObject(object): #---------------------------------------------------------------------------- -_wxPyCallAfterId = None def CallAfter(callable, *args, **kw): """ Call the specified function after the current and pending event handlers have been completed. This is also good for making GUI - method calls from non-GUI threads. + method calls from non-GUI threads. Any extra positional or + keyword args are passed on to the callable when it is called. + + :see: `wx.FutureCall` """ app = wx.GetApp() - assert app, 'No wxApp created yet' + assert app is not None, 'No wx.App created yet' - global _wxPyCallAfterId - if _wxPyCallAfterId is None: - _wxPyCallAfterId = wx.NewEventType() - app.Connect(-1, -1, _wxPyCallAfterId, - lambda event: event.callable(*event.args, **event.kw) ) + if not hasattr(app, "_CallAfterId"): + app._CallAfterId = wx.NewEventType() + app.Connect(-1, -1, app._CallAfterId, + lambda event: event.callable(*event.args, **event.kw) ) evt = wx.PyEvent() - evt.SetEventType(_wxPyCallAfterId) + evt.SetEventType(app._CallAfterId) evt.callable = callable evt.args = args evt.kw = kw wx.PostEvent(app, evt) - #---------------------------------------------------------------------------- class FutureCall: """ - A convenience class for wx.Timer, that calls the given callable + A convenience class for `wx.Timer`, that calls the given callable object once after the given amount of milliseconds, passing any positional or keyword args. The return value of the callable is - availbale after it has been run with the GetResult method. + availbale after it has been run with the `GetResult` method. If you don't need to get the return value or restart the timer then there is no need to hold a reference to this object. It will @@ -130,6 +146,8 @@ class FutureCall: has a reference to self.Notify) but the cycle will be broken when the timer completes, automatically cleaning up the wx.FutureCall object. + + :see: `wx.CallAfter` """ def __init__(self, millis, callable, *args, **kwargs): self.millis = millis @@ -222,14 +240,22 @@ class FutureCall: # documented (or will be) as part of the classes/functions/methods # where they should be used. -def __docfilter__(name): - import types - obj = globals().get(name, None) - if type(obj) not in [type, types.ClassType, types.FunctionType, types.BuiltinFunctionType]: - return False - if name.startswith('_') or name.endswith('Ptr') or name.startswith('EVT'): - return False - return True +class __DocFilter: + """ + A filter for epydoc that only allows non-Ptr classes and + fucntions, in order to reduce the clutter in the API docs. + """ + def __init__(self, globals): + self._globals = globals + + def __call__(self, name): + import types + obj = self._globals.get(name, None) + if type(obj) not in [type, types.ClassType, types.FunctionType, types.BuiltinFunctionType]: + return False + if name.startswith('_') or name.endswith('Ptr') or name.startswith('EVT'): + return False + return True #---------------------------------------------------------------------------- #----------------------------------------------------------------------------