diff options
author | kleines Filmröllchen <filmroellchen@serenityos.org> | 2022-07-23 15:38:42 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-07-25 15:25:13 +0200 |
commit | 196841fd3a3ee6f6c0d2152ba880a415ebe6e2f7 (patch) | |
tree | 4a8cd6c71b51abfda1770352686e9e87953c60cc | |
parent | 6389384882db8e72f1f77fd0430bde233224b642 (diff) | |
download | serenity-196841fd3a3ee6f6c0d2152ba880a415ebe6e2f7.zip |
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.
3 files changed, 69 insertions, 0 deletions
diff --git a/Userland/Applications/Piano/CMakeLists.txt b/Userland/Applications/Piano/CMakeLists.txt index 377b892a49..0fd50c01b1 100644 --- a/Userland/Applications/Piano/CMakeLists.txt +++ b/Userland/Applications/Piano/CMakeLists.txt @@ -17,6 +17,7 @@ set(SOURCES SamplerWidget.cpp WaveWidget.cpp ProcessorParameterWidget/Slider.cpp + ProcessorParameterWidget/ParameterWidget.cpp ) serenity_app(Piano ICON app-piano) diff --git a/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.cpp b/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.cpp new file mode 100644 index 0000000000..23ba1105d4 --- /dev/null +++ b/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.cpp @@ -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(); + } +} diff --git a/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.h b/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.h new file mode 100644 index 0000000000..89baf3c24c --- /dev/null +++ b/Userland/Applications/Piano/ProcessorParameterWidget/ParameterWidget.h @@ -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; +}; |