From 6c052348b513719cf40893595fb82d46d55704cb Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Fri, 19 Oct 2018 20:02:44 -0500 Subject: [PATCH] (Source List) Region Tags (libardour part) Rough-in: Region-Tags. More correct implementation of tags property (libardour). Region Tags (libardour part) --- libs/ardour/ardour/region.h | 13 +++++++++++++ libs/ardour/ardour/session.h | 1 + libs/ardour/region.cc | 13 ++++++++++--- libs/ardour/session.cc | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 61a676f5a0..d676db1d1e 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -67,6 +67,7 @@ namespace Properties { LIBARDOUR_API extern PBD::PropertyDescriptor shift; LIBARDOUR_API extern PBD::PropertyDescriptor position_lock_style; LIBARDOUR_API extern PBD::PropertyDescriptor layering_index; + LIBARDOUR_API extern PBD::PropertyDescriptor tags; }; class Playlist; @@ -282,6 +283,17 @@ public: virtual boost::shared_ptr control (const Evoral::Parameter& id) const = 0; + /* tags */ + + std::string tags() const { return _tags; } + virtual bool set_tags (const std::string& str) { + if (_tags != str) { + _tags = str; + PropertyChanged (PBD::PropertyChange (Properties::tags)); + } + return true; + } + /* serialization */ XMLNode& get_state (); @@ -451,6 +463,7 @@ private: PBD::Property _shift; PBD::EnumProperty _position_lock_style; PBD::Property _layering_index; + PBD::Property _tags; samplecnt_t _last_length; samplepos_t _last_position; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index dac08af29b..11406c5ca0 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -780,6 +780,7 @@ public: int destroy_sources (std::list >); int remove_last_capture (); + void get_last_capture_sources (std::list >&); /** handlers should return 0 for "everything OK", and any other value for * "cannot setup audioengine". diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 4c20e2236a..94eb4ca27e 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -75,6 +75,7 @@ namespace ARDOUR { PBD::PropertyDescriptor shift; PBD::PropertyDescriptor position_lock_style; PBD::PropertyDescriptor layering_index; + PBD::PropertyDescriptor tags; } } @@ -134,7 +135,9 @@ Region::make_property_quarks () Properties::position_lock_style.property_id = g_quark_from_static_string (X_("positional-lock-style")); DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for position_lock_style = %1\n", Properties::position_lock_style.property_id)); Properties::layering_index.property_id = g_quark_from_static_string (X_("layering-index")); - DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for layering_index = %1\n", Properties::layering_index.property_id)); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for layering_index = %1\n", Properties::layering_index.property_id)); + Properties::tags.property_id = g_quark_from_static_string (X_("tags")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for tags = %1\n", Properties::tags.property_id)); } void @@ -167,6 +170,7 @@ Region::register_properties () add_property (_shift); add_property (_position_lock_style); add_property (_layering_index); + add_property (_tags); } #define REGION_DEFAULT_STATE(s,l) \ @@ -199,7 +203,8 @@ Region::register_properties () , _stretch (Properties::stretch, 1.0) \ , _shift (Properties::shift, 1.0) \ , _position_lock_style (Properties::position_lock_style, _type == DataType::AUDIO ? AudioTime : MusicTime) \ - , _layering_index (Properties::layering_index, 0) + , _layering_index (Properties::layering_index, 0) \ + , _tags (Properties::tags, "") #define REGION_COPY_STATE(other) \ _sync_marked (Properties::sync_marked, other->_sync_marked) \ @@ -233,7 +238,8 @@ Region::register_properties () , _stretch (Properties::stretch, other->_stretch) \ , _shift (Properties::shift, other->_shift) \ , _position_lock_style (Properties::position_lock_style, other->_position_lock_style) \ - , _layering_index (Properties::layering_index, other->_layering_index) + , _layering_index (Properties::layering_index, other->_layering_index) \ + , _tags (Properties::tags, other->_tags) /* derived-from-derived constructor (no sources in constructor) */ Region::Region (Session& s, samplepos_t start, samplecnt_t length, const string& name, DataType type) @@ -1982,3 +1988,4 @@ Region::latest_possible_sample () const return _position + (minlen - _start) - 1; } + diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index eb55e55508..4bb8742ed0 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -4824,6 +4824,25 @@ Session::remove_last_capture () return 0; } +void +Session::get_last_capture_sources (std::list >& srcs) +{ + boost::shared_ptr rl = routes.reader (); + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { + boost::shared_ptr tr = boost::dynamic_pointer_cast (*i); + if (!tr) { + continue; + } + + list >& l = tr->last_capture_sources(); + + if (!l.empty()) { + srcs.insert (srcs.end(), l.begin(), l.end()); + l.clear (); + } + } +} + /* Source Management */ void