bool KeyEditor::event(QEvent* event) { if (!m_button) { if (event->type() == QEvent::KeyPress) { QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event); if (keyEvent->key() != Qt::Key_Tab && keyEvent->key() != Qt::Key_Backtab) { return QWidget::event(event); } if (!(keyEvent->modifiers() & ~Qt::ShiftModifier)) { keyPressEvent(keyEvent); keyEvent->accept(); return true; } } } else { if (event->type() == GamepadButtonEvent::Down()) { setValueButton(static_cast<GamepadButtonEvent*>(event)->value()); event->accept(); return true; } if (event->type() == GamepadHatEvent::Down()) { GamepadHatEvent* ghe = static_cast<GamepadHatEvent*>(event); setValueHat(ghe->hatId(), ghe->direction()); event->accept(); return true; } if (event->type() == GamepadAxisEvent::Type()) { GamepadAxisEvent* gae = static_cast<GamepadAxisEvent*>(event); if (gae->isNew()) { setValueAxis(gae->axis(), gae->direction()); } event->accept(); return true; } } return QWidget::event(event); }
bool ShortcutController::eventFilter(QObject*, QEvent* event) { if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event); if (keyEvent->isAutoRepeat()) { return false; } auto item = m_heldKeys.find(keyEventToSequence(keyEvent)); if (item == m_heldKeys.end()) { return false; } ShortcutItem::Functions pair = item.value()->functions(); if (event->type() == QEvent::KeyPress) { if (pair.first) { pair.first(); } } else { if (pair.second) { pair.second(); } } event->accept(); return true; } if (event->type() == GamepadButtonEvent::Down()) { auto item = m_buttons.find(static_cast<GamepadButtonEvent*>(event)->value()); if (item == m_buttons.end()) { return false; } QAction* action = item.value()->action(); if (action && action->isEnabled()) { action->trigger(); } ShortcutItem::Functions pair = item.value()->functions(); if (pair.first) { pair.first(); } event->accept(); return true; } if (event->type() == GamepadButtonEvent::Up()) { auto item = m_buttons.find(static_cast<GamepadButtonEvent*>(event)->value()); if (item == m_buttons.end()) { return false; } ShortcutItem::Functions pair = item.value()->functions(); if (pair.second) { pair.second(); } event->accept(); return true; } if (event->type() == GamepadAxisEvent::Type()) { GamepadAxisEvent* gae = static_cast<GamepadAxisEvent*>(event); auto item = m_axes.find(qMakePair(gae->axis(), gae->direction())); if (item == m_axes.end()) { return false; } if (gae->isNew()) { QAction* action = item.value()->action(); if (action && action->isEnabled()) { action->trigger(); } } ShortcutItem::Functions pair = item.value()->functions(); if (gae->isNew()) { if (pair.first) { pair.first(); } } else { if (pair.second) { pair.second(); } } event->accept(); return true; } return false; }
bool LoadSaveState::eventFilter(QObject* object, QEvent* event) { if (event->type() == QEvent::KeyPress) { int column = m_currentFocus % 3; int row = m_currentFocus - column; switch (static_cast<QKeyEvent*>(event)->key()) { case Qt::Key_Up: row += 6; break; case Qt::Key_Down: row += 3; break; case Qt::Key_Left: column += 2; break; case Qt::Key_Right: column += 1; break; case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: case Qt::Key_9: triggerState(static_cast<QKeyEvent*>(event)->key() - Qt::Key_1 + 1); break; case Qt::Key_Escape: close(); break; case Qt::Key_Enter: case Qt::Key_Return: triggerState(m_currentFocus + 1); break; default: return false; } column %= 3; row %= 9; m_currentFocus = column + row; m_slots[m_currentFocus]->setFocus(); return true; } if (event->type() == QEvent::Enter) { int i; for (i = 0; i < 9; ++i) { if (m_slots[i] == object) { m_currentFocus = i; m_slots[m_currentFocus]->setFocus(); return true; } } } if (event->type() == GamepadButtonEvent::Down() || event->type() == GamepadAxisEvent::Type()) { int column = m_currentFocus % 3; int row = m_currentFocus - column; GBAKey key = GBA_KEY_NONE; if (event->type() == GamepadButtonEvent::Down()) { key = static_cast<GamepadButtonEvent*>(event)->gbaKey(); } else if (event->type() == GamepadAxisEvent::Type()) { GamepadAxisEvent* gae = static_cast<GamepadAxisEvent*>(event); if (gae->isNew()) { key = gae->gbaKey(); } else { return false; } } switch (key) { case GBA_KEY_UP: row += 6; break; case GBA_KEY_DOWN: row += 3; break; case GBA_KEY_LEFT: column += 2; break; case GBA_KEY_RIGHT: column += 1; break; case GBA_KEY_B: event->accept(); close(); return true; case GBA_KEY_A: case GBA_KEY_START: event->accept(); triggerState(m_currentFocus + 1); return true; default: return false; } column %= 3; row %= 9; m_currentFocus = column + row; m_slots[m_currentFocus]->setFocus(); event->accept(); return true; } return false; }