diff --git a/libs/ardour/ardour/instrument_info.h b/libs/ardour/ardour/instrument_info.h index 9330dedd47..0a6746a960 100644 --- a/libs/ardour/ardour/instrument_info.h +++ b/libs/ardour/ardour/instrument_info.h @@ -68,6 +68,8 @@ public: boost::shared_ptr value_name_list_by_control (uint8_t channel, uint8_t number) const; + size_t master_controller_count () const; + PBD::Signal0 Changed; bool have_custom_plugin_info () const; diff --git a/libs/ardour/instrument_info.cc b/libs/ardour/instrument_info.cc index f683e96f0b..fcc7baf1cd 100644 --- a/libs/ardour/instrument_info.cc +++ b/libs/ardour/instrument_info.cc @@ -176,6 +176,23 @@ InstrumentInfo::control_name_list (uint8_t channel) return dev_names->control_name_list (chan_names->control_list_name ()); } +size_t +InstrumentInfo::master_controller_count () const +{ + boost::shared_ptr const& dev_names (MidiPatchManager::instance ().master_device_by_model (model ())); + if (!dev_names) { + return 0; + } + MasterDeviceNames::ControlNameLists const& ctllist (dev_names->controls()); + + size_t total_ctrls = 0; + for (MasterDeviceNames::ControlNameLists::const_iterator l = ctllist.begin(); l != ctllist.end(); ++l) { + boost::shared_ptr const& name_list = l->second; + total_ctrls += name_list->controls().size(); + } + return total_ctrls; +} + #if 0 MasterDeviceNames::ControlNameLists const& InstrumentInfo::master_control_names () const