Warning, file /office/calligra/gemini/KeyboardModel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2012 Arjen Hiemstra <ahiemstra@heimr.nl>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KeyboardModel.h"
0008 
0009 struct Key {
0010     explicit Key(QString keyText, KeyboardModel::KeyType key = KeyboardModel::NormalKey, float size = 1.0f)
0011         : text(keyText),
0012           keyType(key),
0013           width(size)
0014     {
0015     }
0016 
0017     QString text;
0018     KeyboardModel::KeyType keyType;
0019     float width;
0020 };
0021 
0022 class KeyboardModel::Private
0023 {
0024 public:
0025     Private()
0026         : mode(NormalMode),
0027           currentKeys(&normalKeys),
0028           useBuiltIn(true)
0029     {
0030 #ifdef Q_OS_WIN
0031         //useBuiltIn = false;
0032 #endif
0033     }
0034     KeyboardMode mode;
0035     QList<Key> *currentKeys;
0036     QList<Key> normalKeys;
0037     QList<Key> capitalKeys;
0038     QList<Key> numericKeys;
0039     bool useBuiltIn;
0040 };
0041 
0042 KeyboardModel::KeyboardModel(QObject* parent)
0043     : QAbstractListModel(parent), d(new Private)
0044 {
0045 }
0046 
0047 KeyboardModel::~KeyboardModel()
0048 {
0049     delete d;
0050 }
0051 
0052 QHash<int, QByteArray> KeyboardModel::roleNames() const
0053 {
0054     QHash<int, QByteArray> roleNames;
0055     roleNames.insert(TextRole, "text");
0056     roleNames.insert(TypeRole, "keyType");
0057     roleNames.insert(WidthRole, "width");
0058     return roleNames;
0059 }
0060 
0061 void KeyboardModel::classBegin()
0062 {
0063 
0064 }
0065 
0066 void KeyboardModel::componentComplete()
0067 {
0068     //Set up keys
0069 
0070     //Normal mode
0071     //First row
0072     d->normalKeys.append(Key("q"));
0073     d->normalKeys.append(Key("w"));
0074     d->normalKeys.append(Key("e"));
0075     d->normalKeys.append(Key("r"));
0076     d->normalKeys.append(Key("t"));
0077     d->normalKeys.append(Key("y"));
0078     d->normalKeys.append(Key("u"));
0079     d->normalKeys.append(Key("i"));
0080     d->normalKeys.append(Key("o"));
0081     d->normalKeys.append(Key("p"));
0082     d->normalKeys.append(Key(QChar(0x232B), BackspaceKey, 2.0f));
0083     //Second row
0084     d->normalKeys.append(Key("", SpacerKey, 0.5f));
0085     d->normalKeys.append(Key("a"));
0086     d->normalKeys.append(Key("s"));
0087     d->normalKeys.append(Key("d"));
0088     d->normalKeys.append(Key("f"));
0089     d->normalKeys.append(Key("g"));
0090     d->normalKeys.append(Key("h"));
0091     d->normalKeys.append(Key("j"));
0092     d->normalKeys.append(Key("k"));
0093     d->normalKeys.append(Key("l"));
0094     d->normalKeys.append(Key("'"));
0095     d->normalKeys.append(Key(QChar(0x23CE), EnterKey, 1.5f));
0096     //Third row
0097     d->normalKeys.append(Key(QChar(0x21E7), ShiftKey));
0098     d->normalKeys.append(Key("z"));
0099     d->normalKeys.append(Key("x"));
0100     d->normalKeys.append(Key("c"));
0101     d->normalKeys.append(Key("v"));
0102     d->normalKeys.append(Key("b"));
0103     d->normalKeys.append(Key("n"));
0104     d->normalKeys.append(Key("m"));
0105     d->normalKeys.append(Key(","));
0106     d->normalKeys.append(Key("."));
0107     d->normalKeys.append(Key("?"));
0108     d->normalKeys.append(Key(QChar(0x21E7), ShiftKey));
0109     //Fourth row
0110     d->normalKeys.append(Key("&123", NumericModeKey, 2.f));
0111     //d->normalKeys.append(Key("Ctrl", SpacerKey));
0112     //d->normalKeys.append(Key(QChar(0x263A), SpacerKey));
0113     d->normalKeys.append(Key(" ", NormalKey, 6.f));
0114     d->normalKeys.append(Key(QChar(0x2190), LeftArrowKey, 2.f));
0115     d->normalKeys.append(Key(QChar(0x2192), RightArrowKey, 2.f));
0116     //d->normalKeys.append(Key("Close", CloseKey));
0117 
0118     //Capital mode
0119     //First row
0120     d->capitalKeys.append(Key("Q"));
0121     d->capitalKeys.append(Key("W"));
0122     d->capitalKeys.append(Key("E"));
0123     d->capitalKeys.append(Key("R"));
0124     d->capitalKeys.append(Key("T"));
0125     d->capitalKeys.append(Key("Y"));
0126     d->capitalKeys.append(Key("U"));
0127     d->capitalKeys.append(Key("I"));
0128     d->capitalKeys.append(Key("O"));
0129     d->capitalKeys.append(Key("P"));
0130     d->capitalKeys.append(Key(QChar(0x232B), BackspaceKey, 2.0f));
0131     //Second row
0132     d->capitalKeys.append(Key("", SpacerKey, 0.5f));
0133     d->capitalKeys.append(Key("A"));
0134     d->capitalKeys.append(Key("S"));
0135     d->capitalKeys.append(Key("D"));
0136     d->capitalKeys.append(Key("F"));
0137     d->capitalKeys.append(Key("G"));
0138     d->capitalKeys.append(Key("H"));
0139     d->capitalKeys.append(Key("J"));
0140     d->capitalKeys.append(Key("K"));
0141     d->capitalKeys.append(Key("L"));
0142     d->capitalKeys.append(Key("\""));
0143     d->capitalKeys.append(Key(QChar(0x23CE), EnterKey, 1.5f));
0144     //Third row
0145     d->capitalKeys.append(Key(QChar(0x21E7), ShiftKey));
0146     d->capitalKeys.append(Key("Z"));
0147     d->capitalKeys.append(Key("X"));
0148     d->capitalKeys.append(Key("C"));
0149     d->capitalKeys.append(Key("V"));
0150     d->capitalKeys.append(Key("B"));
0151     d->capitalKeys.append(Key("N"));
0152     d->capitalKeys.append(Key("M"));
0153     d->capitalKeys.append(Key(";"));
0154     d->capitalKeys.append(Key(":"));
0155     d->capitalKeys.append(Key("!"));
0156     d->capitalKeys.append(Key(QChar(0x21E7), ShiftKey));
0157     //Fourth row
0158     d->capitalKeys.append(Key("&123", NumericModeKey, 2.f));
0159     //d->capitalKeys.append(Key("Ctrl", SpacerKey));
0160     //d->capitalKeys.append(Key(QChar(0x263A), SpacerKey));
0161     d->capitalKeys.append(Key(" ", NormalKey, 6.f));
0162     d->capitalKeys.append(Key(QChar(0x2190), LeftArrowKey, 2.f));
0163     d->capitalKeys.append(Key(QChar(0x2192), RightArrowKey, 2.f));
0164     //d->capitalKeys.append(Key("Close", CloseKey));
0165 
0166     //Capital mode
0167     //First row
0168     //d->numericKeys.append(Key(QChar(0x21B9), SpacerKey));
0169     d->numericKeys.append(Key("!"));
0170     d->numericKeys.append(Key("@"));
0171     d->numericKeys.append(Key("#"));
0172     d->numericKeys.append(Key("$"));
0173     d->numericKeys.append(Key("%"));
0174     d->numericKeys.append(Key("&"));
0175     d->numericKeys.append(Key("", SpacerKey, 0.5f));
0176     d->numericKeys.append(Key("1"));
0177     d->numericKeys.append(Key("2"));
0178     d->numericKeys.append(Key("3"));
0179     //d->numericKeys.append(Key("", SpacerKey, 0.5f));
0180     d->numericKeys.append(Key(QChar(0x232B), BackspaceKey, 2.f));
0181     //Second row
0182     //d->numericKeys.append(Key("", SpacerKey));
0183     d->numericKeys.append(Key("("));
0184     d->numericKeys.append(Key(")"));
0185     d->numericKeys.append(Key("-"));
0186     d->numericKeys.append(Key("_"));
0187     d->numericKeys.append(Key("="));
0188     d->numericKeys.append(Key("+"));
0189     d->numericKeys.append(Key("", SpacerKey, 0.5f));
0190     d->numericKeys.append(Key("4"));
0191     d->numericKeys.append(Key("5"));
0192     d->numericKeys.append(Key("6"));
0193     //d->numericKeys.append(Key("", SpacerKey, 0.5f));
0194     d->numericKeys.append(Key(QChar(0x23CE), EnterKey, 2.f));
0195     //Third row
0196     //d->numericKeys.append(Key("", SpacerKey));
0197     d->numericKeys.append(Key("\\"));
0198     d->numericKeys.append(Key(";"));
0199     d->numericKeys.append(Key(":"));
0200     d->numericKeys.append(Key("\""));
0201     d->numericKeys.append(Key("*"));
0202     d->numericKeys.append(Key("/"));
0203     d->numericKeys.append(Key("", SpacerKey, 0.5f));
0204     d->numericKeys.append(Key("7"));
0205     d->numericKeys.append(Key("8"));
0206     d->numericKeys.append(Key("9"));
0207     d->numericKeys.append(Key("", SpacerKey, 1.f));
0208     //Fourth row
0209     d->numericKeys.append(Key("&123", NumericModeKey, 2.f));
0210     //d->numericKeys.append(Key("Ctrl", SpacerKey));
0211     //d->numericKeys.append(Key(QChar(0x263A), SpacerKey));
0212     d->numericKeys.append(Key(QChar(0x2190), LeftArrowKey, 1.5f));
0213     d->numericKeys.append(Key(" ", NormalKey, 2.5f));
0214     d->numericKeys.append(Key("", SpacerKey, 0.5f));
0215     d->numericKeys.append(Key("0", NormalKey, 2.f));
0216     d->numericKeys.append(Key("."));
0217     d->numericKeys.append(Key("", SpacerKey, .5f));
0218     d->numericKeys.append(Key(QChar(0x2192), RightArrowKey, 1.5f));
0219     //d->numericKeys.append(Key("Close", CloseKey));
0220 }
0221 
0222 QVariant KeyboardModel::data(const QModelIndex& index, int role) const
0223 {
0224     if (!index.isValid())
0225         return QVariant();
0226 
0227     switch(role) {
0228         case TextRole:
0229             return d->currentKeys->at(index.row()).text;
0230         case TypeRole:
0231             return QVariant::fromValue<int>(d->currentKeys->at(index.row()).keyType);
0232         case WidthRole:
0233             return d->currentKeys->at(index.row()).width;
0234         default:
0235             break;
0236     }
0237 
0238     return QVariant();
0239 }
0240 
0241 int KeyboardModel::rowCount(const QModelIndex& parent) const
0242 {
0243     Q_UNUSED(parent)
0244     return d->currentKeys->count();
0245 }
0246 
0247 KeyboardModel::KeyboardMode KeyboardModel::keyboardMode() const
0248 {
0249     return d->mode;
0250 }
0251 
0252 void KeyboardModel::setKeyboardMode(KeyboardModel::KeyboardMode mode)
0253 {
0254     if (mode != d->mode) {
0255         d->mode = mode;
0256 
0257         beginRemoveRows(QModelIndex(), 0, d->currentKeys->count() - 1);
0258         endRemoveRows();
0259 
0260         switch(d->mode) {
0261             case NormalMode:
0262                 d->currentKeys = &d->normalKeys;
0263                 break;
0264             case CapitalMode:
0265                 d->currentKeys = &d->capitalKeys;
0266                 break;
0267             case NumericMode:
0268                 d->currentKeys = &d->numericKeys;
0269                 break;
0270         }
0271 
0272         beginInsertRows(QModelIndex(), 0, d->currentKeys->count() - 1);
0273         endInsertRows();
0274 
0275         emit keyboardModeChanged();
0276     }
0277 }
0278 
0279 bool KeyboardModel::useBuiltIn() const
0280 {
0281     return d->useBuiltIn;
0282 }