aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/KeyMap.cxx21
-rw-r--r--src/KeyMap.h18
2 files changed, 21 insertions, 18 deletions
diff --git a/src/KeyMap.cxx b/src/KeyMap.cxx
index 740776104..cb6f2b8d4 100644
--- a/src/KeyMap.cxx
+++ b/src/KeyMap.cxx
@@ -8,6 +8,7 @@
#include <stdlib.h>
#include <vector>
+#include <map>
#include "Platform.h"
@@ -36,26 +37,12 @@ void KeyMap::Clear() {
}
void KeyMap::AssignCmdKey(int key, int modifiers, unsigned int msg) {
- for (size_t keyIndex = 0; keyIndex < kmap.size(); keyIndex++) {
- if ((key == kmap[keyIndex].key) && (modifiers == kmap[keyIndex].modifiers)) {
- kmap[keyIndex].msg = msg;
- return;
- }
- }
- KeyToCommand ktc;
- ktc.key = key;
- ktc.modifiers = modifiers;
- ktc.msg = msg;
- kmap.push_back(ktc);
+ kmap[KeyModifiers(key, modifiers)] = msg;
}
unsigned int KeyMap::Find(int key, int modifiers) const {
- for (size_t i = 0; i < kmap.size(); i++) {
- if ((key == kmap[i].key) && (modifiers == kmap[i].modifiers)) {
- return kmap[i].msg;
- }
- }
- return 0;
+ std::map<KeyModifiers, unsigned int>::const_iterator it = kmap.find(KeyModifiers(key, modifiers));
+ return (it == kmap.end()) ? 0 : it->second;
}
#if PLAT_GTK_MACOSX
diff --git a/src/KeyMap.h b/src/KeyMap.h
index 2f14e2488..b102b356f 100644
--- a/src/KeyMap.h
+++ b/src/KeyMap.h
@@ -22,6 +22,22 @@ namespace Scintilla {
/**
*/
+class KeyModifiers {
+public:
+ int key;
+ int modifiers;
+ KeyModifiers(int key_, int modifiers_) : key(key_), modifiers(modifiers_) {
+ }
+ bool operator<(const KeyModifiers &other) const {
+ if (key == other.key)
+ return modifiers < other.modifiers;
+ else
+ return key < other.key;
+ }
+};
+
+/**
+ */
class KeyToCommand {
public:
int key;
@@ -32,7 +48,7 @@ public:
/**
*/
class KeyMap {
- std::vector<KeyToCommand> kmap;
+ std::map<KeyModifiers, unsigned int> kmap;
static const KeyToCommand MapDefault[];
public: