Allow to dynamically un/load Midnam Patches
This commit is contained in:
parent
06700cb2f4
commit
0332c127cd
@ -57,12 +57,16 @@ public:
|
|||||||
return *_manager;
|
return *_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PBD::Signal0<void> PatchesChanged;
|
||||||
|
|
||||||
|
bool add_custom_midnam (const std::string& id, const std::string& midnam);
|
||||||
|
bool remove_custom_midnam (const std::string& id);
|
||||||
|
|
||||||
void add_search_path (const PBD::Searchpath& search_path);
|
void add_search_path (const PBD::Searchpath& search_path);
|
||||||
|
|
||||||
void remove_search_path (const PBD::Searchpath& search_path);
|
void remove_search_path (const PBD::Searchpath& search_path);
|
||||||
|
|
||||||
boost::shared_ptr<MIDINameDocument> document_by_model(std::string model_name)
|
boost::shared_ptr<MIDINameDocument> document_by_model(std::string model_name) const;
|
||||||
{ return _documents[model_name]; }
|
|
||||||
|
|
||||||
boost::shared_ptr<MasterDeviceNames> master_device_by_model(std::string model_name)
|
boost::shared_ptr<MasterDeviceNames> master_device_by_model(std::string model_name)
|
||||||
{ return _master_devices_by_model[model_name]; }
|
{ return _master_devices_by_model[model_name]; }
|
||||||
@ -139,7 +143,8 @@ public:
|
|||||||
const DeviceNamesByMaker& devices_by_manufacturer() const { return _devices_by_manufacturer; }
|
const DeviceNamesByMaker& devices_by_manufacturer() const { return _devices_by_manufacturer; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool add_midi_name_document(const std::string& file_path);
|
bool load_midi_name_document(const std::string& file_path);
|
||||||
|
bool add_midi_name_document(boost::shared_ptr<MIDINameDocument>);
|
||||||
bool remove_midi_name_document(const std::string& file_path);
|
bool remove_midi_name_document(const std::string& file_path);
|
||||||
|
|
||||||
void add_midnam_files_from_directory(const std::string& directory_path);
|
void add_midnam_files_from_directory(const std::string& directory_path);
|
||||||
|
@ -68,6 +68,28 @@ MidiPatchManager::add_search_path (const Searchpath& search_path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiPatchManager::add_midnam_files_from_directory(const std::string& directory_path)
|
MidiPatchManager::add_midnam_files_from_directory(const std::string& directory_path)
|
||||||
{
|
{
|
||||||
@ -80,7 +102,7 @@ MidiPatchManager::add_midnam_files_from_directory(const std::string& directory_p
|
|||||||
<< endmsg;
|
<< endmsg;
|
||||||
|
|
||||||
for (vector<std::string>::const_iterator i = result.begin(); i != result.end(); ++i) {
|
for (vector<std::string>::const_iterator i = result.begin(); i != result.end(); ++i) {
|
||||||
add_midi_name_document (*i);
|
load_midi_name_document (*i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +138,7 @@ MidiPatchManager::remove_midnam_files_from_directory(const std::string& director
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
MidiPatchManager::add_midi_name_document (const std::string& file_path)
|
MidiPatchManager::load_midi_name_document (const std::string& file_path)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<MIDINameDocument> document;
|
boost::shared_ptr<MIDINameDocument> document;
|
||||||
try {
|
try {
|
||||||
@ -127,6 +149,22 @@ MidiPatchManager::add_midi_name_document (const std::string& file_path)
|
|||||||
<< endmsg;
|
<< endmsg;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return add_midi_name_document (document);
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<MIDINameDocument>
|
||||||
|
MidiPatchManager::document_by_model(std::string model_name) const
|
||||||
|
{
|
||||||
|
MidiNameDocuments::const_iterator i = _documents.find (model_name);
|
||||||
|
if (i != _documents.end ()) {
|
||||||
|
return i->second;
|
||||||
|
}
|
||||||
|
return boost::shared_ptr<MIDINameDocument> ();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
MidiPatchManager::add_midi_name_document (boost::shared_ptr<MIDINameDocument> document)
|
||||||
|
{
|
||||||
for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
|
for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
|
||||||
document->master_device_names_by_model().begin();
|
document->master_device_names_by_model().begin();
|
||||||
device != document->master_device_names_by_model().end();
|
device != document->master_device_names_by_model().end();
|
||||||
@ -134,7 +172,7 @@ MidiPatchManager::add_midi_name_document (const std::string& file_path)
|
|||||||
if (_documents.find(device->first) != _documents.end()) {
|
if (_documents.find(device->first) != _documents.end()) {
|
||||||
warning << string_compose(_("Duplicate MIDI device `%1' in `%2' ignored"),
|
warning << string_compose(_("Duplicate MIDI device `%1' in `%2' ignored"),
|
||||||
device->first,
|
device->first,
|
||||||
file_path) << endmsg;
|
document->file_path()) << endmsg;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +193,8 @@ MidiPatchManager::add_midi_name_document (const std::string& file_path)
|
|||||||
assert(_documents.count(device->first) == 1);
|
assert(_documents.count(device->first) == 1);
|
||||||
assert(_master_devices_by_model.count(device->first) == 1);
|
assert(_master_devices_by_model.count(device->first) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PatchesChanged(); /* EMIT SIGNAL */
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,9 +207,10 @@ MidiPatchManager::remove_midi_name_document (const std::string& file_path)
|
|||||||
|
|
||||||
boost::shared_ptr<MIDINameDocument> document = i->second;
|
boost::shared_ptr<MIDINameDocument> document = i->second;
|
||||||
|
|
||||||
|
cout << string_compose(_("Removing MIDI patch file %1"), file_path) << "\n";
|
||||||
info << string_compose(_("Removing MIDI patch file %1"), file_path) << endmsg;
|
info << string_compose(_("Removing MIDI patch file %1"), file_path) << endmsg;
|
||||||
|
|
||||||
_documents.erase(i++);
|
i = _documents.erase(i);
|
||||||
|
|
||||||
for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
|
for (MIDINameDocument::MasterDeviceNamesList::const_iterator device =
|
||||||
document->master_device_names_by_model().begin();
|
document->master_device_names_by_model().begin();
|
||||||
@ -189,5 +230,8 @@ MidiPatchManager::remove_midi_name_document (const std::string& file_path)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (removed) {
|
||||||
|
PatchesChanged(); /* EMIT SIGNAL */
|
||||||
|
}
|
||||||
return removed;
|
return removed;
|
||||||
}
|
}
|
||||||
|
@ -469,9 +469,10 @@ public:
|
|||||||
virtual ~MIDINameDocument() {};
|
virtual ~MIDINameDocument() {};
|
||||||
|
|
||||||
const std::string& file_path () const { return _file_path; }
|
const std::string& file_path () const { return _file_path; }
|
||||||
|
|
||||||
const std::string& author() const { return _author; }
|
const std::string& author() const { return _author; }
|
||||||
|
|
||||||
void set_author(const std::string& author) { _author = author; }
|
void set_author(const std::string& author) { _author = author; }
|
||||||
|
void set_file_path(const std::string& file_path) { _file_path = file_path; }
|
||||||
|
|
||||||
boost::shared_ptr<MasterDeviceNames> master_device_names(const std::string& model);
|
boost::shared_ptr<MasterDeviceNames> master_device_names(const std::string& model);
|
||||||
|
|
||||||
@ -483,7 +484,7 @@ public:
|
|||||||
int set_state (const XMLTree&, const XMLNode&);
|
int set_state (const XMLTree&, const XMLNode&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string _file_path;
|
std::string _file_path;
|
||||||
std::string _author;
|
std::string _author;
|
||||||
MasterDeviceNamesList _master_device_names_list;
|
MasterDeviceNamesList _master_device_names_list;
|
||||||
MasterDeviceNames::Models _all_models;
|
MasterDeviceNames::Models _all_models;
|
||||||
|
Loading…
Reference in New Issue
Block a user