From: Steinar H. Gunderson Date: Mon, 17 Oct 2016 17:07:46 +0000 (+0200) Subject: When having guessed a bus, focus on the next one. X-Git-Tag: 1.4.0~26 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=d87cd97d2353be6cfacf738447bfe6faf048e6f3;p=nageru When having guessed a bus, focus on the next one. --- 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 }; } diff --git a/midi_mapping_dialog.h b/midi_mapping_dialog.h index df4e97f..47c2916 100644 --- a/midi_mapping_dialog.h +++ b/midi_mapping_dialog.h @@ -99,6 +99,7 @@ private: struct FocusInfo { int bus_idx; // -1 for none. SpinnerGroup spinner_group; + int field_number; }; FocusInfo find_focus() const; @@ -107,7 +108,7 @@ private: Ui::MIDIMappingDialog *ui; MIDIMapper *mapper; ControllerReceiver *old_receiver; - FocusInfo last_focus{-1, SpinnerGroup::ALL_GROUPS}; + FocusInfo last_focus{-1, SpinnerGroup::ALL_GROUPS, -1}; // All controllers actually laid out on the grid (we need to store them // so that we can move values back and forth between the controls and