File indexing completed on 2024-04-28 11:45:58

0001 /*
0002     SPDX-FileCopyrightText: 2008 Erlend Hamberg <ehamberg@gmail.com>
0003     SPDX-FileCopyrightText: 2008 Evgeniy Ivanov <powerfox@kde.ru>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KATEVI_KEY_PARSER_H
0009 #define KATEVI_KEY_PARSER_H
0010 
0011 #include <QChar>
0012 #include <QHash>
0013 #include <QString>
0014 #include <ktexteditor_export.h>
0015 
0016 class QKeyEvent;
0017 
0018 namespace KateVi
0019 {
0020 
0021 class KeyEvent;
0022 
0023 /**
0024  * for encoding keypresses w/ modifiers into an internal QChar representation and back again to a
0025  * descriptive text string
0026  */
0027 class KTEXTEDITOR_EXPORT KeyParser
0028 {
0029 private:
0030     KTEXTEDITOR_NO_EXPORT
0031     KeyParser();
0032 
0033 public:
0034     static KeyParser *self();
0035     ~KeyParser()
0036     {
0037         m_instance = nullptr;
0038     }
0039     KeyParser(const KeyParser &) = delete;
0040     KeyParser &operator=(const KeyParser &) = delete;
0041 
0042     const QString encodeKeySequence(const QString &keys) const;
0043     const QString decodeKeySequence(const QString &keys) const;
0044     QString qt2vi(int key) const;
0045     int vi2qt(const QString &keypress) const;
0046     int encoded2qt(const QString &keypress) const;
0047     const QChar KeyEventToQChar(const QKeyEvent &keyEvent);
0048     const QChar KeyEventToQChar(const KeyEvent &keyEvent);
0049 
0050 private:
0051     KTEXTEDITOR_NO_EXPORT
0052     void initKeyTables();
0053     KTEXTEDITOR_NO_EXPORT
0054     const QChar KeyEventToQChar(int keyCode, const QString &text, Qt::KeyboardModifiers mods) const;
0055 
0056     QHash<int, QString> m_qt2katevi;
0057     QHash<QString, int> m_katevi2qt;
0058     QHash<QString, int> m_nameToKeyCode;
0059     QHash<int, QString> m_keyCodeToName;
0060 
0061     static KeyParser *m_instance;
0062 };
0063 
0064 }
0065 
0066 #endif /* KATEVI_KEY_PARSER_H */