mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:27:35 +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:
parent
6389384882
commit
196841fd3a
3 changed files with 69 additions and 0 deletions
|
@ -17,6 +17,7 @@ set(SOURCES
|
|||
SamplerWidget.cpp
|
||||
WaveWidget.cpp
|
||||
ProcessorParameterWidget/Slider.cpp
|
||||
ProcessorParameterWidget/ParameterWidget.cpp
|
||||
)
|
||||
|
||||
serenity_app(Piano ICON app-piano)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/NonnullRefPtr.h>
|
||||
#include <AK/StdLibExtraDetails.h>
|
||||
#include <LibCore/Object.h>
|
||||
#include <LibDSP/ProcessorParameter.h>
|
||||
#include <LibGUI/Label.h>
|
||||
#include <LibGUI/Widget.h>
|
||||
|
||||
class ProcessorParameterWidget : public GUI::Widget {
|
||||
C_OBJECT(ProcessorParameterWidget)
|
||||
public:
|
||||
ProcessorParameterWidget(DSP::ProcessorParameter& parameter);
|
||||
virtual ~ProcessorParameterWidget() = default;
|
||||
|
||||
private:
|
||||
DSP::ProcessorParameter& m_parameter;
|
||||
RefPtr<GUI::Widget> m_parameter_modifier;
|
||||
RefPtr<GUI::Label> m_label;
|
||||
RefPtr<GUI::Label> m_value_label;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue