From 1ce39cfb25878272d091ec8cf3932221d716aa85 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 11 Apr 2012 19:27:13 +0000 Subject: [PATCH] MCP: more view mode stuff git-svn-id: svn://localhost/ardour2/branches/3.0@11913 d708f5d6-7413-0410-9779-e7cbd77b26cf --- .../mackie/mackie_control_protocol.cc | 44 +++------------- libs/surfaces/mackie/strip.cc | 1 - libs/surfaces/mackie/surface.cc | 52 +++++++++++++++++++ libs/surfaces/mackie/surface.h | 2 + 4 files changed, 60 insertions(+), 39 deletions(-) diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 94d1de2917..3878b0b0a2 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -333,6 +333,9 @@ MackieControlProtocol::switch_banks (uint32_t initial, bool force) // display the current start bank. surfaces.front()->display_bank_start (_current_initial_bank); + + /* reset this to get the right display of view mode after the switch */ + set_view_mode (_view_mode); } int @@ -1090,43 +1093,8 @@ MackieControlProtocol::set_view_mode (ViewMode m) { _view_mode = m; - if (surfaces.empty()) { - return; + for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) { + (*s)->update_view_mode_display (); } - - boost::shared_ptr surface = surfaces.front(); - - if (surface->type() == mcu) { - switch (_view_mode) { - case Global: - surface->write (surface->two_char_display ("Gl")); - break; - case Dynamics: - surface->write (surface->two_char_display ("Dy")); - break; - case EQ: - surface->write (surface->two_char_display ("EQ")); - break; - case Loop: - surface->write (surface->two_char_display ("LP")); - break; - case AudioTracks: - surface->write (surface->two_char_display ("AT")); - break; - case MidiTracks: - surface->write (surface->two_char_display ("MT")); - break; - case Busses: - surface->write (surface->two_char_display ("Bs")); - break; - case Sends: - surface->write (surface->two_char_display ("Sn")); - break; - case Plugins: - surface->write (surface->two_char_display ("Pl")); - break; - } - } - - switch_banks (_current_initial_bank, true); + } diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 9c68862872..4dfaa3b9d5 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -404,7 +404,6 @@ Strip::notify_property_changed (const PropertyChange& what_changed) } _surface->write (display (0, line1)); - _surface->write (blank_display (1)); } } diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index d47b4e260d..268de2f55b 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -581,6 +581,10 @@ static char translate_seven_segment (char achar) MidiByteArray Surface::two_char_display (const std::string & msg, const std::string & dots) { + if (_stype != mcu) { + return MidiByteArray(); + } + if (msg.length() != 2) throw MackieControlException ("MackieMidiBuilder::two_char_display: msg must be exactly 2 characters"); if (dots.length() != 2) throw MackieControlException ("MackieMidiBuilder::two_char_display: dots must be exactly 2 characters"); @@ -653,3 +657,51 @@ Surface::timecode_display (const std::string & timecode, const std::string & las return retval; } +void +Surface::update_view_mode_display () +{ + string text; + + switch (_mcp.view_mode()) { + case MackieControlProtocol::Global: + _port->write (two_char_display ("Gl")); + text = _("Pan"); + break; + case MackieControlProtocol::Dynamics: + _port->write (two_char_display ("Dy")); + text = _(""); + break; + case MackieControlProtocol::EQ: + _port->write (two_char_display ("EQ")); + text = _(""); + break; + case MackieControlProtocol::Loop: + _port->write (two_char_display ("LP")); + text = _(""); + break; + case MackieControlProtocol::AudioTracks: + _port->write (two_char_display ("AT")); + text = _(""); + break; + case MackieControlProtocol::MidiTracks: + _port->write (two_char_display ("MT")); + text = _(""); + break; + case MackieControlProtocol::Busses: + _port->write (two_char_display ("Bs")); + text = _(""); + break; + case MackieControlProtocol::Sends: + _port->write (two_char_display ("Sn")); + text = _(""); + break; + case MackieControlProtocol::Plugins: + _port->write (two_char_display ("Pl")); + text = _(""); + break; + } + + for (Strips::iterator s = strips.begin(); s != strips.end(); ++s) { + _port->write ((*s)->display (1, text)); + } +} diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index d88f37e5c6..a0883f4755 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -141,6 +141,8 @@ public: */ MidiByteArray timecode_display (const std::string & timecode, const std::string & last_timecode = ""); + void update_view_mode_display (); + protected: void init_controls(); void init_strips ();