X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=midi_mapping_dialog.cpp;h=24496da355dcebe173b75bb620f787f1cdd5da7d;hb=d87cd97d2353be6cfacf738447bfe6faf048e6f3;hp=84a24982beffd60d1a856d79634b579fb9d3be63;hpb=8f83d8ec96c5dd1a1b9d17489d3a93bde3eacac2;p=nageru diff --git a/midi_mapping_dialog.cpp b/midi_mapping_dialog.cpp index 84a2498..24496da 100644 --- a/midi_mapping_dialog.cpp +++ b/midi_mapping_dialog.cpp @@ -192,6 +192,19 @@ void MIDIMappingDialog::guess_clicked(bool limit_to_group) spinner->setValue(source_spinner->value() + offset); } } + + // See if we can find a “next” bus to move the focus to. + const int next_bus_idx = focus.bus_idx + (focus.bus_idx - source_bus_idx); // Note: Could become e.g. -1. + for (const InstantiatedSpinner &is : controller_spinners) { + if (int(is.bus_idx) == next_bus_idx && is.field_number == focus.field_number) { + is.spinner->setFocus(); + } + } + for (const InstantiatedSpinner &is : button_spinners) { + if (int(is.bus_idx) == next_bus_idx && is.field_number == focus.field_number) { + is.spinner->setFocus(); + } + } } void MIDIMappingDialog::ok_clicked() @@ -486,13 +499,18 @@ MIDIMappingDialog::FocusInfo MIDIMappingDialog::find_focus() const { for (const InstantiatedSpinner &is : controller_spinners) { if (is.spinner->hasFocus()) { - return FocusInfo{ int(is.bus_idx), is.spinner_group }; + return FocusInfo{ int(is.bus_idx), is.spinner_group, is.field_number }; } } for (const InstantiatedSpinner &is : button_spinners) { if (is.spinner->hasFocus()) { - return FocusInfo{ int(is.bus_idx), is.spinner_group }; + return FocusInfo{ int(is.bus_idx), is.spinner_group, is.field_number }; + } + } + for (const InstantiatedSpinner &is : light_spinners) { + if (is.spinner->hasFocus()) { + return FocusInfo{ int(is.bus_idx), is.spinner_group, is.field_number }; } } - return FocusInfo{ -1, SpinnerGroup::ALL_GROUPS }; + return FocusInfo{ -1, SpinnerGroup::ALL_GROUPS, -1 }; }