X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidi_patch_manager.cc;h=a2522fe997099ba2fec55a04ef15156f070632c5;hb=8f59346592b8232e910ce0bbdc247cf8cecde4dd;hp=cb1ba771f4bfe297645e1e8bc0f29045959330af;hpb=30daaebaa2d90d6b0e8673143ccc3cacd7bd1753;p=ardour.git diff --git a/libs/ardour/midi_patch_manager.cc b/libs/ardour/midi_patch_manager.cc index cb1ba771f4..a2522fe997 100644 --- a/libs/ardour/midi_patch_manager.cc +++ b/libs/ardour/midi_patch_manager.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2008 Hans Baier + Copyright (C) 2008 Hans Baier This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,17 +18,19 @@ $Id$ */ -#include #include -#include +#include "pbd/compose.h" +#include "pbd/file_utils.h" +#include "pbd/error.h" #include "ardour/session.h" #include "ardour/session_directory.h" #include "ardour/midi_patch_manager.h" +#include "i18n.h" + using namespace std; -using namespace sigc; using namespace ARDOUR; using namespace MIDI; using namespace MIDI::Name; @@ -38,11 +40,9 @@ using namespace PBD::sys; MidiPatchManager* MidiPatchManager::_manager = 0; void -MidiPatchManager::set_session (Session& s) +MidiPatchManager::set_session (Session* s) { - _session = &s; - _session->GoingAway.connect (mem_fun (*this, &MidiPatchManager::drop_session)); - + SessionHandlePtr::set_session (s); refresh(); } @@ -52,40 +52,39 @@ MidiPatchManager::refresh() _documents.clear(); _master_devices_by_model.clear(); _all_models.clear(); - + + if (!_session) { + return; + } + path path_to_patches = _session->session_directory().midi_patch_path(); - - cerr << "Path to patches: " << path_to_patches.to_string() << endl; - - if(!exists(path_to_patches)) { + + if (!exists(path_to_patches)) { return; } - cerr << "Path to patches: " << path_to_patches.to_string() << " exists" << endl; - + assert(is_directory(path_to_patches)); - + Glib::PatternSpec pattern(Glib::ustring("*.midnam")); vector result; - + find_matching_files_in_directory(path_to_patches, pattern, result); - cerr << "patchfiles result contains " << result.size() << " elements" << endl; - - for(vector::iterator i = result.begin(); i != result.end(); ++i) { - cerr << "processing patchfile " << i->to_string() << endl; - + info << "Loading " << result.size() << " MIDI patches from " << path_to_patches.to_string() << endl; + + for (vector::iterator i = result.begin(); i != result.end(); ++i) { boost::shared_ptr document(new MIDINameDocument(i->to_string())); - for(MIDINameDocument::MasterDeviceNamesList::const_iterator device = - document->master_device_names_by_model().begin(); - device != document->master_device_names_by_model().end(); - ++device) { - cerr << "got model " << device->first << endl; + for (MIDINameDocument::MasterDeviceNamesList::const_iterator device = + document->master_device_names_by_model().begin(); + device != document->master_device_names_by_model().end(); + ++device) { + //cerr << "got model " << device->first << endl; // have access to the documents by model name _documents[device->first] = document; // build a list of all master devices from all documents _master_devices_by_model[device->first] = device->second; _all_models.push_back(device->first); - + // make sure there are no double model names // TODO: handle this gracefully. assert(_documents.count(device->first) == 1); @@ -95,10 +94,8 @@ MidiPatchManager::refresh() } void -MidiPatchManager::drop_session () +MidiPatchManager::session_going_away () { - _session = 0; - _documents.clear(); - _master_devices_by_model.clear(); - _all_models.clear(); + SessionHandlePtr::session_going_away (); + refresh (); }