# Programmer: Daniel Pozmanter # E-mail: drpython@bluebottle.com # Note: You must reply to the verification e-mail to get through. # # Copyright 2003-2005 Daniel Pozmanter # # Distributed under the terms of the GPL (GNU Public License) # # DrPython is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #Shortcuts import re import wx.stc import wx wxKeyDictionary = {wx.WXK_F1:'F1', wx.WXK_F2:'F2', wx.WXK_F3:'F3', wx.WXK_F4:'F4', wx.WXK_F5:'F5', wx.WXK_F6:'F6', wx.WXK_F7:'F7', wx.WXK_F8:'F8', wx.WXK_F9:'F9', wx.WXK_F10:'F10', wx.WXK_F11:'F11', wx.WXK_F12:'F12', wx.WXK_MENU:'Menu', wx.WXK_PAUSE:'Pause', wx.WXK_CAPITAL:'CAPS', wx.WXK_PRIOR:'Page Up', wx.WXK_NEXT:'Page Down', wx.WXK_END:'End', wx.WXK_HOME:'Home', wx.WXK_LEFT:'Left', wx.WXK_UP:'Up', wx.WXK_RIGHT:'Right', wx.WXK_DOWN:'Down', wx.WXK_INSERT:'Insert', wx.WXK_PRINT:'Print', wx.WXK_BACK:'Backspace', wx.WXK_TAB:'Tab', wx.WXK_RETURN:'Enter', wx.WXK_ESCAPE:'Esc', wx.WXK_SPACE:'Space', wx.WXK_DELETE:'Delete', wx.WXK_ADD:'+', wx.WXK_SUBTRACT:'-', wx.WXK_SEPARATOR:'_', wx.WXK_MULTIPLY:'*', wx.WXK_DIVIDE:'/', wx.WXK_ADD:'+', wx.WXK_NUMPAD_SPACE:'Space', wx.WXK_NUMPAD_TAB:'Tab', wx.WXK_NUMPAD_ENTER:'Enter', wx.WXK_NUMPAD_F1:'F1', wx.WXK_NUMPAD_F2:'F2', wx.WXK_NUMPAD_F3:'F3', wx.WXK_NUMPAD_F4:'F4', wx.WXK_NUMPAD_HOME:'Home', wx.WXK_NUMPAD_LEFT:'Left', wx.WXK_NUMPAD_UP:'Up', wx.WXK_NUMPAD_RIGHT:'Right', wx.WXK_NUMPAD_DOWN:'Down', wx.WXK_NUMPAD_PRIOR:'Page Up', wx.WXK_NUMPAD_PAGEUP:'Page Up', wx.WXK_NUMPAD_NEXT:'Page Down', wx.WXK_NUMPAD_PAGEDOWN:'Page Down', wx.WXK_NUMPAD_END:'End', wx.WXK_NUMPAD_BEGIN:'Begin', wx.WXK_NUMPAD_INSERT:'Insert', wx.WXK_NUMPAD_DELETE:'Delete', wx.WXK_NUMPAD_EQUAL:'=', wx.WXK_NUMPAD_MULTIPLY:'*', wx.WXK_NUMPAD_ADD:'+', wx.WXK_NUMPAD_SEPARATOR:'_', wx.WXK_NUMPAD_SUBTRACT:'-', wx.WXK_NUMPAD_DECIMAL:'.', wx.WXK_NUMPAD_DIVIDE:'/'} recontrol = re.compile('Control') reshift = re.compile('Shift') realt = re.compile('Alt') remeta = re.compile('Meta') rekeycode = re.compile('\d+') def MatchControl(shortcut): return recontrol.search(shortcut) is not None def MatchShift(shortcut): return reshift.search(shortcut) is not None def MatchAlt(shortcut): return realt.search(shortcut) is not None def MatchMeta(shortcut): return remeta.search(shortcut) is not None def BuildShortcutString(keycode, control, shift, alt, meta): keystr = "" if control: keystr = "Control" if shift: keystr = keystr + "Shift" if alt: keystr = keystr + "Alt" if meta: keystr = keystr + "Meta" keystr = keystr + str(keycode) return keystr def GetKeycodeStringFromShortcut(shortcut): kstr = rekeycode.search(shortcut) if kstr is not None: return kstr.group() return '' def GetKeycodeFromShortcut(shortcut): kstr = rekeycode.search(shortcut) if kstr is not None: try: k = int(kstr.group()) except: return 0 return k return 0 def GetShortcutLabel(shortcut): label = '' if MatchControl(shortcut): label += 'Ctrl+' if MatchShift(shortcut): label += 'Shift+' if MatchAlt(shortcut): label += 'Alt+' if MatchMeta(shortcut): label += 'Meta+' try: kc = GetKeycodeFromShortcut(shortcut) except: return '' if wxKeyDictionary.has_key(kc): label += wxKeyDictionary[kc] return label if kc < 128: label += chr(kc) return label return '' def GetDefaultSTCShortcut(stcindex): shortcut = [["Back Tab", wx.WXK_TAB, "Shift"], ["Cancel", wx.WXK_ESCAPE, ""], ["Char Left", wx.WXK_LEFT, ""], ["Char Left Extend", wx.WXK_LEFT, "Shift"], ["Char Left Rect Extend", wx.WXK_LEFT, "Shift, Alt"], ["Char Right", wx.WXK_RIGHT, ""], ["Char Right Extend", wx.WXK_RIGHT, "Shift"], ["Char Right Rect Extend", wx.WXK_RIGHT, "Shift, Alt"], ["Copy", ord('C'), "Control"], ["Cut", ord('X'), "Control"], ["Delete", wx.WXK_DELETE, ""], ["Delete Back", wx.WXK_BACK, ""], ["Delete Back Not Line", wx.WXK_BACK, "Shift"], ["Delete Line Left", -1, ""], ["Delete Line Right", wx.WXK_DELETE, "Control, Shift"], ["Delete Word Left", -1, ""], ["Delete Word Right", wx.WXK_DELETE, "Control"], ["Document End", wx.WXK_END, "Control"], ["Document End Extend", wx.WXK_END, "Control, Shift"], ["Document Start", wx.WXK_HOME, "Control"], ["Document Start Extend", wx.WXK_HOME, "Control, Shift"], ["Form Feed", -1, ""], ["Home", wx.WXK_HOME, ""], ["Home Display", wx.WXK_HOME, "Alt"], ["Home Display Extend", -1, ""], ["Home Extend", wx.WXK_HOME, "Shift"], ["Home Rect Extend", wx.WXK_HOME, "Shift, Alt"], ["Line Cut", -1, ""], ["Line Delete", -1, ""], ["Line Down", wx.WXK_DOWN, ""], ["Line Down Extend", wx.WXK_DOWN, "Shift"], ["Line Down Rect Extend", wx.WXK_DOWN, "Shift, Alt"], ["Line Duplicate", -1, ""], ["Line End", wx.WXK_END, ""], ["Line End Display", wx.WXK_END, "Alt"], ["Line End Display Extend", -1, ""], ["Line End Extend", wx.WXK_END, "Shift"], ["Line End Rect Extend", wx.WXK_END, "Shift, Alt"], ["Line Scroll Down", wx.WXK_DOWN, "Control"], ["Line Scroll Up", wx.WXK_UP, "Control"], ["Line Transpose", -1, ""], ["Line Up", wx.WXK_UP, ""], ["Line Up Extend", wx.WXK_UP, "Shift"], ["Line Up Rect Extend", wx.WXK_UP, "Shift, Alt"], ["Lowercase", ord('U'), "Control"], ["New Line", wx.WXK_RETURN, ""], ["Page Down", wx.WXK_NEXT, ""], ["Page Down Extend", wx.WXK_NEXT, "Shift"],["Page Down Rect Extend", wx.WXK_NEXT, "Shift, Alt"], ["Page Up", wx.WXK_PRIOR, ""], ["Page Up Extend", wx.WXK_PRIOR, "Shift"], ["Page Up Rect Extend", wx.WXK_PRIOR, "Shift, Alt"], ["Paste", ord('V'), "Control"], ["Redo", ord('Y'), "Control"], ["Select All", ord('A'), "Control"], ["Tab", wx.WXK_TAB, ""], ["Toggle Overtype", wx.WXK_INSERT, ""], ["Undo", ord('Z'), "Control"], ["Uppercase", ord('U'), "Control, Shift"], ["Visible Character Home", -1, ""], ["Visible Character Home Extend", -1, ""], ["World Left", wx.WXK_LEFT, "Control"], ["Word Left Extend", wx.WXK_LEFT, "Control, Shift"], ["Word Part Left", wx.WXK_LEFT, "Alt"], ["Word Part Left Extend", -1, ""], ["Word Part Right", wx.WXK_RIGHT, "Alt"], ["Word Part Right Extend", -1, ""], ["Word Right", wx.WXK_RIGHT, "Control"], ["Word Right Extend", wx.WXK_RIGHT, "Control, Shift"], ["Zoom In", 392, "Control"], ["Zoom Out", 394, "Control"]][stcindex] return (shortcut[2] + str(shortcut[1])) def GetKeycodeText(keycode): wxkeycodes = [wx.WXK_BACK, wx.WXK_TAB, wx.WXK_RETURN, wx.WXK_ESCAPE, wx.WXK_SPACE, wx.WXK_DELETE, wx.WXK_START, wx.WXK_LBUTTON, wx.WXK_RBUTTON, wx.WXK_CANCEL, wx.WXK_MBUTTON, wx.WXK_CLEAR, wx.WXK_SHIFT, wx.WXK_CONTROL, wx.WXK_MENU, wx.WXK_PAUSE, wx.WXK_CAPITAL, wx.WXK_PRIOR, wx.WXK_NEXT, wx.WXK_END, wx.WXK_HOME, wx.WXK_LEFT, wx.WXK_UP, wx.WXK_RIGHT, wx.WXK_DOWN, wx.WXK_SELECT, wx.WXK_PRINT, wx.WXK_EXECUTE, wx.WXK_SNAPSHOT, wx.WXK_INSERT, wx.WXK_HELP, wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3, wx.WXK_NUMPAD4, wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7, wx.WXK_NUMPAD8, wx.WXK_NUMPAD9, wx.WXK_MULTIPLY, wx.WXK_ADD, wx.WXK_SEPARATOR, wx.WXK_SUBTRACT, wx.WXK_DECIMAL, wx.WXK_DIVIDE, wx.WXK_F1, wx.WXK_F2, wx.WXK_F3, wx.WXK_F4, wx.WXK_F5, wx.WXK_F6, wx.WXK_F7, wx.WXK_F8, wx.WXK_F9, wx.WXK_F10, wx.WXK_F11, wx.WXK_F12, wx.WXK_F13, wx.WXK_F14, wx.WXK_F15, wx.WXK_F16, wx.WXK_F17, wx.WXK_F18, wx.WXK_F19, wx.WXK_F20, wx.WXK_F21, wx.WXK_F22, wx.WXK_F23, wx.WXK_F24, wx.WXK_NUMLOCK, wx.WXK_SCROLL] wxkeynames = ["BACK", "TAB", "RETURN", "ESCAPE", "SPACE", "DELETE", "START", "LBUTTON", "RBUTTON", "CANCEL", "MBUTTON", "CLEAR", "SHIFT", "CONTROL", "MENU", "PAUSE", "CAPITAL", "PRIOR", "NEXT", "END", "HOME", "LEFT", "UP", "RIGHT", "DOWN", "SELECT", "PRINT", "EXECUTE", "SNAPSHOT", "INSERT", "HELP", "NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4", "NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9", "MULTIPLY", "ADD", "SEPARATOR", "SUBTRACT", "DECIMAL", "DIVIDE", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "NUMLOCK", "SCROLL"] try: i = wxkeycodes.index(keycode) return True, wxkeynames[i] except: pass return False, "" def GetSTCCommandList(): return [wx.stc.STC_CMD_BACKTAB, wx.stc.STC_CMD_CANCEL, wx.stc.STC_CMD_CHARLEFT, wx.stc.STC_CMD_CHARLEFTEXTEND, wx.stc.STC_CMD_CHARLEFTRECTEXTEND, wx.stc.STC_CMD_CHARRIGHT, wx.stc.STC_CMD_CHARRIGHTEXTEND, wx.stc.STC_CMD_CHARRIGHTRECTEXTEND, wx.stc.STC_CMD_COPY, wx.stc.STC_CMD_CUT, wx.stc.STC_CMD_CLEAR, wx.stc.STC_CMD_DELETEBACK, wx.stc.STC_CMD_DELETEBACKNOTLINE, wx.stc.STC_CMD_DELLINELEFT, wx.stc.STC_CMD_DELLINERIGHT, wx.stc.STC_CMD_DELWORDLEFT, wx.stc.STC_CMD_DELWORDRIGHT, wx.stc.STC_CMD_DOCUMENTEND, wx.stc.STC_CMD_DOCUMENTENDEXTEND, wx.stc.STC_CMD_DOCUMENTSTART, wx.stc.STC_CMD_DOCUMENTSTARTEXTEND, wx.stc.STC_CMD_FORMFEED, wx.stc.STC_CMD_HOME, wx.stc.STC_CMD_HOMEDISPLAY, wx.stc.STC_CMD_HOMEDISPLAYEXTEND, wx.stc.STC_CMD_HOMEEXTEND, wx.stc.STC_CMD_VCHOMERECTEXTEND, wx.stc.STC_CMD_LINECUT, wx.stc.STC_CMD_LINEDELETE, wx.stc.STC_CMD_LINEDOWN, wx.stc.STC_CMD_LINEDOWNEXTEND, wx.stc.STC_CMD_LINEDOWNRECTEXTEND, wx.stc.STC_CMD_LINEDUPLICATE, wx.stc.STC_CMD_LINEEND, wx.stc.STC_CMD_LINEENDDISPLAY, wx.stc.STC_CMD_LINEENDDISPLAYEXTEND, wx.stc.STC_CMD_LINEENDEXTEND, wx.stc.STC_CMD_LINEENDRECTEXTEND, wx.stc.STC_CMD_LINESCROLLDOWN, wx.stc.STC_CMD_LINESCROLLUP, wx.stc.STC_CMD_LINETRANSPOSE, wx.stc.STC_CMD_LINEUP, wx.stc.STC_CMD_LINEUPEXTEND, wx.stc.STC_CMD_LINEUPRECTEXTEND, wx.stc.STC_CMD_LOWERCASE, wx.stc.STC_CMD_NEWLINE, wx.stc.STC_CMD_PAGEDOWN, wx.stc.STC_CMD_PAGEDOWNEXTEND, wx.stc.STC_CMD_PAGEDOWNRECTEXTEND, wx.stc.STC_CMD_PAGEUP, wx.stc.STC_CMD_PAGEUPEXTEND, wx.stc.STC_CMD_PAGEUPRECTEXTEND, wx.stc.STC_CMD_PASTE, wx.stc.STC_CMD_REDO, wx.stc.STC_CMD_SELECTALL, wx.stc.STC_CMD_TAB, wx.stc.STC_CMD_EDITTOGGLEOVERTYPE, wx.stc.STC_CMD_UNDO, wx.stc.STC_CMD_UPPERCASE, wx.stc.STC_CMD_VCHOME, wx.stc.STC_CMD_VCHOMEEXTEND, wx.stc.STC_CMD_WORDLEFT, wx.stc.STC_CMD_WORDLEFTEXTEND, wx.stc.STC_CMD_WORDPARTLEFT, wx.stc.STC_CMD_WORDPARTLEFTEXTEND, wx.stc.STC_CMD_WORDPARTRIGHT, wx.stc.STC_CMD_WORDPARTRIGHTEXTEND, wx.stc.STC_CMD_WORDRIGHT, wx.stc.STC_CMD_WORDRIGHTEXTEND, wx.stc.STC_CMD_ZOOMIN, wx.stc.STC_CMD_ZOOMOUT] def SetSTCShortcuts(stc, Shortcuts, useDefault = 0): #KeycodeArray = [] wxDefArray = [wx.WXK_DOWN, wx.WXK_UP, wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_HOME, wx.WXK_END, wx.WXK_PRIOR, wx.WXK_NEXT, wx.WXK_DELETE, wx.WXK_INSERT, wx.WXK_ESCAPE, wx.WXK_BACK, wx.WXK_TAB, wx.WXK_RETURN, wx.WXK_ADD, wx.WXK_SUBTRACT, wx.WXK_DIVIDE] PreDefArray = [wx.stc.STC_KEY_DOWN, wx.stc.STC_KEY_UP, wx.stc.STC_KEY_LEFT, wx.stc.STC_KEY_RIGHT, wx.stc.STC_KEY_HOME, wx.stc.STC_KEY_END, wx.stc.STC_KEY_PRIOR, wx.stc.STC_KEY_NEXT, wx.stc.STC_KEY_DELETE, wx.stc.STC_KEY_INSERT, wx.stc.STC_KEY_ESCAPE, wx.stc.STC_KEY_BACK, wx.stc.STC_KEY_TAB, wx.stc.STC_KEY_RETURN, wx.stc.STC_KEY_ADD, wx.stc.STC_KEY_SUBTRACT, wx.stc.STC_KEY_DIVIDE] #Note: If stc.CmdKeyAssign is used, then DrPython will never process # that combindation in the keybinding code. cmdlist = GetSTCCommandList() stc.CmdKeyClearAll() x = 0 l = len(Shortcuts) while x < l: modifiers = 0 if useDefault: Shortcuts[x] = GetDefaultSTCShortcut(x) ikeycode = GetKeycodeFromShortcut(Shortcuts[x]) if MatchControl(Shortcuts[x]): modifiers = modifiers | wx.stc.STC_SCMOD_CTRL if MatchShift(Shortcuts[x]): modifiers = modifiers | wx.stc.STC_SCMOD_SHIFT if MatchAlt(Shortcuts[x]): modifiers = modifiers | wx.stc.STC_SCMOD_ALT if (ikeycode >= ord('A')) and (ikeycode <= ord('Z')): stc.CmdKeyAssign(ikeycode, modifiers, cmdlist[x]) elif ikeycode in wxDefArray: i = wxDefArray.index(ikeycode) stc.CmdKeyAssign(PreDefArray[i], modifiers, cmdlist[x]) x = x + 1 return Shortcuts def SetShortcuts(frame, Shortcuts, ShortcutNames, useDefault=0): shortcutsActionArray = [] shortcutsArgumentsArray = [] l = len(Shortcuts) x = 0 while (x < l): #File if(ShortcutNames[x] == "New"): if useDefault: Shortcuts[x] = 'Control' + str(ord('N')) shortcutsActionArray.append(frame.OnNew) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Open"): if useDefault: Shortcuts[x] = 'Control' + str(ord('O')) shortcutsActionArray.append(frame.OnOpen) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Open Imported Module"): if useDefault: Shortcuts[x] = 'Control' + str(ord('M')) shortcutsActionArray.append(frame.OnOpenImportedModule) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Save"): if useDefault: Shortcuts[x] = 'Control' + str(ord('S')) shortcutsActionArray.append(frame.OnSave) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Save As"): shortcutsActionArray.append(frame.OnSaveAs) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Save All Documents"): shortcutsActionArray.append(frame.OnSaveAll) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Save Prompt Output To File"): shortcutsActionArray.append(frame.OnSavePrompt) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Reload File"): shortcutsActionArray.append(frame.OnReload) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Restore From Backup"): shortcutsActionArray.append(frame.OnRestoreFromBackup) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Close"): if useDefault: Shortcuts[x] = 'Control' + str(ord('W')) shortcutsActionArray.append(frame.OnClose) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Close All Documents"): shortcutsActionArray.append(frame.OnCloseAllDocuments) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Close All Other Documents"): shortcutsActionArray.append(frame.OnCloseAllOtherDocuments) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Print Setup"): shortcutsActionArray.append(frame.OnPrintSetup) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Print File"): if useDefault: Shortcuts[x] = 'Control' + str(ord('P')) shortcutsActionArray.append(frame.OnPrint) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Print Prompt"): if useDefault: Shortcuts[x] = 'ControlShift' + str(ord('P')) shortcutsActionArray.append(frame.OnPrintPrompt) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Exit"): shortcutsActionArray.append(frame.OnExit) shortcutsArgumentsArray.append("frame, event") #Tabs elif(ShortcutNames[x] == "Next Document"): if useDefault: Shortcuts[x] = str(wx.WXK_F10) shortcutsActionArray.append(frame.OnSelectDocumentNext) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Previous Document"): if useDefault: Shortcuts[x] = str(wx.WXK_F9) shortcutsActionArray.append(frame.OnSelectDocumentPrevious) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "First Document"): shortcutsActionArray.append(frame.OnSelectDocumentFirst) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Last Document"): shortcutsActionArray.append(frame.OnSelectDocumentLast) shortcutsArgumentsArray.append("frame, event") #Edit elif(ShortcutNames[x] == "Find"): if useDefault: Shortcuts[x] = 'Control' + str(ord('F')) shortcutsActionArray.append(frame.OnMenuFind) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Find Next"): if useDefault: Shortcuts[x] = str(wx.WXK_F3) shortcutsActionArray.append(frame.OnMenuFindNext) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Find Previous"): if useDefault: Shortcuts[x] = 'Control' + str(wx.WXK_F3) shortcutsActionArray.append(frame.OnMenuFindPrevious) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Replace"): if useDefault: Shortcuts[x] = 'Control' + str(ord('R')) shortcutsActionArray.append(frame.OnMenuReplace) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Find In Files"): shortcutsActionArray.append(frame.OnMenuFindInFiles) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Replace In Files"): shortcutsActionArray.append(frame.OnMenuReplaceInFiles) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Insert Regular Expression"): shortcutsActionArray.append(frame.OnInsertRegEx) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Insert Separator"): shortcutsActionArray.append(frame.OnInsertSeparator) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Comment"): if useDefault: Shortcuts[x] = 'Control' + str(ord('[')) shortcutsActionArray.append(frame.OnCommentRegion) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "UnComment"): if useDefault: Shortcuts[x] = 'Control' + str(ord(']')) shortcutsActionArray.append(frame.OnUnCommentRegion) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Indent"): if useDefault: Shortcuts[x] = 'Control' + str(ord('I')) shortcutsActionArray.append(frame.OnIndentRegion) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Dedent"): if useDefault: Shortcuts[x] = 'ControlShift' + str(ord('I')) shortcutsActionArray.append(frame.OnDedentRegion) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Find And Complete"): if useDefault: Shortcuts[x] = 'Control' + str(wx.WXK_RETURN) shortcutsActionArray.append(frame.OnFindAndComplete) shortcutsArgumentsArray.append("frame, event") #View elif(ShortcutNames[x] == "Go To"): if useDefault: Shortcuts[x] = 'Control' + str(ord('G')) shortcutsActionArray.append(frame.OnGoTo) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Block Start"): if useDefault: Shortcuts[x] = 'Control' + str(ord('B')) shortcutsActionArray.append(frame.OnGoToBlockStart) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Block End"): if useDefault: Shortcuts[x] = 'ControlShift' + str(ord('B')) shortcutsActionArray.append(frame.OnGoToBlockEnd) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Class Start"): shortcutsActionArray.append(frame.OnGoToClassStart) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Class End"): shortcutsActionArray.append(frame.OnGoToClassEnd) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Def Start"): shortcutsActionArray.append(frame.OnGoToDefStart) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Go To Def End"): shortcutsActionArray.append(frame.OnGoToDefEnd) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Toggle Fold"): shortcutsActionArray.append(frame.OnToggleFold) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Fold All"): shortcutsActionArray.append(frame.OnFoldAll) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Expand All"): shortcutsActionArray.append(frame.OnExpandAll) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Source Browser Go To"): if useDefault: Shortcuts[x] = 'Control' + str(wx.WXK_F8) shortcutsActionArray.append(frame.OnSourceBrowserGoTo) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Toggle Source Browser"): if useDefault: Shortcuts[x] = str(wx.WXK_F8) shortcutsActionArray.append(frame.OnToggleSourceBrowser) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Toggle View Whitespace"): if useDefault: Shortcuts[x] = 'ControlShift' + str(ord('W')) shortcutsActionArray.append(frame.OnToggleViewWhiteSpace) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Toggle Prompt"): if useDefault: Shortcuts[x] = str(wx.WXK_F6) shortcutsActionArray.append(frame.OnTogglePrompt) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View In Left Panel"): shortcutsActionArray.append(frame.OnViewInLeftPanel) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View In Right Panel"): shortcutsActionArray.append(frame.OnViewInRightPanel) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View In Top Panel"): shortcutsActionArray.append(frame.OnViewInTopPanel) shortcutsArgumentsArray.append("frame, event") #Program elif(ShortcutNames[x] == "Check Syntax"): shortcutsActionArray.append(frame.OnCheckSyntax) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Run"): if useDefault: Shortcuts[x] = 'Control' + str(ord('E')) shortcutsActionArray.append(frame.OnRun) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Set Arguments"): shortcutsActionArray.append(frame.OnSetArgs) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Python"): if useDefault: Shortcuts[x] = str(wx.WXK_F7) shortcutsActionArray.append(frame.OnPython) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "End"): if useDefault: Shortcuts[x] = 'Control' + str(ord('D')) shortcutsActionArray.append(frame.OnEnd) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Close Prompt"): shortcutsActionArray.append(frame.OnClosePrompt) shortcutsArgumentsArray.append("frame, event") #DrScript elif(ShortcutNames[x] == "Dynamic DrScript"): shortcutsActionArray.append(frame.dynamicdrscript) shortcutsArgumentsArray.append("frame, event") #Prefs elif(ShortcutNames[x] == "Preferences"): shortcutsActionArray.append(frame.OnPrefs) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Customize Shortcuts"): shortcutsActionArray.append(frame.OnCustomizeShortcuts) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Customize Pop Up Menu"): shortcutsActionArray.append(frame.OnCustomizePopUpMenu) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "Customize ToolBar"): shortcutsActionArray.append(frame.OnCustomizeToolBar) shortcutsArgumentsArray.append("frame, event") #Docs elif(ShortcutNames[x] == "Help"): shortcutsActionArray.append(frame.OnViewHelp) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View Python Docs"): shortcutsActionArray.append(frame.OnViewPythonDocs) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View WxWidgets Docs"): shortcutsActionArray.append(frame.OnViewWxWidgetsDocs) shortcutsArgumentsArray.append("frame, event") elif(ShortcutNames[x] == "View Regular Expression Howto"): shortcutsActionArray.append(frame.OnViewREHowtoDocs) shortcutsArgumentsArray.append("frame, event") #General elif(ShortcutNames[x] == "Toggle Maximize"): if useDefault: Shortcuts[x] = 'Control' + str(wx.WXK_F5) shortcutsActionArray.append(frame.Maximize) shortcutsArgumentsArray.append("maximize") x = x + 1 return Shortcuts, shortcutsActionArray, shortcutsArgumentsArray def RunShortcuts(frame, event, stc, SplitView): keycode = event.GetKeyCode() #Treat Numpad Enter as Enter. if keycode == wx.WXK_NUMPAD_ENTER: keycode = wx.WXK_RETURN allowControl = not (frame.ShortcutsIgnoreString.find("Control") > -1) allowShift = not (frame.ShortcutsIgnoreString.find("Shift") > -1) allowAlt = not (frame.ShortcutsIgnoreString.find("Alt") > -1) allowMeta = not (frame.ShortcutsIgnoreString.find("Meta") > -1) control = (event.ControlDown() and allowControl) shift = (event.ShiftDown() and allowShift) alt = (event.AltDown() and allowAlt) meta = (event.MetaDown() and allowMeta) strkeycode = BuildShortcutString(keycode, control, shift, alt, meta) #Get the active stc: if stc is None: if (frame.txtPrompt.GetSTCFocus()): stc = frame.txtPrompt else: stc = frame.txtDocument allowControl = not (frame.ShortcutsIgnoreString.find("Control") > -1) allowShift = not (frame.ShortcutsIgnoreString.find("Shift") > -1) allowMeta = not (frame.ShortcutsIgnoreString.find("Meta") > -1) allowAlt = not (frame.ShortcutsIgnoreString.find("Alt") > -1) drstc = -1 drpy = -1 drscript = -1 plugin = -1 if strkeycode in frame.PluginShortcuts: plugin = frame.PluginShortcuts.index(strkeycode) if strkeycode in frame.STCShortcuts: drstc = frame.STCShortcuts.index(strkeycode) elif strkeycode in frame.Shortcuts: drpy = frame.Shortcuts.index(strkeycode) elif strkeycode in frame.DrScriptShortcuts: drscript = frame.DrScriptShortcuts.index(strkeycode) if plugin > -1: r = frame.PluginAction[plugin](event) if r is None or (r == 1): return -1 if stc.IsAPrompt: if (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_NEWLINE) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_CHARLEFT) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_CHARRIGHT) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_LINEUP) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_LINEDOWN) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_DELETEBACK) or \ (frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_HOME): return frame.STCCOMMANDLIST[drstc] elif frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_DELETEBACK: return wx.stc.STC_CMD_DELETEBACK if drstc > -1 and (not drpy > -1) and (not drscript > -1): try: if frame.STCCOMMANDLIST[drstc] == wx.stc.STC_CMD_PASTE: stc.Paste() else: stc.CmdKeyExecute(frame.STCCOMMANDLIST[drstc]) except: return -1 return frame.STCCOMMANDLIST[drstc] if SplitView: return -1 if drpy > -1 and (not drscript > -1) and (not drstc > -1): if (frame.ShortcutsArgumentsArray[drpy] == "frame, event"): frame.ShortcutsActionArray[drpy](event) elif (frame.ShortcutsArgumentsArray[drpy] == "maximize"): #Work Around Bug in wx.Python 2.5.1 try: frame.ShortcutsActionArray[drpy](not frame.IsMaximized()) except: pass return -1 if drscript > -1 and (not drpy > -1) and (not drstc > -1): event.SetId(frame.ID_SCRIPT_BASE + drscript) frame.DrScriptShortcutsAction(event) return -1 event.Skip() return -1