| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2015 - ROLI Ltd.
 - 
 -    Permission is granted to use this software under the terms of either:
 -    a) the GPL v2 (or any later version)
 -    b) the Affero GPL v3
 - 
 -    Details of these licenses can be found at: www.gnu.org/licenses
 - 
 -    JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
 -    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 -    A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 - 
 -    ------------------------------------------------------------------------------
 - 
 -    To release a closed-source product which uses JUCE, commercial licenses are
 -    available: visit www.juce.com for more information.
 - 
 -   ==============================================================================
 - */
 - 
 - #ifndef JUCE_AUDIOPROCESSORVALUETREESTATE_H_INCLUDED
 - #define JUCE_AUDIOPROCESSORVALUETREESTATE_H_INCLUDED
 - 
 - #if JUCE_COMPILER_SUPPORTS_LAMBDAS || defined (DOXYGEN)
 - 
 - /**
 -     This class contains a ValueTree which is used to manage an AudioProcessor's entire state.
 - 
 -     It has its own internal class of parameter object which are linked to values
 -     within its ValueTree, and which are each identified by a string ID.
 - 
 -     To use: Create a AudioProcessorValueTreeState, and give it some parameters
 -     using createParameter().
 - 
 -     You can get access to the underlying ValueTree object via the state member variable,
 -     so you can add extra properties to it as necessary.
 - 
 -     It also provides some utility child classes for connecting parameters directly to
 -     GUI controls like sliders.
 - */
 - class JUCE_API  AudioProcessorValueTreeState  : private Timer,
 -                                                 private ValueTree::Listener
 - {
 - public:
 -     /** Creates a state object for a given processor.
 - 
 -         The UndoManager is optional and can be a nullptr.
 -         After creating your state object, you should add parameters with the
 -         createAndAddParameter() method. Note that each AudioProcessorValueTreeState
 -         should be attached to only one processor, and must have the same lifetime as the
 -         processor, as they will have dependencies on each other.
 -     */
 -     AudioProcessorValueTreeState (AudioProcessor& processorToConnectTo,
 -                                   UndoManager* undoManagerToUse);
 - 
 -     /** Destructor. */
 -     ~AudioProcessorValueTreeState();
 - 
 -     /** Creates and returns a new parameter object for controlling a parameter
 -         with the given ID.
 - 
 -         Calling this will create and add a special type of AudioProcessorParameter to the
 -         AudioProcessor to which this state is attached.
 - 
 -         @param parameterID          A unique string ID for the new parameter
 -         @param parameterName        The name that the parameter will return from AudioProcessorParameter::getName()
 -         @param labelText            The label that the parameter will return from AudioProcessorParameter::getLabel()
 -         @param valueRange           A mapping that will be used to determine the value range which this parameter uses
 -         @param defaultValue         A default value for the parameter (in non-normalised units)
 -         @param valueToTextFunction  A function that will convert a non-normalised value to a string for the
 -                                     AudioProcessorParameter::getText() method. This can be nullptr to use the
 -                                     default implementation
 -         @param textToValueFunction  The inverse of valueToTextFunction
 -         @returns the parameter object that was created
 -     */
 -     AudioProcessorParameter* createAndAddParameter (String parameterID,
 -                                                     String parameterName,
 -                                                     String labelText,
 -                                                     NormalisableRange<float> valueRange,
 -                                                     float defaultValue,
 -                                                     std::function<String (float)> valueToTextFunction,
 -                                                     std::function<float (const String&)> textToValueFunction);
 - 
 -     /** Returns a parameter by its ID string. */
 -     AudioProcessorParameter* getParameter (StringRef parameterID) const noexcept;
 - 
 -     /** Returns a pointer to a floating point representation of a particular
 -         parameter which a realtime process can read to find out its current value.
 -     */
 -     float* getRawParameterValue (StringRef parameterID) const noexcept;
 - 
 -     /** A listener class that can be attached to an AudioProcessorValueTreeState.
 -         Use AudioProcessorValueTreeState::addParameterListener() to register a callback.
 -     */
 -     struct JUCE_API  Listener
 -     {
 -         Listener();
 -         virtual ~Listener();
 - 
 -         /** This callback method is called by the AudioProcessorValueTreeState when a parameter changes. */
 -         virtual void parameterChanged (const String& parameterID, float newValue) = 0;
 -     };
 - 
 -     /** Attaches a callback to one of the parameters, which will be called when the parameter changes. */
 -     void addParameterListener (StringRef parameterID, Listener* listener);
 - 
 -     /** Removes a callback that was previously added with addParameterCallback(). */
 -     void removeParameterListener (StringRef parameterID, Listener* listener);
 - 
 -     /** Returns a Value object that can be used to control a particular parameter. */
 -     Value getParameterAsValue (StringRef parameterID) const;
 - 
 -     /** Returns the range that was set when the given parameter was created. */
 -     NormalisableRange<float> getParameterRange (StringRef parameterID) const noexcept;
 - 
 -     /** A reference to the processor with which this state is associated. */
 -     AudioProcessor& processor;
 - 
 -     /** The state of the whole processor.
 -         You can replace this with your own ValueTree object, and can add properties and
 -         children to the tree. This class will automatically add children for each of the
 -         parameter objects that are created by createParameter().
 -     */
 -     ValueTree state;
 - 
 -     /** Provides access to the undo manager that this object is using. */
 -     UndoManager* const undoManager;
 - 
 -     //==============================================================================
 -     /** An object of this class maintains a connection between a Slider and a parameter
 -         in an AudioProcessorValueTreeState.
 - 
 -         During the lifetime of this SliderAttachment object, it keeps the two things in
 -         sync, making it easy to connect a slider to a parameter. When this object is
 -         deleted, the connection is broken. Make sure that your AudioProcessorValueTreeState
 -         and Slider aren't deleted before this object!
 -     */
 -     class JUCE_API  SliderAttachment
 -     {
 -     public:
 -         SliderAttachment (AudioProcessorValueTreeState& stateToControl,
 -                           const String& parameterID,
 -                           Slider& sliderToControl);
 -         ~SliderAttachment();
 - 
 -     private:
 -         struct Pimpl;
 -         friend struct ContainerDeletePolicy<Pimpl>;
 -         ScopedPointer<Pimpl> pimpl;
 -         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SliderAttachment)
 -     };
 - 
 -     //==============================================================================
 -     /** An object of this class maintains a connection between a ComboBox and a parameter
 -         in an AudioProcessorValueTreeState.
 - 
 -         During the lifetime of this ComboBoxAttachment object, it keeps the two things in
 -         sync, making it easy to connect a combo box to a parameter. When this object is
 -         deleted, the connection is broken. Make sure that your AudioProcessorValueTreeState
 -         and ComboBox aren't deleted before this object!
 -     */
 -     class JUCE_API  ComboBoxAttachment
 -     {
 -     public:
 -         ComboBoxAttachment (AudioProcessorValueTreeState& stateToControl,
 -                             const String& parameterID,
 -                             ComboBox& comboBoxToControl);
 -         ~ComboBoxAttachment();
 - 
 -     private:
 -         struct Pimpl;
 -         friend struct ContainerDeletePolicy<Pimpl>;
 -         ScopedPointer<Pimpl> pimpl;
 -         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComboBoxAttachment)
 -     };
 - 
 -     //==============================================================================
 -     /** An object of this class maintains a connection between a Button and a parameter
 -         in an AudioProcessorValueTreeState.
 - 
 -         During the lifetime of this ButtonAttachment object, it keeps the two things in
 -         sync, making it easy to connect a button to a parameter. When this object is
 -         deleted, the connection is broken. Make sure that your AudioProcessorValueTreeState
 -         and Button aren't deleted before this object!
 -     */
 -     class JUCE_API  ButtonAttachment
 -     {
 -     public:
 -         ButtonAttachment (AudioProcessorValueTreeState& stateToControl,
 -                           const String& parameterID,
 -                           Button& buttonToControl);
 -         ~ButtonAttachment();
 - 
 -     private:
 -         struct Pimpl;
 -         friend struct ContainerDeletePolicy<Pimpl>;
 -         ScopedPointer<Pimpl> pimpl;
 -         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ButtonAttachment)
 -     };
 - 
 - private:
 -     //==============================================================================
 -     struct Parameter;
 -     friend struct Parameter;
 - 
 -     ValueTree getOrCreateChildValueTree (const String&);
 -     void timerCallback() override;
 - 
 -     void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
 -     void valueTreeChildAdded (ValueTree&, ValueTree&) override;
 -     void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override;
 -     void valueTreeChildOrderChanged (ValueTree&, int, int) override;
 -     void valueTreeParentChanged (ValueTree&) override;
 -     void valueTreeRedirected (ValueTree&) override;
 -     void updateParameterConnectionsToChildTrees();
 - 
 -     Identifier valueType, valuePropertyID, idPropertyID;
 -     bool updatingConnections;
 - 
 -     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioProcessorValueTreeState)
 - };
 - 
 - #endif
 - 
 - #endif  // JUCE_AUDIOPROCESSORVALUETREESTATE_H_INCLUDED
 
 
  |