X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d14a1e28567de23c586bc80017073d0c39f8d18f..54f9ee450905e98296e6afd1376b3d1e06a1e00f:/wxPython/src/_core_ex.py diff --git a/wxPython/src/_core_ex.py b/wxPython/src/_core_ex.py index b26ed2113f..6c6ff3b1f9 100644 --- a/wxPython/src/_core_ex.py +++ b/wxPython/src/_core_ex.py @@ -1,15 +1,14 @@ #---------------------------------------------------------------------------- -# Use Python's bool constants if available, make aliases if not +# Use Python's bool constants if available, make some if not try: True except NameError: - True = 1==1 - False = 1==0 + __builtins__.True = 1==1 + __builtins__.False = 1==0 + def bool(value): return not not value + __builtins__.bool = bool -# Backwards compaatibility -TRUE = true = True -FALSE = false = False # workarounds for bad wxRTTI names @@ -25,9 +24,9 @@ __wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar' 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" -if RELEASE_VERSION != _core.RELEASE_VERSION: +assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWindows version mismatch" +assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWindows version mismatch" +if RELEASE_VERSION != _core_.RELEASE_VERSION: import warnings warnings.warn("wxPython/wxWindows release number mismatch") @@ -36,7 +35,6 @@ if RELEASE_VERSION != _core.RELEASE_VERSION: class PyDeadObjectError(AttributeError): pass - class _wxPyDeadObject(object): """ Instances of wx objects that are OOR capable will have their __class__ @@ -46,15 +44,46 @@ class _wxPyDeadObject(object): reprStr = "wxPython wrapper for DELETED %s object! (The C++ object no longer exists.)" attrStr = "The C++ part of the %s object has been deleted, attribute access no longer allowed." - def __repr__( self ): + def __repr__(self): if not hasattr(self, "_name"): self._name = "[unknown]" return self.reprStr % self._name - def __getattr__( self, *args ): + def __getattr__(self, *args): if not hasattr(self, "_name"): self._name = "[unknown]" - raise PyDeadObjectError( self.attrStr % self._name ) + raise PyDeadObjectError(self.attrStr % self._name) + + def __nonzero__(self): + return 0 + + + +class PyUnbornObjectError(AttributeError): + pass + +class _wxPyUnbornObject(object): + """ + Some stock objects are created when the wx._core module is + imported, but their C++ instance is not created until the wx.App + object is created and initialized. These object instances will + temporarily have their __class__ changed to this class so an + exception will be raised if they are used before the C++ instance + is ready. + """ + + reprStr = "wxPython wrapper for UNBORN object! (The C++ object is not initialized yet.)" + attrStr = "The C++ part of this object has not been initialized, attribute access not allowed." + + def __repr__(self): + #if not hasattr(self, "_name"): + # self._name = "[unknown]" + return self.reprStr #% self._name + + def __getattr__(self, *args): + #if not hasattr(self, "_name"): + # self._name = "[unknown]" + raise PyUnbornObjectError(self.attrStr) # % self._name ) def __nonzero__(self): return 0 @@ -90,7 +119,7 @@ def CallAfter(callable, *args, **kw): class FutureCall: """ - A convenience class for wxTimer, 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. @@ -107,6 +136,7 @@ class FutureCall: self.callable = callable self.SetArgs(*args, **kwargs) self.runCount = 0 + self.running = False self.hasRun = False self.result = None self.timer = None @@ -128,6 +158,7 @@ class FutureCall: self.Stop() self.timer = wx.PyTimer(self.Notify) self.timer.Start(self.millis, wx.TIMER_ONE_SHOT) + self.running = True Restart = Start @@ -174,20 +205,46 @@ class FutureCall: """ if self.callable and getattr(self.callable, 'im_self', True): self.runCount += 1 + self.running = False self.result = self.callable(*self.args, **self.kwargs) self.hasRun = True - wx.CallAfter(self.Stop) + if not self.running: + # if it wasn't restarted, then cleanup + wx.CallAfter(self.Stop) + +#---------------------------------------------------------------------------- +# Control which items in this module should be documented by epydoc. +# We allow only classes and functions, which will help reduce the size +# of the docs by filtering out the zillions of constants, EVT objects, +# and etc that don't make much sense by themselves, but are instead +# 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 + #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Import other modules in this package that should show up in the # "core" wx namespace -from gdi import * -from windows import * -from controls import * -from misc import * +from _gdi import * +from _windows import * +from _controls import * +from _misc import * + + +# Fixup the stock objects since they can't be used yet. (They will be +# restored in wx.PyApp.OnInit.) +_core_._wxPyFixStockObjects() #---------------------------------------------------------------------------- #----------------------------------------------------------------------------