mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:07:45 +00:00
Piano: Replace knob instantiations with ProcessorParameterWidgets
The only remaining "manual" knob instatiation is the octave, which will be moved into an entirely different UI in the future.
This commit is contained in:
parent
b29d27c948
commit
29e2b1c386
2 changed files with 19 additions and 77 deletions
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "KnobsWidget.h"
|
#include "KnobsWidget.h"
|
||||||
#include "MainWidget.h"
|
#include "MainWidget.h"
|
||||||
#include "ProcessorParameterWidget/Slider.h"
|
#include "ProcessorParameterWidget/ParameterWidget.h"
|
||||||
#include "TrackManager.h"
|
#include "TrackManager.h"
|
||||||
#include <LibDSP/ProcessorParameter.h>
|
#include <LibDSP/ProcessorParameter.h>
|
||||||
#include <LibGUI/BoxLayout.h>
|
#include <LibGUI/BoxLayout.h>
|
||||||
|
@ -20,33 +20,16 @@ KnobsWidget::KnobsWidget(TrackManager& track_manager, MainWidget& main_widget)
|
||||||
: m_track_manager(track_manager)
|
: m_track_manager(track_manager)
|
||||||
, m_main_widget(main_widget)
|
, m_main_widget(main_widget)
|
||||||
{
|
{
|
||||||
set_layout<GUI::VerticalBoxLayout>();
|
set_layout<GUI::HorizontalBoxLayout>();
|
||||||
set_fill_with_background_color(true);
|
set_fill_with_background_color(true);
|
||||||
|
|
||||||
m_labels_container = add<GUI::Widget>();
|
m_octave_container = add<GUI::Widget>();
|
||||||
m_labels_container->set_layout<GUI::HorizontalBoxLayout>();
|
m_octave_container->set_layout<GUI::VerticalBoxLayout>();
|
||||||
m_labels_container->set_fixed_height(45);
|
m_octave_container->add<GUI::Label>("Octave");
|
||||||
|
m_octave_value = m_octave_container->add<GUI::Label>(String::number(m_track_manager.keyboard()->virtual_keyboard_octave()));
|
||||||
m_volume_label = m_labels_container->add<GUI::Label>("Volume");
|
|
||||||
m_octave_label = m_labels_container->add<GUI::Label>("Octave");
|
|
||||||
|
|
||||||
m_values_container = add<GUI::Widget>();
|
|
||||||
m_values_container->set_layout<GUI::HorizontalBoxLayout>();
|
|
||||||
m_values_container->set_fixed_height(10);
|
|
||||||
|
|
||||||
m_volume_value = m_values_container->add<GUI::Label>(String::number(0));
|
|
||||||
m_octave_value = m_values_container->add<GUI::Label>(String::number(m_track_manager.keyboard()->virtual_keyboard_octave()));
|
|
||||||
|
|
||||||
m_knobs_container = add<GUI::Widget>();
|
|
||||||
m_knobs_container->set_layout<GUI::HorizontalBoxLayout>();
|
|
||||||
|
|
||||||
// FIXME: Implement vertical flipping in GUI::Slider, not here.
|
// FIXME: Implement vertical flipping in GUI::Slider, not here.
|
||||||
|
m_octave_knob = m_octave_container->add<GUI::VerticalSlider>();
|
||||||
m_volume_knob = m_knobs_container->add<GUI::VerticalSlider>();
|
|
||||||
m_volume_knob->set_range(0, volume_max);
|
|
||||||
m_volume_knob->set_step(10);
|
|
||||||
|
|
||||||
m_octave_knob = m_knobs_container->add<GUI::VerticalSlider>();
|
|
||||||
m_octave_knob->set_tooltip("Z: octave down, X: octave up");
|
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_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_value((octave_max - 1) - (m_track_manager.keyboard()->virtual_keyboard_octave() - 1));
|
||||||
|
@ -59,41 +42,14 @@ KnobsWidget::KnobsWidget(TrackManager& track_manager, MainWidget& main_widget)
|
||||||
m_octave_value->set_text(String::number(new_octave));
|
m_octave_value->set_text(String::number(new_octave));
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto& raw_parameter : m_track_manager.current_track()->synth()->parameters()) {
|
for (auto& parameter : m_track_manager.current_track()->track_mastering()->parameters())
|
||||||
// The synth has range and enum parameters
|
m_parameter_widgets.append(add<ProcessorParameterWidget>(parameter));
|
||||||
switch (raw_parameter.type()) {
|
|
||||||
case DSP::ParameterType::Range: {
|
|
||||||
auto& parameter = static_cast<DSP::ProcessorRangeParameter&>(raw_parameter);
|
|
||||||
m_synth_values.append(m_values_container->add<GUI::Label>(String::number(static_cast<double>(parameter.value()))));
|
|
||||||
auto& parameter_knob_value = m_synth_values.last();
|
|
||||||
m_synth_labels.append(m_labels_container->add<GUI::Label>(String::formatted("Synth: {}", parameter.name())));
|
|
||||||
m_synth_knobs.append(m_knobs_container->add<ProcessorParameterSlider>(Orientation::Vertical, parameter, parameter_knob_value));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DSP::ParameterType::Enum: {
|
|
||||||
// FIXME: We shouldn't do that, but we know the synth and it is nice
|
|
||||||
auto& parameter = static_cast<DSP::ProcessorEnumParameter<DSP::Synthesizers::Waveform>&>(raw_parameter);
|
|
||||||
// The value is empty for enum parameters
|
|
||||||
m_synth_values.append(m_values_container->add<GUI::Label>(String::empty()));
|
|
||||||
m_synth_labels.append(m_labels_container->add<GUI::Label>(String::formatted("Synth: {}", parameter.name())));
|
|
||||||
auto enum_strings = Vector<String> { "Sine", "Triangle", "Square", "Saw", "Noise" };
|
|
||||||
m_synth_knobs.append(m_knobs_container->add<ProcessorParameterDropdown<DSP::Synthesizers::Waveform>>(parameter, move(enum_strings)));
|
|
||||||
m_synth_waveform = static_cast<ProcessorParameterDropdown<DSP::Synthesizers::Waveform>&>(m_synth_knobs.last());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
VERIFY_NOT_REACHED();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto& raw_parameter : m_track_manager.current_track()->delay()->parameters()) {
|
for (auto& parameter : m_track_manager.current_track()->synth()->parameters())
|
||||||
// FIXME: We shouldn't do that, but we know the effect and it's nice.
|
m_parameter_widgets.append(add<ProcessorParameterWidget>(parameter));
|
||||||
auto& parameter = static_cast<DSP::ProcessorRangeParameter&>(raw_parameter);
|
|
||||||
m_delay_values.append(m_values_container->add<GUI::Label>(String::number(static_cast<double>(parameter.value()))));
|
for (auto& parameter : m_track_manager.current_track()->delay()->parameters())
|
||||||
auto& parameter_knob_value = m_delay_values.last();
|
m_parameter_widgets.append(add<ProcessorParameterWidget>(parameter));
|
||||||
m_delay_labels.append(m_labels_container->add<GUI::Label>(String::formatted("Delay: {}", parameter.name())));
|
|
||||||
m_delay_knobs.append(m_knobs_container->add<ProcessorParameterSlider>(Orientation::Vertical, parameter, parameter_knob_value));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KnobsWidget::update_knobs()
|
void KnobsWidget::update_knobs()
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ProcessorParameterWidget/Dropdown.h"
|
#include "ProcessorParameterWidget/ParameterWidget.h"
|
||||||
#include "ProcessorParameterWidget/Slider.h"
|
|
||||||
#include <AK/NonnullRefPtrVector.h>
|
#include <AK/NonnullRefPtrVector.h>
|
||||||
#include <LibDSP/ProcessorParameter.h>
|
#include <LibDSP/ProcessorParameter.h>
|
||||||
#include <LibDSP/Synthesizers.h>
|
#include <LibDSP/Synthesizers.h>
|
||||||
|
@ -33,24 +32,11 @@ private:
|
||||||
TrackManager& m_track_manager;
|
TrackManager& m_track_manager;
|
||||||
MainWidget& m_main_widget;
|
MainWidget& m_main_widget;
|
||||||
|
|
||||||
RefPtr<GUI::Widget> m_labels_container;
|
RefPtr<GUI::Widget> m_octave_container;
|
||||||
RefPtr<GUI::Label> m_volume_label;
|
|
||||||
RefPtr<GUI::Label> m_octave_label;
|
|
||||||
NonnullRefPtrVector<GUI::Label> m_synth_labels;
|
|
||||||
NonnullRefPtrVector<GUI::Label> m_delay_labels;
|
|
||||||
|
|
||||||
RefPtr<GUI::Widget> m_values_container;
|
|
||||||
RefPtr<GUI::Label> m_volume_value;
|
|
||||||
RefPtr<GUI::Label> m_octave_value;
|
|
||||||
NonnullRefPtrVector<GUI::Label> m_synth_values;
|
|
||||||
NonnullRefPtrVector<GUI::Label> m_delay_values;
|
|
||||||
|
|
||||||
RefPtr<GUI::Widget> m_knobs_container;
|
|
||||||
RefPtr<GUI::Slider> m_volume_knob;
|
|
||||||
RefPtr<GUI::Slider> m_octave_knob;
|
RefPtr<GUI::Slider> m_octave_knob;
|
||||||
RefPtr<ProcessorParameterDropdown<DSP::Synthesizers::Waveform>> m_synth_waveform;
|
RefPtr<GUI::Label> m_octave_value;
|
||||||
NonnullRefPtrVector<GUI::Widget> m_synth_knobs;
|
|
||||||
NonnullRefPtrVector<ProcessorParameterSlider> m_delay_knobs;
|
NonnullRefPtrVector<ProcessorParameterWidget> m_parameter_widgets;
|
||||||
|
|
||||||
bool m_change_underlying { true };
|
bool m_change_underlying { true };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue