diff options
Diffstat (limited to 'src/plugins/cerence/xt9/xt9common/xt9kdbkey.h')
-rw-r--r-- | src/plugins/cerence/xt9/xt9common/xt9kdbkey.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/plugins/cerence/xt9/xt9common/xt9kdbkey.h b/src/plugins/cerence/xt9/xt9common/xt9kdbkey.h new file mode 100644 index 00000000..bd8e9a83 --- /dev/null +++ b/src/plugins/cerence/xt9/xt9common/xt9kdbkey.h @@ -0,0 +1,87 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#ifndef XT9KDBKEY_H +#define XT9KDBKEY_H + +#include "xt9kdbelement.h" +#include <QRect> +#include <QRectF> + +QT_BEGIN_NAMESPACE +namespace QtVirtualKeyboard { + +class Xt9KdbKey : public Xt9KdbElement +{ + Q_GADGET + +public: + enum class Type { + regional, + nonRegional, + smartPunct, + string, + function + }; + Q_ENUM(Type) + + // The names must match with et9kbdef.h. + // The enum value must not be assigned. + enum class Name { + NONE, + ET9KEY_BACK, + ET9KEY_TAB, + ET9KEY_NEW_LINE, + ET9KEY_SPACE, + ET9KEY_LEFT, + ET9KEY_UP, + ET9KEY_RIGHT, + ET9KEY_DOWN, + ET9KEY_SHIFT, + ET9KEY_LANGUAGE, + }; + Q_ENUM(Name) + + Xt9KdbKey(); + + void serialize(QXmlStreamWriter &writer) const; + + QRect absolute; + QRectF relative; + Type type; + Name name; + QString label; + QString labelShifted; + QString codes; + QString codesShifted; + bool hackWriteDistinctKeysForAllCodes; + +private: + template<typename T> + static QString joinCodeList(const T &codes); +}; + +template<typename T> +QString Xt9KdbKey::joinCodeList(const T &codes) +{ + static const QString HEX_VALUE = QStringLiteral("0x%1"); + + QString result; + bool first = true; + + for (const QChar &code : codes) { + if (first) + first = false; + else + result.append(QLatin1Char(',')); + + result.append(HEX_VALUE.arg(code.unicode(), 0, 16)); + } + + return result; +} + +} // namespace QtVirtualKeyboard +QT_END_NAMESPACE + +#endif // XT9KDBKEY_H |