X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b9a4190f70909de9568f45389e7aa3ecbc66b8a..f50de1504e002ba3afac3491c8b4817870c850d8:/wxPython/wx/py/frame.py diff --git a/wxPython/wx/py/frame.py b/wxPython/wx/py/frame.py index 206d57ba96..600f2bd1b9 100644 --- a/wxPython/wx/py/frame.py +++ b/wxPython/wx/py/frame.py @@ -1,8 +1,362 @@ +"""Base frame with menu.""" -"""Renamer stub: provides a way to drop the wx prefix from wxPython objects.""" +__author__ = "Patrick K. O'Brien " +__cvsid__ = "$Id$" +__revision__ = "$Revision$"[11:-2] -from wx import _rename -from wxPython.py import frame -_rename(globals(), frame.__dict__, modulename='py.frame') -del frame -del _rename +import wx +from version import VERSION + + +ID_NEW = wx.ID_NEW +ID_OPEN = wx.ID_OPEN +ID_REVERT = wx.ID_REVERT +ID_CLOSE = wx.ID_CLOSE +ID_SAVE = wx.ID_SAVE +ID_SAVEAS = wx.ID_SAVEAS +ID_PRINT = wx.ID_PRINT +ID_EXIT = wx.ID_EXIT +ID_UNDO = wx.ID_UNDO +ID_REDO = wx.ID_REDO +ID_CUT = wx.ID_CUT +ID_COPY = wx.ID_COPY +ID_PASTE = wx.ID_PASTE +ID_CLEAR = wx.ID_CLEAR +ID_SELECTALL = wx.ID_SELECTALL +ID_ABOUT = wx.ID_ABOUT +ID_AUTOCOMP = wx.NewId() +ID_AUTOCOMP_SHOW = wx.NewId() +ID_AUTOCOMP_MAGIC = wx.NewId() +ID_AUTOCOMP_SINGLE = wx.NewId() +ID_AUTOCOMP_DOUBLE = wx.NewId() +ID_CALLTIPS = wx.NewId() +ID_CALLTIPS_SHOW = wx.NewId() +ID_COPY_PLUS = wx.NewId() +ID_NAMESPACE = wx.NewId() +ID_PASTE_PLUS = wx.NewId() +ID_WRAP = wx.NewId() +ID_USEAA = wx.NewId() + + +class Frame(wx.Frame): + """Frame with standard menu items.""" + + revision = __revision__ + + def __init__(self, parent=None, id=-1, title='Editor', + pos=wx.DefaultPosition, size=wx.DefaultSize, + style=wx.DEFAULT_FRAME_STYLE): + """Create a Frame instance.""" + wx.Frame.__init__(self, parent, id, title, pos, size, style) + self.CreateStatusBar() + self.SetStatusText('Frame') + import images + self.SetIcon(images.getPyIcon()) + self.__createMenus() + wx.EVT_CLOSE(self, self.OnClose) + + def OnClose(self, event): + """Event handler for closing.""" + self.Destroy() + + def __createMenus(self): + m = self.fileMenu = wx.Menu() + m.Append(ID_NEW, '&New \tCtrl+N', + 'New file') + m.Append(ID_OPEN, '&Open... \tCtrl+O', + 'Open file') + m.AppendSeparator() + m.Append(ID_REVERT, '&Revert \tCtrl+R', + 'Revert to last saved version') + m.Append(ID_CLOSE, '&Close \tCtrl+W', + 'Close file') + m.AppendSeparator() + m.Append(ID_SAVE, '&Save... \tCtrl+S', + 'Save file') + m.Append(ID_SAVEAS, 'Save &As \tShift+Ctrl+S', + 'Save file with new name') + m.AppendSeparator() + m.Append(ID_PRINT, '&Print... \tCtrl+P', + 'Print file') + m.AppendSeparator() + m.Append(ID_NAMESPACE, '&Update Namespace \tShift+Ctrl+N', + 'Update namespace for autocompletion and calltips') + m.AppendSeparator() + m.Append(ID_EXIT, 'E&xit', 'Exit Program') + + m = self.editMenu = wx.Menu() + m.Append(ID_UNDO, '&Undo \tCtrl+Z', + 'Undo the last action') + m.Append(ID_REDO, '&Redo \tCtrl+Y', + 'Redo the last undone action') + m.AppendSeparator() + m.Append(ID_CUT, 'Cu&t \tCtrl+X', + 'Cut the selection') + m.Append(ID_COPY, '&Copy \tCtrl+C', + 'Copy the selection') + m.Append(ID_COPY_PLUS, 'Cop&y Plus \tShift+Ctrl+C', + 'Copy the selection - retaining prompts') + m.Append(ID_PASTE, '&Paste \tCtrl+V', 'Paste from clipboard') + m.Append(ID_PASTE_PLUS, 'Past&e Plus \tShift+Ctrl+V', + 'Paste and run commands') + m.AppendSeparator() + m.Append(ID_CLEAR, 'Cle&ar', + 'Delete the selection') + m.Append(ID_SELECTALL, 'Select A&ll \tCtrl+A', + 'Select all text') + + m = self.autocompMenu = wx.Menu() + m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion', + 'Show auto completion list', wx.ITEM_CHECK) + m.Append(ID_AUTOCOMP_MAGIC, 'Include Magic Attributes', + 'Include attributes visible to __getattr__ and __setattr__', + wx.ITEM_CHECK) + m.Append(ID_AUTOCOMP_SINGLE, 'Include Single Underscores', + 'Include attibutes prefixed by a single underscore', wx.ITEM_CHECK) + m.Append(ID_AUTOCOMP_DOUBLE, 'Include Double Underscores', + 'Include attibutes prefixed by a double underscore', wx.ITEM_CHECK) + + m = self.calltipsMenu = wx.Menu() + m.Append(ID_CALLTIPS_SHOW, 'Show Call Tips', + 'Show call tips with argument signature and docstring', wx.ITEM_CHECK) + + m = self.optionsMenu = wx.Menu() + m.AppendMenu(ID_AUTOCOMP, '&Auto Completion', self.autocompMenu, + 'Auto Completion Options') + m.AppendMenu(ID_CALLTIPS, '&Call Tips', self.calltipsMenu, + 'Call Tip Options') + m.Append(ID_WRAP, '&Wrap Lines', + 'Wrap lines at right edge', wx.ITEM_CHECK) + if wx.Platform == "__WXMAC__": + m.Append(ID_USEAA, '&Use AntiAliasing', + 'Use anti-aliased fonts', wx.ITEM_CHECK) + + m = self.helpMenu = wx.Menu() + m.AppendSeparator() + m.Append(ID_ABOUT, '&About...', 'About this program') + + b = self.menuBar = wx.MenuBar() + b.Append(self.fileMenu, '&File') + b.Append(self.editMenu, '&Edit') + b.Append(self.optionsMenu, '&Options') + b.Append(self.helpMenu, '&Help') + self.SetMenuBar(b) + + wx.EVT_MENU(self, ID_NEW, self.OnFileNew) + wx.EVT_MENU(self, ID_OPEN, self.OnFileOpen) + wx.EVT_MENU(self, ID_REVERT, self.OnFileRevert) + wx.EVT_MENU(self, ID_CLOSE, self.OnFileClose) + wx.EVT_MENU(self, ID_SAVE, self.OnFileSave) + wx.EVT_MENU(self, ID_SAVEAS, self.OnFileSaveAs) + wx.EVT_MENU(self, ID_NAMESPACE, self.OnFileUpdateNamespace) + wx.EVT_MENU(self, ID_PRINT, self.OnFilePrint) + wx.EVT_MENU(self, ID_EXIT, self.OnExit) + wx.EVT_MENU(self, ID_UNDO, self.OnUndo) + wx.EVT_MENU(self, ID_REDO, self.OnRedo) + wx.EVT_MENU(self, ID_CUT, self.OnCut) + wx.EVT_MENU(self, ID_COPY, self.OnCopy) + wx.EVT_MENU(self, ID_COPY_PLUS, self.OnCopyPlus) + wx.EVT_MENU(self, ID_PASTE, self.OnPaste) + wx.EVT_MENU(self, ID_PASTE_PLUS, self.OnPastePlus) + wx.EVT_MENU(self, ID_CLEAR, self.OnClear) + wx.EVT_MENU(self, ID_SELECTALL, self.OnSelectAll) + wx.EVT_MENU(self, ID_ABOUT, self.OnAbout) + wx.EVT_MENU(self, ID_AUTOCOMP_SHOW, self.OnAutoCompleteShow) + wx.EVT_MENU(self, ID_AUTOCOMP_MAGIC, self.OnAutoCompleteMagic) + wx.EVT_MENU(self, ID_AUTOCOMP_SINGLE, self.OnAutoCompleteSingle) + wx.EVT_MENU(self, ID_AUTOCOMP_DOUBLE, self.OnAutoCompleteDouble) + wx.EVT_MENU(self, ID_CALLTIPS_SHOW, self.OnCallTipsShow) + wx.EVT_MENU(self, ID_WRAP, self.OnWrap) + wx.EVT_MENU(self, ID_USEAA, self.OnUseAA) + + wx.EVT_UPDATE_UI(self, ID_NEW, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_OPEN, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_REVERT, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_CLOSE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_SAVE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_SAVEAS, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_NAMESPACE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_PRINT, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_UNDO, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_REDO, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_CUT, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_COPY, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_COPY_PLUS, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_PASTE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_PASTE_PLUS, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_CLEAR, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_SELECTALL, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SHOW, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_MAGIC, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SINGLE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_DOUBLE, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_CALLTIPS_SHOW, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_WRAP, self.OnUpdateMenu) + wx.EVT_UPDATE_UI(self, ID_USEAA, self.OnUpdateMenu) + + def OnFileNew(self, event): + self.bufferNew() + + def OnFileOpen(self, event): + self.bufferOpen() + + def OnFileRevert(self, event): + self.bufferRevert() + + def OnFileClose(self, event): + self.bufferClose() + + def OnFileSave(self, event): + self.bufferSave() + + def OnFileSaveAs(self, event): + self.bufferSaveAs() + + def OnFileUpdateNamespace(self, event): + self.updateNamespace() + + def OnFilePrint(self, event): + self.bufferPrint() + + def OnExit(self, event): + self.Close(False) + + def OnUndo(self, event): + win = wx.Window_FindFocus() + win.Undo() + + def OnRedo(self, event): + win = wx.Window_FindFocus() + win.Redo() + + def OnCut(self, event): + win = wx.Window_FindFocus() + win.Cut() + + def OnCopy(self, event): + win = wx.Window_FindFocus() + win.Copy() + + def OnCopyPlus(self, event): + win = wx.Window_FindFocus() + win.CopyWithPrompts() + + def OnPaste(self, event): + win = wx.Window_FindFocus() + win.Paste() + + def OnPastePlus(self, event): + win = wx.Window_FindFocus() + win.PasteAndRun() + + def OnClear(self, event): + win = wx.Window_FindFocus() + win.Clear() + + def OnSelectAll(self, event): + win = wx.Window_FindFocus() + win.SelectAll() + + def OnAbout(self, event): + """Display an About window.""" + title = 'About' + text = 'Your message here.' + dialog = wx.MessageDialog(self, text, title, + wx.OK | wx.ICON_INFORMATION) + dialog.ShowModal() + dialog.Destroy() + + def OnAutoCompleteShow(self, event): + win = wx.Window_FindFocus() + win.autoComplete = event.IsChecked() + + def OnAutoCompleteMagic(self, event): + win = wx.Window_FindFocus() + win.autoCompleteIncludeMagic = event.IsChecked() + + def OnAutoCompleteSingle(self, event): + win = wx.Window_FindFocus() + win.autoCompleteIncludeSingle = event.IsChecked() + + def OnAutoCompleteDouble(self, event): + win = wx.Window_FindFocus() + win.autoCompleteIncludeDouble = event.IsChecked() + + def OnCallTipsShow(self, event): + win = wx.Window_FindFocus() + win.autoCallTip = event.IsChecked() + + def OnWrap(self, event): + win = wx.Window_FindFocus() + win.SetWrapMode(event.IsChecked()) + + def OnUseAA(self, event): + win = wx.Window_FindFocus() + win.SetUseAntiAliasing(event.IsChecked()) + + + def OnUpdateMenu(self, event): + """Update menu items based on current status and context.""" + win = wx.Window_FindFocus() + id = event.GetId() + event.Enable(True) + try: + if id == ID_NEW: + event.Enable(hasattr(self, 'bufferNew')) + elif id == ID_OPEN: + event.Enable(hasattr(self, 'bufferOpen')) + elif id == ID_REVERT: + event.Enable(hasattr(self, 'bufferRevert') + and self.hasBuffer()) + elif id == ID_CLOSE: + event.Enable(hasattr(self, 'bufferClose') + and self.hasBuffer()) + elif id == ID_SAVE: + event.Enable(hasattr(self, 'bufferSave') + and self.bufferHasChanged()) + elif id == ID_SAVEAS: + event.Enable(hasattr(self, 'bufferSaveAs') + and self.hasBuffer()) + elif id == ID_NAMESPACE: + event.Enable(hasattr(self, 'updateNamespace') + and self.hasBuffer()) + elif id == ID_PRINT: + event.Enable(hasattr(self, 'bufferPrint') + and self.hasBuffer()) + elif id == ID_UNDO: + event.Enable(win.CanUndo()) + elif id == ID_REDO: + event.Enable(win.CanRedo()) + elif id == ID_CUT: + event.Enable(win.CanCut()) + elif id == ID_COPY: + event.Enable(win.CanCopy()) + elif id == ID_COPY_PLUS: + event.Enable(win.CanCopy() and hasattr(win, 'CopyWithPrompts')) + elif id == ID_PASTE: + event.Enable(win.CanPaste()) + elif id == ID_PASTE_PLUS: + event.Enable(win.CanPaste() and hasattr(win, 'PasteAndRun')) + elif id == ID_CLEAR: + event.Enable(win.CanCut()) + elif id == ID_SELECTALL: + event.Enable(hasattr(win, 'SelectAll')) + elif id == ID_AUTOCOMP_SHOW: + event.Check(win.autoComplete) + elif id == ID_AUTOCOMP_MAGIC: + event.Check(win.autoCompleteIncludeMagic) + elif id == ID_AUTOCOMP_SINGLE: + event.Check(win.autoCompleteIncludeSingle) + elif id == ID_AUTOCOMP_DOUBLE: + event.Check(win.autoCompleteIncludeDouble) + elif id == ID_CALLTIPS_SHOW: + event.Check(win.autoCallTip) + elif id == ID_WRAP: + event.Check(win.GetWrapMode()) + elif id == ID_USEAA: + event.Check(win.GetUseAntiAliasing()) + else: + event.Enable(False) + except AttributeError: + # This menu option is not supported in the current context. + event.Enable(False)