/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2022 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 7 End-User License Agreement and JUCE Privacy Policy. End User License Agreement: www.juce.com/juce-7-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce { AudioParameterBool::AudioParameterBool (const ParameterID& idToUse, const String& nameToUse, bool def, const AudioParameterBoolAttributes& attributes) : RangedAudioParameter (idToUse, nameToUse, attributes.getAudioProcessorParameterWithIDAttributes()), value (def ? 1.0f : 0.0f), valueDefault (def), stringFromBoolFunction (attributes.getStringFromValueFunction() != nullptr ? attributes.getStringFromValueFunction() : [] (bool v, int) { return v ? TRANS("On") : TRANS("Off"); }), boolFromStringFunction (attributes.getValueFromStringFunction() != nullptr ? attributes.getValueFromStringFunction() : [] (const String& text) { static const StringArray onStrings { TRANS ("on"), TRANS ("yes"), TRANS ("true") }; static const StringArray offStrings { TRANS ("off"), TRANS ("no"), TRANS ("false") }; String lowercaseText (text.toLowerCase()); for (auto& testText : onStrings) if (lowercaseText == testText) return true; for (auto& testText : offStrings) if (lowercaseText == testText) return false; return text.getIntValue() != 0; }) { } AudioParameterBool::~AudioParameterBool() { #if __cpp_lib_atomic_is_always_lock_free static_assert (std::atomic::is_always_lock_free, "AudioParameterBool requires a lock-free std::atomic"); #endif } float AudioParameterBool::getValue() const { return value; } void AudioParameterBool::setValue (float newValue) { value = newValue; valueChanged (get()); } float AudioParameterBool::getDefaultValue() const { return valueDefault; } int AudioParameterBool::getNumSteps() const { return 2; } bool AudioParameterBool::isDiscrete() const { return true; } bool AudioParameterBool::isBoolean() const { return true; } void AudioParameterBool::valueChanged (bool) {} float AudioParameterBool::getValueForText (const String& text) const { return boolFromStringFunction (text) ? 1.0f : 0.0f; } String AudioParameterBool::getText (float v, int maximumLength) const { return stringFromBoolFunction (v >= 0.5f, maximumLength); } AudioParameterBool& AudioParameterBool::operator= (bool newValue) { if (get() != newValue) setValueNotifyingHost (newValue ? 1.0f : 0.0f); return *this; } } // namespace juce