X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidi_patch_manager.cc;h=e0638f035e510232d27e5701b5e216990451ac38;hb=cb3961d9534d3bd86cc2c1c2be72b8eb33717e77;hp=f2d964bb77ba0acb2554a40401c5ea11ee76843e;hpb=302b08c0592a6b7c40dec8c04f52c346e14b17af;p=ardour.git diff --git a/libs/ardour/midi_patch_manager.cc b/libs/ardour/midi_patch_manager.cc index f2d964bb77..e0638f035e 100644 --- a/libs/ardour/midi_patch_manager.cc +++ b/libs/ardour/midi_patch_manager.cc @@ -29,7 +29,7 @@ #include "ardour/session_directory.h" #include "ardour/midi_patch_manager.h" -#include "ardour/midi_patch_search_path.h" +#include "ardour/search_paths.h" #include "i18n.h" @@ -50,6 +50,7 @@ void MidiPatchManager::set_session (Session* s) { SessionHandlePtr::set_session (s); + refresh (); add_session_patches (); } @@ -68,10 +69,9 @@ MidiPatchManager::add_session_patches () assert (Glib::file_test (path_to_patches, Glib::FILE_TEST_IS_DIR)); - Glib::PatternSpec pattern(string("*.midnam")); vector result; - find_matching_files_in_directory (path_to_patches, pattern, result); + find_files_matching_pattern (result, path_to_patches, "*.midnam"); info << "Loading " << result.size() << " MIDI patches from " << path_to_patches << endmsg; @@ -87,6 +87,12 @@ MidiPatchManager::add_session_patches () // build a list of all master devices from all documents _master_devices_by_model[device->first] = device->second; _all_models.insert(device->first); + const std::string& manufacturer = device->second->manufacturer(); + if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) { + MIDINameDocument::MasterDeviceNamesList empty; + _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty)); + } + _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second)); // make sure there are no double model names // TODO: handle this gracefully. @@ -102,12 +108,12 @@ MidiPatchManager::refresh() _documents.clear(); _master_devices_by_model.clear(); _all_models.clear(); + _devices_by_manufacturer.clear(); Searchpath search_path = midi_patch_search_path (); - Glib::PatternSpec pattern (string("*.midnam")); vector result; - find_matching_files_in_search_path (search_path, pattern, result); + find_files_matching_pattern (result, search_path, "*.midnam"); info << "Loading " << result.size() << " MIDI patches from " << search_path.to_string() << endmsg; @@ -134,6 +140,12 @@ MidiPatchManager::refresh() _master_devices_by_model[device->first] = device->second; _all_models.insert(device->first); + const std::string& manufacturer = device->second->manufacturer(); + if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) { + MIDINameDocument::MasterDeviceNamesList empty; + _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty)); + } + _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second)); } } @@ -146,5 +158,8 @@ void MidiPatchManager::session_going_away () { SessionHandlePtr::session_going_away (); - refresh (); + _documents.clear(); + _master_devices_by_model.clear(); + _all_models.clear(); + _devices_by_manufacturer.clear(); }