X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fsurface.cc;h=fdb4d666b0240873033ed5a83a490821e8a182c0;hb=d0668e55114be299cbf5e348c73588756e931cfe;hp=336855659b52018747d0303903ea177ea17ed03c;hpb=8ba8f1c0b08bb1c8ffbb4f419806e0c05619808b;p=ardour.git diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 336855659b..fdb4d666b0 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -25,6 +25,8 @@ #include +#include "pbd/stacktrace.h" + #include "midi++/port.h" #include "ardour/audioengine.h" @@ -367,7 +369,9 @@ Surface::init_strips (uint32_t n) void Surface::master_monitor_may_have_changed () { - setup_master (); + if (_number == _mcp.device_info().master_position()) { + setup_master (); + } } void @@ -525,14 +529,6 @@ Surface::handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t pb, uin turn_it_on (); } - if (_mcp.main_modifier_state() & MackieControlProtocol::MODIFIER_SHIFT) { - /* user is doing a reset to unity gain but device sends a PB - * message in the middle of the touch on/off messages. Ignore - * it. - */ - return; - } - Fader* fader = faders[fader_id]; if (fader) { @@ -792,7 +788,7 @@ Surface::turn_it_on () (*s)->notify_all (); } - update_view_mode_display (); + update_view_mode_display (false); if (_mcp.device_info ().has_global_controls ()) { _mcp.update_global_button (Button::Read, _mcp.metering_active ()); @@ -941,8 +937,6 @@ Surface::map_routes (const vector >& routes) for (; s != strips.end(); ++s) { (*s)->set_route (boost::shared_ptr()); } - - } static char @@ -1029,7 +1023,7 @@ Surface::update_flip_mode_display () } } - void +void Surface::update_potmode () { for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) { @@ -1037,31 +1031,16 @@ Surface::update_potmode () } } -bool -Surface::update_subview_mode_display () +void +Surface::subview_mode_changed () { - switch (_mcp.subview_mode()) { - case MackieControlProtocol::None: - for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) { - (*s)->use_subview (MackieControlProtocol::None, strips.front()->route()); - } - /* normal display is required */ - return false; - case MackieControlProtocol::EQ: - for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) { - (*s)->use_subview (MackieControlProtocol::EQ, strips.front()->route()); - } - break; - case MackieControlProtocol::Dynamics: - break; + for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) { + (*s)->subview_mode_changed (); } - - /* no normal display required */ - return true; } void -Surface::update_view_mode_display () +Surface::update_view_mode_display (bool with_helpful_text) { string text; int id = -1; @@ -1070,10 +1049,6 @@ Surface::update_view_mode_display () return; } - if (update_subview_mode_display ()) { - return; - } - switch (_mcp.view_mode()) { case MackieControlProtocol::Mixer: show_two_char_display ("Mx"); @@ -1109,10 +1084,15 @@ Surface::update_view_mode_display () id = Button::Aux; text = _("Auxes"); break; + case MackieControlProtocol::Hidden: + show_two_char_display ("HI"); + id = Button::Outputs; + text = _("Hidden Tracks"); + break; case MackieControlProtocol::Selected: show_two_char_display ("SE"); id = Button::User; - text = _("Selected Routes"); + text = _("Selected Tracks"); break; default: break; @@ -1125,6 +1105,7 @@ Surface::update_view_mode_display () view_mode_buttons.push_back (Button::AudioTracks); view_mode_buttons.push_back (Button::MidiTracks); view_mode_buttons.push_back (Button::Aux); + view_mode_buttons.push_back (Button::Outputs); view_mode_buttons.push_back (Button::User); if (id >= 0) { @@ -1144,7 +1125,7 @@ Surface::update_view_mode_display () } } - if (!text.empty()) { + if (with_helpful_text && !text.empty()) { display_message_for (text, 1000); } } @@ -1192,6 +1173,18 @@ Surface::route_is_locked_to_strip (boost::shared_ptr r) const return false; } +bool +Surface::route_is_mapped (boost::shared_ptr r) const +{ + for (Strips::const_iterator s = strips.begin(); s != strips.end(); ++s) { + if ((*s)->route() == r) { + return true; + } + } + + return false; +} + void Surface::notify_metering_state_changed() {