21 #include <boost/shared_ptr.hpp>
23 #include <glibmm/fileutils.h>
44 MidiPatchManager::MidiPatchManager ()
50 MidiPatchManager::set_session (
Session* s)
52 SessionHandlePtr::set_session (s);
54 add_session_patches ();
58 MidiPatchManager::add_session_patches ()
64 std::string path_to_patches = _session->session_directory().midi_patch_path();
66 if (!Glib::file_test (path_to_patches, Glib::FILE_TEST_EXISTS)) {
70 assert (Glib::file_test (path_to_patches, Glib::FILE_TEST_IS_DIR));
72 vector<std::string> result;
76 info <<
"Loading " << result.size() <<
" MIDI patches from " << path_to_patches <<
endmsg;
78 for (vector<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
80 for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
81 document->master_device_names_by_model().begin();
82 device != document->master_device_names_by_model().end();
86 _documents[device->first] = document;
88 _master_devices_by_model[device->first] = device->second;
89 _all_models.insert(device->first);
90 const std::string& manufacturer = device->second->manufacturer();
91 if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) {
92 MIDINameDocument::MasterDeviceNamesList empty;
93 _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty));
95 _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second));
99 assert(_documents.count(device->first) == 1);
100 assert(_master_devices_by_model.count(device->first) == 1);
106 MidiPatchManager::refresh()
109 _master_devices_by_model.clear();
111 _devices_by_manufacturer.clear();
114 vector<std::string> result;
118 info <<
"Loading " << result.size() <<
" MIDI patches from " << search_path.
to_string() <<
endmsg;
120 for (vector<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
125 error <<
"Error parsing MIDI patch file " << *i <<
endmsg;
128 for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
129 document->master_device_names_by_model().begin();
130 device != document->master_device_names_by_model().end();
132 if (_documents.find(device->first) != _documents.end()) {
139 _documents[device->first] = document;
140 _master_devices_by_model[device->first] = device->second;
142 _all_models.insert(device->first);
143 const std::string& manufacturer = device->second->manufacturer();
144 if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) {
145 MIDINameDocument::MasterDeviceNamesList empty;
146 _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty));
148 _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second));
153 add_session_patches ();
158 MidiPatchManager::session_going_away ()
160 SessionHandlePtr::session_going_away ();
162 _master_devices_by_model.clear();
164 _devices_by_manufacturer.clear();
LIBARDOUR_API PBD::Searchpath midi_patch_search_path()
LIBPBD_API Transmitter error
LIBPBD_API Transmitter warning
std::ostream & endmsg(std::ostream &ostr)
void find_files_matching_pattern(vector< string > &result, const Searchpath &paths, const Glib::PatternSpec &pattern)
LIBPBD_API Transmitter info
LIBPBD_TEMPLATE_MEMBER_API const std::string to_string() const
std::string string_compose(const std::string &fmt, const T1 &o1)