void ShortcutController::updateButton(const QModelIndex& index, int button) { if (!index.isValid()) { return; } const QModelIndex& parent = index.parent(); if (!parent.isValid()) { return; } ShortcutItem* item = itemAt(index); int oldButton = item->button(); if (oldButton >= 0) { m_buttons.take(oldButton); } updateAxis(index, -1, GamepadAxisEvent::NEUTRAL); item->setButton(button); if (button >= 0) { m_buttons[button] = item; } if (m_config) { m_config->setQtOption(item->name(), button, BUTTON_SECTION); if (!m_profileName.isNull()) { m_config->setQtOption(item->name(), button, BUTTON_PROFILE_SECTION + m_profileName); } } emit dataChanged(createIndex(index.row(), 0, index.internalPointer()), createIndex(index.row(), 2, index.internalPointer())); }
void ShortcutController::updateAxis(const QModelIndex& index, int axis, GamepadAxisEvent::Direction direction) { if (!index.isValid()) { return; } const QModelIndex& parent = index.parent(); if (!parent.isValid()) { return; } ShortcutItem* item = itemAt(index); int oldAxis = item->axis(); GamepadAxisEvent::Direction oldDirection = item->direction(); if (oldAxis >= 0) { m_axes.take(qMakePair(oldAxis, oldDirection)); } if (axis >= 0 && direction != GamepadAxisEvent::NEUTRAL) { updateButton(index, -1); m_axes[qMakePair(axis, direction)] = item; } item->setAxis(axis, direction); if (m_config) { char d = '\0'; if (direction == GamepadAxisEvent::POSITIVE) { d = '+'; } if (direction == GamepadAxisEvent::NEGATIVE) { d = '-'; } m_config->setQtOption(item->name(), QString("%1%2").arg(d).arg(axis), AXIS_SECTION); } emit dataChanged(createIndex(index.row(), 0, index.internalPointer()), createIndex(index.row(), 2, index.internalPointer())); }
void ShortcutController::updateKey(const QModelIndex& index, int keySequence) { if (!index.isValid()) { return; } const QModelIndex& parent = index.parent(); if (!parent.isValid()) { return; } ShortcutItem* item = itemAt(index); updateKey(item, keySequence); if (m_config) { m_config->setQtOption(item->name(), QKeySequence(keySequence).toString(), KEY_SECTION); } emit dataChanged(createIndex(index.row(), 0, index.internalPointer()), createIndex(index.row(), 2, index.internalPointer())); }
void ShortcutController::addAction(QMenu* menu, QAction* action, const QString& name) { ShortcutItem* smenu = m_menuMap[menu]; if (!smenu) { return; } ShortcutItem* pmenu = smenu->parent(); int row = pmenu->items().indexOf(*smenu); QModelIndex parent = createIndex(row, 0, smenu); beginInsertRows(parent, smenu->items().count(), smenu->items().count()); smenu->addAction(action, name); endInsertRows(); ShortcutItem* item = &smenu->items().last(); if (m_config) { loadShortcuts(item); } emit dataChanged(createIndex(smenu->items().count() - 1, 0, item), createIndex(smenu->items().count() - 1, 2, item)); }
void ShortcutController::addMenu(QMenu* menu, QMenu* parentMenu) { ShortcutItem* smenu = m_menuMap[parentMenu]; if (!smenu) { smenu = &m_rootMenu; } QModelIndex parent; ShortcutItem* pmenu = smenu->parent(); if (pmenu) { int row = pmenu->items().indexOf(*smenu); parent = createIndex(row, 0, smenu); } beginInsertRows(parent, smenu->items().count(), smenu->items().count()); smenu->addSubmenu(menu); endInsertRows(); ShortcutItem* item = &smenu->items().last(); emit dataChanged(createIndex(smenu->items().count() - 1, 0, item), createIndex(smenu->items().count() - 1, 2, item)); m_menuMap[menu] = item; }
void ShortcutController::addFunctions(QMenu* menu, std::function<void ()> press, std::function<void ()> release, const QKeySequence& shortcut, const QString& visibleName, const QString& name) { ShortcutItem* smenu = m_menuMap[menu]; if (!smenu) { return; } ShortcutItem* pmenu = smenu->parent(); int row = pmenu->items().indexOf(*smenu); QModelIndex parent = createIndex(row, 0, smenu); beginInsertRows(parent, smenu->items().count(), smenu->items().count()); smenu->addFunctions(qMakePair(press, release), shortcut, visibleName, name); endInsertRows(); ShortcutItem* item = &smenu->items().last(); if (m_config) { loadShortcuts(item); } m_heldKeys[shortcut] = item; emit dataChanged(createIndex(smenu->items().count() - 1, 0, item), createIndex(smenu->items().count() - 1, 2, item)); }
void ShortcutController::updateKey(const QModelIndex& index, const QKeySequence& keySequence) { if (!index.isValid()) { return; } const QModelIndex& parent = index.parent(); if (!parent.isValid()) { return; } ShortcutItem* item = itemAt(index); if (item->functions().first) { QKeySequence oldShortcut = item->shortcut(); if (!oldShortcut.isEmpty()) { m_heldKeys.take(oldShortcut); } if (!keySequence.isEmpty()) { m_heldKeys[keySequence] = item; } } item->setShortcut(keySequence); if (m_config) { m_config->setQtOption(item->name(), keySequence.toString(), KEY_SECTION); } emit dataChanged(createIndex(index.row(), 0, index.internalPointer()), createIndex(index.row(), 2, index.internalPointer())); }
QModelIndex ShortcutController::parent(const QModelIndex& index) const { if (!index.isValid() || !index.internalPointer()) { return QModelIndex(); } ShortcutItem* item = static_cast<ShortcutItem*>(index.internalPointer()); if (!item->parent() || !item->parent()->parent()) { return QModelIndex(); } return createIndex(item->parent()->parent()->items().indexOf(*item->parent()), 0, item->parent()); }
void ShortcutTree::onCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { ShortcutItem *item = dynamic_cast<ShortcutItem *>(current); emit actionSelected(item ? item->getAction() : 0); }