1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:17:44 +00:00

Piano: Add a generic processor parameter widget

This automatically creates the correct collection of name label, value
label and "editor" (knob, checkbox, dropdown) depending on the processor
type and layouts them vertically.
This commit is contained in:
kleines Filmröllchen 2022-07-23 15:38:42 +02:00 committed by Andreas Kling
parent 6389384882
commit 196841fd3a
3 changed files with 69 additions and 0 deletions

View file

@ -0,0 +1,41 @@
/*
* Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "ParameterWidget.h"
#include "Dropdown.h"
#include "Slider.h"
#include "Toggle.h"
#include <LibDSP/Synthesizers.h>
#include <LibGUI/BoxLayout.h>
ProcessorParameterWidget::ProcessorParameterWidget(DSP::ProcessorParameter& raw_parameter)
: m_parameter(raw_parameter)
{
set_layout<GUI::VerticalBoxLayout>();
m_label = add<GUI::Label>(raw_parameter.name());
switch (raw_parameter.type()) {
case DSP::ParameterType::Range: {
auto& parameter = static_cast<DSP::ProcessorRangeParameter&>(raw_parameter);
m_value_label = add<GUI::Label>(String::number(static_cast<double>(parameter.value())));
m_parameter_modifier = add<ProcessorParameterSlider>(Orientation::Vertical, parameter, m_value_label);
break;
}
case DSP::ParameterType::Enum: {
// FIXME: We shouldn't do that, but the only user is the synth right now.
auto& parameter = static_cast<DSP::ProcessorEnumParameter<DSP::Synthesizers::Waveform>&>(raw_parameter);
auto enum_strings = Vector<String> { "Sine", "Triangle", "Square", "Saw", "Noise" };
m_parameter_modifier = add<ProcessorParameterDropdown<DSP::Synthesizers::Waveform>>(parameter, move(enum_strings));
break;
}
case DSP::ParameterType::Boolean: {
auto& parameter = static_cast<DSP::ProcessorBooleanParameter&>(raw_parameter);
m_parameter_modifier = add<ProcessorParameterToggle>(parameter);
break;
}
default:
VERIFY_NOT_REACHED();
}
}