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 }