]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/wxPopupWindow.py
reSWIGged
[wxWidgets.git] / wxPython / demo / wxPopupWindow.py
index 809024a675e4b04eb4b28a0dae03cbce596454bd..cc4d71b83fc04a1a651aefc91f70884eb10e5fd2 100644 (file)
@@ -1,13 +1,34 @@
-from wxPython.wx import *
+# 11/20/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o Updated for wx namespace
+# 
+# 11/30/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o Some issues with the listbox example; I tried correcting
+#   it but it's still not working the way it should. Commented
+#   out for now but will be revisited.
+# o The math in determining the popup window's position is
+#   a bit off.
+# 
+
+import  wx
+
+havePopupWindow = 1
+try:
+    wx.PopupWindow
+except NameError:
+    havePopupWindow = 0
+    wx.PopupWindow = wx.PopupTransientWindow = wx.Window
 
 #---------------------------------------------------------------------------
 
 
 #---------------------------------------------------------------------------
 
-class TestPopup(wxPopupWindow):
+class TestPopup(wx.PopupWindow):
     """Adds a bit of text and mouse movement to the wxPopupWindow"""
     def __init__(self, parent, style):
     """Adds a bit of text and mouse movement to the wxPopupWindow"""
     def __init__(self, parent, style):
-        wxPopupWindow.__init__(self, parent, style)
+        wx.PopupWindow.__init__(self, parent, style)
         self.SetBackgroundColour("CADET BLUE")
         self.SetBackgroundColour("CADET BLUE")
-        st = wxStaticText(self, -1,
+
+        st = wx.StaticText(self, -1,
                           "This is a special kind of top level\n"
                           "window that can be used for\n"
                           "popup menus, combobox popups\n"
                           "This is a special kind of top level\n"
                           "window that can be used for\n"
                           "popup menus, combobox popups\n"
@@ -20,21 +41,23 @@ class TestPopup(wxPopupWindow):
                           "and closed with the right."
                           ,
                           pos=(10,10))
                           "and closed with the right."
                           ,
                           pos=(10,10))
+
         sz = st.GetBestSize()
         self.SetSize( (sz.width+20, sz.height+20) )
 
         sz = st.GetBestSize()
         self.SetSize( (sz.width+20, sz.height+20) )
 
-        EVT_LEFT_DOWN(self, self.OnMouseLeftDown)
-        EVT_MOTION(self, self.OnMouseMotion)
-        EVT_LEFT_UP(self, self.OnMouseLeftUp)
-        EVT_RIGHT_UP(self, self.OnRightUp)
-        EVT_LEFT_DOWN(st, self.OnMouseLeftDown)
-        EVT_MOTION(st, self.OnMouseMotion)
-        EVT_LEFT_UP(st, self.OnMouseLeftUp)
-        EVT_RIGHT_UP(st, self.OnRightUp)
+        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown)
+        self.Bind(wx.EVT_MOTION, self.OnMouseMotion)
+        self.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp)
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
+
+        st.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown)
+        st.Bind(wx.EVT_MOTION, self.OnMouseMotion)
+        st.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp)
+        st.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
 
     def OnMouseLeftDown(self, evt):
         self.ldPos = evt.GetEventObject().ClientToScreen(evt.GetPosition())
 
     def OnMouseLeftDown(self, evt):
         self.ldPos = evt.GetEventObject().ClientToScreen(evt.GetPosition())
-        self.wPos = self.GetPosition()
+        self.wPos = self.ClientToScreen((0,0))
         self.CaptureMouse()
 
     def OnMouseMotion(self, evt):
         self.CaptureMouse()
 
     def OnMouseMotion(self, evt):
@@ -48,44 +71,24 @@ class TestPopup(wxPopupWindow):
         self.ReleaseMouse()
 
     def OnRightUp(self, evt):
         self.ReleaseMouse()
 
     def OnRightUp(self, evt):
-        self.Show(false)
+        self.Show(False)
         self.Destroy()
 
 
         self.Destroy()
 
 
-## class TestPopupWithListbox(wxPopupWindow):
-##     def __init__(self, parent, style, log):
-##         wxPopupWindow.__init__(self, parent, style)
-##         import keyword
-##         self.lb = wxListBox(self, -1, choices = keyword.kwlist)
-##         #sz = self.lb.GetBestSize()
-##         self.SetSize((150, 75)) #sz)
-##         self.lb.SetSize(self.GetClientSize())
-##         self.lb.SetFocus()
-##         EVT_LEFT_DOWN(self.lb, self.OnLeft)
-##         EVT_LISTBOX(self, -1, self.OnListBox)
-
-##     def OnLeft(self, evt):
-##         print "OnLeft", evt.GetEventObject()
-##         evt.Skip()
-##     def OnListBox(self, evt):
-##         print "OnListBox", evt.GetEventObject()
-##         evt.Skip()
-
-
-
-class TestTransientPopup(wxPopupTransientWindow):
+class TestTransientPopup(wx.PopupTransientWindow):
     """Adds a bit of text and mouse movement to the wxPopupWindow"""
     def __init__(self, parent, style, log):
     """Adds a bit of text and mouse movement to the wxPopupWindow"""
     def __init__(self, parent, style, log):
-        wxPopupTransientWindow.__init__(self, parent, style)
+        wx.PopupTransientWindow.__init__(self, parent, style)
         self.log = log
         self.log = log
-        panel = wxPanel(self, -1)
+        panel = wx.Panel(self, -1)
         panel.SetBackgroundColour("#FFB6C1")
         panel.SetBackgroundColour("#FFB6C1")
-        st = wxStaticText(panel, -1,
+        st = wx.StaticText(panel, -1,
                           "wxPopupTransientWindow is a\n"
                           "wxPopupWindow which disappears\n"
                           "automatically when the user\n"
                           "clicks the mouse outside it or if it\n"
                           "wxPopupTransientWindow is a\n"
                           "wxPopupWindow which disappears\n"
                           "automatically when the user\n"
                           "clicks the mouse outside it or if it\n"
-                          "loses focus in any other way."
+                          "(or its first child) loses focus in \n"
+                          "any other way."
                           ,
                           pos=(10,10))
         sz = st.GetBestSize()
                           ,
                           pos=(10,10))
         sz = st.GetBestSize()
@@ -94,76 +97,122 @@ class TestTransientPopup(wxPopupTransientWindow):
 
     def ProcessLeftDown(self, evt):
         self.log.write("ProcessLeftDown\n")
 
     def ProcessLeftDown(self, evt):
         self.log.write("ProcessLeftDown\n")
-        return false
+        return False
 
     def OnDismiss(self):
         self.log.write("OnDismiss\n")
 
 
 
 
     def OnDismiss(self):
         self.log.write("OnDismiss\n")
 
 
 
-class TestPanel(wxPanel):
+class TestPanel(wx.Panel):
     def __init__(self, parent, log):
     def __init__(self, parent, log):
-        wxPanel.__init__(self, parent, -1)
+        wx.Panel.__init__(self, parent, -1)
         self.log = log
 
         self.log = log
 
-        b = wxButton(self, -1, "Show wxPopupWindow", (25, 50))
-        EVT_BUTTON(self, b.GetId(), self.OnShowPopup)
+        b = wx.Button(self, -1, "Show wxPopupWindow", (25, 50))
+        self.Bind(wx.EVT_BUTTON, self.OnShowPopup, b)
 
 
-        b = wxButton(self, -1, "Show wxPopupTransientWindow", (25, 95))
-        EVT_BUTTON(self, b.GetId(), self.OnShowPopupTransient)
+        b = wx.Button(self, -1, "Show wxPopupTransientWindow", (25, 95))
+        self.Bind(wx.EVT_BUTTON, self.OnShowPopupTransient, b)
 
 
-        b = wxButton(self, -1, "Show wxPopupWindow with listbox", (25, 140))
-        EVT_BUTTON(self, b.GetId(), self.OnShowPopupListbox)
+        # This isn't working so well, not sure why. Commented out for
+        # now.
+        
+#        b = wx.Button(self, -1, "Show wxPopupWindow with listbox", (25, 140))
+#        self.Bind(wx.EVT_BUTTON, self.OnShowPopupListbox, b)
 
 
     def OnShowPopup(self, evt):
 
 
     def OnShowPopup(self, evt):
-        win = TestPopup(self, wxSIMPLE_BORDER)
+        win = TestPopup(self, wx.SIMPLE_BORDER)
 
         # Show the popup right below or above the button
         # depending on available screen space...
         btn = evt.GetEventObject()
         pos = btn.ClientToScreen( (0,0) )
         sz =  btn.GetSize()
 
         # Show the popup right below or above the button
         # depending on available screen space...
         btn = evt.GetEventObject()
         pos = btn.ClientToScreen( (0,0) )
         sz =  btn.GetSize()
-        win.Position(pos, (0, sz.height))
+        win.Position(pos, (0, sz[1]))
 
 
-        win.Show(true)
+        win.Show(True)
 
 
     def OnShowPopupTransient(self, evt):
 
 
     def OnShowPopupTransient(self, evt):
-        win = TestTransientPopup(self, wxSIMPLE_BORDER, self.log)
+        win = TestTransientPopup(self, wx.SIMPLE_BORDER, self.log)
 
         # Show the popup right below or above the button
         # depending on available screen space...
         btn = evt.GetEventObject()
         pos = btn.ClientToScreen( (0,0) )
         sz =  btn.GetSize()
 
         # Show the popup right below or above the button
         # depending on available screen space...
         btn = evt.GetEventObject()
         pos = btn.ClientToScreen( (0,0) )
         sz =  btn.GetSize()
-        win.Position(pos, (0, sz.height))
+        win.Position(pos, (0, sz[1]))
 
         win.Popup()
 
 
 
         win.Popup()
 
 
-##     def OnShowPopupListbox(self, evt):
-##         win = TestPopupWithListbox(self, wxNO_BORDER, self.log)
+    def OnShowPopupListbox(self, evt):
+        win = TestPopupWithListbox(self, wx.NO_BORDER, self.log)
 
 
-##         # Show the popup right below or above the button
-##         # depending on available screen space...
-##         btn = evt.GetEventObject()
-##         pos = btn.ClientToScreen( (0,0) )
-##         sz =  btn.GetSize()
-##         win.Position(pos, (0, sz.height))
+        # Show the popup right below or above the button
+        # depending on available screen space...
+        btn = evt.GetEventObject()
+        pos = btn.ClientToScreen( (0,0) )
+        sz =  btn.GetSize()
+        win.Position(pos, (0, sz[1]))
 
 
-##         win.Show(true)
+        win.Show(True)
+
+class TestPopupWithListbox(wx.PopupWindow):
+    def __init__(self, parent, style, log):
+        wx.PopupWindow.__init__(self, parent, style)
+
+        import keyword
+
+        self.lb = wx.ListBox(self, -1, choices = keyword.kwlist)
+        #sz = self.lb.GetBestSize()
+        self.SetSize((150, 75)) #sz)
+        self.lb.SetSize(self.GetClientSize())
+        self.lb.SetFocus()
+        self.Bind(wx.EVT_LISTBOX, self.OnListBox)
+        self.lb.Bind(wx.EVT_LEFT_DOWN, self.OnLeft)
+
+    def OnLeft(self, evt):
+        obj = evt.GetEventObject()
+        print "OnLeft", obj
+        print 'Selected: %s' % obj.GetStringSelection()
+        obj.Show(False)
+        evt.Skip()
+
+    def OnListBox(self, evt):
+        obj = evt.GetEventObject()
+        print "OnListBox", obj
+        print 'Selected: %s' % obj.GetString()
+        evt.Skip()
 
 
-#---------------------------------------------------------------------------
 
 
-def runTest(frame, nb, log):
-    win = TestPanel(nb, log)
-    return win
 
 #---------------------------------------------------------------------------
 
 
 #---------------------------------------------------------------------------
 
+def runTest(frame, nb, log):
+    if havePopupWindow:
+        win = TestPanel(nb, log)
+        return win
+    else:
+        dlg = wx.MessageDialog(
+                frame, 'wxPopupWindow is not available on this platform.',
+                'Sorry', wx.OK | wx.ICON_INFORMATION
+                )
+
+        dlg.ShowModal()
+        dlg.Destroy()
 
 
+#---------------------------------------------------------------------------
 
 
 overview = """\
 """
 
 
 overview = """\
 """
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+