From 6f8cd634501efd70711b148b4ac0e0ce2aa5cc95 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 19 Sep 2008 14:38:46 +0000 Subject: chris goddard's region list patch; port 2.X marker drag/move changes to 3.0; compilation fixes-post-evoral git-svn-id: svn://localhost/ardour2/branches/3.0@3760 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/automation_control.h | 4 ++-- libs/ardour/ardour/location.h | 19 +++++++++++-------- libs/ardour/ardour/region.h | 1 + libs/ardour/audioanalyser.cc | 2 ++ libs/ardour/location.cc | 13 +++++++++++++ libs/ardour/region.cc | 16 ++++++++++++++++ libs/ardour/utils.cc | 1 - libs/evoral/SConscript | 2 ++ libs/evoral/evoral/ControlList.hpp | 6 +++--- libs/evoral/evoral/EventSink.hpp | 1 + libs/evoral/evoral/Parameter.hpp | 4 +++- libs/evoral/src/Sequence.cpp | 3 ++- libs/surfaces/generic_midi/SConscript | 1 + libs/surfaces/mackie/SConscript | 1 + libs/surfaces/mackie/mackie_control_protocol.cc | 2 +- libs/surfaces/mackie/route_signal.cc | 2 +- libs/surfaces/powermate/SConscript | 1 + libs/surfaces/tranzport/SConscript | 1 + 18 files changed, 62 insertions(+), 18 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index 24d1db3eec..78f4553d87 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -43,7 +43,7 @@ public: boost::shared_ptr, std::string name="unnamed controllable"); - boost::shared_ptr alist() { return boost::dynamic_pointer_cast(_list); } + boost::shared_ptr alist() const { return boost::dynamic_pointer_cast(_list); } void set_list(boost::shared_ptr); @@ -55,7 +55,7 @@ public: return ((ARDOUR::AutomationList*)_list.get())->automation_write(); } - inline AutoState automation_state() { + inline AutoState automation_state() const { return ((ARDOUR::AutomationList*)_list.get())->automation_state(); } diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index 53d9489823..d5b672a89d 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -100,14 +100,15 @@ class Location : public PBD::StatefulDestructible void set_is_end (bool yn, void* src); void set_is_start (bool yn, void* src); - bool is_auto_punch () { return _flags & IsAutoPunch; } - bool is_auto_loop () { return _flags & IsAutoLoop; } - bool is_mark () { return _flags & IsMark; } - bool is_hidden () { return _flags & IsHidden; } - bool is_cd_marker () { return _flags & IsCDMarker; } - bool is_end() { return _flags & IsEnd; } - bool is_start() { return _flags & IsStart; } - bool is_range_marker() { return _flags & IsRangeMarker; } + bool is_auto_punch () const { return _flags & IsAutoPunch; } + bool is_auto_loop () const { return _flags & IsAutoLoop; } + bool is_mark () const { return _flags & IsMark; } + bool is_hidden () const { return _flags & IsHidden; } + bool is_cd_marker () const { return _flags & IsCDMarker; } + bool is_end() const { return _flags & IsEnd; } + bool is_start() const { return _flags & IsStart; } + bool is_range_marker() const { return _flags & IsRangeMarker; } + bool matches (Flags f) const { return _flags & f; } sigc::signal name_changed; sigc::signal end_changed; @@ -175,6 +176,8 @@ class Locations : public PBD::StatefulDestructible nframes_t first_mark_before (nframes_t, bool include_special_ranges = false); nframes_t first_mark_after (nframes_t, bool include_special_ranges = false); + void find_all_between (nframes64_t start, nframes64_t, LocationList&, Location::Flags); + sigc::signal current_changed; sigc::signal changed; sigc::signal added; diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 32f47d42d7..dc81de6374 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -90,6 +90,7 @@ class Region : public Automatable, public boost::enable_shared_from_this static Change HiddenChanged; sigc::signal StateChanged; + static sigc::signal > RegionPropertyChanged; virtual ~Region(); diff --git a/libs/ardour/audioanalyser.cc b/libs/ardour/audioanalyser.cc index 98c4206301..ab3691d8d1 100644 --- a/libs/ardour/audioanalyser.cc +++ b/libs/ardour/audioanalyser.cc @@ -10,6 +10,8 @@ #include #include +#include + #include "i18n.h" using namespace std; diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc index 3654e03a9d..8dd4bbc636 100644 --- a/libs/ardour/location.cc +++ b/libs/ardour/location.cc @@ -924,3 +924,16 @@ Locations::get_location_by_id(PBD::ID id) return 0; } + +void +Locations::find_all_between (nframes64_t start, nframes64_t end, LocationList& ll, Location::Flags flags) +{ + Glib::Mutex::Lock lm (lock); + + for (LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) { + if ((flags == 0 || (*i)->matches (flags)) && + ((*i)->start() >= start && (*i)->end() < end)) { + ll.push_back (*i); + } + } +} diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 42564a8b5e..25435024b3 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -53,6 +53,7 @@ Change Region::LockChanged = ARDOUR::new_change (); Change Region::LayerChanged = ARDOUR::new_change (); Change Region::HiddenChanged = ARDOUR::new_change (); +sigc::signal > Region::RegionPropertyChanged; /* derived-from-derived constructor (no sources in constructor) */ Region::Region (Session& s, nframes_t start, nframes_t length, const string& name, DataType type, layer_t layer, Region::Flag flags) @@ -1350,6 +1351,21 @@ Region::send_change (Change what_changed) } StateChanged (what_changed); + + if (!(_flags & DoNotSaveState)) { + + /* Try and send a shared_pointer unless this is part of the constructor. + If so, do nothing. + */ + + try { + boost::shared_ptr rptr = shared_from_this(); + RegionPropertyChanged (rptr); + } catch (...) { + /* no shared_ptr available, relax; */ + } + } + } void diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index 1906d92b88..c598a3d279 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include diff --git a/libs/evoral/SConscript b/libs/evoral/SConscript index fcc29c9b56..6141f10e4f 100644 --- a/libs/evoral/SConscript +++ b/libs/evoral/SConscript @@ -8,6 +8,8 @@ Import('env libraries install_prefix') evoral = env.Clone() evoral.Merge([ + libraries['glib2'], + libraries['sigc2'], libraries['glibmm2'], libraries['xml'], libraries['pbd'], diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp index 45519955c5..bc994d90c8 100644 --- a/libs/evoral/evoral/ControlList.hpp +++ b/libs/evoral/evoral/ControlList.hpp @@ -47,9 +47,9 @@ struct ControlEvent { } } - ~ControlEvent() { if (coeff) delete[] coeff; } + ~ControlEvent() { if (coeff) delete[] coeff; } - void create_coeffs() { + void create_coeffs() { if (!coeff) coeff = new double[4]; @@ -85,7 +85,7 @@ public: ControlList (const Parameter& id); //ControlList (const XMLNode&, Parameter id); - ~ControlList(); + virtual ~ControlList(); virtual boost::shared_ptr create(Parameter id); diff --git a/libs/evoral/evoral/EventSink.hpp b/libs/evoral/evoral/EventSink.hpp index fde6399f2e..67b33d6965 100644 --- a/libs/evoral/evoral/EventSink.hpp +++ b/libs/evoral/evoral/EventSink.hpp @@ -28,6 +28,7 @@ namespace Evoral { */ class EventSink { public: + virtual ~EventSink() {} virtual size_t write(timestamp_t time, uint32_t size, const uint8_t* buf) = 0; diff --git a/libs/evoral/evoral/Parameter.hpp b/libs/evoral/evoral/Parameter.hpp index 301a432bd0..a88483aec4 100644 --- a/libs/evoral/evoral/Parameter.hpp +++ b/libs/evoral/evoral/Parameter.hpp @@ -43,7 +43,7 @@ public: Parameter(uint32_t type, uint8_t channel, uint32_t id=0) : _type(type), _id(id), _channel(channel) {} - + Parameter(const std::string& str) { int channel; if (sscanf(str.c_str(), "%d_c%d_n%d", &_type, &channel, &_id) == 3) { @@ -56,6 +56,8 @@ public: std::cerr << "WARNING: Unable to create parameter from string: " << str << std::endl; } + virtual ~Parameter() {} + inline uint32_t type() const { return _type; } inline uint32_t id() const { return _id; } inline uint8_t channel() const { return _channel; } diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp index 4880b5a04d..fecc37be29 100644 --- a/libs/evoral/src/Sequence.cpp +++ b/libs/evoral/src/Sequence.cpp @@ -19,6 +19,7 @@ #define __STDC_LIMIT_MACROS 1 #include +#include #include #include #include @@ -313,7 +314,7 @@ size_t Sequence::read(EventSink& dst, timestamp_t start, timestamp_t nframes, ti //cerr << "Using cached iterator at " << _next_read << endl; } - _next_read = start + nframes; + _next_read = (nframes_t) floor (start + nframes); while (_read_iter != end() && _read_iter->time() < start + nframes) { assert(_read_iter->size() > 0); diff --git a/libs/surfaces/generic_midi/SConscript b/libs/surfaces/generic_midi/SConscript index e3e62e7402..d4c9e92214 100644 --- a/libs/surfaces/generic_midi/SConscript +++ b/libs/surfaces/generic_midi/SConscript @@ -33,6 +33,7 @@ genericmidi.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"") genericmidi.Append(CPPPATH = libraries['jack'].get('CPPPATH', [])) genericmidi.Merge ([ + libraries['evoral'], libraries['ardour'], libraries['ardour_cp'], libraries['sndfile'], diff --git a/libs/surfaces/mackie/SConscript b/libs/surfaces/mackie/SConscript index 143ebc9856..c19d145c73 100644 --- a/libs/surfaces/mackie/SConscript +++ b/libs/surfaces/mackie/SConscript @@ -47,6 +47,7 @@ mackie.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"") mackie.Append(CPPPATH = libraries['jack'].get('CPPPATH', [])) mackie.Merge ([ + libraries['evoral'], libraries['ardour'], libraries['ardour_cp'], libraries['sigc2'], diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 5ef28d4549..4558dc641c 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -1019,7 +1019,7 @@ void MackieControlProtocol::notify_panner_changed( RouteSignal * route_signal ) // TODO handle plugin automation polling void MackieControlProtocol::update_automation( RouteSignal & rs ) { - ARDOUR::AutoState gain_state = rs.route().gain_control()->list()->automation_state(); + ARDOUR::AutoState gain_state = rs.route().gain_control()->alist()->automation_state(); if ( gain_state == Touch || gain_state == Play ) { notify_gain_changed( &rs ); diff --git a/libs/surfaces/mackie/route_signal.cc b/libs/surfaces/mackie/route_signal.cc index b01b5e0cf5..adaeadd805 100644 --- a/libs/surfaces/mackie/route_signal.cc +++ b/libs/surfaces/mackie/route_signal.cc @@ -37,7 +37,7 @@ void RouteSignal::connect() _mute_changed_connection = _route.mute_control()->Changed.connect( sigc::bind ( mem_fun ( _mcp, &MackieControlProtocol::notify_mute_changed ), this ) ); if ( _strip.has_gain() ) - _gain_changed_connection = _route.control(ARDOUR::GainAutomation)->Changed.connect( sigc::bind ( mem_fun ( _mcp, &MackieControlProtocol::notify_gain_changed ), this ) ); + _gain_changed_connection = _route.gain_control()->Changed.connect( sigc::bind ( mem_fun ( _mcp, &MackieControlProtocol::notify_gain_changed ), this ) ); _name_changed_connection = _route.NameChanged.connect( sigc::bind ( mem_fun ( _mcp, &MackieControlProtocol::notify_name_changed ), this ) ); diff --git a/libs/surfaces/powermate/SConscript b/libs/surfaces/powermate/SConscript index c1a79fe955..3e01e2042b 100644 --- a/libs/surfaces/powermate/SConscript +++ b/libs/surfaces/powermate/SConscript @@ -31,6 +31,7 @@ powermate.Append(CXXFLAGS="-DCONFIG_DIR=\\\""+final_config_prefix+"\\\"") powermate.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"") powermate.Merge ([ + libraries['evoral'], libraries['ardour'], libraries['ardour_cp'], libraries['sigc2'], diff --git a/libs/surfaces/tranzport/SConscript b/libs/surfaces/tranzport/SConscript index ff48eb64e3..31630fb2e0 100644 --- a/libs/surfaces/tranzport/SConscript +++ b/libs/surfaces/tranzport/SConscript @@ -55,6 +55,7 @@ tranzport.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"") tranzport.Append(CPPPATH = libraries['jack'].get('CPPPATH', [])) tranzport.Merge ([ + libraries['evoral'], libraries['ardour'], libraries['ardour_cp'], libraries['sigc2'], -- cgit v1.2.3