*/
-#include "pbd/convert.h"
#include "pbd/error.h"
#include "pbd/replace_all.h"
+#include "pbd/string_convert.h"
#include "ardour/boost_debug.h"
+#include "ardour/selection.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;
void
VCAManager::clear ()
{
- Mutex::Lock lm (lock);
- for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
- (*i)->DropReferences ();
+ bool send = false;
+ {
+ Mutex::Lock lm (lock);
+ for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
+ if ((*i)->is_selected ()) {
+ _session.selection().remove_stripable_by_id ((*i)->id());
+ send = true;
+ }
+ (*i)->DropReferences ();
+ }
+ _vcas.clear ();
+ }
+
+ if (send && !_session.deletion_in_progress ()) {
+ PropertyChange pc;
+ pc.add (Properties::selected);
+ PresentationInfo::Change (pc);
}
- _vcas.clear ();
}
VCAList
{
VCAList vcal;
+ uint32_t n_stripables = _session.nstripables ();
+
{
Mutex::Lock lm (lock);
string name = name_template;
if (name.find ("%n")) {
- string sn = PBD::to_string (num, std::dec);
+ string sn = PBD::to_string (num);
replace_all (name, "%n", sn);
}
BOOST_MARK_VCA (vca);
vca->init ();
+ vca->set_presentation_order (n + n_stripables);
_vcas.push_back (vca);
vcal.push_back (vca);
vca->DropReferences ();
+ if (vca->is_selected () && !_session.deletion_in_progress ()) {
+ _session.selection().remove_stripable_by_id (vca->id());
+ PropertyChange pc;
+ pc.add (Properties::selected);
+ PresentationInfo::Change (pc);
+ }
_session.set_dirty ();
}
boost::shared_ptr<VCA>
-VCAManager::vca_by_number (uint32_t n) const
+VCAManager::vca_by_number (int32_t n) const
{
Mutex::Lock lm (lock);
return boost::shared_ptr<VCA>();
}
+boost::shared_ptr<VCA>
+VCAManager::vca_by_name (std::string const& name) const
+{
+ Mutex::Lock lm (lock);
+
+ for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
+ if ((*i)->name() == name || (*i)->full_name() == name) {
+ return *i;
+ }
+ }
+
+ return boost::shared_ptr<VCA>();
+}
+
XMLNode&
VCAManager::get_state ()
{