]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/PopupMenu.py
fixed wxVsnprintf() to write as much as it can if the output buffer is too short
[wxWidgets.git] / wxPython / demo / PopupMenu.py
1
2 import wx
3
4 import images
5
6 #----------------------------------------------------------------------
7
8 text = """\
9
10 Right-click on any bare area of this panel (or Ctrl-click on the Mac)
11 to show a popup menu. Then look at the code for this sample. Notice
12 how the PopupMenu method is similar to the ShowModal method of a
13 wx.Dialog in that it doesn't return until the popup menu has been
14 dismissed. The event handlers for the popup menu items can either be
15 attached to the menu itself, or to the window that invokes PopupMenu.
16 """
17
18 #----------------------------------------------------------------------
19
20 class TestPanel(wx.Panel):
21 def __init__(self, parent, log):
22 self.log = log
23 wx.Panel.__init__(self, parent, -1)
24 box = wx.BoxSizer(wx.VERTICAL)
25
26 # Make and layout the controls
27 fs = self.GetFont().GetPointSize()
28 bf = wx.Font(fs+4, wx.SWISS, wx.NORMAL, wx.BOLD)
29 nf = wx.Font(fs+2, wx.SWISS, wx.NORMAL, wx.NORMAL)
30
31 t = wx.StaticText(self, -1, "PopupMenu")
32 t.SetFont(bf)
33 box.Add(t, 0, wx.CENTER|wx.ALL, 5)
34
35 box.Add(wx.StaticLine(self, -1), 0, wx.EXPAND)
36 box.Add((10,20))
37
38 t = wx.StaticText(self, -1, text)
39 t.SetFont(nf)
40 box.Add(t, 0, wx.CENTER|wx.ALL, 5)
41 t.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
42
43 self.SetSizer(box)
44
45 self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
46
47
48 def OnContextMenu(self, event):
49 self.log.WriteText("OnContextMenu\n")
50
51 # only do this part the first time so the events are only bound once
52 #
53 # Yet another anternate way to do IDs. Some prefer them up top to
54 # avoid clutter, some prefer them close to the object of interest
55 # for clarity.
56 if not hasattr(self, "popupID1"):
57 self.popupID1 = wx.NewId()
58 self.popupID2 = wx.NewId()
59 self.popupID3 = wx.NewId()
60 self.popupID4 = wx.NewId()
61 self.popupID5 = wx.NewId()
62 self.popupID6 = wx.NewId()
63 self.popupID7 = wx.NewId()
64 self.popupID8 = wx.NewId()
65 self.popupID9 = wx.NewId()
66
67 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
68 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
69 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
70 self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
71 self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
72 self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
73 self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
74 self.Bind(wx.EVT_MENU, self.OnPopupEight, id=self.popupID8)
75 self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
76
77 # make a menu
78 menu = wx.Menu()
79 # Show how to put an icon in the menu
80 item = wx.MenuItem(menu, self.popupID1,"One")
81 bmp = images.getSmilesBitmap()
82 item.SetBitmap(bmp)
83 menu.AppendItem(item)
84 # add some other items
85 menu.Append(self.popupID2, "Two")
86 menu.Append(self.popupID3, "Three")
87 menu.Append(self.popupID4, "Four")
88 menu.Append(self.popupID5, "Five")
89 menu.Append(self.popupID6, "Six")
90 # make a submenu
91 sm = wx.Menu()
92 sm.Append(self.popupID8, "sub item 1")
93 sm.Append(self.popupID9, "sub item 1")
94 menu.AppendMenu(self.popupID7, "Test Submenu", sm)
95
96
97 # Popup the menu. If an item is selected then its handler
98 # will be called before PopupMenu returns.
99 self.PopupMenu(menu)
100 menu.Destroy()
101
102
103 def OnPopupOne(self, event):
104 self.log.WriteText("Popup one\n")
105
106 def OnPopupTwo(self, event):
107 self.log.WriteText("Popup two\n")
108
109 def OnPopupThree(self, event):
110 self.log.WriteText("Popup three\n")
111
112 def OnPopupFour(self, event):
113 self.log.WriteText("Popup four\n")
114
115 def OnPopupFive(self, event):
116 self.log.WriteText("Popup five\n")
117
118 def OnPopupSix(self, event):
119 self.log.WriteText("Popup six\n")
120
121 def OnPopupSeven(self, event):
122 self.log.WriteText("Popup seven\n")
123
124 def OnPopupEight(self, event):
125 self.log.WriteText("Popup eight\n")
126
127 def OnPopupNine(self, event):
128 self.log.WriteText("Popup nine\n")
129
130
131
132
133
134 #----------------------------------------------------------------------
135
136 def runTest(frame, nb, log):
137 win = TestPanel(nb, log)
138 return win
139
140 #----------------------------------------------------------------------
141
142
143
144 overview = """<html><body>
145 <h2><center>PopupMenu</center></h2>
146 """ + text + """
147 </body></html>
148 """
149
150
151
152 if __name__ == '__main__':
153 import sys,os
154 import run
155 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
156