]> git.sesse.net Git - nageru/commitdiff
When having guessed a bus, focus on the next one.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 17 Oct 2016 17:07:46 +0000 (19:07 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 25 Oct 2016 16:48:13 +0000 (18:48 +0200)
midi_mapping_dialog.cpp
midi_mapping_dialog.h

index 84a24982beffd60d1a856d79634b579fb9d3be63..24496da355dcebe173b75bb620f787f1cdd5da7d 100644 (file)
@@ -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 };
 }
index df4e97f3c066b4cad0365d9d157b145bede6902b..47c291674c64b681876c7d0fc314ff9442c6d239 100644 (file)
@@ -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