X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fvca_manager.cc;h=20e9e38ca2aaf0b7e0bc7ec73f7a15df04fee546;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=6cc287554afd035b1bf9feb49fa6ee3fe37a129c;hpb=1f6800d421fc41e6797e0bc3b6e78a6e07e97120;p=ardour.git diff --git a/libs/ardour/vca_manager.cc b/libs/ardour/vca_manager.cc index 6cc287554a..20e9e38ca2 100644 --- a/libs/ardour/vca_manager.cc +++ b/libs/ardour/vca_manager.cc @@ -21,10 +21,13 @@ #include "pbd/error.h" #include "pbd/replace_all.h" +#include "ardour/boost_debug.h" +#include "ardour/session.h" +#include "ardour/slavable.h" #include "ardour/vca.h" #include "ardour/vca_manager.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace Glib::Threads; @@ -48,6 +51,9 @@ void VCAManager::clear () { Mutex::Lock lm (lock); + for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) { + (*i)->DropReferences (); + } _vcas.clear (); } @@ -77,6 +83,7 @@ VCAManager::create_vca (uint32_t howmany, std::string const & name_template) } boost::shared_ptr vca = boost::shared_ptr (new VCA (_session, num, name)); + BOOST_MARK_VCA (vca); vca->init (); @@ -87,6 +94,8 @@ VCAManager::create_vca (uint32_t howmany, std::string const & name_template) VCAAdded (vcal); /* EMIT SIGNAL */ + _session.set_dirty (); + return 0; } @@ -99,14 +108,15 @@ VCAManager::remove_vca (boost::shared_ptr vca) _vcas.remove (vca); } - VCAList vcal; - vcal.push_back (vca); + /* this should cause deassignment and deletion */ - VCARemoved (vcal); /* EMIT SIGNAL */ + vca->DropReferences (); + + _session.set_dirty (); } boost::shared_ptr -VCAManager::vca_by_number (uint32_t n) const +VCAManager::vca_by_number (int32_t n) const { Mutex::Lock lm (lock); @@ -150,6 +160,7 @@ VCAManager::set_state (XMLNode const& node, int version) for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) { if ((*i)->name() == VCA::xml_node_name) { boost::shared_ptr vca = boost::shared_ptr (new VCA (_session, 0, X_("tobereset"))); + BOOST_MARK_VCA (vca); if (vca->init() || vca->set_state (**i, version)) { error << _("Cannot set state of a VCA") << endmsg; @@ -172,8 +183,17 @@ VCAManager::set_state (XMLNode const& node, int version) _vcas_loaded = true; - VCAsLoaded (); /* EMIT SIGNAL */ VCAAdded (vcal); /* EMIT SIGNAL */ return 0; } + +void +VCAManager::clear_all_solo_state () +{ + Mutex::Lock lm (lock); + + for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) { + (*i)->clear_all_solo_state (); + } +}