diff options
author | David Robillard <d@drobilla.net> | 2014-12-13 00:37:34 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-12-13 00:37:34 -0500 |
commit | ee38c44109bff63828dac220107f4b54c4a809a3 (patch) | |
tree | 46177171139a89e3aaa987f49d1beaba867b1351 /gtk2_ardour | |
parent | 17a58ecd4bdf0764f1d074a56743f2304bd713a7 (diff) |
Structure MIDI device selector by manufacturer.
Unfortunately we store the state of models as simply model, so if there's ever
duplicate model names, we're somewhat screwed, but this makes the (previously
unmanageably huge) menu usable, while retaining the "model name as global
identifier" state unmodified.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 30 | ||||
-rw-r--r-- | gtk2_ardour/patch_change.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/patch_change_dialog.cc | 1 |
4 files changed, 25 insertions, 11 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" |