mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 16:45:03 +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:
committed by
Andreas Kling
parent
6389384882
commit
196841fd3a
@@ -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;
|
||||
};
|
||||
Reference in New Issue
Block a user