diff --git a/Userland/Applications/Piano/ProcessorParameterWidget/Toggle.h b/Userland/Applications/Piano/ProcessorParameterWidget/Toggle.h new file mode 100644 index 0000000000..0ca2eaa5f4 --- /dev/null +++ b/Userland/Applications/Piano/ProcessorParameterWidget/Toggle.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022, kleines Filmröllchen + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include + +class ProcessorParameterToggle : public GUI::CheckBox { + C_OBJECT(ProcessorParameterToggle) + +public: + ProcessorParameterToggle(DSP::ProcessorBooleanParameter& parameter) + : CheckBox("") + , m_parameter(parameter) + { + on_checked = [this](auto checked) { + if (m_currently_setting_from_ui) + return; + m_currently_setting_from_ui = true; + m_parameter.set_value(checked); + m_currently_setting_from_ui = false; + }; + m_parameter.register_change_listener([this](auto muted) { + set_checked(muted, GUI::AllowCallback::No); + }); + + set_checked(parameter.value()); + } + +private: + DSP::ProcessorBooleanParameter& m_parameter; + bool m_currently_setting_from_ui { false }; +};