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, +}; +  | 
