summaryrefslogtreecommitdiff
path: root/Userland/Applications/Piano/MainWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Applications/Piano/MainWidget.cpp')
-rw-r--r--Userland/Applications/Piano/MainWidget.cpp36
1 files changed, 28 insertions, 8 deletions
diff --git a/Userland/Applications/Piano/MainWidget.cpp b/Userland/Applications/Piano/MainWidget.cpp
index db990ef11e..e08423e269 100644
--- a/Userland/Applications/Piano/MainWidget.cpp
+++ b/Userland/Applications/Piano/MainWidget.cpp
@@ -17,6 +17,7 @@
#include <LibGUI/Action.h>
#include <LibGUI/BoxLayout.h>
#include <LibGUI/Menu.h>
+#include <LibGUI/Slider.h>
#include <LibGUI/TabWidget.h>
ErrorOr<NonnullRefPtr<MainWidget>> MainWidget::try_create(TrackManager& manager, AudioPlayerLoop& loop)
@@ -55,6 +56,28 @@ ErrorOr<void> MainWidget::initialize()
m_keys_widget = TRY(m_keys_and_knobs_container->try_add<KeysWidget>(m_track_manager.keyboard()));
+ m_octave_container = TRY(m_keys_and_knobs_container->try_add<GUI::Widget>());
+ m_octave_container->set_preferred_width(GUI::SpecialDimension::Fit);
+ TRY(m_octave_container->try_set_layout<GUI::VerticalBoxLayout>());
+ auto octave_label = TRY(m_octave_container->try_add<GUI::Label>("Octave"));
+ octave_label->set_preferred_width(GUI::SpecialDimension::Fit);
+ m_octave_value = TRY(m_octave_container->try_add<GUI::Label>(DeprecatedString::number(m_track_manager.keyboard()->virtual_keyboard_octave())));
+ m_octave_value->set_preferred_width(GUI::SpecialDimension::Fit);
+
+ // FIXME: Implement vertical flipping in GUI::Slider, not here.
+ m_octave_knob = TRY(m_octave_container->try_add<GUI::VerticalSlider>());
+ m_octave_knob->set_preferred_width(GUI::SpecialDimension::Fit);
+ m_octave_knob->set_tooltip("Z: octave down, X: octave up");
+ m_octave_knob->set_range(octave_min - 1, octave_max - 1);
+ m_octave_knob->set_value((octave_max - 1) - (m_track_manager.keyboard()->virtual_keyboard_octave() - 1));
+ m_octave_knob->set_step(1);
+ m_octave_knob->on_change = [this](int value) {
+ int new_octave = octave_max - value;
+ set_octave_via_slider(new_octave);
+ VERIFY(new_octave == m_track_manager.keyboard()->virtual_keyboard_octave());
+ m_octave_value->set_text(DeprecatedString::number(new_octave));
+ };
+
m_knobs_widget = TRY(m_keys_and_knobs_container->try_add<TrackControlsWidget>(m_track_manager, *this));
m_roll_widget->set_keys_widget(m_keys_widget);
@@ -72,8 +95,6 @@ ErrorOr<void> MainWidget::add_track_actions(GUI::Menu& menu)
turn_off_pressed_keys();
m_player_widget->next_track();
turn_on_pressed_keys();
-
- m_knobs_widget->update_knobs();
})));
return {};
@@ -131,10 +152,10 @@ bool MainWidget::special_key_action(int key_code)
{
switch (key_code) {
case Key_Z:
- set_octave_and_ensure_note_change(DSP::Keyboard::Direction::Down);
+ change_octave_via_keys(DSP::Keyboard::Direction::Down);
return true;
case Key_X:
- set_octave_and_ensure_note_change(DSP::Keyboard::Direction::Up);
+ change_octave_via_keys(DSP::Keyboard::Direction::Up);
return true;
case Key_Space:
m_player_widget->toggle_paused();
@@ -164,22 +185,21 @@ void MainWidget::turn_on_pressed_keys()
}
}
-void MainWidget::set_octave_and_ensure_note_change(int octave)
+void MainWidget::set_octave_via_slider(int octave)
{
turn_off_pressed_keys();
MUST(m_track_manager.keyboard()->set_virtual_keyboard_octave(octave));
turn_on_pressed_keys();
- m_knobs_widget->update_knobs();
m_keys_widget->update();
}
-void MainWidget::set_octave_and_ensure_note_change(DSP::Keyboard::Direction direction)
+void MainWidget::change_octave_via_keys(DSP::Keyboard::Direction direction)
{
turn_off_pressed_keys();
m_track_manager.keyboard()->change_virtual_keyboard_octave(direction);
turn_on_pressed_keys();
- m_knobs_widget->update_knobs();
+ m_octave_knob->set_value(octave_max - m_track_manager.keyboard()->virtual_keyboard_octave());
m_keys_widget->update();
}