File indexing completed on 2024-04-14 03:55:49

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 KeyParser
0028 {
0029 private:
0030     KeyParser();
0031 
0032 public:
0033     KTEXTEDITOR_EXPORT static KeyParser *self();
0034     ~KeyParser()
0035     {
0036         m_instance = nullptr;
0037     }
0038     KeyParser(const KeyParser &) = delete;
0039     KeyParser &operator=(const KeyParser &) = delete;
0040 
0041     KTEXTEDITOR_EXPORT const QString encodeKeySequence(const QString &keys) const;
0042     KTEXTEDITOR_EXPORT const QString decodeKeySequence(const QString &keys) const;
0043     QString qt2vi(int key) const;
0044     KTEXTEDITOR_EXPORT int vi2qt(const QString &keypress) const;
0045     int encoded2qt(const QString &keypress) const;
0046     KTEXTEDITOR_EXPORT const QChar KeyEventToQChar(const QKeyEvent &keyEvent);
0047     const QChar KeyEventToQChar(const KeyEvent &keyEvent);
0048 
0049 private:
0050     void initKeyTables();
0051     const QChar KeyEventToQChar(int keyCode, const QString &text, Qt::KeyboardModifiers mods) const;
0052 
0053     QHash<int, QString> m_qt2katevi;
0054     QHash<QString, int> m_katevi2qt;
0055     QHash<QString, int> m_nameToKeyCode;
0056     QHash<int, QString> m_keyCodeToName;
0057 
0058     static KeyParser *m_instance;
0059 };
0060 
0061 }
0062 
0063 #endif /* KATEVI_KEY_PARSER_H */