]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/PopupWindow.py
   2 # 11/30/2003 - Jeff Grimmett (grimmtooth@softhome.net) 
   4 # o Some issues with the listbox example; I tried correcting 
   5 #   it but it's still not working the way it should. Commented 
   6 #   out for now, as I found it. 
  12 if wx
.Platform 
== '__WXMAC__': 
  14     wx
.PopupWindow 
= wx
.PopupTransientWindow 
= wx
.Window
 
  16 #--------------------------------------------------------------------------- 
  18 class TestPopup(wx
.PopupWindow
): 
  19     """Adds a bit of text and mouse movement to the wx.PopupWindow""" 
  20     def __init__(self
, parent
, style
): 
  21         wx
.PopupWindow
.__init
__(self
, parent
, style
) 
  22         self
.SetBackgroundColour("CADET BLUE") 
  24         st 
= wx
.StaticText(self
, -1, 
  25                           "This is a special kind of top level\n" 
  26                           "window that can be used for\n" 
  27                           "popup menus, combobox popups\n" 
  29                           "Try positioning the demo near\n" 
  30                           "the bottom of the screen and \n" 
  31                           "hit the button again.\n\n" 
  32                           "In this demo this window can\n" 
  33                           "be dragged with the left button\n" 
  34                           "and closed with the right." 
  39         self
.SetSize( (sz
.width
+20, sz
.height
+20) ) 
  41         self
.Bind(wx
.EVT_LEFT_DOWN
, self
.OnMouseLeftDown
) 
  42         self
.Bind(wx
.EVT_MOTION
, self
.OnMouseMotion
) 
  43         self
.Bind(wx
.EVT_LEFT_UP
, self
.OnMouseLeftUp
) 
  44         self
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightUp
) 
  46         st
.Bind(wx
.EVT_LEFT_DOWN
, self
.OnMouseLeftDown
) 
  47         st
.Bind(wx
.EVT_MOTION
, self
.OnMouseMotion
) 
  48         st
.Bind(wx
.EVT_LEFT_UP
, self
.OnMouseLeftUp
) 
  49         st
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightUp
) 
  51     def OnMouseLeftDown(self
, evt
): 
  52         self
.ldPos 
= evt
.GetEventObject().ClientToScreen(evt
.GetPosition()) 
  53         self
.wPos 
= self
.ClientToScreen((0,0)) 
  56     def OnMouseMotion(self
, evt
): 
  57         if evt
.Dragging() and evt
.LeftIsDown(): 
  58             dPos 
= evt
.GetEventObject().ClientToScreen(evt
.GetPosition()) 
  59             nPos 
= (self
.wPos
.x 
+ (dPos
.x 
- self
.ldPos
.x
), 
  60                     self
.wPos
.y 
+ (dPos
.y 
- self
.ldPos
.y
)) 
  63     def OnMouseLeftUp(self
, evt
): 
  66     def OnRightUp(self
, evt
): 
  71 class TestTransientPopup(wx
.PopupTransientWindow
): 
  72     """Adds a bit of text and mouse movement to the wx.PopupWindow""" 
  73     def __init__(self
, parent
, style
, log
): 
  74         wx
.PopupTransientWindow
.__init
__(self
, parent
, style
) 
  76         panel 
= wx
.Panel(self
, -1) 
  77         panel
.SetBackgroundColour("#FFB6C1") 
  78         st 
= wx
.StaticText(panel
, -1, 
  79                           "wx.PopupTransientWindow is a\n" 
  80                           "wx.PopupWindow which disappears\n" 
  81                           "automatically when the user\n" 
  82                           "clicks the mouse outside it or if it\n" 
  83                           "(or its first child) loses focus in \n" 
  88         panel
.SetSize( (sz
.width
+20, sz
.height
+20) ) 
  89         self
.SetSize(panel
.GetSize()) 
  91     def ProcessLeftDown(self
, evt
): 
  92         self
.log
.write("ProcessLeftDown\n") 
  96         self
.log
.write("OnDismiss\n") 
 100 class TestPanel(wx
.Panel
): 
 101     def __init__(self
, parent
, log
): 
 102         wx
.Panel
.__init
__(self
, parent
, -1) 
 105         b 
= wx
.Button(self
, -1, "Show wx.PopupWindow", (25, 50)) 
 106         self
.Bind(wx
.EVT_BUTTON
, self
.OnShowPopup
, b
) 
 108         b 
= wx
.Button(self
, -1, "Show wx.PopupTransientWindow", (25, 95)) 
 109         self
.Bind(wx
.EVT_BUTTON
, self
.OnShowPopupTransient
, b
) 
 111         # This isn't working so well, not sure why. Commented out for 
 114 #        b = wx.Button(self, -1, "Show wx.PopupWindow with listbox", (25, 140)) 
 115 #        self.Bind(wx.EVT_BUTTON, self.OnShowPopupListbox, b) 
 118     def OnShowPopup(self
, evt
): 
 119         win 
= TestPopup(self
, wx
.SIMPLE_BORDER
) 
 121         # Show the popup right below or above the button 
 122         # depending on available screen space... 
 123         btn 
= evt
.GetEventObject() 
 124         pos 
= btn
.ClientToScreen( (0,0) ) 
 126         win
.Position(pos
, (0, sz
[1])) 
 131     def OnShowPopupTransient(self
, evt
): 
 132         win 
= TestTransientPopup(self
, wx
.SIMPLE_BORDER
, self
.log
) 
 134         # Show the popup right below or above the button 
 135         # depending on available screen space... 
 136         btn 
= evt
.GetEventObject() 
 137         pos 
= btn
.ClientToScreen( (0,0) ) 
 139         win
.Position(pos
, (0, sz
[1])) 
 144     def OnShowPopupListbox(self
, evt
): 
 145         win 
= TestPopupWithListbox(self
, wx
.NO_BORDER
, self
.log
) 
 147         # Show the popup right below or above the button 
 148         # depending on available screen space... 
 149         btn 
= evt
.GetEventObject() 
 150         pos 
= btn
.ClientToScreen( (0,0) ) 
 152         win
.Position(pos
, (0, sz
[1])) 
 156 # This class is currently not implemented in the demo. It does not 
 157 # behave the way it should, so for the time being it's only here 
 158 # for show. If you figure out how to make it work, please send 
 159 # a corrected file to Robin!  
 160 class TestPopupWithListbox(wx
.PopupWindow
): 
 161     def __init__(self
, parent
, style
, log
): 
 162         wx
.PopupWindow
.__init
__(self
, parent
, style
) 
 166         self
.lb 
= wx
.ListBox(self
, -1, choices 
= keyword
.kwlist
) 
 167         #sz = self.lb.GetBestSize() 
 168         self
.SetSize((150, 75)) #sz) 
 169         self
.lb
.SetSize(self
.GetClientSize()) 
 171         self
.Bind(wx
.EVT_LISTBOX
, self
.OnListBox
) 
 172         self
.lb
.Bind(wx
.EVT_LEFT_DOWN
, self
.OnLeft
) 
 174     def OnLeft(self
, evt
): 
 175         obj 
= evt
.GetEventObject() 
 177         print 'Selected: %s' % obj
.GetStringSelection() 
 181     def OnListBox(self
, evt
): 
 182         obj 
= evt
.GetEventObject() 
 183         print "OnListBox", obj
 
 184         print 'Selected: %s' % obj
.GetString() 
 189 #--------------------------------------------------------------------------- 
 191 def runTest(frame
, nb
, log
): 
 193         win 
= TestPanel(nb
, log
) 
 196         dlg 
= wx
.MessageDialog( 
 197                 frame
, 'wx.PopupWindow is not available on this platform.', 
 198                 'Sorry', wx
.OK | wx
.ICON_INFORMATION
 
 203 #--------------------------------------------------------------------------- 
 210 if __name__ 
== '__main__': 
 213     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])