summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/audioregion.h1
-rw-r--r--libs/ardour/ardour/region.h1
-rw-r--r--libs/ardour/audioregion.cc48
-rw-r--r--libs/ardour/region.cc103
-rw-r--r--libs/pbd/pbd/properties.h6
-rw-r--r--libs/pbd/pbd/property_basics.h3
-rw-r--r--libs/pbd/pbd/sequence_property.h5
-rw-r--r--libs/pbd/pbd/stateful.h5
-rw-r--r--libs/pbd/stateful.cc12
9 files changed, 27 insertions, 157 deletions
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index 59876d6e56..f9c13b2bbe 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -199,7 +199,6 @@ class AudioRegion : public Region
PBD::Property<gain_t> _scale_amplitude;
void register_properties ();
- bool set_property (const PBD::PropertyBase& prop);
void post_set ();
void init ();
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index 09dd8f203c..a44b3fcb46 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -344,7 +344,6 @@ class Region
virtual int _set_state (const XMLNode&, int version, PBD::PropertyChange& what_changed, bool send_signal);
- bool set_property (const PBD::PropertyBase&);
void register_properties ();
private:
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 3430eb5128..be6cce251a 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -691,54 +691,6 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_
return 0;
}
-bool
-AudioRegion::set_property (const PropertyBase& prop)
-{
- DEBUG_TRACE (DEBUG::Properties, string_compose ("audio region %1 set property %2\n", _name.val(), prop.property_name()));
-
- if (prop == Properties::envelope_active.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _envelope_active) {
- _envelope_active = val;
- return true;
- }
- } else if (prop == Properties::default_fade_in.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _default_fade_in) {
- _default_fade_in = val;
- return true;
- }
- } else if (prop == Properties::default_fade_out.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _default_fade_out) {
- _default_fade_out = val;
- return true;
- }
- } else if (prop == Properties::fade_in_active.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _fade_in_active) {
- _fade_in_active = val;
- return true;
- }
- } else if (prop == Properties::fade_out_active.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _fade_out_active) {
- _fade_out_active = val;
- return true;
- }
- } else if (prop == Properties::scale_amplitude.property_id) {
- gain_t val = dynamic_cast<const PropertyTemplate<gain_t>*>(&prop)->val();
- if (val != _scale_amplitude) {
- _scale_amplitude = val;
- return true;
- }
- } else {
- return Region::set_property (prop);
- }
-
- return false;
-}
-
int
AudioRegion::set_state (const XMLNode& node, int version)
{
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index bb9338d98d..8625b17a8a 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -1498,109 +1498,6 @@ Region::use_sources (SourceList const & s)
}
}
-
-bool
-Region::set_property (const PropertyBase& prop)
-{
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 set property %2\n", _name.val(), prop.property_name()));
-
- if (prop == Properties::muted.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _muted) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 muted changed from %2 to %3",
- _name.val(), _muted.val(), val));
- _muted = val;
- return true;
- }
- } else if (prop == Properties::opaque.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _opaque) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 opaque changed from %2 to %3",
- _name.val(), _opaque.val(), val));
- _opaque = val;
- return true;
- }
- } else if (prop == Properties::locked.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _locked) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 locked changed from %2 to %3",
- _name.val(), _locked.val(), val));
- _locked = val;
- return true;
- }
- } else if (prop == Properties::automatic.property_id) {
- _automatic = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::whole_file.property_id) {
- _whole_file = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::import.property_id) {
- _import = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::external.property_id) {
- _external = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::sync_marked.property_id) {
- _sync_marked = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::left_of_split.property_id) {
- _left_of_split = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::right_of_split.property_id) {
- _right_of_split = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::hidden.property_id) {
- bool val = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- if (val != _hidden) {
- _hidden = val;
- return true;
- }
- } else if (prop == Properties::position_locked.property_id) {
- _position_locked = dynamic_cast<const PropertyTemplate<bool>*>(&prop)->val();
- } else if (prop == Properties::start.property_id) {
- framepos_t val = dynamic_cast<const PropertyTemplate<framepos_t>*>(&prop)->val();
- if (val != _start) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 start changed from %2 to %3",
- _name.val(), _start, val));
- _start = val;
- return true;
- }
- } else if (prop == Properties::length.property_id) {
- framecnt_t val = dynamic_cast<const PropertyTemplate<framecnt_t>* > (&prop)->val();
- if (val != _length) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 length changed from %2 to %3",
- _name.val(), _length, val));
- _length = val;
- return true;
- }
- } else if (prop == Properties::position.property_id) {
- framepos_t val = dynamic_cast<const PropertyTemplate<framepos_t>*>(&prop)->val();
- if (val != _position) {
- DEBUG_TRACE (DEBUG::Properties, string_compose ("region %1 position changed from %2 to %3",
- _name.val(), _position, val));
- _position = val;
- return true;
- }
- } else if (prop == Properties::sync_position.property_id) {
- framepos_t val = dynamic_cast<const PropertyTemplate<framepos_t>*>(&prop)->val();
- if (val != _sync_position) {
- _sync_position = val;
- return true;
- }
- } else if (prop == Properties::layer.property_id) {
- layer_t val = dynamic_cast<const PropertyTemplate<layer_t>*>(&prop)->val();
- if (val != _layer) {
- _layer = val;
- return true;
- }
- } else if (prop == Properties::ancestral_start.property_id) {
- _ancestral_start = dynamic_cast<const PropertyTemplate<framepos_t>*>(&prop)->val();
- } else if (prop == Properties::ancestral_length.property_id) {
- _ancestral_length = dynamic_cast<const PropertyTemplate<framecnt_t>*>(&prop)->val();
- } else if (prop == Properties::stretch.property_id) {
- _stretch = dynamic_cast<const PropertyTemplate<float>*>(&prop)->val();
- } else if (prop == Properties::shift.property_id) {
- _shift = dynamic_cast<const PropertyTemplate<float>*>(&prop)->val();
- } else {
- return SessionObject::set_property (prop);
- }
-
- return false;
-}
-
PropertyList*
Region::property_factory (const XMLNode& history_node) const
{
diff --git a/libs/pbd/pbd/properties.h b/libs/pbd/pbd/properties.h
index 691ab9c4ad..31197030f9 100644
--- a/libs/pbd/pbd/properties.h
+++ b/libs/pbd/pbd/properties.h
@@ -118,6 +118,12 @@ public:
}
bool changed () const { return _have_old; }
+ void set_state_from_property (PropertyBase const * p) {
+ T v = dynamic_cast<const PropertyTemplate<T>* > (p)->val ();
+ if (v != _current) {
+ set (v);
+ }
+ }
protected:
/** Constructs a PropertyTemplate with a default
diff --git a/libs/pbd/pbd/property_basics.h b/libs/pbd/pbd/property_basics.h
index 251d71dc66..1baa14ac64 100644
--- a/libs/pbd/pbd/property_basics.h
+++ b/libs/pbd/pbd/property_basics.h
@@ -91,6 +91,9 @@ public:
virtual void add_state_to_owner_state (XMLNode&) const = 0;
virtual bool changed() const = 0;
+ /** Set the value of this property from another */
+ virtual void set_state_from_property (PropertyBase const *) = 0;
+
const gchar*property_name () const { return g_quark_to_string (_property_id); }
PropertyID property_id () const { return _property_id; }
diff --git a/libs/pbd/pbd/sequence_property.h b/libs/pbd/pbd/sequence_property.h
index 8bbc7c77d2..d9ef6255d2 100644
--- a/libs/pbd/pbd/sequence_property.h
+++ b/libs/pbd/pbd/sequence_property.h
@@ -123,6 +123,11 @@ class SequenceProperty : public PropertyBase
_change.removed.clear ();
}
+ void set_state_from_property (PropertyBase const * p) {
+ const ChangeRecord& change (dynamic_cast<const SequenceProperty*> (p)->change ());
+ update (change);
+ }
+
/** Given a record of changes to this property, pass it to a callback that will
* update the property in some appropriate way.
*
diff --git a/libs/pbd/pbd/stateful.h b/libs/pbd/pbd/stateful.h
index 5585b5c13b..4352e88201 100644
--- a/libs/pbd/pbd/stateful.h
+++ b/libs/pbd/pbd/stateful.h
@@ -48,10 +48,7 @@ class Stateful {
virtual XMLNode& get_state (void) = 0;
virtual int set_state (const XMLNode&, int version) = 0;
- /* derived types do not have to implement this, but probably should
- give it serious attention.
- */
- virtual bool set_property (const PropertyBase&) { return false; }
+ virtual bool set_property (const PropertyBase&);
PropertyChange set_properties (const PropertyList&);
const OwnedPropertyList& properties() const { return *_properties; }
diff --git a/libs/pbd/stateful.cc b/libs/pbd/stateful.cc
index 89b22edd24..36a0d74778 100644
--- a/libs/pbd/stateful.cc
+++ b/libs/pbd/stateful.cc
@@ -299,4 +299,16 @@ Stateful::changed() const
return false;
}
+bool
+Stateful::set_property (const PropertyBase& prop)
+{
+ OwnedPropertyList::iterator i = _properties->find (prop.property_id());
+ if (i == _properties->end()) {
+ return false;
+ }
+
+ i->second->set_state_from_property (&prop);
+ return true;
+}
+
} // namespace PBD