add new API to PBD::Controllable, ::get_save_value()
Designed to allow derived classes to *save* a different value than would be reported by ::get_value(). Specifically there so that slaved controls can save/restore their *own* state, not the value that ::get_value() would return.
This commit is contained in:
parent
edd1061c3d
commit
5d5d9b8114
@ -124,7 +124,7 @@ Controllable::get_state ()
|
||||
id().print (buf, sizeof (buf));
|
||||
node->add_property (X_("id"), buf);
|
||||
node->add_property (X_("flags"), enum_2_string (_flags));
|
||||
snprintf (buf, sizeof (buf), "%2.12f", get_value());
|
||||
snprintf (buf, sizeof (buf), "%2.12f", get_save_value());
|
||||
node->add_property (X_("value"), buf);
|
||||
|
||||
if (_extra_xml) {
|
||||
@ -134,7 +134,6 @@ Controllable::get_state ()
|
||||
return *node;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Controllable::set_state (const XMLNode& node, int /*version*/)
|
||||
{
|
||||
|
@ -104,6 +104,13 @@ class LIBPBD_API Controllable : public PBD::StatefulDestructible {
|
||||
virtual void set_value (double, GroupControlDisposition group_override) = 0;
|
||||
virtual double get_value (void) const = 0;
|
||||
|
||||
/** This is used when saving state. By default it just calls
|
||||
* get_value(), but a class with more complex semantics might override
|
||||
* this to save some value that differs from what get_value() would
|
||||
* return.
|
||||
*/
|
||||
virtual double get_save_value () const { return get_value(); }
|
||||
|
||||
/** Conversions between `internal', 'interface', and 'user' values */
|
||||
virtual double internal_to_interface (double i) const {return (i-lower())/(upper() - lower());} //by default, the interface range is just a linear interpolation between lower and upper values
|
||||
virtual double interface_to_internal (double i) const {return lower() + i*(upper() - lower());}
|
||||
|
Loading…
Reference in New Issue
Block a user