]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/py/frame.py
use wx.CallAfter to set the insertion point
[wxWidgets.git] / wxPython / wx / py / frame.py
index 206d57ba96bc09f3807f2f5252b53277613a1143..600f2bd1b9610792402ecfb50d32fd89ee33147f 100644 (file)
@@ -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 <pobrien@orbtech.com>"
+__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)