Changeset View
Changeset View
Standalone View
Standalone View
src/models/charactersmodel.cpp
Show All 11 Lines | |||||
12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. | ||
13 | * | 13 | * | ||
14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | 16 | */ | ||
17 | 17 | | |||
18 | #include "charactersmodel.h" | 18 | #include "charactersmodel.h" | ||
19 | 19 | | |||
20 | #include <QSignalMapper> | | |||
21 | | ||||
22 | #include <KLocalizedString> | 20 | #include <KLocalizedString> | ||
23 | 21 | | |||
24 | #include "core/keyboardlayout.h" | 22 | #include "core/keyboardlayout.h" | ||
25 | #include "core/key.h" | 23 | #include "core/key.h" | ||
26 | #include "core/keychar.h" | 24 | #include "core/keychar.h" | ||
27 | #include "undocommands/keyboardlayoutcommands.h" | 25 | #include "undocommands/keyboardlayoutcommands.h" | ||
28 | 26 | | |||
29 | CharactersModel::CharactersModel(QObject *parent) : | 27 | CharactersModel::CharactersModel(QObject *parent) : | ||
30 | QAbstractTableModel(parent), | 28 | QAbstractTableModel(parent), | ||
31 | m_keyboardLayout(nullptr), | 29 | m_keyboardLayout(nullptr), | ||
32 | m_keyIndex(-1), | 30 | m_keyIndex(-1), | ||
33 | m_key(nullptr), | 31 | m_key(nullptr), | ||
34 | m_undoStack(nullptr), | 32 | m_undoStack(nullptr) | ||
35 | m_signalMapper(new QSignalMapper(this)) | | |||
36 | { | 33 | { | ||
37 | connect(m_signalMapper, SIGNAL(mapped(int)), SLOT(emitCharacterChanged(int))); | | |||
38 | } | 34 | } | ||
39 | 35 | | |||
40 | KeyboardLayout* CharactersModel::keyboardLayout() const | 36 | KeyboardLayout* CharactersModel::keyboardLayout() const | ||
41 | { | 37 | { | ||
42 | return m_keyboardLayout; | 38 | return m_keyboardLayout; | ||
43 | } | 39 | } | ||
44 | 40 | | |||
45 | void CharactersModel::setKeyboardLayout(KeyboardLayout* keyboardLayout) | 41 | void CharactersModel::setKeyboardLayout(KeyboardLayout* keyboardLayout) | ||
Show All 32 Lines | 72 | { | |||
78 | 74 | | |||
79 | if (m_key) | 75 | if (m_key) | ||
80 | { | 76 | { | ||
81 | m_key->disconnect(this); | 77 | m_key->disconnect(this); | ||
82 | 78 | | |||
83 | for (int i = 0; i < m_key->keyCharCount(); i++) | 79 | for (int i = 0; i < m_key->keyCharCount(); i++) | ||
84 | { | 80 | { | ||
85 | KeyChar* keyChar = m_key->keyChar(i); | 81 | KeyChar* keyChar = m_key->keyChar(i); | ||
86 | keyChar->disconnect(m_signalMapper); | 82 | keyChar->disconnect(this); | ||
87 | m_signalMapper->setMapping(keyChar, i); | | |||
88 | } | 83 | } | ||
89 | } | 84 | } | ||
90 | 85 | | |||
91 | m_keyIndex = keyIndex; | 86 | m_keyIndex = keyIndex; | ||
92 | m_key = key; | 87 | m_key = key; | ||
93 | 88 | | |||
94 | if (m_key) | 89 | if (m_key) | ||
95 | { | 90 | { | ||
96 | connect(m_key, &Key::keyCharAboutToBeAdded, this, &CharactersModel::onKeyCharAboutToBeAdded); | 91 | connect(m_key, &Key::keyCharAboutToBeAdded, this, &CharactersModel::onKeyCharAboutToBeAdded); | ||
97 | connect(m_key, &Key::keyCharAdded, this, &CharactersModel::onKeyCharAdded); | 92 | connect(m_key, &Key::keyCharAdded, this, &CharactersModel::onKeyCharAdded); | ||
98 | connect(m_key, &Key::keyCharsAboutToBeRemoved, this, &CharactersModel::onKeyCharsAboutToBeRemoved); | 93 | connect(m_key, &Key::keyCharsAboutToBeRemoved, this, &CharactersModel::onKeyCharsAboutToBeRemoved); | ||
99 | connect(m_key, &Key::keyCharsRemoved, this, &CharactersModel::onKeyCharsRemoved); | 94 | connect(m_key, &Key::keyCharsRemoved, this, &CharactersModel::onKeyCharsRemoved); | ||
100 | 95 | | |||
101 | for (int i = 0; i < m_key->keyCharCount(); i++) | 96 | for (int i = 0; i < m_key->keyCharCount(); i++) | ||
102 | { | 97 | { | ||
103 | KeyChar* keyChar = m_key->keyChar(i); | 98 | KeyChar* keyChar = m_key->keyChar(i); | ||
104 | connect(keyChar, SIGNAL(valueChanged()), m_signalMapper, SLOT(map())); | 99 | connect(keyChar, &KeyChar::valueChanged, this, [=] { emitCharacterChanged(i); }); | ||
105 | connect(keyChar, SIGNAL(modifierChanged()), m_signalMapper, SLOT(map())); | 100 | connect(keyChar, &KeyChar::modifierChanged, this, [=] { emitCharacterChanged(i); }); | ||
106 | connect(keyChar, SIGNAL(positionChanged()), m_signalMapper, SLOT(map())); | 101 | connect(keyChar, &KeyChar::positionChanged, this, [=] { emitCharacterChanged(i); }); | ||
107 | m_signalMapper->setMapping(keyChar, i); | | |||
108 | } | 102 | } | ||
109 | } | 103 | } | ||
110 | 104 | | |||
111 | endResetModel(); | 105 | endResetModel(); | ||
112 | } | 106 | } | ||
113 | } | 107 | } | ||
114 | 108 | | |||
115 | QUndoStack* CharactersModel::undoStack() const | 109 | QUndoStack* CharactersModel::undoStack() const | ||
▲ Show 20 Lines • Show All 116 Lines • ▼ Show 20 Line(s) | 222 | { | |||
232 | if (parent.isValid()) | 226 | if (parent.isValid()) | ||
233 | return 0; | 227 | return 0; | ||
234 | 228 | | |||
235 | return m_key->keyCharCount(); | 229 | return m_key->keyCharCount(); | ||
236 | } | 230 | } | ||
237 | 231 | | |||
238 | void CharactersModel::onKeyCharAboutToBeAdded(KeyChar* keyChar, int index) | 232 | void CharactersModel::onKeyCharAboutToBeAdded(KeyChar* keyChar, int index) | ||
239 | { | 233 | { | ||
240 | connect(keyChar, SIGNAL(valueChanged()), m_signalMapper, SLOT(map())); | 234 | connect(keyChar, &KeyChar::valueChanged, this, [=] { emitCharacterChanged(index); }); | ||
241 | connect(keyChar, SIGNAL(modifierChanged()), m_signalMapper, SLOT(map())); | 235 | connect(keyChar, &KeyChar::modifierChanged, this, [=] { emitCharacterChanged(index); }); | ||
242 | connect(keyChar, SIGNAL(positionChanged()), m_signalMapper, SLOT(map())); | 236 | connect(keyChar, &KeyChar::positionChanged, this, [=] { emitCharacterChanged(index); }); | ||
243 | beginInsertRows(QModelIndex(), index, index); | 237 | beginInsertRows(QModelIndex(), index, index); | ||
244 | } | 238 | } | ||
245 | 239 | | |||
246 | void CharactersModel::onKeyCharAdded() | 240 | void CharactersModel::onKeyCharAdded() | ||
247 | { | 241 | { | ||
248 | updateMappings(); | 242 | updateMappings(); | ||
249 | endInsertRows(); | 243 | endInsertRows(); | ||
250 | } | 244 | } | ||
Show All 12 Lines | |||||
263 | { | 257 | { | ||
264 | emit dataChanged(index(row, 0), index(row, columnCount() - 1)); | 258 | emit dataChanged(index(row, 0), index(row, columnCount() - 1)); | ||
265 | } | 259 | } | ||
266 | 260 | | |||
267 | void CharactersModel::updateMappings() | 261 | void CharactersModel::updateMappings() | ||
268 | { | 262 | { | ||
269 | for (int i = 0; i < m_key->keyCharCount(); i++) | 263 | for (int i = 0; i < m_key->keyCharCount(); i++) | ||
270 | { | 264 | { | ||
271 | m_signalMapper->setMapping(m_key->keyChar(i), i); | 265 | disconnect(m_key->keyChar(i), &KeyChar::valueChanged, this, nullptr); | ||
266 | disconnect(m_key->keyChar(i), &KeyChar::modifierChanged, this, nullptr); | ||||
267 | disconnect(m_key->keyChar(i), &KeyChar::positionChanged, this, nullptr); | ||||
268 | connect(m_key->keyChar(i), &KeyChar::valueChanged, this, [=] { emitCharacterChanged(i); }); | ||||
269 | connect(m_key->keyChar(i), &KeyChar::modifierChanged, this, [=] { emitCharacterChanged(i); }); | ||||
270 | connect(m_key->keyChar(i), &KeyChar::positionChanged, this, [=] { emitCharacterChanged(i); }); | ||||
272 | } | 271 | } | ||
273 | } | 272 | } | ||
274 | 273 | | |||
275 | QVariant CharactersModel::characterData(KeyChar* keyChar, int role) const | 274 | QVariant CharactersModel::characterData(KeyChar* keyChar, int role) const | ||
276 | { | 275 | { | ||
277 | switch (role) | 276 | switch (role) | ||
278 | { | 277 | { | ||
279 | case Qt::DisplayRole: | 278 | case Qt::DisplayRole: | ||
▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines |