This commit is contained in:
Matthijs Kooijman 2025-11-28 18:12:52 -08:00 committed by GitHub
commit f8688222b6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 36 additions and 29 deletions

View file

@ -2881,32 +2881,12 @@ OSC::_sel_plugin (int id, lo_address addr)
return 1;
}
/* find out how many plugins we have */
sur->plugins.clear();
for (int nplugs = 0; true; ++nplugs) {
std::shared_ptr<Processor> proc = r->nth_plugin (nplugs);
if (!proc) {
break;
}
if (!r->nth_plugin(nplugs)->display_to_user()) {
continue;
}
#ifdef MIXBUS
/* need to check for mixbus channel strips (and exclude them) */
std::shared_ptr<PluginInsert> pi = std::dynamic_pointer_cast<PluginInsert>(proc);
if (pi && pi->is_channelstrip()) {
continue;
}
#endif
sur->plugins.push_back (nplugs);
}
// limit plugin_id to actual plugins
if (sur->plugins.size() < 1) {
sur->plugin_id = 0;
sur->plug_page = 1;
if (sur->sel_obs) {
sur->sel_obs->set_plugin_id(-1, 1);
sur->sel_obs->set_plugin_id(0, 1);
}
return 0;
} else if (id < 1) {
@ -2942,7 +2922,7 @@ OSC::_sel_plugin (int id, lo_address addr)
sur->plug_page = 1;
if (sur->sel_obs) {
sur->sel_obs->set_plugin_id(sur->plugins[sur->plugin_id - 1], sur->plug_page);
sur->sel_obs->set_plugin_id(sur->plugin_id, sur->plug_page);
}
return 0;
}
@ -4745,11 +4725,36 @@ OSC::_strip_select2 (std::shared_ptr<Stripable> s, OSCSurface *sur, lo_address a
_select = s;
}
if (!s) {
sur->plugins.clear();
return 0;
}
if (s != old_sel) {
sur->select = s;
}
/* Create list of user-visible plugins (into which piid indexes) */
sur->plugins.clear();
std::shared_ptr<Route> r = std::dynamic_pointer_cast<Route>(s);
if (r) {
for (int nplugs = 0; true; ++nplugs) {
std::shared_ptr<Processor> proc = r->nth_plugin (nplugs);
if (!proc) {
break;
}
if (!r->nth_plugin(nplugs)->display_to_user()) {
continue;
}
#ifdef MIXBUS
/* need to check for mixbus channel strips (and exclude them) */
std::shared_ptr<PluginInsert> pi = std::dynamic_pointer_cast<PluginInsert>(proc);
if (pi && pi->is_channelstrip()) {
continue;
}
#endif
sur->plugins.push_back (nplugs);
}
}
bool sends;
uint32_t nsends = 0;
do {
@ -4792,7 +4797,6 @@ OSC::_strip_select2 (std::shared_ptr<Stripable> s, OSCSurface *sur, lo_address a
}
// need to set monitor for processor changed signal (for paging)
string address = lo_address_get_url (addr);
std::shared_ptr<Route> r = std::dynamic_pointer_cast<Route>(s);
if (r) {
r->processors_changed.connect (sur->proc_connection, MISSING_INVALIDATOR, std::bind (&OSC::processor_changed, this, address), this);
_sel_plugin (sur->plugin_id, addr);

View file

@ -74,9 +74,9 @@ OSCSelectObserver::OSCSelectObserver (OSC& o, ARDOUR::Session& s, ArdourSurface:
plug_size = plug_page_size;
plug_page = sur->plug_page;
if (sur->plugins.size () > 0) {
plug_id = sur->plugins[sur->plugin_id - 1];
selected_piid = sur->plugin_id;
} else {
plug_id = -1;
selected_piid = 0;
}
_group_sharing[15] = 1;
refresh_strip (sur->select, sur->nsends, gainmode, true);
@ -447,7 +447,7 @@ OSCSelectObserver::send_end ()
void
OSCSelectObserver::set_plugin_id (int id, uint32_t page)
{
plug_id = id;
selected_piid = id;
plug_page = page;
renew_plugin ();
}
@ -475,7 +475,7 @@ OSCSelectObserver::renew_plugin () {
void
OSCSelectObserver::plugin_init()
{
if (plug_id < 0) {
if (!selected_piid) {
plugin_end ();
return;
}
@ -486,12 +486,14 @@ OSCSelectObserver::plugin_init()
}
// we have a plugin number now get the processor
std::shared_ptr<Processor> proc = r->nth_plugin (plug_id);
std::shared_ptr<Processor> proc = r->nth_plugin (sur->plugins[selected_piid - 1]);
std::shared_ptr<PluginInsert> pi;
if (!(pi = std::dynamic_pointer_cast<PluginInsert>(proc))) {
plugin_end ();
return;
}
_osc.float_message (X_("/select/plugin"), selected_piid, addr);
std::shared_ptr<ARDOUR::Plugin> pip = pi->plugin();
// we have a plugin we can ask if it is activated
proc->ActiveChanged.connect (plugin_connections, MISSING_INVALIDATOR, std::bind (&OSCSelectObserver::plug_enable, this, X_("/select/plugin/activate"), proc), &_osc);
@ -564,6 +566,7 @@ void
OSCSelectObserver::plugin_end ()
{
plugin_connections.drop_connections ();
_osc.float_message (X_("/select/plugin"), 0, addr);
_osc.float_message (X_("/select/plugin/activate"), 0, addr);
_osc.text_message (X_("/select/plugin/name"), " ", addr);
for (uint32_t i = 1; i <= plug_size; i++) {

View file

@ -92,7 +92,7 @@ class OSCSelectObserver
uint32_t nplug_params;
uint32_t plug_page_size;
uint32_t plug_page;
int plug_id;
uint32_t selected_piid;
uint32_t plug_size;
std::vector<int> plug_params;
int eq_bands;