diff options
Diffstat (limited to 'src/KeyMap.cxx')
-rw-r--r-- | src/KeyMap.cxx | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/KeyMap.cxx b/src/KeyMap.cxx new file mode 100644 index 000000000..f339cd275 --- /dev/null +++ b/src/KeyMap.cxx @@ -0,0 +1,111 @@ +// Scintilla source code edit control +// KeyMap.cxx - defines a mapping between keystrokes and commands +// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#include "Platform.h" + +#include "Scintilla.h" + +#include "KeyMap.h" + +KeyMap::KeyMap() : kmap(0), len(0), alloc(0) { + for (int i = 0; MapDefault[i].key; i++) { + AssignCmdKey(MapDefault[i].key, + MapDefault[i].modifiers, + MapDefault[i].msg); + } +} + +KeyMap::~KeyMap() { + Clear(); +} + +void KeyMap::Clear() { + delete []kmap; + kmap = 0; + len = 0; + alloc = 0; +} + +void KeyMap::AssignCmdKey(int key, int modifiers, UINT msg) { + if ((len+1) >= alloc) { + KeyToCommand *ktcNew = new KeyToCommand[alloc + 5]; + if (!ktcNew) + return; + for (int k=0;k<len;k++) + ktcNew[k] = kmap[k]; + alloc += 5; + delete []kmap; + kmap = ktcNew; + } + for (int keyIndex = 0; keyIndex < len; keyIndex++) { + if ((key == kmap[keyIndex].key) && (modifiers == kmap[keyIndex].modifiers)) { + kmap[keyIndex].msg = msg; + return; + } + } + kmap[len].key = key; + kmap[len].modifiers = modifiers; + kmap[len].msg = msg; + len++; +} + +UINT KeyMap::Find(int key, int modifiers) { + for (int i=0; i < len; i++) { + if ((key == kmap[i].key) && (modifiers == kmap[i].modifiers)) { + return kmap[i].msg; + } + } + return 0; +} + +KeyToCommand KeyMap::MapDefault[] = { + VK_DOWN, SCI_NORM, SCI_LINEDOWN, + VK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND, + VK_UP, SCI_NORM, SCI_LINEUP, + VK_UP, SCI_SHIFT, SCI_LINEUPEXTEND, + VK_LEFT, SCI_NORM, SCI_CHARLEFT, + VK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND, + VK_LEFT, SCI_CTRL, SCI_WORDLEFT, + VK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND, + VK_RIGHT, SCI_NORM, SCI_CHARRIGHT, + VK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND, + VK_RIGHT, SCI_CTRL, SCI_WORDRIGHT, + VK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND, + VK_HOME, SCI_NORM, SCI_VCHOME, + VK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND, + VK_HOME, SCI_CTRL, SCI_DOCUMENTSTART, + VK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND, + VK_END, SCI_NORM, SCI_LINEEND, + VK_END, SCI_SHIFT, SCI_LINEENDEXTEND, + VK_END, SCI_CTRL, SCI_DOCUMENTEND, + VK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND, + VK_PRIOR, SCI_NORM, SCI_PAGEUP, + VK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND, + VK_NEXT, SCI_NORM, SCI_PAGEDOWN, + VK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND, + VK_DELETE, SCI_NORM, WM_CLEAR, + VK_DELETE, SCI_SHIFT, WM_CUT, + VK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT, + VK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE, + VK_INSERT, SCI_SHIFT, WM_PASTE, + VK_INSERT, SCI_CTRL, WM_COPY, + VK_ESCAPE, SCI_NORM, SCI_CANCEL, + VK_BACK, SCI_NORM, SCI_DELETEBACK, + VK_BACK, SCI_CTRL, SCI_DELWORDLEFT, + 'Z', SCI_CTRL, WM_UNDO, + 'Y', SCI_CTRL, SCI_REDO, + 'X', SCI_CTRL, WM_CUT, + 'C', SCI_CTRL, WM_COPY, + 'V', SCI_CTRL, WM_PASTE, + 'A', SCI_CTRL, SCI_SELECTALL, + VK_TAB, SCI_NORM, SCI_TAB, + VK_TAB, SCI_SHIFT, SCI_BACKTAB, + VK_RETURN, SCI_NORM, SCI_NEWLINE, + 'L', SCI_CTRL, SCI_FORMFEED, + VK_ADD, SCI_CTRL, SCI_ZOOMIN, + VK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT, + 0,0,0, +}; + |