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()
{
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 };
}
struct FocusInfo {
int bus_idx; // -1 for none.
SpinnerGroup spinner_group;
+ int field_number;
};
FocusInfo find_focus() const;
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