diff --git a/Applications/Piano/KnobsWidget.cpp b/Applications/Piano/KnobsWidget.cpp index e0ab8898df..01f647a017 100644 --- a/Applications/Piano/KnobsWidget.cpp +++ b/Applications/Piano/KnobsWidget.cpp @@ -83,7 +83,7 @@ KnobsWidget::KnobsWidget(TrackManager& track_manager, MainWidget& main_widget) m_octave_knob->on_value_changed = [this](int value) { int new_octave = octave_max - value; if (m_change_underlying) - m_main_widget.set_octave_and_ensure_note_change(new_octave == m_track_manager.octave() + 1 ? Up : Down); + m_main_widget.set_octave_and_ensure_note_change(new_octave); ASSERT(new_octave == m_track_manager.octave()); m_octave_value->set_text(String::number(new_octave)); }; diff --git a/Applications/Piano/MainWidget.cpp b/Applications/Piano/MainWidget.cpp index 11209fe9d8..661eee8b4f 100644 --- a/Applications/Piano/MainWidget.cpp +++ b/Applications/Piano/MainWidget.cpp @@ -160,6 +160,16 @@ void MainWidget::turn_on_pressed_keys() } } +void MainWidget::set_octave_and_ensure_note_change(int octave) +{ + turn_off_pressed_keys(); + m_track_manager.set_octave(octave); + turn_on_pressed_keys(); + + m_knobs_widget->update_knobs(); + m_keys_widget->update(); +} + void MainWidget::set_octave_and_ensure_note_change(Direction direction) { turn_off_pressed_keys(); diff --git a/Applications/Piano/MainWidget.h b/Applications/Piano/MainWidget.h index 75166fa7dd..a2a6a35a0c 100644 --- a/Applications/Piano/MainWidget.h +++ b/Applications/Piano/MainWidget.h @@ -45,6 +45,7 @@ public: void add_actions(GUI::Menu&); void set_octave_and_ensure_note_change(Direction); + void set_octave_and_ensure_note_change(int); private: explicit MainWidget(TrackManager&); diff --git a/Applications/Piano/TrackManager.cpp b/Applications/Piano/TrackManager.cpp index 2a9419e3be..18ae568d09 100644 --- a/Applications/Piano/TrackManager.cpp +++ b/Applications/Piano/TrackManager.cpp @@ -85,6 +85,13 @@ void TrackManager::set_octave(Direction direction) } } +void TrackManager::set_octave(int octave) +{ + if (octave <= octave_max && octave >= octave_min) { + m_octave = octave; + } +} + void TrackManager::add_track() { m_tracks.append(make(m_time)); diff --git a/Applications/Piano/TrackManager.h b/Applications/Piano/TrackManager.h index 2443adc343..a04daee696 100644 --- a/Applications/Piano/TrackManager.h +++ b/Applications/Piano/TrackManager.h @@ -51,6 +51,7 @@ public: void set_should_loop(bool b) { m_should_loop = b; } void set_note_current_octave(int note, Switch); void set_octave(Direction); + void set_octave(int octave); void add_track(); void next_track();