]> git.saurik.com Git - wxWidgets.git/blob - wxPython/wx/py/frame.py
Set the client size as calculated, but use the full size for the size hints
[wxWidgets.git] / wxPython / wx / py / frame.py
1 """Base frame with menu."""
2
3 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
4 __cvsid__ = "$Id$"
5 __revision__ = "$Revision$"[11:-2]
6
7 import wx
8 from version import VERSION
9
10
11 ID_NEW = wx.ID_NEW
12 ID_OPEN = wx.ID_OPEN
13 ID_REVERT = wx.ID_REVERT
14 ID_CLOSE = wx.ID_CLOSE
15 ID_SAVE = wx.ID_SAVE
16 ID_SAVEAS = wx.ID_SAVEAS
17 ID_PRINT = wx.ID_PRINT
18 ID_EXIT = wx.ID_EXIT
19 ID_UNDO = wx.ID_UNDO
20 ID_REDO = wx.ID_REDO
21 ID_CUT = wx.ID_CUT
22 ID_COPY = wx.ID_COPY
23 ID_PASTE = wx.ID_PASTE
24 ID_CLEAR = wx.ID_CLEAR
25 ID_SELECTALL = wx.ID_SELECTALL
26 ID_ABOUT = wx.ID_ABOUT
27 ID_AUTOCOMP = wx.NewId()
28 ID_AUTOCOMP_SHOW = wx.NewId()
29 ID_AUTOCOMP_MAGIC = wx.NewId()
30 ID_AUTOCOMP_SINGLE = wx.NewId()
31 ID_AUTOCOMP_DOUBLE = wx.NewId()
32 ID_CALLTIPS = wx.NewId()
33 ID_CALLTIPS_SHOW = wx.NewId()
34 ID_COPY_PLUS = wx.NewId()
35 ID_NAMESPACE = wx.NewId()
36 ID_PASTE_PLUS = wx.NewId()
37 ID_WRAP = wx.NewId()
38 ID_USEAA = wx.NewId()
39
40
41 class Frame(wx.Frame):
42 """Frame with standard menu items."""
43
44 revision = __revision__
45
46 def __init__(self, parent=None, id=-1, title='Editor',
47 pos=wx.DefaultPosition, size=wx.DefaultSize,
48 style=wx.DEFAULT_FRAME_STYLE):
49 """Create a Frame instance."""
50 wx.Frame.__init__(self, parent, id, title, pos, size, style)
51 self.CreateStatusBar()
52 self.SetStatusText('Frame')
53 import images
54 self.SetIcon(images.getPyIcon())
55 self.__createMenus()
56 wx.EVT_CLOSE(self, self.OnClose)
57
58 def OnClose(self, event):
59 """Event handler for closing."""
60 self.Destroy()
61
62 def __createMenus(self):
63 m = self.fileMenu = wx.Menu()
64 m.Append(ID_NEW, '&New \tCtrl+N',
65 'New file')
66 m.Append(ID_OPEN, '&Open... \tCtrl+O',
67 'Open file')
68 m.AppendSeparator()
69 m.Append(ID_REVERT, '&Revert \tCtrl+R',
70 'Revert to last saved version')
71 m.Append(ID_CLOSE, '&Close \tCtrl+W',
72 'Close file')
73 m.AppendSeparator()
74 m.Append(ID_SAVE, '&Save... \tCtrl+S',
75 'Save file')
76 m.Append(ID_SAVEAS, 'Save &As \tShift+Ctrl+S',
77 'Save file with new name')
78 m.AppendSeparator()
79 m.Append(ID_PRINT, '&Print... \tCtrl+P',
80 'Print file')
81 m.AppendSeparator()
82 m.Append(ID_NAMESPACE, '&Update Namespace \tShift+Ctrl+N',
83 'Update namespace for autocompletion and calltips')
84 m.AppendSeparator()
85 m.Append(ID_EXIT, 'E&xit', 'Exit Program')
86
87 m = self.editMenu = wx.Menu()
88 m.Append(ID_UNDO, '&Undo \tCtrl+Z',
89 'Undo the last action')
90 m.Append(ID_REDO, '&Redo \tCtrl+Y',
91 'Redo the last undone action')
92 m.AppendSeparator()
93 m.Append(ID_CUT, 'Cu&t \tCtrl+X',
94 'Cut the selection')
95 m.Append(ID_COPY, '&Copy \tCtrl+C',
96 'Copy the selection')
97 m.Append(ID_COPY_PLUS, 'Cop&y Plus \tShift+Ctrl+C',
98 'Copy the selection - retaining prompts')
99 m.Append(ID_PASTE, '&Paste \tCtrl+V', 'Paste from clipboard')
100 m.Append(ID_PASTE_PLUS, 'Past&e Plus \tShift+Ctrl+V',
101 'Paste and run commands')
102 m.AppendSeparator()
103 m.Append(ID_CLEAR, 'Cle&ar',
104 'Delete the selection')
105 m.Append(ID_SELECTALL, 'Select A&ll \tCtrl+A',
106 'Select all text')
107
108 m = self.autocompMenu = wx.Menu()
109 m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion',
110 'Show auto completion list', wx.ITEM_CHECK)
111 m.Append(ID_AUTOCOMP_MAGIC, 'Include Magic Attributes',
112 'Include attributes visible to __getattr__ and __setattr__',
113 wx.ITEM_CHECK)
114 m.Append(ID_AUTOCOMP_SINGLE, 'Include Single Underscores',
115 'Include attibutes prefixed by a single underscore', wx.ITEM_CHECK)
116 m.Append(ID_AUTOCOMP_DOUBLE, 'Include Double Underscores',
117 'Include attibutes prefixed by a double underscore', wx.ITEM_CHECK)
118
119 m = self.calltipsMenu = wx.Menu()
120 m.Append(ID_CALLTIPS_SHOW, 'Show Call Tips',
121 'Show call tips with argument signature and docstring', wx.ITEM_CHECK)
122
123 m = self.optionsMenu = wx.Menu()
124 m.AppendMenu(ID_AUTOCOMP, '&Auto Completion', self.autocompMenu,
125 'Auto Completion Options')
126 m.AppendMenu(ID_CALLTIPS, '&Call Tips', self.calltipsMenu,
127 'Call Tip Options')
128 m.Append(ID_WRAP, '&Wrap Lines',
129 'Wrap lines at right edge', wx.ITEM_CHECK)
130 if wx.Platform == "__WXMAC__":
131 m.Append(ID_USEAA, '&Use AntiAliasing',
132 'Use anti-aliased fonts', wx.ITEM_CHECK)
133
134 m = self.helpMenu = wx.Menu()
135 m.AppendSeparator()
136 m.Append(ID_ABOUT, '&About...', 'About this program')
137
138 b = self.menuBar = wx.MenuBar()
139 b.Append(self.fileMenu, '&File')
140 b.Append(self.editMenu, '&Edit')
141 b.Append(self.optionsMenu, '&Options')
142 b.Append(self.helpMenu, '&Help')
143 self.SetMenuBar(b)
144
145 wx.EVT_MENU(self, ID_NEW, self.OnFileNew)
146 wx.EVT_MENU(self, ID_OPEN, self.OnFileOpen)
147 wx.EVT_MENU(self, ID_REVERT, self.OnFileRevert)
148 wx.EVT_MENU(self, ID_CLOSE, self.OnFileClose)
149 wx.EVT_MENU(self, ID_SAVE, self.OnFileSave)
150 wx.EVT_MENU(self, ID_SAVEAS, self.OnFileSaveAs)
151 wx.EVT_MENU(self, ID_NAMESPACE, self.OnFileUpdateNamespace)
152 wx.EVT_MENU(self, ID_PRINT, self.OnFilePrint)
153 wx.EVT_MENU(self, ID_EXIT, self.OnExit)
154 wx.EVT_MENU(self, ID_UNDO, self.OnUndo)
155 wx.EVT_MENU(self, ID_REDO, self.OnRedo)
156 wx.EVT_MENU(self, ID_CUT, self.OnCut)
157 wx.EVT_MENU(self, ID_COPY, self.OnCopy)
158 wx.EVT_MENU(self, ID_COPY_PLUS, self.OnCopyPlus)
159 wx.EVT_MENU(self, ID_PASTE, self.OnPaste)
160 wx.EVT_MENU(self, ID_PASTE_PLUS, self.OnPastePlus)
161 wx.EVT_MENU(self, ID_CLEAR, self.OnClear)
162 wx.EVT_MENU(self, ID_SELECTALL, self.OnSelectAll)
163 wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
164 wx.EVT_MENU(self, ID_AUTOCOMP_SHOW, self.OnAutoCompleteShow)
165 wx.EVT_MENU(self, ID_AUTOCOMP_MAGIC, self.OnAutoCompleteMagic)
166 wx.EVT_MENU(self, ID_AUTOCOMP_SINGLE, self.OnAutoCompleteSingle)
167 wx.EVT_MENU(self, ID_AUTOCOMP_DOUBLE, self.OnAutoCompleteDouble)
168 wx.EVT_MENU(self, ID_CALLTIPS_SHOW, self.OnCallTipsShow)
169 wx.EVT_MENU(self, ID_WRAP, self.OnWrap)
170 wx.EVT_MENU(self, ID_USEAA, self.OnUseAA)
171
172 wx.EVT_UPDATE_UI(self, ID_NEW, self.OnUpdateMenu)
173 wx.EVT_UPDATE_UI(self, ID_OPEN, self.OnUpdateMenu)
174 wx.EVT_UPDATE_UI(self, ID_REVERT, self.OnUpdateMenu)
175 wx.EVT_UPDATE_UI(self, ID_CLOSE, self.OnUpdateMenu)
176 wx.EVT_UPDATE_UI(self, ID_SAVE, self.OnUpdateMenu)
177 wx.EVT_UPDATE_UI(self, ID_SAVEAS, self.OnUpdateMenu)
178 wx.EVT_UPDATE_UI(self, ID_NAMESPACE, self.OnUpdateMenu)
179 wx.EVT_UPDATE_UI(self, ID_PRINT, self.OnUpdateMenu)
180 wx.EVT_UPDATE_UI(self, ID_UNDO, self.OnUpdateMenu)
181 wx.EVT_UPDATE_UI(self, ID_REDO, self.OnUpdateMenu)
182 wx.EVT_UPDATE_UI(self, ID_CUT, self.OnUpdateMenu)
183 wx.EVT_UPDATE_UI(self, ID_COPY, self.OnUpdateMenu)
184 wx.EVT_UPDATE_UI(self, ID_COPY_PLUS, self.OnUpdateMenu)
185 wx.EVT_UPDATE_UI(self, ID_PASTE, self.OnUpdateMenu)
186 wx.EVT_UPDATE_UI(self, ID_PASTE_PLUS, self.OnUpdateMenu)
187 wx.EVT_UPDATE_UI(self, ID_CLEAR, self.OnUpdateMenu)
188 wx.EVT_UPDATE_UI(self, ID_SELECTALL, self.OnUpdateMenu)
189 wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SHOW, self.OnUpdateMenu)
190 wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_MAGIC, self.OnUpdateMenu)
191 wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SINGLE, self.OnUpdateMenu)
192 wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_DOUBLE, self.OnUpdateMenu)
193 wx.EVT_UPDATE_UI(self, ID_CALLTIPS_SHOW, self.OnUpdateMenu)
194 wx.EVT_UPDATE_UI(self, ID_WRAP, self.OnUpdateMenu)
195 wx.EVT_UPDATE_UI(self, ID_USEAA, self.OnUpdateMenu)
196
197 def OnFileNew(self, event):
198 self.bufferNew()
199
200 def OnFileOpen(self, event):
201 self.bufferOpen()
202
203 def OnFileRevert(self, event):
204 self.bufferRevert()
205
206 def OnFileClose(self, event):
207 self.bufferClose()
208
209 def OnFileSave(self, event):
210 self.bufferSave()
211
212 def OnFileSaveAs(self, event):
213 self.bufferSaveAs()
214
215 def OnFileUpdateNamespace(self, event):
216 self.updateNamespace()
217
218 def OnFilePrint(self, event):
219 self.bufferPrint()
220
221 def OnExit(self, event):
222 self.Close(False)
223
224 def OnUndo(self, event):
225 win = wx.Window_FindFocus()
226 win.Undo()
227
228 def OnRedo(self, event):
229 win = wx.Window_FindFocus()
230 win.Redo()
231
232 def OnCut(self, event):
233 win = wx.Window_FindFocus()
234 win.Cut()
235
236 def OnCopy(self, event):
237 win = wx.Window_FindFocus()
238 win.Copy()
239
240 def OnCopyPlus(self, event):
241 win = wx.Window_FindFocus()
242 win.CopyWithPrompts()
243
244 def OnPaste(self, event):
245 win = wx.Window_FindFocus()
246 win.Paste()
247
248 def OnPastePlus(self, event):
249 win = wx.Window_FindFocus()
250 win.PasteAndRun()
251
252 def OnClear(self, event):
253 win = wx.Window_FindFocus()
254 win.Clear()
255
256 def OnSelectAll(self, event):
257 win = wx.Window_FindFocus()
258 win.SelectAll()
259
260 def OnAbout(self, event):
261 """Display an About window."""
262 title = 'About'
263 text = 'Your message here.'
264 dialog = wx.MessageDialog(self, text, title,
265 wx.OK | wx.ICON_INFORMATION)
266 dialog.ShowModal()
267 dialog.Destroy()
268
269 def OnAutoCompleteShow(self, event):
270 win = wx.Window_FindFocus()
271 win.autoComplete = event.IsChecked()
272
273 def OnAutoCompleteMagic(self, event):
274 win = wx.Window_FindFocus()
275 win.autoCompleteIncludeMagic = event.IsChecked()
276
277 def OnAutoCompleteSingle(self, event):
278 win = wx.Window_FindFocus()
279 win.autoCompleteIncludeSingle = event.IsChecked()
280
281 def OnAutoCompleteDouble(self, event):
282 win = wx.Window_FindFocus()
283 win.autoCompleteIncludeDouble = event.IsChecked()
284
285 def OnCallTipsShow(self, event):
286 win = wx.Window_FindFocus()
287 win.autoCallTip = event.IsChecked()
288
289 def OnWrap(self, event):
290 win = wx.Window_FindFocus()
291 win.SetWrapMode(event.IsChecked())
292
293 def OnUseAA(self, event):
294 win = wx.Window_FindFocus()
295 win.SetUseAntiAliasing(event.IsChecked())
296
297
298 def OnUpdateMenu(self, event):
299 """Update menu items based on current status and context."""
300 win = wx.Window_FindFocus()
301 id = event.GetId()
302 event.Enable(True)
303 try:
304 if id == ID_NEW:
305 event.Enable(hasattr(self, 'bufferNew'))
306 elif id == ID_OPEN:
307 event.Enable(hasattr(self, 'bufferOpen'))
308 elif id == ID_REVERT:
309 event.Enable(hasattr(self, 'bufferRevert')
310 and self.hasBuffer())
311 elif id == ID_CLOSE:
312 event.Enable(hasattr(self, 'bufferClose')
313 and self.hasBuffer())
314 elif id == ID_SAVE:
315 event.Enable(hasattr(self, 'bufferSave')
316 and self.bufferHasChanged())
317 elif id == ID_SAVEAS:
318 event.Enable(hasattr(self, 'bufferSaveAs')
319 and self.hasBuffer())
320 elif id == ID_NAMESPACE:
321 event.Enable(hasattr(self, 'updateNamespace')
322 and self.hasBuffer())
323 elif id == ID_PRINT:
324 event.Enable(hasattr(self, 'bufferPrint')
325 and self.hasBuffer())
326 elif id == ID_UNDO:
327 event.Enable(win.CanUndo())
328 elif id == ID_REDO:
329 event.Enable(win.CanRedo())
330 elif id == ID_CUT:
331 event.Enable(win.CanCut())
332 elif id == ID_COPY:
333 event.Enable(win.CanCopy())
334 elif id == ID_COPY_PLUS:
335 event.Enable(win.CanCopy() and hasattr(win, 'CopyWithPrompts'))
336 elif id == ID_PASTE:
337 event.Enable(win.CanPaste())
338 elif id == ID_PASTE_PLUS:
339 event.Enable(win.CanPaste() and hasattr(win, 'PasteAndRun'))
340 elif id == ID_CLEAR:
341 event.Enable(win.CanCut())
342 elif id == ID_SELECTALL:
343 event.Enable(hasattr(win, 'SelectAll'))
344 elif id == ID_AUTOCOMP_SHOW:
345 event.Check(win.autoComplete)
346 elif id == ID_AUTOCOMP_MAGIC:
347 event.Check(win.autoCompleteIncludeMagic)
348 elif id == ID_AUTOCOMP_SINGLE:
349 event.Check(win.autoCompleteIncludeSingle)
350 elif id == ID_AUTOCOMP_DOUBLE:
351 event.Check(win.autoCompleteIncludeDouble)
352 elif id == ID_CALLTIPS_SHOW:
353 event.Check(win.autoCallTip)
354 elif id == ID_WRAP:
355 event.Check(win.GetWrapMode())
356 elif id == ID_USEAA:
357 event.Check(win.GetUseAntiAliasing())
358 else:
359 event.Enable(False)
360 except AttributeError:
361 # This menu option is not supported in the current context.
362 event.Enable(False)