LMMS
Loading...
Searching...
No Matches
juce::CachedValue< Type > Class Template Reference

#include <juce_CachedValue.h>

Inheritance diagram for juce::CachedValue< Type >:
juce::ValueTree::Listener

Public Member Functions

 CachedValue ()
 CachedValue (ValueTree &tree, const Identifier &propertyID, UndoManager *undoManager)
 CachedValue (ValueTree &tree, const Identifier &propertyID, UndoManager *undoManager, const Type &defaultToUse)
 operator Type () const noexcept
Type get () const noexcept
Type & operator* () noexcept
Type * operator-> () noexcept
template<typename OtherType>
bool operator== (const OtherType &other) const
template<typename OtherType>
bool operator!= (const OtherType &other) const
Value getPropertyAsValue ()
bool isUsingDefault () const
Type getDefault () const
CachedValueoperator= (const Type &newValue)
void setValue (const Type &newValue, UndoManager *undoManagerToUse)
void resetToDefault ()
void resetToDefault (UndoManager *undoManagerToUse)
void setDefault (const Type &value)
void referTo (ValueTree &tree, const Identifier &property, UndoManager *um)
void referTo (ValueTree &tree, const Identifier &property, UndoManager *um, const Type &defaultVal)
void forceUpdateOfCachedValue ()
ValueTreegetValueTree () noexcept
const IdentifiergetPropertyID () const noexcept
UndoManagergetUndoManager () noexcept

Private Member Functions

void referToWithDefault (ValueTree &, const Identifier &, UndoManager *, const Type &)
Type getTypedValue () const
void valueTreePropertyChanged (ValueTree &changedTree, const Identifier &changedProperty) override
Private Member Functions inherited from juce::ValueTree::Listener
virtual ~Listener ()=default
virtual void valueTreeChildAdded (ValueTree &parentTree, ValueTree &childWhichHasBeenAdded)
virtual void valueTreeChildRemoved (ValueTree &parentTree, ValueTree &childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved)
virtual void valueTreeChildOrderChanged (ValueTree &parentTreeWhoseChildrenHaveMoved, int oldIndex, int newIndex)
virtual void valueTreeParentChanged (ValueTree &treeWhoseParentHasChanged)
virtual void valueTreeRedirected (ValueTree &treeWhichHasBeenChanged)

Private Attributes

ValueTree targetTree
Identifier targetProperty
UndoManagerundoManager = nullptr
Type defaultValue
Type cachedValue

Detailed Description

template<typename Type>
class juce::CachedValue< Type >

This class acts as a typed wrapper around a property inside a ValueTree.

A CachedValue provides an easy way to read and write a ValueTree property with a chosen type. So for example a CachedValue<int> allows you to read or write the property as an int, and a CachedValue<String> lets you work with it as a String.

It also allows efficient access to the value, by caching a copy of it in the type that is being used.

You can give the CachedValue an optional UndoManager which it will use when writing to the underlying ValueTree.

If the property inside the ValueTree is missing, the CachedValue will automatically return an optional default value, which can be specified when initialising the CachedValue.

To create one, you can either use the constructor to attach the CachedValue to a ValueTree, or can create an uninitialised CachedValue with its default constructor and then attach it later with the referTo() methods.

Common types like String, int, double which can be easily converted to a var should work out-of-the-box, but if you want to use more complex custom types, you may need to implement some template specialisations of VariantConverter which this class uses to convert between the type and the ValueTree's internal var.

@tags{DataStructures}

Constructor & Destructor Documentation

◆ CachedValue() [1/3]

template<typename Type>
juce::CachedValue< Type >::CachedValue ( )
inlinedefault

Default constructor. Creates a default CachedValue not referring to any property. To initialise the object, call one of the referTo() methods.

◆ CachedValue() [2/3]

template<typename Type>
juce::CachedValue< Type >::CachedValue ( ValueTree & tree,
const Identifier & propertyID,
UndoManager * undoManager )
inline

Constructor.

Creates a CachedValue referring to a Value property inside a ValueTree. If you use this constructor, the fallback value will be a default-constructed instance of Type.

Parameters
treeThe ValueTree containing the property
propertyIDThe identifier of the property
undoManagerThe UndoManager to use when writing to the property

◆ CachedValue() [3/3]

template<typename Type>
juce::CachedValue< Type >::CachedValue ( ValueTree & tree,
const Identifier & propertyID,
UndoManager * undoManager,
const Type & defaultToUse )
inline

Constructor.

Creates a default Cached Value referring to a Value property inside a ValueTree, and specifies a fallback value to use if the property does not exist.

Parameters
treeThe ValueTree containing the property
propertyIDThe identifier of the property
undoManagerThe UndoManager to use when writing to the property
defaultToUseThe fallback default value to use.

Member Function Documentation

◆ forceUpdateOfCachedValue()

template<typename Type>
void juce::CachedValue< Type >::forceUpdateOfCachedValue ( )
inline

Force an update in case the referenced property has been changed from elsewhere.

Note: The CachedValue is a ValueTree::Listener and therefore will be informed of changes of the referenced property anyway (and update itself). But this may happen asynchronously. forceUpdateOfCachedValue() forces an update immediately.

◆ get()

template<typename Type>
Type juce::CachedValue< Type >::get ( ) const
inlinenoexcept

Returns the current value of the property. If the property does not exist, returns the fallback default value.

◆ getDefault()

template<typename Type>
Type juce::CachedValue< Type >::getDefault ( ) const
inline

Returns the current fallback default value.

◆ getPropertyAsValue()

template<typename Type>
Value juce::CachedValue< Type >::getPropertyAsValue ( )
inline

Returns the current property as a Value object.

◆ getPropertyID()

template<typename Type>
const Identifier & juce::CachedValue< Type >::getPropertyID ( ) const
inlinenoexcept

Returns the property ID of the referenced property.

◆ getTypedValue()

template<typename Type>
Type juce::CachedValue< Type >::getTypedValue ( ) const
inlineprivate

◆ getUndoManager()

template<typename Type>
UndoManager * juce::CachedValue< Type >::getUndoManager ( )
inlinenoexcept

Returns the UndoManager that is being used.

◆ getValueTree()

template<typename Type>
ValueTree & juce::CachedValue< Type >::getValueTree ( )
inlinenoexcept

Returns a reference to the ValueTree containing the referenced property.

◆ isUsingDefault()

template<typename Type>
bool juce::CachedValue< Type >::isUsingDefault ( ) const
inline

Returns true if the current property does not exist and the CachedValue is using the fallback default value instead.

◆ operator Type()

template<typename Type>
juce::CachedValue< Type >::operator Type ( ) const
inlinenoexcept

Returns the current value of the property. If the property does not exist, returns the fallback default value.

This is the same as calling get().

◆ operator!=()

template<typename Type>
template<typename OtherType>
bool juce::CachedValue< Type >::operator!= ( const OtherType & other) const
inline

Returns true if the current value of the property (or the fallback value) is not equal to other.

◆ operator*()

template<typename Type>
Type & juce::CachedValue< Type >::operator* ( )
inlinenoexcept

Dereference operator. Provides direct access to the property.

◆ operator->()

template<typename Type>
Type * juce::CachedValue< Type >::operator-> ( )
inlinenoexcept

Dereference operator. Provides direct access to members of the property if it is of object type.

◆ operator=()

template<typename Type>
CachedValue< Type > & juce::CachedValue< Type >::operator= ( const Type & newValue)
inline

Sets the property. This will actually modify the property in the referenced ValueTree.

◆ operator==()

template<typename Type>
template<typename OtherType>
bool juce::CachedValue< Type >::operator== ( const OtherType & other) const
inline

Returns true if the current value of the property (or the fallback value) is equal to other.

◆ referTo() [1/2]

template<typename Type>
void juce::CachedValue< Type >::referTo ( ValueTree & tree,
const Identifier & property,
UndoManager * um )
inline

Makes the CachedValue refer to the specified property inside the given ValueTree.

◆ referTo() [2/2]

template<typename Type>
void juce::CachedValue< Type >::referTo ( ValueTree & tree,
const Identifier & property,
UndoManager * um,
const Type & defaultVal )
inline

Makes the CachedValue refer to the specified property inside the given ValueTree, and specifies a fallback value to use if the property does not exist.

◆ referToWithDefault()

template<typename Type>
void juce::CachedValue< Type >::referToWithDefault ( ValueTree & v,
const Identifier & i,
UndoManager * um,
const Type & defaultVal )
inlineprivate

◆ resetToDefault() [1/2]

template<typename Type>
void juce::CachedValue< Type >::resetToDefault ( )
inline

Removes the property from the referenced ValueTree and makes the CachedValue return the fallback default value instead.

◆ resetToDefault() [2/2]

template<typename Type>
void juce::CachedValue< Type >::resetToDefault ( UndoManager * undoManagerToUse)
inline

Removes the property from the referenced ValueTree and makes the CachedValue return the fallback default value instead.

◆ setDefault()

template<typename Type>
void juce::CachedValue< Type >::setDefault ( const Type & value)
inline

Resets the fallback default value.

◆ setValue()

template<typename Type>
void juce::CachedValue< Type >::setValue ( const Type & newValue,
UndoManager * undoManagerToUse )
inline

Sets the property. This will actually modify the property in the referenced ValueTree.

◆ valueTreePropertyChanged()

template<typename Type>
void juce::CachedValue< Type >::valueTreePropertyChanged ( ValueTree & treeWhosePropertyHasChanged,
const Identifier & property )
inlineoverrideprivatevirtual

This method is called when a property of this tree (or of one of its sub-trees) is changed. Note that when you register a listener to a tree, it will receive this callback for property changes in that tree, and also for any of its children, (recursively, at any depth). If your tree has sub-trees but you only want to know about changes to the top level tree, simply check the tree parameter in this callback to make sure it's the tree you're interested in.

Reimplemented from juce::ValueTree::Listener.

Member Data Documentation

◆ cachedValue

template<typename Type>
Type juce::CachedValue< Type >::cachedValue
private

◆ defaultValue

template<typename Type>
Type juce::CachedValue< Type >::defaultValue
private

◆ targetProperty

template<typename Type>
Identifier juce::CachedValue< Type >::targetProperty
private

◆ targetTree

template<typename Type>
ValueTree juce::CachedValue< Type >::targetTree
private

◆ undoManager

template<typename Type>
UndoManager* juce::CachedValue< Type >::undoManager = nullptr
private

The documentation for this class was generated from the following file: