1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-26 09:45:16 +03:00

Simulator key/mouse mapping improvements (#4175)

* [simulator] Keyboard and mouse control adjustments:
  ~ Make kay/mouse navigation more consistent between radios and ensure keyboard events are always properly detected (eg. after clicking on a control);
  * Fix mouse wheel direction for rotary encoder emulation (fixes https://github.com/opentx/opentx/issues/4160);
  * Fix page up/down buttons on Horus (also #4160);
  ~ Horus rotary encoder can now be controlled with +/- keys (also keeps X/C, otherwise supersedes https://github.com/opentx/opentx/pull/4087 );
  ~ DEL key now another alternative for ESC/BKSP (brings all controls to number pad);
  ~ "=" key now acts same as "+" key (+ requires SHIFT in main row on most US keyboards);
  * Fix controls direction when using mouse wheel over RC switches;
  + Add help text showing keyboard mappings for each radio type (activate on F1 key).

* [simulator] Enable mouse wheel scrolling on radios w/out a rotary encoder (acts as +/- keys on X9D, PU/DN keys on 9X).
This commit is contained in:
Max Paperno 2016-12-30 16:36:29 -05:00 committed by Bertrand Songis
parent 1d3b6721c6
commit 5bf7a6c28d
10 changed files with 168 additions and 32 deletions

View file

@ -54,12 +54,20 @@ SimulatorDialog::SimulatorDialog(QWidget * parent, SimulatorInterface *simulator
middleButtonPressed(false)
{
setWindowFlags(Qt::Window);
//shorcut for telemetry simulator
// new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_T), this, SLOT(openTelemetrySimulator()));
grabKeyboard();
new QShortcut(QKeySequence(Qt::Key_F1), this, SLOT(showHelp()));
new QShortcut(QKeySequence(Qt::Key_F4), this, SLOT(openTelemetrySimulator()));
new QShortcut(QKeySequence(Qt::Key_F5), this, SLOT(openTrainerSimulator()));
new QShortcut(QKeySequence(Qt::Key_F6), this, SLOT(openDebugOutput()));
new QShortcut(QKeySequence(Qt::Key_F7), this, SLOT(luaReload()));
keymapHelp.append(keymapHelp_t(tr("F1"), tr("Show Help/Keymap")));
keymapHelp.append(keymapHelp_t(tr("F4"), tr("Open Telemetry Simulator")));
keymapHelp.append(keymapHelp_t(tr("F5"), tr("Open Trainer Simulator")));
keymapHelp.append(keymapHelp_t(tr("F6"), tr("Open Debug Output")));
keymapHelp.append(keymapHelp_t(tr("F7"), tr("Reload Lua Scripts")));
traceCallbackInstance = this;
}
@ -91,29 +99,33 @@ void SimulatorDialog::showEvent(QShowEvent * event)
vJoyRight->setStickConstraint(VirtualJoystickWidget::HOLD_Y, true);
vJoyRight->setStickY(1);
}
firstShow = false;
}
}
void SimulatorDialog::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::MidButton) {
if (event->button() == Qt::MidButton)
middleButtonPressed = true;
}
else
event->ignore();
}
void SimulatorDialog::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::MidButton) {
if (event->button() == Qt::MidButton)
middleButtonPressed = false;
}
else
event->ignore();
}
void SimulatorDialog::wheelEvent (QWheelEvent *event)
void SimulatorDialog::wheelEvent(QWheelEvent *event)
{
if ( event->delta() != 0) {
simulator->wheelEvent(event->delta() > 0 ? 1 : -1);
}
if (event->angleDelta().isNull())
return;
QPoint numSteps = event->angleDelta() / 8 / 15 * -1; // one step per 15deg
simulator->wheelEvent(numSteps.y());
}
void SimulatorDialog::traceCallback(const char * text)
@ -196,6 +208,25 @@ void SimulatorDialog::onDebugOutputClose()
DebugOut = 0;
}
void SimulatorDialog::showHelp()
{
QString helpText = tr("Simulator Controls:");
helpText += "<table cellspacing=4 cellpadding=0>";
helpText += tr("<tr><th>Key/Mouse</td><th>Action</td></tr>");
QString keyTemplate = "<tr><td align='center'><pre>%1</pre></td><td align='center'>%2</td></tr>";
foreach (keymapHelp_t pair, keymapHelp)
helpText += keyTemplate.arg(pair.first, pair.second);
helpText += "</table>";
QMessageBox * msgBox = new QMessageBox(this);
msgBox->setAttribute(Qt::WA_DeleteOnClose);
msgBox->setWindowFlags(msgBox->windowFlags() | Qt::WindowStaysOnTopHint);
msgBox->setStandardButtons( QMessageBox::Ok );
msgBox->setWindowTitle(tr("Simulator Help"));
msgBox->setText(helpText);
msgBox->setModal(false);
msgBox->show();
}
void SimulatorDialog::keyPressEvent (QKeyEvent *event)
{
@ -206,25 +237,27 @@ void SimulatorDialog::keyPressEvent (QKeyEvent *event)
break;
case Qt::Key_Escape:
case Qt::Key_Backspace:
case Qt::Key_Delete:
buttonPressed = Qt::Key_Escape;
break;
case Qt::Key_Plus:
case Qt::Key_Equal:
buttonPressed = Qt::Key_Plus;
break;
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_Right:
case Qt::Key_Left:
case Qt::Key_Minus:
case Qt::Key_Plus:
case Qt::Key_PageDown:
case Qt::Key_PageUp:
case Qt::Key_PageUp:
case Qt::Key_X:
case Qt::Key_C:
buttonPressed = event->key();
break;
case Qt::Key_X:
simulator->wheelEvent(-1);
default:
event->ignore();
break;
case Qt::Key_C:
simulator->wheelEvent(1);
break;
}
}
@ -235,16 +268,23 @@ void SimulatorDialog::keyReleaseEvent(QKeyEvent * event)
case Qt::Key_Return:
case Qt::Key_Escape:
case Qt::Key_Backspace:
case Qt::Key_Delete:
case Qt::Key_Plus:
case Qt::Key_Equal:
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_Right:
case Qt::Key_Left:
case Qt::Key_Plus:
case Qt::Key_Minus:
case Qt::Key_PageDown:
case Qt::Key_PageUp:
case Qt::Key_X:
case Qt::Key_C:
buttonPressed = 0;
break;
default:
event->ignore();
break;
}
}