wxPython Merge #2 of 2.4 branch --> HEAD (branch tag: wxPy_2_4_merge_2)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21593 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-07-02 23:13:10 +00:00
parent e234d4c9b7
commit 1fded56b37
535 changed files with 48899 additions and 20067 deletions

View File

@@ -517,10 +517,10 @@ def EVT_SASH_DRAGGED_RANGE(win, id1, id2, func):
win.Connect(id1, id2, wxEVT_SASH_DRAGGED, func)
def EVT_QUERY_LAYOUT_INFO(win, func):
win.Connect(-1, -1, wxEVT_EVT_QUERY_LAYOUT_INFO, func)
win.Connect(-1, -1, wxEVT_QUERY_LAYOUT_INFO, func)
def EVT_CALCULATE_LAYOUT(win, func):
win.Connect(-1, -1, wxEVT_EVT_CALCULATE_LAYOUT, func)
win.Connect(-1, -1, wxEVT_CALCULATE_LAYOUT, func)
#wxSplitterWindow
@@ -610,6 +610,8 @@ wxSystemSettings_GetSystemMetric = wxSystemSettings_GetMetric
# workarounds for bad wxRTTI names
__wxPyPtrTypeMap['wxGauge95'] = 'wxGauge'
__wxPyPtrTypeMap['wxSlider95'] = 'wxSlider'
__wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar'
@@ -647,6 +649,8 @@ if wxPlatform == "__WXGTK__":
except:
pass
# On MSW add the directory where the wxWindows catalogs were installed
# to the default catalog path.
if wxPlatform == "__WXMSW__":
import os
localedir = os.path.join(os.path.split(__file__)[0], "locale")
@@ -654,15 +658,17 @@ if wxPlatform == "__WXMSW__":
del os
#----------------------------------------------------------------------
# wxWindows version numbers. wxPython version is in __version__.
# Load version numbers from __version__... Ensure that major and minor
# versions are the same for both wxPython and wxWindows.
wxMAJOR_VERSION = wxc.wxMAJOR_VERSION
wxMINOR_VERSION = wxc.wxMINOR_VERSION
wxRELEASE_NUMBER = wxc.wxRELEASE_NUMBER
wxVERSION_STRING = wxc.wxVERSION_STRING
wxVERSION_NUMBER = wxc.wxVERSION_NUMBER
from wxPython.__version__ import *
__version__ = wxVERSION_STRING
wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER)
assert wxMAJOR_VERSION == wxc.wxMAJOR_VERSION, "wxPython/wxWindows version mismatch"
assert wxMINOR_VERSION == wxc.wxMINOR_VERSION, "wxPython/wxWindows version mismatch"
if wxRELEASE_VERSION != wxc.wxRELEASE_VERSION:
import warnings
warnings.warn("wxPython/wxWindows release number mismatch")
#----------------------------------------------------------------------
@@ -732,7 +738,7 @@ def wxCallAfter(callable, *args, **kw):
if _wxCallAfterId is None:
_wxCallAfterId = wxNewEventType()
app.Connect(-1, -1, _wxCallAfterId,
lambda event: apply(event.callable, event.args, event.kw) )
lambda event: event.callable(*event.args, **event.kw) )
evt = wxPyEvent()
evt.SetEventType(_wxCallAfterId)
evt.callable = callable
@@ -740,8 +746,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)
#----------------------------------------------------------------------
@@ -771,6 +866,35 @@ class _wxPyDeadObject:
return 0
#----------------------------------------------------------------------
class wxNotebookPage(wxPanel):
"""
There is an old (and apparently unsolvable) bug when placing a
window with a nonstandard background colour in a wxNotebook on
wxGTK, as the notbooks's background colour would always be used
when the window is refreshed. The solution is to place a panel in
the notbook and the coloured window on the panel, sized to cover
the panel. This simple class does that for you, just put an
instance of this in the notebook and make your regular window a
child of this one and it will handle the resize for you.
"""
def __init__(self, parent, id=-1,
pos=wxDefaultPosition, size=wxDefaultSize,
style=wxTAB_TRAVERSAL, name="panel"):
wxPanel.__init__(self, parent, id, pos, size, style, name)
self.child = None
EVT_SIZE(self, self.OnSize)
def OnSize(self, evt):
if self.child is None:
children = self.GetChildren()
if len(children):
self.child = children[0]
if self.child:
self.child.SetPosition((0,0))
self.child.SetSize(self.GetSize())
#----------------------------------------------------------------------
#----------------------------------------------------------------------
@@ -825,6 +949,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)
@@ -904,7 +1040,7 @@ class wxPyWidgetTester(wxApp):
return True
def SetWidget(self, widgetClass, *args):
w = apply(widgetClass, (self.frame,) + args)
w = widgetClass(self.frame, *args)
self.frame.Show(True)
#----------------------------------------------------------------------------