Use a MessagePanel instead of a MessageDialog for samples that may not

be runnable in certain conditions


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-11-01 19:39:09 +00:00
parent 45fb81e556
commit c4ef95daf6
14 changed files with 165 additions and 139 deletions

View File

@@ -68,10 +68,10 @@ def runTest(frame, nb, log):
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win
else: else:
dlg = wx.MessageDialog(frame, 'This demo only works on MSW.', from Main import MessagePanel
'Sorry', wx.OK | wx.ICON_INFORMATION) win = MessagePanel(nb, 'This demo only works on Microsoft Windows.',
dlg.ShowModal() 'Sorry', wx.ICON_WARNING)
dlg.Destroy() return win
overview = """\ overview = """\

View File

@@ -191,10 +191,10 @@ def runTest(frame, nb, log):
win = TestPanel(nb, log, frame) win = TestPanel(nb, log, frame)
return win return win
else: else:
dlg = wx.MessageDialog(frame, 'This demo only works on Windows.', from Main import MessagePanel
'Sorry', wx.OK | wx.ICON_INFORMATION) win = MessagePanel(nb, 'This demo only works on Microsoft Windows.',
dlg.ShowModal() 'Sorry', wx.ICON_WARNING)
dlg.Destroy() return win

View File

@@ -67,10 +67,10 @@ def runTest(frame, nb, log):
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win
else: else:
dlg = wx.MessageDialog(frame, 'This demo only works on MSW.', from Main import MessagePanel
'Sorry', wx.OK | wx.ICON_INFORMATION) win = MessagePanel(nb, 'This demo only works on Microsoft Windows.',
dlg.ShowModal() 'Sorry', wx.ICON_WARNING)
dlg.Destroy() return win
overview = """\ overview = """\

View File

@@ -92,8 +92,10 @@ class SimpleView(wx.Panel):
def runTest(frame, nb, log): def runTest(frame, nb, log):
if wx.Platform == "__WXMAC__": if wx.Platform == "__WXMAC__":
wx.MessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry") from Main import MessagePanel
return win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
'Sorry', wx.ICON_WARNING)
return win
if 1: if 1:
win = gizmos.DynamicSashWindow(nb, -1, style = wx.CLIP_CHILDREN win = gizmos.DynamicSashWindow(nb, -1, style = wx.CLIP_CHILDREN

View File

@@ -93,7 +93,7 @@ class TestPanel(wx.Panel):
if wx.Platform == "__WXMAC__": if wx.Platform == "__WXMAC__":
dlg = wx.MessageDialog( dlg = wx.MessageDialog(
self, 'FloatBar does not work well on this platform.', self, 'FloatBar does not work well on this platform.',
'Sorry', wx.OK | wx.ICON_INFORMATION 'Sorry', wx.OK | wx.ICON_WARNING
) )
dlg.ShowModal() dlg.ShowModal()
dlg.Destroy() dlg.Destroy()

View File

@@ -53,7 +53,7 @@ class ButtonPanel(wx.Panel):
if not haveGLCanvas: if not haveGLCanvas:
dlg = wx.MessageDialog(self, dlg = wx.MessageDialog(self,
'The GLCanvas class has not been included with this build of wxPython!', 'The GLCanvas class has not been included with this build of wxPython!',
'Sorry', wx.OK | wx.ICON_INFORMATION) 'Sorry', wx.OK | wx.ICON_WARNING)
dlg.ShowModal() dlg.ShowModal()
dlg.Destroy() dlg.Destroy()
@@ -61,7 +61,7 @@ class ButtonPanel(wx.Panel):
dlg = wx.MessageDialog(self, dlg = wx.MessageDialog(self,
'The OpenGL package was not found. You can get it at\n' 'The OpenGL package was not found. You can get it at\n'
'http://PyOpenGL.sourceforge.net/', 'http://PyOpenGL.sourceforge.net/',
'Sorry', wx.OK | wx.ICON_INFORMATION) 'Sorry', wx.OK | wx.ICON_WARNING)
dlg.ShowModal() dlg.ShowModal()
dlg.Destroy() dlg.Destroy()

View File

@@ -994,12 +994,10 @@ def runTest(frame, nb, log):
win = JoystickDemoPanel(nb, log) win = JoystickDemoPanel(nb, log)
return win return win
else: else:
dlg = wx.MessageDialog( from Main import MessagePanel
frame, 'wx.Joystick is not available on this platform.', win = MessagePanel(nb, 'wx.Joystick is not available on this platform.',
'Sorry', wx.OK | wx.ICON_INFORMATION 'Sorry', wx.ICON_WARNING)
) return win
dlg.ShowModal()
dlg.Destroy()
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------

View File

@@ -265,6 +265,60 @@ class MyTP(wx.PyTipProvider):
def GetTip(self): def GetTip(self):
return "This is my tip" return "This is my tip"
#---------------------------------------------------------------------------
# A class to be used to simply display a message in the demo pane
# rather than running the sample itself.
class MessagePanel(wx.Panel):
def __init__(self, parent, message, caption='', flags=0):
wx.Panel.__init__(self, parent)
# Make widgets
if flags:
artid = None
if flags & wx.ICON_EXCLAMATION:
artid = wx.ART_WARNING
elif flags & wx.ICON_ERROR:
artid = wx.ART_ERROR
elif flags & wx.ICON_QUESTION:
artid = wx.ART_QUESTION
elif flags & wx.ICON_INFORMATION:
artid = wx.ART_INFORMATION
if artid is not None:
bmp = wx.ArtProvider.GetBitmap(artid, wx.ART_MESSAGE_BOX, (32,32))
icon = wx.StaticBitmap(self, -1, bmp)
else:
icon = (32,32) # make a spacer instead
if caption:
caption = wx.StaticText(self, -1, caption)
caption.SetFont(wx.Font(28, wx.SWISS, wx.NORMAL, wx.BOLD))
message = wx.StaticText(self, -1, message)
# add to sizers for layout
tbox = wx.BoxSizer(wx.VERTICAL)
if caption:
tbox.Add(caption)
tbox.Add((10,10))
tbox.Add(message)
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.Add((10,10), 1)
hbox.Add(icon)
hbox.Add((10,10))
hbox.Add(tbox)
hbox.Add((10,10), 1)
box = wx.BoxSizer(wx.VERTICAL)
box.Add((10,10), 1)
box.Add(hbox, 0, wx.EXPAND)
box.Add((10,10), 2)
self.SetSizer(box)
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# A class to be used to display source code in the demo. Try using the # A class to be used to display source code in the demo. Try using the

View File

@@ -69,9 +69,10 @@ class TestPanel(wx.Panel):
def runTest(frame, nb, log): def runTest(frame, nb, log):
if wx.Platform == "__WXMAC__": if wx.Platform == "__WXMAC__":
wx.MessageBox("This demo currently fails on the Mac.", from Main import MessagePanel
"Sorry") win = MessagePanel(nb, 'This demo currently fails on the Mac.',
return 'Sorry', wx.ICON_WARNING)
return win
else: else:
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win

View File

@@ -196,12 +196,10 @@ def runTest(frame, nb, log):
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win
else: else:
dlg = wx.MessageDialog( from Main import MessagePanel
frame, 'wx.PopupWindow is not available on this platform.', win = MessagePanel(nb, 'wx.PopupWindow is not available on this platform.',
'Sorry', wx.OK | wx.ICON_INFORMATION 'Sorry', wx.ICON_WARNING)
) return win
dlg.ShowModal()
dlg.Destroy()
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------

View File

@@ -122,8 +122,10 @@ class TestPanel(wx.Panel):
def runTest(frame, nb, log): def runTest(frame, nb, log):
if wx.Platform == "__WXMAC__": if wx.Platform == "__WXMAC__":
wx.MessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry") from Main import MessagePanel
return win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
'Sorry', wx.ICON_WARNING)
return win
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win

View File

@@ -161,13 +161,8 @@ class TestPanel(wx.Panel):
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def runTest(frame, nb, log): def runTest(frame, nb, log):
if wx.Platform == "__WXMAC__": win = TestPanel(nb, log)
wx.MessageBox("This demo currently fails on the Mac.", return win
"Sorry")
return
else:
win = TestPanel(nb, log)
return win
#---------------------------------------------------------------------- #----------------------------------------------------------------------

View File

@@ -34,10 +34,10 @@ def runTest(frame, nb, log):
win = TestPanel(nb, log) win = TestPanel(nb, log)
return win return win
else: else:
dlg = wx.MessageDialog(frame, 'wx.ToggleButton is not available on this platform.', from Main import MessagePanel
'Sorry', wx.OK | wx.ICON_INFORMATION) win = MessagePanel(nb, 'wx.ToggleButton is not available on this platform.',
dlg.ShowModal() 'Sorry', wx.ICON_WARNING)
dlg.Destroy() return win
#---------------------------------------------------------------------- #----------------------------------------------------------------------

View File

@@ -2,123 +2,99 @@
import sys import sys
import wx import wx
py2 = sys.version[0] == '2' from xml.parsers import expat
try:
if py2:
from xml.parsers import expat
parsermodule = expat
else:
from xml.parsers import pyexpat
parsermodule = pyexpat
haveXML = True
except ImportError:
haveXML = False
#---------------------------------------------------------------------- #----------------------------------------------------------------------
if not haveXML: class XMLTree(wx.TreeCtrl):
def runTest(frame, nb, log): def __init__(self, parent, ID):
dlg = wx.MessageDialog( wx.TreeCtrl.__init__(self, parent, ID)
frame, 'This demo requires the XML package. ' self._root = self.AddRoot("Root")
'See http://www.python.org/sigs/xml-sig/', self.nodeStack = [self._root]
'Sorry', wx.OK | wx.ICON_INFORMATION
)
dlg.ShowModal() # Trees need an image list to do DnD...
dlg.Destroy() self.il = wx.ImageList(16,16)
self.SetImageList(self.il)
else: # event handlers for DnD
self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnBeginDrag)
class XMLTree(wx.TreeCtrl): self.Bind(wx.EVT_TREE_END_DRAG, self.OnEndDrag)
def __init__(self, parent, ID):
wx.TreeCtrl.__init__(self, parent, ID)
self._root = self.AddRoot("Root")
self.nodeStack = [self._root]
# Trees need an image list to do DnD...
self.il = wx.ImageList(16,16)
self.SetImageList(self.il)
# event handlers for DnD
self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnBeginDrag)
self.Bind(wx.EVT_TREE_END_DRAG, self.OnEndDrag)
def OnBeginDrag(self, event): def OnBeginDrag(self, event):
item = event.GetItem() item = event.GetItem()
if item != self.GetRootItem(): if item != self.GetRootItem():
self.draggingItem = item self.draggingItem = item
event.Allow() # if DnD of this item is okay Allow it. event.Allow() # if DnD of this item is okay Allow it.
def IsDescendant(self, firstItem, secondItem): def IsDescendant(self, firstItem, secondItem):
"Recursive check if firstItem is a descendant of a secondItem." "Recursive check if firstItem is a descendant of a secondItem."
if firstItem == self._root: if firstItem == self._root:
return False return False
parentItem = self.GetItemParent(firstItem) parentItem = self.GetItemParent(firstItem)
if parentItem == secondItem: if parentItem == secondItem:
return True return True
else: else:
return self.IsDescendant(parentItem, secondItem) return self.IsDescendant(parentItem, secondItem)
def OnEndDrag(self, evt): def OnEndDrag(self, evt):
itemSrc = self.draggingItem itemSrc = self.draggingItem
itemDst = evt.GetItem() itemDst = evt.GetItem()
self.draggingItem = None self.draggingItem = None
if not itemDst.IsOk(): if not itemDst.IsOk():
print "Can't drag to here..." print "Can't drag to here..."
return return
if self.IsDescendant(itemDst, itemSrc): if self.IsDescendant(itemDst, itemSrc):
print "Can't move item to its descendant" print "Can't move item to its descendant"
return return
# For this simple example just take the text of the source item # For this simple example just take the text of the source item
# and append it to the destination item. In real life you would # and append it to the destination item. In real life you would
# possibly want to copy subtrees... # possibly want to copy subtrees...
text = self.GetItemText(itemSrc) text = self.GetItemText(itemSrc)
self.AppendItem(itemDst, text) self.AppendItem(itemDst, text)
self.Delete(itemSrc) self.Delete(itemSrc)
# Define a handler for start element events # Define a handler for start element events
def StartElement(self, name, attrs ): def StartElement(self, name, attrs ):
if py2:
name = name.encode()
id = self.AppendItem(self.nodeStack[-1], name)
self.nodeStack.append(id)
def EndElement(self, name ):
self.nodeStack = self.nodeStack[:-1]
def CharacterData(self, data ):
if data.strip():
if py2: if py2:
name = name.encode() data = data.encode()
id = self.AppendItem(self.nodeStack[-1], name) self.AppendItem(self.nodeStack[-1], data)
self.nodeStack.append(id)
def EndElement(self, name ):
self.nodeStack = self.nodeStack[:-1]
def CharacterData(self, data ):
if data.strip():
if py2:
data = data.encode()
self.AppendItem(self.nodeStack[-1], data)
def LoadTree(self, filename): def LoadTree(self, filename):
# Create a parser # Create a parser
Parser = parsermodule.ParserCreate() Parser = expat.ParserCreate()
# Tell the parser what the start element handler is # Tell the parser what the start element handler is
Parser.StartElementHandler = self.StartElement Parser.StartElementHandler = self.StartElement
Parser.EndElementHandler = self.EndElement Parser.EndElementHandler = self.EndElement
Parser.CharacterDataHandler = self.CharacterData Parser.CharacterDataHandler = self.CharacterData
# Parse the XML File # Parse the XML File
ParserStatus = Parser.Parse(open(filename,'r').read(), 1) ParserStatus = Parser.Parse(open(filename,'r').read(), 1)
def runTest(frame, nb, log): def runTest(frame, nb, log):
win = XMLTree(nb, -1) win = XMLTree(nb, -1)
win.LoadTree("paper.xml") win.LoadTree("paper.xml")
return win return win
#---------------------------------------------------------------------- #----------------------------------------------------------------------