/* ============================================================================== ValueTreeSliderAttachment.h Created: 4 Jun 2016 11:17:03am Author: Daniel Walz ============================================================================== */ #ifndef VALUETREESLIDERATTACHMENT_H_INCLUDED #define VALUETREESLIDERATTACHMENT_H_INCLUDED #include "../JuceLibraryCode/JuceHeader.h" class ValueTreeSliderAttachment : public Slider::Listener, public ValueTree::Listener { public: ValueTreeSliderAttachment (ValueTree& _tree, Slider* _slider, Identifier _property) : tree (_tree), property (_property), updating (false) { // Don't attach an invalid valuetree! jassert (tree.isValid()); slider = _slider; if (tree.hasProperty (property)) { slider->setValue (tree.getProperty(property)); } else { tree.setProperty (property, slider->getValue(), nullptr); } tree.addListener (this); slider->addListener (this); } void sliderValueChanged (Slider *_slider) override { if (! updating) { updating = true; if (slider == _slider) { tree.setProperty (property, slider->getValue(), nullptr); } updating = false; } } void valueTreePropertyChanged (ValueTree &treeWhosePropertyHasChanged, const Identifier &_property) override { if (! updating) { updating = true; if (treeWhosePropertyHasChanged == tree && _property == property && slider) { slider->setValue (tree.getProperty (property)); } updating = false; } } void valueTreeChildAdded (ValueTree &parentTree, ValueTree &childWhichHasBeenAdded) override {} void valueTreeChildRemoved (ValueTree &parentTree, ValueTree &childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved) override {} void valueTreeChildOrderChanged (ValueTree &parentTreeWhoseChildrenHaveMoved, int oldIndex, int newIndex) override {} void valueTreeParentChanged (ValueTree &treeWhoseParentHasChanged) override {} void valueTreeRedirected (ValueTree &treeWhichHasBeenChanged) override {} private: ValueTree tree; Component::SafePointer slider; Identifier property; bool updating; }; #endif // VALUETREESLIDERATTACHMENT_H_INCLUDED