+MidiPatchManager::add_custom_midnam (const std::string& id, const std::string& midnam)
+{
+ boost::shared_ptr<MIDINameDocument> document;
+ document = boost::shared_ptr<MIDINameDocument>(new MIDINameDocument());
+ XMLTree mxml;
+ if (mxml.read_buffer (midnam, true)) {
+ if (0 == document->set_state (mxml, *mxml.root())) {
+ document->set_file_path ("custom:" + id);
+ add_midi_name_document (document);
+ return true;
+ }
+ }
+ return false;
+}
+
+bool
+MidiPatchManager::remove_custom_midnam (const std::string& id)
+{
+ return remove_midi_name_document ("custom:" + id);
+}
+
+bool
+MidiPatchManager::update_custom_midnam (const std::string& id, const std::string& midnam)
+{
+ remove_midi_name_document ("custom:" + id, false);
+ return add_custom_midnam (id, midnam);
+}
+
+void
+MidiPatchManager::add_midnam_files_from_directory(const std::string& directory_path)
+{
+ vector<std::string> result;
+ find_files_matching_pattern (result, directory_path, "*.midnam");
+
+ info << string_compose(
+ P_("Loading %1 MIDI patch from %2", "Loading %1 MIDI patches from %2", result.size()),
+ result.size(), directory_path)
+ << endmsg;
+
+ for (vector<std::string>::const_iterator i = result.begin(); i != result.end(); ++i) {
+ load_midi_name_document (*i);
+ }
+}
+
+void
+MidiPatchManager::remove_search_path (const Searchpath& search_path)
+{
+ for (Searchpath::const_iterator i = search_path.begin(); i != search_path.end(); ++i) {
+
+ if (!_search_path.contains(*i)) {
+ continue;
+ }
+
+ remove_midnam_files_from_directory(*i);
+
+ _search_path.remove_directory (*i);
+ }
+}
+
+void
+MidiPatchManager::remove_midnam_files_from_directory(const std::string& directory_path)
+{
+ vector<std::string> result;
+ find_files_matching_pattern (result, directory_path, "*.midnam");
+
+ info << string_compose(
+ P_("Unloading %1 MIDI patch from %2", "Unloading %1 MIDI patches from %2", result.size()),
+ result.size(), directory_path)
+ << endmsg;
+
+ for (vector<std::string>::const_iterator i = result.begin(); i != result.end(); ++i) {
+ remove_midi_name_document (*i);
+ }
+}
+
+bool
+MidiPatchManager::load_midi_name_document (const std::string& file_path)