From fa701b8c065251d242342b86a54d91826d2290a0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 19 Feb 2010 18:09:08 +0000 Subject: change PropertyChange from a bitfield into a real object, with all the many widespread changes that causes git-svn-id: svn://localhost/ardour2/branches/3.0@6701 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/ardour.h | 9 +- libs/ardour/ardour/audioplaylist.h | 4 +- libs/ardour/ardour/audioregion.h | 24 +- libs/ardour/ardour/crossfade.h | 15 +- libs/ardour/ardour/diskstream.h | 2 +- libs/ardour/ardour/internal_send.h | 2 +- libs/ardour/ardour/location.h | 2 +- libs/ardour/ardour/midi_model.h | 10 +- libs/ardour/ardour/midi_playlist.h | 2 +- libs/ardour/ardour/midi_region.h | 3 - libs/ardour/ardour/playlist.h | 8 +- libs/ardour/ardour/region.h | 24 +- libs/ardour/ardour/route_group.h | 3 - libs/ardour/ardour/session.h | 4 +- libs/ardour/ardour/session_object.h | 8 +- libs/ardour/ardour/tempo.h | 2 - libs/ardour/audio_playlist.cc | 27 ++- libs/ardour/audioregion.cc | 124 +++-------- libs/ardour/crossfade.cc | 69 ++++-- libs/ardour/diskstream.cc | 2 +- libs/ardour/globals.cc | 51 ++++- libs/ardour/internal_send.cc | 8 +- libs/ardour/midi_model.cc | 10 +- libs/ardour/midi_playlist.cc | 13 +- libs/ardour/midi_region.cc | 36 +-- libs/ardour/playlist.cc | 42 ++-- libs/ardour/region.cc | 277 +++++++----------------- libs/ardour/region_factory.cc | 61 ++---- libs/ardour/route_group.cc | 21 +- libs/ardour/session.cc | 10 +- libs/ardour/session_object.cc | 18 +- libs/ardour/session_state.cc | 2 +- libs/ardour/tempo.cc | 28 +-- libs/evoral/evoral/midi_events.h | 4 +- libs/pbd/pbd/properties.h | 116 +++++++--- libs/pbd/pbd/stateful.h | 9 +- libs/pbd/property.cc | 19 -- libs/pbd/stateful.cc | 12 +- libs/pbd/wscript | 1 - libs/surfaces/mackie/mackie_control_protocol.cc | 6 +- libs/surfaces/mackie/mackie_control_protocol.h | 2 +- libs/surfaces/mackie/route_signal.cc | 5 +- 42 files changed, 466 insertions(+), 629 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index f608db5b7e..2b1f7bbb04 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -53,6 +53,9 @@ namespace ARDOUR { void init_post_engine (); int cleanup (); bool no_auto_connect (); + void make_property_quarks (); + + extern PBD::PropertyChange bounds_change; std::string get_ardour_revision (); extern const char* const ardour_config_info; @@ -65,12 +68,6 @@ namespace ARDOUR { return (microseconds_t) jack_get_time(); } - extern PBD::PropertyChange StartChanged; - extern PBD::PropertyChange LengthChanged; - extern PBD::PropertyChange PositionChanged; - extern PBD::PropertyChange NameChanged; - extern PBD::PropertyChange BoundsChanged; - static const double SHUTTLE_FRACT_SPEED1=0.48412291827; /* derived from A1,A2 */ void setup_fpu (); diff --git a/libs/ardour/ardour/audioplaylist.h b/libs/ardour/ardour/audioplaylist.h index b5df4cfabb..b53f3c1f73 100644 --- a/libs/ardour/ardour/audioplaylist.h +++ b/libs/ardour/ardour/audioplaylist.h @@ -79,8 +79,8 @@ class AudioPlaylist : public ARDOUR::Playlist XMLNode& state (bool full_state); void dump () const; - bool region_changed (PBD::PropertyChange, boost::shared_ptr); - void crossfade_changed (PBD::PropertyChange); + bool region_changed (const PBD::PropertyChange&, boost::shared_ptr); + void crossfade_changed (const PBD::PropertyChange&); void add_crossfade (boost::shared_ptr); void source_offset_changed (boost::shared_ptr region); diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h index 711c8030bd..ec9a64002f 100644 --- a/libs/ardour/ardour/audioregion.h +++ b/libs/ardour/ardour/audioregion.h @@ -44,6 +44,17 @@ namespace Properties { extern PBD::PropertyDescriptor fade_in_active; extern PBD::PropertyDescriptor fade_out_active; extern PBD::PropertyDescriptor scale_amplitude; + extern PBD::PropertyDescriptor scale_amplitude; + + /* the envelope and fades are not scalar items and so + currently (2010/02) are not stored using Property. + However, these descriptors enable us to notify + about changes to them via PropertyChange. + */ + + extern PBD::PropertyDescriptor envelope; + extern PBD::PropertyDescriptor fade_in; + extern PBD::PropertyDescriptor fade_out; } class Route; @@ -58,14 +69,6 @@ class AudioRegion : public Region public: static void make_property_quarks (); - static PBD::PropertyChange FadeInChanged; - static PBD::PropertyChange FadeOutChanged; - static PBD::PropertyChange FadeInActiveChanged; - static PBD::PropertyChange FadeOutActiveChanged; - static PBD::PropertyChange EnvelopeActiveChanged; - static PBD::PropertyChange ScaleAmplitudeChanged; - static PBD::PropertyChange EnvelopeChanged; - ~AudioRegion(); void copy_settings (boost::shared_ptr); @@ -185,8 +188,7 @@ class AudioRegion : public Region AudioRegion (const SourceList &); AudioRegion (boost::shared_ptr, frameoffset_t offset = 0, bool offset_relative = true); AudioRegion (boost::shared_ptr, const SourceList&); - AudioRegion (boost::shared_ptr, const XMLNode&); - AudioRegion (SourceList &, const XMLNode&); + AudioRegion (SourceList &); private: PBD::Property _envelope_active; @@ -197,7 +199,7 @@ class AudioRegion : public Region PBD::Property _scale_amplitude; void register_properties (); - PBD::PropertyChange set_property (const PBD::PropertyBase& prop); + bool set_property (const PBD::PropertyBase& prop); void post_set (); void init (); diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h index 15b9b3d2a7..7b5ac28379 100644 --- a/libs/ardour/ardour/crossfade.h +++ b/libs/ardour/ardour/crossfade.h @@ -34,6 +34,11 @@ #include "evoral/Curve.hpp" namespace ARDOUR { + namespace Properties { + /* "active" is defined elsewhere but we use it with crossfade also */ + extern PBD::PropertyDescriptor active; + extern PBD::PropertyDescriptor follow_overlap; + } class AudioRegion; class Playlist; @@ -71,6 +76,8 @@ class Crossfade : public ARDOUR::AudioRegion Crossfade (const Playlist&, XMLNode&); virtual ~Crossfade(); + static void make_property_quarks (); + bool operator== (const ARDOUR::Crossfade&); XMLNode& get_state (void); @@ -106,7 +113,6 @@ class Crossfade : public ARDOUR::AudioRegion framecnt_t overlap_length() const; PBD::Signal1 > Invalidated; - PBD::Signal1 StateChanged; bool covers (framecnt_t frame) const { return _position <= frame && frame < _position + _length; @@ -136,9 +142,6 @@ class Crossfade : public ARDOUR::AudioRegion static framecnt_t short_xfade_length() { return _short_xfade_length; } static void set_short_xfade_length (framecnt_t n); - static PBD::PropertyChange ActiveChanged; - static PBD::PropertyChange FollowOverlapChanged; - private: friend struct CrossfadeComparePtr; friend class AudioPlaylist; @@ -147,11 +150,11 @@ class Crossfade : public ARDOUR::AudioRegion boost::shared_ptr _in; boost::shared_ptr _out; - bool _active; + PBD::Property _active; + PBD::Property _follow_overlap; bool _in_update; OverlapType overlap_type; AnchorPoint _anchor_point; - bool _follow_overlap; bool _fixed; int32_t layer_relation; diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index 90bcf4067a..48a9c2776b 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -206,7 +206,7 @@ class Diskstream : public SessionObject /* XXX fix this redundancy ... */ - virtual void playlist_changed (PBD::PropertyChange); + virtual void playlist_changed (const PBD::PropertyChange&); virtual void playlist_deleted (boost::weak_ptr); virtual void playlist_ranges_moved (std::list< Evoral::RangeMove > const &); diff --git a/libs/ardour/ardour/internal_send.h b/libs/ardour/ardour/internal_send.h index 2171462ab7..243106fb54 100644 --- a/libs/ardour/ardour/internal_send.h +++ b/libs/ardour/ardour/internal_send.h @@ -56,7 +56,7 @@ class InternalSend : public Send PBD::ScopedConnection connect_c; void send_to_going_away (); - void send_to_name_changed (); + void send_to_property_changed (const PBD::PropertyChange&); int connect_when_legal (); int set_our_state (XMLNode const &, int); }; diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index d93ffeec4a..938177b102 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -179,7 +179,7 @@ class Locations : public PBD::StatefulDestructible PBD::Signal0 changed; PBD::Signal1 added; PBD::Signal1 removed; - PBD::Signal1 StateChanged; + PBD::Signal1 StateChanged; template void apply (T& obj, void (T::*method)(LocationList&)) { Glib::Mutex::Lock lm (lock); diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index 77f5798898..fcd285f98c 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -90,7 +90,7 @@ public: }; - /** PropertyChange note properties. + /** Change note properties. * More efficient than DeltaCommand and has the important property that * it leaves the objects in the MidiModel (Notes) the same, thus * enabling selection and other state to persist across command @@ -126,7 +126,7 @@ public: boost::shared_ptr _model; const std::string _name; - struct NotePropertyChange { + struct NoteChange { DiffCommand::Property property; boost::shared_ptr< Evoral::Note > note; union { @@ -139,11 +139,11 @@ public: }; }; - typedef std::list ChangeList; + typedef std::list ChangeList; ChangeList _changes; - XMLNode &marshal_change(const NotePropertyChange&); - NotePropertyChange unmarshal_change(XMLNode *xml_note); + XMLNode &marshal_change(const NoteChange&); + NoteChange unmarshal_change(XMLNode *xml_note); }; MidiModel::DeltaCommand* new_delta_command(const std::string name="midi edit"); diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index 46aea9f0b4..ccadb39e92 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -74,7 +74,7 @@ protected: private: void dump () const; - bool region_changed (PBD::PropertyChange, boost::shared_ptr); + bool region_changed (const PBD::PropertyChange&, boost::shared_ptr); NoteMode _note_mode; diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index d892e5837f..671e4fca43 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -96,11 +96,8 @@ class MidiRegion : public Region private: friend class RegionFactory; - MidiRegion (boost::shared_ptr); MidiRegion (const SourceList&); MidiRegion (boost::shared_ptr, frameoffset_t offset = 0, bool offset_relative = true); - MidiRegion (boost::shared_ptr, const XMLNode&); - MidiRegion (const SourceList &, const XMLNode&); private: framecnt_t _read_at (const SourceList&, Evoral::EventSink& dst, diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 9cd02dec1e..7213c99397 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -249,15 +249,15 @@ class Playlist : public SessionObject void notify_length_changed (); void notify_layering_changed (); void notify_contents_changed (); - void notify_state_changed (PBD::PropertyChange); + void notify_state_changed (const PBD::PropertyChange&); void notify_region_moved (boost::shared_ptr); void mark_session_dirty(); - void region_changed_proxy (PBD::PropertyChange, boost::weak_ptr); - virtual bool region_changed (PBD::PropertyChange, boost::shared_ptr); + void region_changed_proxy (const PBD::PropertyChange&, boost::weak_ptr); + virtual bool region_changed (const PBD::PropertyChange&, boost::shared_ptr); - void region_bounds_changed (PBD::PropertyChange, boost::shared_ptr); + void region_bounds_changed (const PBD::PropertyChange&, boost::shared_ptr); void region_deleted (boost::shared_ptr); void sort_regions (); diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 60ccf66984..fb827e308d 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -89,16 +89,7 @@ class Region MusicTime }; - static PBD::PropertyChange FadeChanged; - static PBD::PropertyChange SyncOffsetChanged; - static PBD::PropertyChange MuteChanged; - static PBD::PropertyChange OpacityChanged; - static PBD::PropertyChange LockChanged; - static PBD::PropertyChange LayerChanged; - static PBD::PropertyChange HiddenChanged; - - PBD::Signal1 StateChanged; - static PBD::Signal1 > RegionPropertyChanged; + static PBD::Signal2, const PBD::PropertyChange&> RegionPropertyChanged; void unlock_property_changes () { _no_property_changes = false; } void block_property_changes () { _no_property_changes = true; } @@ -281,8 +272,6 @@ class Region protected: friend class RegionFactory; - /** Construct a region from a single source */ - Region (boost::shared_ptr src); /** Construct a region from multiple sources*/ Region (const SourceList& srcs); /** Construct a region from another region, at an offset within that region */ @@ -292,16 +281,11 @@ class Region /** normal Region copy constructor */ Region (boost::shared_ptr); - /** Construct a region from 1 source and XML state */ - Region (boost::shared_ptr src, const XMLNode&); - /** Construct a region from multiple sources and XML state */ - Region (const SourceList& srcs, const XMLNode&); - /** Constructor for derived types only */ Region (Session& s, framepos_t start, framecnt_t length, const std::string& name, DataType); protected: - void send_change (PBD::PropertyChange); + void send_change (const PBD::PropertyChange&); void trim_to_internal (framepos_t position, framecnt_t length, void *src); virtual void set_position_internal (framepos_t pos, bool allow_bbt_recompute); @@ -351,7 +335,7 @@ class Region AnalysisFeatureList _transients; bool _valid_transients; mutable uint64_t _read_data_count; ///< modified in read() - PBD::PropertyChange _pending_changed; + PBD::PropertyChange _pending_changed; uint64_t _last_layer_op; ///< timestamp Glib::Mutex _lock; SourceList _sources; @@ -365,7 +349,7 @@ class Region virtual int _set_state (const XMLNode&, int version, PBD::PropertyChange& what_changed, bool send_signal); - PBD::PropertyChange set_property (const PBD::PropertyBase&); + bool set_property (const PBD::PropertyBase&); void register_properties (); private: diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index 820295b54a..f3109a707d 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -131,9 +131,6 @@ class RouteGroup : public SessionObject PBD::Signal0 changed; PBD::Signal1 FlagsChanged; - static PBD::PropertyChange FlagsChange; - static PBD::PropertyChange PropertiesChange; - XMLNode& get_state (); int set_state (const XMLNode&, int version); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 154c5d0078..9294d56fcc 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1210,7 +1210,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void xrun_recovery (); TempoMap *_tempo_map; - void tempo_map_changed (PBD::PropertyChange); + void tempo_map_changed (const PBD::PropertyChange&); /* edit/mix groups */ @@ -1257,7 +1257,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi RegionList regions; void add_region (boost::shared_ptr); - void region_changed (PBD::PropertyChange, boost::weak_ptr); + void region_changed (const PBD::PropertyChange&, boost::weak_ptr); void remove_region (boost::weak_ptr); int load_regions (const XMLNode& node); diff --git a/libs/ardour/ardour/session_object.h b/libs/ardour/ardour/session_object.h index 1f81cf6fd2..d18a1f9d41 100644 --- a/libs/ardour/ardour/session_object.h +++ b/libs/ardour/ardour/session_object.h @@ -48,7 +48,7 @@ class SessionObject : public SessionHandleRef, public PBD::StatefulDestructible SessionObject (Session& session, const std::string& name) : SessionHandleRef (session) - , _name (Properties::name, PBD::PropertyChange (0), name) + , _name (Properties::name, name) { add_property (_name); } @@ -56,18 +56,16 @@ class SessionObject : public SessionHandleRef, public PBD::StatefulDestructible Session& session() const { return _session; } std::string name() const { return _name; } - PBD::PropertyChange set_property (const PBD::PropertyBase& prop); + bool set_property (const PBD::PropertyBase& prop); virtual bool set_name (const std::string& str) { if (_name != str) { _name = str; - NameChanged(); + PropertyChanged (PBD::PropertyChange (Properties::name)); } return true; } - PBD::Signal0 NameChanged; - protected: PBD::Property _name; }; diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index 5c2d3d6918..596444173f 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -258,8 +258,6 @@ class TempoMap : public PBD::StatefulDestructible nframes_t frame_rate () const { return _frame_rate; } - PBD::Signal1 StateChanged; - private: static Tempo _default_tempo; static Meter _default_meter; diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 60c7d4bdc3..6e8b35a072 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -525,7 +525,7 @@ AudioPlaylist::add_crossfade (boost::shared_ptr xfade) _crossfades.push_back (xfade); xfade->Invalidated.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_invalidated, this, _1)); - xfade->StateChanged.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_changed, this, _1)); + xfade->PropertyChanged.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_changed, this, _1)); notify_crossfade_added (xfade); } @@ -581,7 +581,7 @@ AudioPlaylist::set_state (const XMLNode& node, int version) boost::shared_ptr xfade = boost::shared_ptr (new Crossfade (*((const Playlist *)this), *child)); _crossfades.push_back (xfade); xfade->Invalidated.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_invalidated, this, _1)); - xfade->StateChanged.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_changed, this, _1)); + xfade->PropertyChanged.connect_same_thread (*this, boost::bind (&AudioPlaylist::crossfade_changed, this, _1)); NewCrossfade(xfade); } @@ -726,7 +726,7 @@ AudioPlaylist::destroy_region (boost::shared_ptr region) } void -AudioPlaylist::crossfade_changed (PropertyChange) +AudioPlaylist::crossfade_changed (const PropertyChange&) { if (in_flush || in_set_state) { return; @@ -742,24 +742,27 @@ AudioPlaylist::crossfade_changed (PropertyChange) } bool -AudioPlaylist::region_changed (PropertyChange what_changed, boost::shared_ptr region) +AudioPlaylist::region_changed (const PropertyChange& what_changed, boost::shared_ptr region) { if (in_flush || in_set_state) { return false; } - PropertyChange our_interests = PropertyChange (AudioRegion::FadeInChanged| - AudioRegion::FadeOutChanged| - AudioRegion::FadeInActiveChanged| - AudioRegion::FadeOutActiveChanged| - AudioRegion::EnvelopeActiveChanged| - AudioRegion::ScaleAmplitudeChanged| - AudioRegion::EnvelopeChanged); + PropertyChange our_interests; + + our_interests.add (Properties::fade_in_active); + our_interests.add (Properties::fade_out_active); + our_interests.add (Properties::scale_amplitude); + our_interests.add (Properties::envelope_active); + our_interests.add (Properties::envelope); + our_interests.add (Properties::fade_in); + our_interests.add (Properties::fade_out); + bool parent_wants_notify; parent_wants_notify = Playlist::region_changed (what_changed, region); - if ((parent_wants_notify || (what_changed & our_interests))) { + if (parent_wants_notify || (what_changed.contains (our_interests))) { notify_contents_changed (); } diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index f1af3b6fab..21fda237cb 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -89,12 +89,12 @@ AudioRegion::register_properties () } #define AUDIOREGION_STATE_DEFAULT \ - _envelope_active (Properties::envelope_active, EnvelopeActiveChanged, false) \ - , _default_fade_in (Properties::default_fade_in, FadeInChanged, true) \ - , _default_fade_out (Properties::default_fade_out, FadeOutChanged, true) \ - , _fade_in_active (Properties::fade_in_active, FadeInActiveChanged, true) \ - , _fade_out_active (Properties::fade_out_active, FadeOutActiveChanged, true) \ - , _scale_amplitude (Properties::scale_amplitude, ScaleAmplitudeChanged, 1.0) + _envelope_active (Properties::envelope_active, false) \ + , _default_fade_in (Properties::default_fade_in, true) \ + , _default_fade_out (Properties::default_fade_out, true) \ + , _fade_in_active (Properties::fade_in_active, true) \ + , _fade_out_active (Properties::fade_out_active, true) \ + , _scale_amplitude (Properties::scale_amplitude, 0.0) #define AUDIOREGION_COPY_STATE(other) \ _envelope_active (other->_envelope_active) \ @@ -104,14 +104,6 @@ AudioRegion::register_properties () , _fade_out_active (other->_fade_out_active) \ , _scale_amplitude (other->_scale_amplitude) -PropertyChange AudioRegion::FadeInChanged = PBD::new_change(); -PropertyChange AudioRegion::FadeOutChanged = PBD::new_change(); -PropertyChange AudioRegion::FadeInActiveChanged = PBD::new_change(); -PropertyChange AudioRegion::FadeOutActiveChanged = PBD::new_change(); -PropertyChange AudioRegion::EnvelopeActiveChanged = PBD::new_change(); -PropertyChange AudioRegion::ScaleAmplitudeChanged = PBD::new_change(); -PropertyChange AudioRegion::EnvelopeChanged = PBD::new_change(); - /* a Session will reset these to its chosen defaults by calling AudioRegion::set_default_fade() */ void @@ -142,26 +134,7 @@ AudioRegion::AudioRegion (Session& s, framepos_t start, framecnt_t len, std::str assert (_sources.size() == _master_sources.size()); } -/** Basic AudioRegion constructor (one channel) */ -AudioRegion::AudioRegion (boost::shared_ptr src) - : Region (boost::static_pointer_cast(src)) - , AUDIOREGION_STATE_DEFAULT - , _automatable(src->session()) - , _fade_in (new AutomationList(Evoral::Parameter(FadeInAutomation))) - , _fade_out (new AutomationList(Evoral::Parameter(FadeOutAutomation))) - , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation))) - , _fade_in_suspended (0) - , _fade_out_suspended (0) -{ - init (); - - /* XXX why is this set here ? - set in a property list given to RegionFactory */ - _external = true; - - assert (_sources.size() == _master_sources.size()); -} - -/** Basic AudioRegion constructor (many channels) */ +/** Basic AudioRegion constructor */ AudioRegion::AudioRegion (const SourceList& srcs) : Region (srcs) , AUDIOREGION_STATE_DEFAULT @@ -219,26 +192,8 @@ AudioRegion::AudioRegion (boost::shared_ptr other, const Sour assert (_sources.size() == _master_sources.size()); } -AudioRegion::AudioRegion (boost::shared_ptr src, const XMLNode& node) - : Region (src, node) - , AUDIOREGION_STATE_DEFAULT - , _automatable(src->session()) - , _fade_in (new AutomationList(Evoral::Parameter(FadeInAutomation))) - , _fade_out (new AutomationList(Evoral::Parameter(FadeOutAutomation))) - , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation))) -{ - init (); - - if (set_state (node, Stateful::loading_state_version)) { - throw failed_constructor(); - } - - assert(_type == DataType::AUDIO); - assert (_sources.size() == _master_sources.size()); -} - -AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node) - : Region (srcs, node) +AudioRegion::AudioRegion (SourceList& srcs) + : Region (srcs) , AUDIOREGION_STATE_DEFAULT , _automatable(srcs[0]->session()) , _fade_in (new AutomationList(Evoral::Parameter(FadeInAutomation))) @@ -249,12 +204,7 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node) { init (); - if (set_state (node, Stateful::loading_state_version)) { - throw failed_constructor(); - } - assert(_type == DataType::AUDIO); - connect_to_analysis_changed (); assert (_sources.size() == _master_sources.size()); } @@ -327,7 +277,7 @@ AudioRegion::set_envelope_active (bool yn) { if (envelope_active() != yn) { _envelope_active = yn; - send_change (EnvelopeActiveChanged); + send_change (PropertyChange (Properties::envelope_active)); } } @@ -650,8 +600,7 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ float a = atof (prop->value().c_str()); if (a != _scale_amplitude) { _scale_amplitude = a; - what_changed = PropertyChange (what_changed|ScaleAmplitudeChanged); - cerr << _name << " amp changed\n"; + what_changed.add (Properties::scale_amplitude); } } @@ -730,7 +679,6 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ thaw (); if (send) { - cerr << _name << ": audio final change: " << hex << what_changed << dec << endl; send_change (what_changed); } @@ -741,54 +689,52 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ return 0; } -PropertyChange +bool AudioRegion::set_property (const PropertyBase& prop) { - PropertyChange c = PropertyChange (0); - DEBUG_TRACE (DEBUG::Properties, string_compose ("audio region %1 set property %2\n", _name.val(), prop.property_name())); if (prop == Properties::envelope_active.id) { bool val = dynamic_cast*>(&prop)->val(); if (val != _envelope_active) { _envelope_active = val; - c = EnvelopeActiveChanged; + return true; } } else if (prop == Properties::default_fade_in.id) { bool val = dynamic_cast*>(&prop)->val(); if (val != _default_fade_in) { _default_fade_in = val; - c = FadeInChanged; + return true; } } else if (prop == Properties::default_fade_out.id) { bool val = dynamic_cast*>(&prop)->val(); if (val != _default_fade_out) { _default_fade_out = val; - c = FadeOutChanged; + return true; } } else if (prop == Properties::fade_in_active.id) { bool val = dynamic_cast*>(&prop)->val(); if (val != _fade_in_active) { _fade_in_active = val; - c = FadeInActiveChanged; + return true; } } else if (prop == Properties::fade_out_active.id) { bool val = dynamic_cast*>(&prop)->val(); if (val != _fade_out_active) { _fade_out_active = val; - c = FadeOutChanged; + return true; } } else if (prop == Properties::scale_amplitude.id) { gain_t val = dynamic_cast*>(&prop)->val(); if (val != _scale_amplitude) { _scale_amplitude = val; - c = ScaleAmplitudeChanged; + return true; } } else { return Region::set_property (prop); } - - return c; + + return false; } int @@ -817,7 +763,7 @@ AudioRegion::set_fade_in (boost::shared_ptr f) *_fade_in = *f; _fade_in->thaw (); - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } void @@ -884,7 +830,7 @@ AudioRegion::set_fade_out (boost::shared_ptr f) *_fade_out = *f; _fade_out->thaw (); - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } void @@ -953,7 +899,7 @@ AudioRegion::set_fade_in_length (framecnt_t len) if (changed) { _default_fade_in = false; - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } } @@ -968,7 +914,7 @@ AudioRegion::set_fade_out_length (framecnt_t len) if (changed) { _default_fade_out = false; - send_change (FadeOutChanged); + send_change (PropertyChange (Properties::fade_out)); } } @@ -980,7 +926,7 @@ AudioRegion::set_fade_in_active (bool yn) } _fade_in_active = yn; - send_change (FadeInActiveChanged); + send_change (PropertyChange (Properties::fade_in_active)); } void @@ -990,7 +936,7 @@ AudioRegion::set_fade_out_active (bool yn) return; } _fade_out_active = yn; - send_change (FadeOutActiveChanged); + send_change (PropertyChange (Properties::fade_out_active)); } bool @@ -1050,12 +996,12 @@ AudioRegion::recompute_at_end () if (_fade_in->back()->when > _length) { _fade_in->extend_to (_length); - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } if (_fade_out->back()->when > _length) { _fade_out->extend_to (_length); - send_change (FadeOutChanged); + send_change (PropertyChange (Properties::fade_out)); } } @@ -1068,12 +1014,12 @@ AudioRegion::recompute_at_start () if (_fade_in->back()->when > _length) { _fade_in->extend_to (_length); - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } if (_fade_out->back()->when > _length) { _fade_out->extend_to (_length); - send_change (FadeOutChanged); + send_change (PropertyChange (Properties::fade_out)); } } @@ -1212,7 +1158,7 @@ AudioRegion::set_scale_amplitude (gain_t g) /* tell everybody else */ - send_change (ScaleAmplitudeChanged); + send_change (PropertyChange (Properties::scale_amplitude)); } void @@ -1282,25 +1228,25 @@ AudioRegion::normalize_to (float target_dB) /* tell everybody else */ - send_change (ScaleAmplitudeChanged); + send_change (PropertyChange (Properties::scale_amplitude)); } void AudioRegion::fade_in_changed () { - send_change (FadeInChanged); + send_change (PropertyChange (Properties::fade_in)); } void AudioRegion::fade_out_changed () { - send_change (FadeOutChanged); + send_change (PropertyChange (Properties::fade_out)); } void AudioRegion::envelope_changed () { - send_change (EnvelopeChanged); + send_change (PropertyChange (Properties::envelope)); } void diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc index dc84352f4e..8275876fe8 100644 --- a/libs/ardour/crossfade.cc +++ b/libs/ardour/crossfade.cc @@ -37,8 +37,6 @@ using namespace ARDOUR; using namespace PBD; framecnt_t Crossfade::_short_xfade_length = 0; -PropertyChange Crossfade::ActiveChanged = new_change(); -PropertyChange Crossfade::FollowOverlapChanged = new_change(); /* XXX if and when we ever implement parallel processing of the process() callback, these will need to be handled on a per-thread basis. @@ -47,6 +45,24 @@ PropertyChange Crossfade::FollowOverlapChanged = new_change(); Sample* Crossfade::crossfade_buffer_out = 0; Sample* Crossfade::crossfade_buffer_in = 0; + +#define CROSSFADE_DEFAULT_PROPERTIES \ + _active (Properties::active, _session.config.get_xfades_active ()) \ + , _follow_overlap (Properties::follow_overlap, false) + + +namespace ARDOUR { + namespace Properties { + PropertyDescriptor follow_overlap; + } +} + +void +Crossfade::make_property_quarks () +{ + Properties::follow_overlap.id = g_quark_from_static_string (X_("follow-overlap")); +} + void Crossfade::set_buffer_size (framecnt_t sz) { @@ -72,26 +88,25 @@ Crossfade::Crossfade (boost::shared_ptr in, boost::shared_ptr