From: Johannes Mueller Date: Sat, 27 Oct 2018 19:36:21 +0000 (+0200) Subject: Update names of sidechains. X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=732fd75f9ba8ddf369088fb5b9e4a91d17160e00;p=ardour.git Update names of sidechains. When a PluginInsert is created it does not have an owner right away. That's why a we need to set the sidechains name once the owner is known, in order to include owner's name into the name. Furthermore we need to follow renames of the owner. --- diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 70297f11b2..a68110177f 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -170,6 +170,7 @@ public: bool set_preset_out (const ChanCount&); bool add_sidechain (uint32_t n_audio = 1, uint32_t n_midi = 0); bool del_sidechain (); + void update_sidechain_name (); boost::shared_ptr sidechain () const { return _sidechain; } // end C++ class slavery! diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index d5056e7259..4fc97fb0c8 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -206,10 +206,12 @@ PluginInsert::add_sidechain (uint32_t n_audio, uint32_t n_midi) return false; } std::ostringstream n; - if (n_audio > 0 || n_midi > 0) { - n << "Sidechain " << Session::next_name_id (); - } else { + if (n_audio == 0 && n_midi == 0) { n << "TO BE RESET FROM XML"; + } else if (owner()) { + n << "SC " << owner()->name() << "/" << name() << " " << Session::next_name_id (); + } else { + n << "tobeRenamed"; } SideChain *sc = new SideChain (_session, n.str ()); _sidechain = boost::shared_ptr (sc); @@ -237,6 +239,25 @@ PluginInsert::del_sidechain () return true; } +void +PluginInsert::update_sidechain_name () +{ + if (!_sidechain) { + return; + } + + std::ostringstream n; + + n << "SC "; + if (owner()) { + n << owner()->name() << "/"; + } + + n << name() << " " << Session::next_name_id (); + + _sidechain->set_name (n.str()); +} + void PluginInsert::control_list_automation_state_changed (Evoral::Parameter which, AutoState s) { diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 41a14b096e..70c79a061c 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -849,6 +849,11 @@ Route::add_processor (boost::shared_ptr processor, boost::shared_ptr< processor->activate (); } + boost::shared_ptr pi = boost::dynamic_pointer_cast (processor); + if (pi) { + pi->update_sidechain_name (); + } + return 0; } @@ -4269,6 +4274,14 @@ Route::set_name (const string& str) SessionObject::set_name (newname); + for (uint32_t n = 0 ; ; ++n) { + boost::shared_ptr pi = boost::static_pointer_cast (nth_plugin (n)); + if (!pi) { + break; + } + pi->update_sidechain_name (); + } + bool ret = (_input->set_name(newname) && _output->set_name(newname)); if (ret) {