summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/midi_region_view.cc3
-rw-r--r--gtk2_ardour/midi_time_axis.cc30
-rw-r--r--gtk2_ardour/patch_change.cc2
-rw-r--r--gtk2_ardour/patch_change_dialog.cc1
-rw-r--r--libs/ardour/ardour/midi_patch_manager.h6
-rw-r--r--libs/ardour/midi_patch_manager.cc14
-rw-r--r--patchfiles/Korg_Radias.midnam2
7 files changed, 45 insertions, 13 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 2f5d69ffe9..6541736a19 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -27,11 +27,12 @@
#include <sigc++/signal.h>
+#include "midi++/midnam_patch.h"
+
#include "pbd/memento_command.h"
#include "pbd/stateful_diff_command.h"
#include "ardour/midi_model.h"
-#include "ardour/midi_patch_manager.h"
#include "ardour/midi_region.h"
#include "ardour/midi_source.h"
#include "ardour/midi_track.h"
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index c2d2a36ab1..1d55b7dffa 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -266,14 +266,28 @@ MidiTimeAxisView::set_route (boost::shared_ptr<Route> rt)
}
}
- MIDI::Name::MidiPatchManager& patch_manager = MIDI::Name::MidiPatchManager::instance();
-
- MIDI::Name::MasterDeviceNames::Models::const_iterator m = patch_manager.all_models().begin();
- for (; m != patch_manager.all_models().end(); ++m) {
- _midnam_model_selector.AddMenuElem(
- Gtk::Menu_Helpers::MenuElem(m->c_str(),
- sigc::bind(sigc::mem_fun(*this, &MidiTimeAxisView::model_changed),
- m->c_str())));
+ typedef MIDI::Name::MidiPatchManager PatchManager;
+
+ PatchManager& patch_manager = PatchManager::instance();
+
+ for (PatchManager::DeviceNamesByMaker::const_iterator m = patch_manager.devices_by_manufacturer().begin();
+ m != patch_manager.devices_by_manufacturer().end(); ++m) {
+ Menu* menu = Gtk::manage(new Menu);
+ Menu_Helpers::MenuList& items = menu->items();
+
+ // Build manufacturer submenu
+ for (MIDI::Name::MIDINameDocument::MasterDeviceNamesList::const_iterator n = m->second.begin();
+ n != m->second.end(); ++n) {
+ Menu_Helpers::MenuElem elem = Gtk::Menu_Helpers::MenuElem(
+ n->first.c_str(),
+ sigc::bind(sigc::mem_fun(*this, &MidiTimeAxisView::model_changed),
+ n->first.c_str()));
+
+ items.push_back(elem);
+ }
+
+ // Add manufacturer submenu to selector
+ _midnam_model_selector.AddMenuElem(Menu_Helpers::MenuElem(m->first, *menu));
}
if (gui_property (X_("midnam-model-name")).empty()) {
diff --git a/gtk2_ardour/patch_change.cc b/gtk2_ardour/patch_change.cc
index 09fb8b9778..18ef5da004 100644
--- a/gtk2_ardour/patch_change.cc
+++ b/gtk2_ardour/patch_change.cc
@@ -26,7 +26,7 @@
#include "gtkmm2ext/keyboard.h"
#include "gtkmm2ext/utils.h"
-#include "ardour/midi_patch_manager.h"
+#include "midi++/midnam_patch.h"
#include "canvas/debug.h"
diff --git a/gtk2_ardour/patch_change_dialog.cc b/gtk2_ardour/patch_change_dialog.cc
index 3af5a4ed7f..23941e1545 100644
--- a/gtk2_ardour/patch_change_dialog.cc
+++ b/gtk2_ardour/patch_change_dialog.cc
@@ -27,7 +27,6 @@
#include "midi++/midnam_patch.h"
-#include "ardour/midi_patch_manager.h"
#include "ardour/beats_frames_converter.h"
#include "ardour/instrument_info.h"
diff --git a/libs/ardour/ardour/midi_patch_manager.h b/libs/ardour/ardour/midi_patch_manager.h
index cd898aa00f..1b7de6a51d 100644
--- a/libs/ardour/ardour/midi_patch_manager.h
+++ b/libs/ardour/ardour/midi_patch_manager.h
@@ -46,7 +46,8 @@ private:
static MidiPatchManager* _manager;
public:
- typedef std::map<std::string, boost::shared_ptr<MIDINameDocument> > MidiNameDocuments;
+ typedef std::map<std::string, boost::shared_ptr<MIDINameDocument> > MidiNameDocuments;
+ typedef std::map<std::string, MIDINameDocument::MasterDeviceNamesList> DeviceNamesByMaker;
virtual ~MidiPatchManager() { _manager = 0; }
@@ -133,6 +134,8 @@ public:
const MasterDeviceNames::Models& all_models() const { return _all_models; }
+ const DeviceNamesByMaker& devices_by_manufacturer() const { return _devices_by_manufacturer; }
+
private:
void session_going_away();
void refresh();
@@ -140,6 +143,7 @@ private:
MidiNameDocuments _documents;
MIDINameDocument::MasterDeviceNamesList _master_devices_by_model;
+ DeviceNamesByMaker _devices_by_manufacturer;
MasterDeviceNames::Models _all_models;
};
diff --git a/libs/ardour/midi_patch_manager.cc b/libs/ardour/midi_patch_manager.cc
index ab66949326..e0638f035e 100644
--- a/libs/ardour/midi_patch_manager.cc
+++ b/libs/ardour/midi_patch_manager.cc
@@ -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,6 +108,7 @@ MidiPatchManager::refresh()
_documents.clear();
_master_devices_by_model.clear();
_all_models.clear();
+ _devices_by_manufacturer.clear();
Searchpath search_path = midi_patch_search_path ();
vector<std::string> result;
@@ -133,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));
}
}
@@ -148,4 +161,5 @@ MidiPatchManager::session_going_away ()
_documents.clear();
_master_devices_by_model.clear();
_all_models.clear();
+ _devices_by_manufacturer.clear();
}
diff --git a/patchfiles/Korg_Radias.midnam b/patchfiles/Korg_Radias.midnam
index 795c120d95..a82a6eef13 100644
--- a/patchfiles/Korg_Radias.midnam
+++ b/patchfiles/Korg_Radias.midnam
@@ -3,7 +3,7 @@
<MIDINameDocument>
<Author>CherryPicker</Author>
<MasterDeviceNames>
- <Manufacturer>Korg inc.</Manufacturer>
+ <Manufacturer>Korg</Manufacturer>
<Model>RADIAS</Model>
<CustomDeviceMode Name="CPMode 1">
<ChannelNameSetAssignments>