From 4e6d0c9e61b62931a4a2120b548f0ff02a966351 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 20 Jan 2013 08:56:00 +0000 Subject: Show matching controller name in automation lane header. Completely eliminate static MIDI controller name code. Reduce dependency on midnam_patch.h (which would have saved me several hours if I did it earlier). Store controller name numbers as an integer. Keep controller names in a map keyed by int instead of a list for fast lookup. More cleanup of MIDI::Name code. git-svn-id: svn://localhost/ardour2/branches/3.0@13927 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/canvas_patch_change.cc | 9 +++++---- gtk2_ardour/midi_region_view.cc | 5 ++--- gtk2_ardour/midi_time_axis.cc | 19 ++++++++++--------- gtk2_ardour/midi_time_axis.h | 17 ++++++++++++----- gtk2_ardour/patch_change_dialog.cc | 14 ++++++++------ gtk2_ardour/patch_change_dialog.h | 2 +- 6 files changed, 38 insertions(+), 28 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/canvas_patch_change.cc b/gtk2_ardour/canvas_patch_change.cc index 1958ea2b5e..34658f51a4 100644 --- a/gtk2_ardour/canvas_patch_change.cc +++ b/gtk2_ardour/canvas_patch_change.cc @@ -25,6 +25,7 @@ #include "gtkmm2ext/keyboard.h" #include "ardour/instrument_info.h" +#include "midi++/midnam_patch.h" #include "ardour_ui.h" #include "midi_region_view.h" @@ -92,10 +93,10 @@ CanvasPatchChange::initialize_popup_menus() ++bank) { Gtk::Menu& patch_bank_menu = *manage(new Gtk::Menu()); - const PatchBank::PatchNameList& patches = (*bank)->patch_name_list(); + const PatchNameList& patches = (*bank)->patch_name_list(); Gtk::Menu::MenuList& patch_menus = patch_bank_menu.items(); - for (PatchBank::PatchNameList::const_iterator patch = patches.begin(); + for (PatchNameList::const_iterator patch = patches.begin(); patch != patches.end(); ++patch) { std::string name = (*patch)->name(); @@ -119,10 +120,10 @@ CanvasPatchChange::initialize_popup_menus() } else { /* only one patch bank, so make it the initial menu */ - const PatchBank::PatchNameList& patches = patch_banks.front()->patch_name_list(); + const PatchNameList& patches = patch_banks.front()->patch_name_list(); Gtk::Menu::MenuList& patch_menus = _popup.items(); - for (PatchBank::PatchNameList::const_iterator patch = patches.begin(); + for (PatchNameList::const_iterator patch = patches.begin(); patch != patches.end(); ++patch) { std::string name = (*patch)->name(); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index acd63469c6..542894af81 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1820,10 +1820,9 @@ MidiRegionView::add_canvas_patch_change (MidiModel::PatchChangePtr patch, const displaytext, height, x, 1.0, - instrument_info(), + instrument_info(), patch, - active_channel) - ); + active_channel)); if (patch_change->width() < _pixel_width) { // Show unless patch change is beyond the region bounds diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 9d96ca756f..2b42d65a73 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -55,8 +55,6 @@ #include "ardour/track.h" #include "ardour/types.h" -#include "midi++/names.h" - #include "ardour_ui.h" #include "ardour_button.h" #include "automation_line.h" @@ -829,14 +827,17 @@ MidiTimeAxisView::build_controller_menu () /* Controllers names available in midnam file, generate fancy menu */ unsigned n_items = 0; unsigned n_groups = 0; + + /* TODO: This is not correct, should look up the currently applicable ControlNameList + and only build a menu for that one. */ for (MasterDeviceNames::ControlNameLists::const_iterator l = device_names->controls().begin(); l != device_names->controls().end(); ++l) { - boost::shared_ptr name_list = *l; + boost::shared_ptr name_list = l->second; Menu* ctl_menu = NULL; - for (ControlNameList::Controls::const_iterator c = (*l)->controls().begin(); - c != (*l)->controls().end(); ++c) { - const int ctl = atoi((*c)->number().c_str()); + for (ControlNameList::Controls::const_iterator c = name_list->controls().begin(); + c != name_list->controls().end(); ++c) { + const uint16_t ctl = c->second->number(); if (ctl == MIDI_CTL_MSB_BANK || ctl == MIDI_CTL_LSB_BANK) { /* Skip bank select controllers since they're handled specially */ continue; @@ -849,12 +850,12 @@ MidiTimeAxisView::build_controller_menu () MenuList& ctl_items (ctl_menu->items()); if (chn_cnt > 1) { - add_multi_channel_controller_item(ctl_items, ctl, (*c)->name()); + add_multi_channel_controller_item(ctl_items, ctl, c->second->name()); } else { - add_single_channel_controller_item(ctl_items, ctl, (*c)->name()); + add_single_channel_controller_item(ctl_items, ctl, c->second->name()); } - if (++n_items == 16 || c == (*l)->controls().end()) { + if (++n_items == 16 || c == name_list->controls().end()) { /* Submenu has 16 items, add it to controller menu and reset */ items.push_back( MenuElem(string_compose(_("Controllers %1-%2"), diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h index d61b64f36c..1f179baca6 100644 --- a/gtk2_ardour/midi_time_axis.h +++ b/gtk2_ardour/midi_time_axis.h @@ -41,6 +41,13 @@ #include "midi_streamview.h" #include "midi_channel_selector.h" +namespace MIDI { +namespace Name { +class MasterDeviceNames; +class CustomDeviceMode; +} +} + namespace ARDOUR { class Session; class RouteGroup; @@ -68,8 +75,8 @@ class MidiTimeAxisView : public RouteTimeAxisView void set_height (uint32_t); - void enter_internal_edit_mode (); - void leave_internal_edit_mode (); + void enter_internal_edit_mode (); + void leave_internal_edit_mode (); boost::shared_ptr add_region (ARDOUR::framepos_t, ARDOUR::framecnt_t, bool); @@ -93,8 +100,8 @@ class MidiTimeAxisView : public RouteTimeAxisView Gtk::CheckMenuItem* automation_child_menu_item (Evoral::Parameter); - StepEditor* step_editor() { return _step_editor; } - void check_step_edit (); + StepEditor* step_editor() { return _step_editor; } + void check_step_edit (); void first_idle (); @@ -168,7 +175,7 @@ class MidiTimeAxisView : public RouteTimeAxisView /** parameter -> menu item map for the controller menu */ ParameterMenuMap _controller_menu_map; - StepEditor* _step_editor; + StepEditor* _step_editor; }; #endif /* __ardour_midi_time_axis_h__ */ diff --git a/gtk2_ardour/patch_change_dialog.cc b/gtk2_ardour/patch_change_dialog.cc index c8394c2848..2ecfd4bdd7 100644 --- a/gtk2_ardour/patch_change_dialog.cc +++ b/gtk2_ardour/patch_change_dialog.cc @@ -25,6 +25,8 @@ #include "gtkmm2ext/utils.h" +#include "midi++/midnam_patch.h" + #include "ardour/midi_patch_manager.h" #include "ardour/beats_frames_converter.h" #include "ardour/instrument_info.h" @@ -255,8 +257,8 @@ PatchChangeDialog::fill_patch_combo () return; } - const MIDI::Name::PatchBank::PatchNameList& patches = _current_patch_bank->patch_name_list (); - for (MIDI::Name::PatchBank::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { + const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list (); + for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { string n = (*j)->name (); boost::replace_all (n, "_", " "); _patch_combo.append_text (n); @@ -278,8 +280,8 @@ PatchChangeDialog::set_active_patch_combo () return; } - const MIDI::Name::PatchBank::PatchNameList& patches = _current_patch_bank->patch_name_list (); - for (MIDI::Name::PatchBank::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { + const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list (); + for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { string n = (*j)->name (); boost::replace_all (n, "_", " "); @@ -305,9 +307,9 @@ PatchChangeDialog::patch_combo_changed () return; } - const MIDI::Name::PatchBank::PatchNameList& patches = _current_patch_bank->patch_name_list (); + const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list (); - for (MIDI::Name::PatchBank::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { + for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { string n = (*j)->name (); boost::replace_all (n, "_", " "); diff --git a/gtk2_ardour/patch_change_dialog.h b/gtk2_ardour/patch_change_dialog.h index c462ff0c77..ed0f49df34 100644 --- a/gtk2_ardour/patch_change_dialog.h +++ b/gtk2_ardour/patch_change_dialog.h @@ -20,7 +20,7 @@ #include #include -#include "midi++/midnam_patch.h" + #include "evoral/PatchChange.hpp" #include "ardour_dialog.h" #include "audio_clock.h" -- cgit v1.2.3