diff --git a/wxPython/src/mac/help.cpp b/wxPython/src/mac/help.cpp index a658f1c2da..2c75000062 100644 --- a/wxPython/src/mac/help.cpp +++ b/wxPython/src/mac/help.cpp @@ -719,7 +719,7 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P PyObject * _resultobj; bool _result; wxHelpProvider * _arg0; - wxWindowBase * _arg1; + wxWindow * _arg1; PyObject * _argo0 = 0; PyObject * _argo1 = 0; char *_kwnames[] = { "self","window", NULL }; @@ -736,8 +736,8 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P } if (_argo1) { if (_argo1 == Py_None) { _arg1 = NULL; } - else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindowBase_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_ShowHelp. Expected _wxWindowBase_p."); + else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) { + PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_ShowHelp. Expected _wxWindow_p."); return NULL; } } @@ -755,7 +755,7 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P static PyObject *_wrap_wxHelpProvider_AddHelp(PyObject *self, PyObject *args, PyObject *kwargs) { PyObject * _resultobj; wxHelpProvider * _arg0; - wxWindowBase * _arg1; + wxWindow * _arg1; wxString * _arg2; PyObject * _argo0 = 0; PyObject * _argo1 = 0; @@ -774,8 +774,8 @@ static PyObject *_wrap_wxHelpProvider_AddHelp(PyObject *self, PyObject *args, Py } if (_argo1) { if (_argo1 == Py_None) { _arg1 = NULL; } - else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindowBase_p")) { - PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_AddHelp. Expected _wxWindowBase_p."); + else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) { + PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_AddHelp. Expected _wxWindow_p."); return NULL; } } diff --git a/wxPython/src/mac/wx.py b/wxPython/src/mac/wx.py index dcc1f689e5..fc8a51fd1d 100644 --- a/wxPython/src/mac/wx.py +++ b/wxPython/src/mac/wx.py @@ -1708,8 +1708,97 @@ def wxCallAfter(callable, *args, **kw): evt.kw = kw wxPostEvent(app, evt) -# an alias -wxRunLater = wxCallAfter + +#---------------------------------------------------------------------- + + +class wxFutureCall: + """ + A convenience class for wxTimer, 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. + + 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 + hold a reference to itself while the timer is running (the timer + has a reference to self.Notify) but the cycle will be broken when + the timer completes, automatically cleaning up the wxFutureCall + object. + """ + def __init__(self, millis, callable, *args, **kwargs): + self.millis = millis + self.callable = callable + self.SetArgs(*args, **kwargs) + self.runCount = 0 + self.hasRun = False + self.result = None + self.timer = None + self.Start() + + def __del__(self): + self.Stop() + + + def Start(self, millis=None): + """ + (Re)start the timer + """ + self.hasRun = False + if millis is not None: + self.millis = millis + self.Stop() + self.timer = wxPyTimer(self.Notify) + self.timer.Start(self.millis, wxTIMER_ONE_SHOT) + Restart = Start + + + def Stop(self): + """ + Stop and destroy the timer. + """ + if self.timer is not None: + self.timer.Stop() + self.timer = None + + + def GetInterval(self): + if self.timer is not None: + return self.timer.GetInterval() + else: + return 0 + + + def IsRunning(self): + return self.timer is not None and self.timer.IsRunning() + + + def SetArgs(self, *args, **kwargs): + """ + (Re)set the args passed to the callable object. This is + useful in conjunction with Restart if you want to schedule a + new call to the same callable object but with different + parameters. + """ + self.args = args + self.kwargs = kwargs + + def HasRun(self): + return self.hasRun + + def GetResult(self): + return self.result + + def Notify(self): + """ + The timer has expired so call the callable. + """ + if self.callable and getattr(self.callable, 'im_self', True): + self.runCount += 1 + self.result = self.callable(*self.args, **self.kwargs) + self.hasRun = True + wxCallAfter(self.Stop) + #---------------------------------------------------------------------- @@ -1822,6 +1911,18 @@ class wxApp(wxPyApp): def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False): wxPyApp.__init__(self) + + if wx.wxPlatform == "__WXMAC__": + try: + import MacOS + if not MacOS.WMAvailable(): + print """This program needs access to the screen. Please run with +'pythonw', not 'python', and only when you are logged in on the main display +of your Mac.""" + sys.exit(1) + except: + pass + self.stdioWin = None self.saveStdio = (sys.stdout, sys.stderr)