Is it possible to make the start
and end
properties of a juce::Range
a juce::Value
somehow?
I’m using juce::Value
s all over my GUI to persist the GUI state, but can’t find a way to easily persist the juce::Range
s I use internally.
Is it possible to make the start
and end
properties of a juce::Range
a juce::Value
somehow?
I’m using juce::Value
s all over my GUI to persist the GUI state, but can’t find a way to easily persist the juce::Range
s I use internally.
I’ve come up with this proxy class to wrap a juce::Range
with a juce::Value
each for the start
and end
property:
template<typename T>
class ValueRange : private juce::Value::Listener {
public:
juce::Value startValue, endValue;
ValueRange(const T start, const T end) :
range(start, end),
startValue(start), endValue(end) {
startValue.addListener(this);
endValue.addListener(this);
}
ValueRange(const ValueRange&) = delete;
operator juce::Range<T>() {
return range;
}
operator const juce::Range<T> &() const {
return range;
}
const juce::Range<T> &getRange() const {
return range;
}
ValueRange &operator=(const juce::Range<T> &newRange) {
range = newRange;
startValue = range.getStart();
endValue = range.getEnd();
return *this;
}
private:
juce::Range<T> range;
void valueChanged(juce::Value &value) override {
if (value.refersToSameSourceAs(startValue)) {
range.setStart((T) startValue.getValue());
} else if (value.refersToSameSourceAs(endValue)) {
range.setEnd((T) endValue.getValue());
}
}
};