summaryrefslogtreecommitdiff
path: root/libs/ardour/instrument_info.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-03-29 23:39:41 +0200
committerRobin Gareus <robin@gareus.org>2017-03-29 23:53:56 +0200
commitc0b6d8bfdf2f87c8249d31b55a56c92ec60983a8 (patch)
tree29c1db629951f88961b8ecfdc6fefb0e1bc47617 /libs/ardour/instrument_info.cc
parente7ca514887d7506c2d0cefc3e9b9f857b522d027 (diff)
Fix Patch Change Naming when plugins change (Route::reset_instrument_info)
Diffstat (limited to 'libs/ardour/instrument_info.cc')
-rw-r--r--libs/ardour/instrument_info.cc20
1 files changed, 18 insertions, 2 deletions
diff --git a/libs/ardour/instrument_info.cc b/libs/ardour/instrument_info.cc
index 1ea0fd5ce3..e7538a061f 100644
--- a/libs/ardour/instrument_info.cc
+++ b/libs/ardour/instrument_info.cc
@@ -58,9 +58,25 @@ InstrumentInfo::set_external_instrument (const string& model, const string& mode
void
InstrumentInfo::set_internal_instrument (boost::shared_ptr<Processor> p)
{
- internal_instrument = p;
- external_instrument_model = (_("Unknown"));
external_instrument_mode = "";
+
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert>(p);
+ if (pi && pi->plugin ()->has_midnam ()) {
+ /* really back hack, following MidiTimeAxisView::model_changed()
+ *
+ * InstrumentInfo::get_plugin_patch_name() needs to be overhauled,
+ * it limits all PluginInsert to generic-midi or only numbers.
+ */
+ internal_instrument.reset ();
+ external_instrument_model = pi->plugin ()->midnam_model ();
+ const std::list<std::string> device_modes = MIDI::Name::MidiPatchManager::instance().custom_device_mode_names_by_model (external_instrument_model);
+ if (device_modes.size() > 0) {
+ external_instrument_mode = device_modes.front();
+ }
+ } else {
+ internal_instrument = p;
+ external_instrument_model = (_("Unknown"));
+ }
Changed(); /* EMIT SIGNAL */
}