X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4416b50837c52b62bd0e21c05bcc29a129e97631..dae0faa6be08c5bb5635fd464b695ac8bb8f2b8d:/wxPython/demo/wxPopupWindow.py?ds=sidebyside diff --git a/wxPython/demo/wxPopupWindow.py b/wxPython/demo/wxPopupWindow.py index 5f6477804e..ad769d447d 100644 --- a/wxPython/demo/wxPopupWindow.py +++ b/wxPython/demo/wxPopupWindow.py @@ -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): - wxPopupWindow.__init__(self, parent, style) + wx.PopupWindow.__init__(self, parent, style) 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" @@ -20,17 +41,19 @@ class TestPopup(wxPopupWindow): "and closed with the right." , pos=(10,10)) + 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()) @@ -48,87 +71,148 @@ class TestPopup(wxPopupWindow): self.ReleaseMouse() def OnRightUp(self, evt): - self.Show(false) + self.Show(False) self.Destroy() -class TestTransientPopup(wxPopupTransientWindow): +class TestTransientPopup(wx.PopupTransientWindow): """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 - panel = wxPanel(self, -1) + panel = wx.Panel(self, -1) 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" - "loses focus in any other way." + "(or its first child) loses focus in \n" + "any other way." , pos=(10,10)) sz = st.GetBestSize() panel.SetSize( (sz.width+20, sz.height+20) ) self.SetSize(panel.GetSize()) - def ProcessLeftDown(self, evt): self.log.write("ProcessLeftDown\n") - return false + return False def OnDismiss(self): self.log.write("OnDismiss\n") -class TestPanel(wxPanel): + +class TestPanel(wx.Panel): def __init__(self, parent, log): - wxPanel.__init__(self, parent, -1) + wx.Panel.__init__(self, parent, -1) 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 = wx.Button(self, -1, "Show wxPopupTransientWindow", (25, 95)) + self.Bind(wx.EVT_BUTTON, self.OnShowPopupTransient, b) - b = wxButton(self, -1, "Show wxPopupTransientWindow", (25, 95)) - EVT_BUTTON(self, b.GetId(), self.OnShowPopupTransient) + # 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): - 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() - win.Position(pos, (0, sz.height)) + win.Position(pos, (0, sz[1])) - win.Show(true) + win.Show(True) 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() - win.Position(pos, (0, sz.height)) + win.Position(pos, (0, sz[1])) win.Popup() + 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[1])) + + 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 = """\ """ + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])]) +