aboutsummaryrefslogtreecommitdiff
path: root/include/keymap/KeymapEvaluator.hpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-03-18 21:57:03 +0530
committerAkshay Nair <phenax5@gmail.com>2025-03-18 23:36:03 +0530
commit1bd89088f1bb6103a34584ae39157abf2f732742 (patch)
tree2f8fd292bbfb710979bdc44507156524a97148b7 /include/keymap/KeymapEvaluator.hpp
parent4c762b2516bc664293c2aec072074f1e34dda8c3 (diff)
downloadnull-browser-1bd89088f1bb6103a34584ae39157abf2f732742.tar.gz
null-browser-1bd89088f1bb6103a34584ae39157abf2f732742.zip
Add action for keymaps + test
Diffstat (limited to '')
-rw-r--r--include/keymap/KeymapEvaluator.hpp62
1 files changed, 17 insertions, 45 deletions
diff --git a/include/keymap/KeymapEvaluator.hpp b/include/keymap/KeymapEvaluator.hpp
index 54409b1..db93900 100644
--- a/include/keymap/KeymapEvaluator.hpp
+++ b/include/keymap/KeymapEvaluator.hpp
@@ -1,70 +1,42 @@
#pragma once
-#include "keymap/KeySeqParser.hpp"
#include <QWidget>
#include <QtCore/qmap.h>
#include <QtCore/qnamespace.h>
#include <QtCore>
+#include <functional>
+
+#include "keymap/KeySeqParser.hpp"
+#include "utils.hpp"
+
+typedef std::function<void()> KeyAction;
struct KeyMap {
KeySequence keySequence;
- QString action; // TODO: string for testing
+ KeyAction action;
};
+enum KeyMode { Normal, Insert };
+
class KeymapEvaluator : public QObject {
Q_OBJECT
public:
KeymapEvaluator();
- void addKeymap(QString mode, QString key, QString action) {
- if (!modalKeys.contains(mode))
- modalKeys.insert(mode, {});
-
- auto keySeq = keySeqParser.parse(key);
- // TODO: Add actions
- modalKeys[mode].append((KeyMap){.keySequence = keySeq, .action = action});
- }
-
- void evaluate(Qt::KeyboardModifiers modifiers, Qt::Key key) {
- if (key == Qt::Key_Control || key == Qt::Key_Shift || key == Qt::Key_Meta ||
- key == Qt::Key_Alt)
- return;
+ void addKeymap(KeyMode mode, QString key, KeyAction action);
+ bool evaluate(Qt::KeyboardModifiers modifiers, Qt::Key key);
- auto keymaps = currentModeKeys();
- auto foundPendingMatches = false;
-
- activeKeySequence.append((KeyChord){.mod = modifiers, .key = key});
-
- for (auto &keymap : *keymaps) {
- auto matchType =
- KeySeqParser::keySequenceMatch(keymap.keySequence, activeKeySequence);
-
- if (matchType == KeyMatchType::Match) {
- qDebug() << "Matched!" << keymap.action;
- activeKeySequence.clear();
- return;
- } else if (matchType == KeyMatchType::Pending) {
- foundPendingMatches = true;
- }
- }
-
- if (!foundPendingMatches)
- activeKeySequence.clear();
- }
+ DEFINE_SETTER(setCurrentMode, currentMode)
+ DEFINE_GETTER(getCurrentMode, currentMode)
private:
- const QList<KeyMap> *currentModeKeys() {
- if (!modalKeys.contains(currentMode))
- return new QList<KeyMap>();
-
- return &modalKeys[currentMode];
- }
+ const QList<KeyMap> *currentModeKeys();
+ bool isInsertableMode();
private:
- QMap<QString, QList<KeyMap>> modalKeys;
+ QMap<KeyMode, QList<KeyMap>> modalKeys;
KeySeqParser keySeqParser;
- QString currentMode = "default";
-
+ KeyMode currentMode = KeyMode::Normal;
KeySequence activeKeySequence;
};