mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
fix cherry-pick conflict
This commit is contained in:
parent
e302ce8662
commit
8ba8f1c0b0
7 changed files with 370 additions and 91 deletions
|
|
@ -113,6 +113,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
|
|||
, _scrub_mode (false)
|
||||
, _flip_mode (Normal)
|
||||
, _view_mode (Mixer)
|
||||
, _subview_mode (None)
|
||||
, _pot_mode (Pan)
|
||||
, _current_selected_track (-1)
|
||||
, _modifier_state (0)
|
||||
|
|
@ -357,12 +358,6 @@ MackieControlProtocol::get_sorted_routes()
|
|||
remote_ids.insert (route->remote_control_id());
|
||||
}
|
||||
break;
|
||||
case Dynamics:
|
||||
/* display shows a single route */
|
||||
break;
|
||||
case EQ:
|
||||
/* display shows a single route */
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1518,8 +1513,6 @@ MackieControlProtocol::handle_button_event (Surface& surface, Button& button, Bu
|
|||
|
||||
if (!action.empty()) {
|
||||
|
||||
std::cerr << "Button has action: " << action << std::endl;
|
||||
|
||||
if (action.find ('/') != string::npos) { /* good chance that this is really an action */
|
||||
|
||||
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Looked up action for button %1 with modifier %2, got [%3]\n",
|
||||
|
|
@ -1628,25 +1621,43 @@ MackieControlProtocol::clear_ports ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::set_subview_mode (SubViewMode sm)
|
||||
{
|
||||
_subview_mode = sm;
|
||||
display_view_mode ();
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::set_view_mode (ViewMode m)
|
||||
{
|
||||
_last_bank[_view_mode] = _current_initial_bank;
|
||||
|
||||
_view_mode = m;
|
||||
_subview_mode = None;
|
||||
|
||||
switch_banks(_last_bank[_view_mode], true);
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::display_view_mode ()
|
||||
{
|
||||
{
|
||||
Glib::Threads::Mutex::Lock lm (surfaces_lock);
|
||||
|
||||
for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
|
||||
(*s)->update_view_mode_display ();
|
||||
}
|
||||
}
|
||||
|
||||
/* turn buttons related to vpot mode on or off as required */
|
||||
if (_subview_mode != None) {
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Send, off);
|
||||
update_global_button (Button::Pan, off);
|
||||
} else {
|
||||
pot_mode_globals ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1676,6 +1687,7 @@ MackieControlProtocol::set_pot_mode (PotMode m)
|
|||
if (flip_mode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
_pot_mode = m;
|
||||
|
||||
{
|
||||
|
|
@ -1687,6 +1699,15 @@ MackieControlProtocol::set_pot_mode (PotMode m)
|
|||
}
|
||||
}
|
||||
|
||||
pot_mode_globals ();
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::pot_mode_globals ()
|
||||
{
|
||||
update_global_button (Button::Eq, off);
|
||||
update_global_button (Button::Dyn, off);
|
||||
|
||||
switch (_pot_mode) {
|
||||
case Trim:
|
||||
update_global_button (Button::Track, on);
|
||||
|
|
|
|||
|
|
@ -109,8 +109,12 @@ class MackieControlProtocol
|
|||
Auxes,
|
||||
Selected,
|
||||
Plugins,
|
||||
Dynamics,
|
||||
};
|
||||
|
||||
enum SubViewMode {
|
||||
None,
|
||||
EQ,
|
||||
Dynamics,
|
||||
};
|
||||
|
||||
enum PotMode {
|
||||
|
|
@ -145,6 +149,7 @@ class MackieControlProtocol
|
|||
|
||||
FlipMode flip_mode () const { return _flip_mode; }
|
||||
ViewMode view_mode () const { return _view_mode; }
|
||||
SubViewMode subview_mode () const { return _subview_mode; }
|
||||
PotMode pot_mode () const { return _pot_mode; }
|
||||
bool zoom_mode () const { return modifier_state() & MODIFIER_ZOOM; }
|
||||
bool metering_active () const { return _metering_active; }
|
||||
|
|
@ -155,8 +160,10 @@ class MackieControlProtocol
|
|||
bool selected (boost::shared_ptr<ARDOUR::Route>) const;
|
||||
|
||||
void set_view_mode (ViewMode);
|
||||
void set_subview_mode (SubViewMode);
|
||||
void set_flip_mode (FlipMode);
|
||||
void set_pot_mode (PotMode);
|
||||
void pot_mode_globals ();
|
||||
void display_view_mode ();
|
||||
|
||||
XMLNode& get_state ();
|
||||
|
|
@ -322,6 +329,7 @@ class MackieControlProtocol
|
|||
bool _scrub_mode;
|
||||
FlipMode _flip_mode;
|
||||
ViewMode _view_mode;
|
||||
SubViewMode _subview_mode;
|
||||
PotMode _pot_mode;
|
||||
int _current_selected_track;
|
||||
int _modifier_state;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "pbd/memento_command.h"
|
||||
|
||||
#include "ardour/debug.h"
|
||||
#include "ardour/profile.h"
|
||||
#include "ardour/session.h"
|
||||
#include "ardour/route.h"
|
||||
#include "ardour/location.h"
|
||||
|
|
@ -688,9 +689,14 @@ MackieControlProtocol::plugin_release (Button &)
|
|||
LedState
|
||||
MackieControlProtocol::eq_press (Button &)
|
||||
{
|
||||
//set_view_mode (EQ);
|
||||
// not implemented yet, turn off (see comments for send button)
|
||||
return off;
|
||||
if (Profile->get_mixbus()) {
|
||||
if (_last_selected_routes.size() == 1) {
|
||||
set_subview_mode (EQ);
|
||||
return on;
|
||||
}
|
||||
}
|
||||
return none;
|
||||
|
||||
}
|
||||
LedState
|
||||
MackieControlProtocol::eq_release (Button &)
|
||||
|
|
@ -700,9 +706,11 @@ MackieControlProtocol::eq_release (Button &)
|
|||
LedState
|
||||
MackieControlProtocol::dyn_press (Button &)
|
||||
{
|
||||
//set_view_mode (Dynamics);
|
||||
// same as send
|
||||
return off;
|
||||
if (Profile->get_mixbus()) {
|
||||
set_subview_mode (Dynamics);
|
||||
return on;
|
||||
}
|
||||
return none;
|
||||
}
|
||||
LedState
|
||||
MackieControlProtocol::dyn_release (Button &)
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ Strip::Strip (Surface& s, const std::string& name, int index, const map<Button::
|
|||
, _block_screen_redisplay_until (0)
|
||||
, _pan_mode (PanAzimuthAutomation)
|
||||
, _trim_mode (TrimAutomation)
|
||||
, vpot_parameter (PanAzimuthAutomation)
|
||||
, _last_gain_position_written (-1.0)
|
||||
, _last_pan_azi_position_written (-1.0)
|
||||
, _last_pan_width_position_written (-1.0)
|
||||
|
|
@ -192,6 +193,14 @@ Strip::set_route (boost::shared_ptr<Route> r, bool /*with_messages*/)
|
|||
control_by_parameter[TrimAutomation] = (Control*) 0;
|
||||
control_by_parameter[PhaseAutomation] = (Control*) 0;
|
||||
control_by_parameter[SendAutomation] = (Control*) 0;
|
||||
control_by_parameter[EQParam1] = (Control*) 0;
|
||||
control_by_parameter[EQParam2] = (Control*) 0;
|
||||
control_by_parameter[EQParam3] = (Control*) 0;
|
||||
control_by_parameter[EQParam4] = (Control*) 0;
|
||||
control_by_parameter[EQParam5] = (Control*) 0;
|
||||
control_by_parameter[EQParam6] = (Control*) 0;
|
||||
control_by_parameter[EQParam7] = (Control*) 0;
|
||||
control_by_parameter[EQParam8] = (Control*) 0;
|
||||
|
||||
reset_saved_values ();
|
||||
|
||||
|
|
@ -522,6 +531,9 @@ Strip::notify_property_changed (const PropertyChange& what_changed)
|
|||
void
|
||||
Strip::show_route_name ()
|
||||
{
|
||||
MackieControlProtocol::SubViewMode svm = _surface->mcp().subview_mode();
|
||||
|
||||
if (svm == MackieControlProtocol::None) {
|
||||
if (!_route) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -535,6 +547,55 @@ Strip::show_route_name ()
|
|||
}
|
||||
|
||||
_surface->write (display (0, line1));
|
||||
|
||||
} else if (svm == MackieControlProtocol::EQ) {
|
||||
if (_vpot == control_by_parameter[EQParam1]) {
|
||||
_surface->write (display (0, "HiFreq"));
|
||||
} else if (_vpot == control_by_parameter[EQParam2]) {
|
||||
_surface->write (display (0, "HiGain"));
|
||||
} else if (_vpot == control_by_parameter[EQParam3]) {
|
||||
_surface->write (display (0, "MidFreq"));
|
||||
} else if (_vpot == control_by_parameter[EQParam4]) {
|
||||
_surface->write (display (0, "MidGain"));
|
||||
} else if (_vpot == control_by_parameter[EQParam5]) {
|
||||
_surface->write (display (0, "LoFreq"));
|
||||
} else if (_vpot == control_by_parameter[EQParam6]) {
|
||||
_surface->write (display (0, "LoGain"));
|
||||
} else if (_vpot == control_by_parameter[EQParam7]) {
|
||||
_surface->write (display (0, "HPFreq"));
|
||||
} else if (_vpot == control_by_parameter[EQParam8]) {
|
||||
_surface->write (display (0, "In/Out"));
|
||||
}
|
||||
} else if (svm == MackieControlProtocol::Dynamics) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
Strip::notify_eq_change (AutomationType p, uint32_t port_number, bool force_update)
|
||||
{
|
||||
if (!_subview_route) {
|
||||
/* no longer in EQ subview mode */
|
||||
return;
|
||||
}
|
||||
|
||||
if (_vpot != control_by_parameter[p]) {
|
||||
/* vpot is no longer controlling this EQ parameter */
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<PluginInsert> eq = _subview_route->ch_eq();
|
||||
|
||||
if (eq) {
|
||||
boost::shared_ptr<AutomationControl> control = boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (eq->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_number)));
|
||||
|
||||
if (control) {
|
||||
float val = control->get_value();
|
||||
queue_parameter_display (p, val);
|
||||
_surface->write (_vpot->set (control->internal_to_interface (val), true, Pot::wrap));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -801,13 +862,13 @@ void
|
|||
Strip::do_parameter_display (AutomationType type, float val)
|
||||
{
|
||||
bool screen_hold = false;
|
||||
char buf[16];
|
||||
|
||||
switch (type) {
|
||||
case GainAutomation:
|
||||
if (val == 0.0) {
|
||||
_surface->write (display (1, " -inf "));
|
||||
} else {
|
||||
char buf[16];
|
||||
float dB = accurate_coefficient_to_dB (val);
|
||||
snprintf (buf, sizeof (buf), "%6.1f", dB);
|
||||
_surface->write (display (1, buf));
|
||||
|
|
@ -817,7 +878,6 @@ Strip::do_parameter_display (AutomationType type, float val)
|
|||
|
||||
case PanAzimuthAutomation:
|
||||
if (Profile->get_mixbus()) {
|
||||
char buf[16];
|
||||
snprintf (buf, sizeof (buf), "%2.1f", val);
|
||||
_surface->write (display (1, buf));
|
||||
screen_hold = true;
|
||||
|
|
@ -835,7 +895,6 @@ if (Profile->get_mixbus()) {
|
|||
|
||||
case PanWidthAutomation:
|
||||
if (_route) {
|
||||
char buf[16];
|
||||
snprintf (buf, sizeof (buf), "%5ld%%", lrintf ((val * 200.0)-100));
|
||||
_surface->write (display (1, buf));
|
||||
screen_hold = true;
|
||||
|
|
@ -844,7 +903,6 @@ if (Profile->get_mixbus()) {
|
|||
|
||||
case TrimAutomation:
|
||||
if (_route) {
|
||||
char buf[16];
|
||||
float dB = accurate_coefficient_to_dB (val);
|
||||
snprintf (buf, sizeof (buf), "%6.1f", dB);
|
||||
_surface->write (display (1, buf));
|
||||
|
|
@ -867,14 +925,23 @@ if (Profile->get_mixbus()) {
|
|||
if (val == 0.0) {
|
||||
_surface->write (display (1, " -inf "));
|
||||
} else {
|
||||
char buf[16];
|
||||
float dB = accurate_coefficient_to_dB (val);
|
||||
snprintf (buf, sizeof (buf), "%6.1f", dB);
|
||||
_surface->write (display (1, buf));
|
||||
screen_hold = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EQParam1:
|
||||
case EQParam2:
|
||||
case EQParam3:
|
||||
case EQParam4:
|
||||
case EQParam5:
|
||||
case EQParam6:
|
||||
case EQParam7:
|
||||
case EQParam8:
|
||||
snprintf (buf, sizeof (buf), "%6.1f", val);
|
||||
_surface->write (display (1, buf));
|
||||
screen_hold = true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1164,6 +1231,10 @@ Strip::vpot_mode_string ()
|
|||
return "LFE";
|
||||
}
|
||||
|
||||
if (_subview_route) {
|
||||
return string();
|
||||
}
|
||||
|
||||
return "???";
|
||||
}
|
||||
|
||||
|
|
@ -1216,8 +1287,10 @@ Strip::return_to_vpot_mode_display ()
|
|||
/* returns the second line of the two-line per-strip display
|
||||
back the mode where it shows what the VPot controls.
|
||||
*/
|
||||
|
||||
if (_route) {
|
||||
if (_subview_route) {
|
||||
/* do nothing - second line shows value of current subview parameter */
|
||||
return;
|
||||
} else if (_route) {
|
||||
_surface->write (display (1, vpot_mode_string()));
|
||||
} else {
|
||||
_surface->write (blank_display (1));
|
||||
|
|
@ -1314,7 +1387,55 @@ Strip::next_pot_mode ()
|
|||
}
|
||||
|
||||
void
|
||||
Strip::set_vpot_parameter (Evoral::Parameter p)
|
||||
Strip::use_subview (MackieControlProtocol::SubViewMode sm, boost::shared_ptr<Route> target_route)
|
||||
{
|
||||
if (!_route) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (sm) {
|
||||
case MackieControlProtocol::None:
|
||||
if (vpot_parameter != NullAutomation) {
|
||||
set_vpot_parameter (vpot_parameter);
|
||||
}
|
||||
break;
|
||||
|
||||
case MackieControlProtocol::EQ:
|
||||
switch (_index) {
|
||||
case 0:
|
||||
set_vpot_parameter (ARDOUR::EQParam1, target_route);
|
||||
break;
|
||||
case 1:
|
||||
set_vpot_parameter (ARDOUR::EQParam2, target_route);
|
||||
break;
|
||||
case 2:
|
||||
set_vpot_parameter (ARDOUR::EQParam3, target_route);
|
||||
break;
|
||||
case 3:
|
||||
set_vpot_parameter (ARDOUR::EQParam4, target_route);
|
||||
break;
|
||||
case 4:
|
||||
set_vpot_parameter (ARDOUR::EQParam5, target_route);
|
||||
break;
|
||||
case 5:
|
||||
set_vpot_parameter (ARDOUR::EQParam6, target_route);
|
||||
break;
|
||||
case 6:
|
||||
set_vpot_parameter (ARDOUR::EQParam7, target_route);
|
||||
break;
|
||||
case 7:
|
||||
set_vpot_parameter (ARDOUR::EQParam8, target_route);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case MackieControlProtocol::Dynamics:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Strip::set_vpot_parameter (Evoral::Parameter p, boost::shared_ptr<Route> target_route)
|
||||
{
|
||||
boost::shared_ptr<Pannable> pannable;
|
||||
|
||||
|
|
@ -1322,6 +1443,17 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
|
||||
reset_saved_values ();
|
||||
|
||||
/* target route is either null, or points to a route other than the one
|
||||
we are controlling/viewing, to be used while in a particular subview
|
||||
state (e.g. EQ or Dynamics)
|
||||
*/
|
||||
|
||||
if (target_route != _subview_route) {
|
||||
subview_connections.drop_connections ();
|
||||
}
|
||||
|
||||
_subview_route = target_route;
|
||||
|
||||
/* unset any mapping between the vpot and any existing parameters */
|
||||
|
||||
for (ControlParameterMap::iterator i = control_by_parameter.begin(); i != control_by_parameter.end(); ++i) {
|
||||
|
|
@ -1335,6 +1467,7 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
case PanAzimuthAutomation:
|
||||
_pan_mode = PanAzimuthAutomation;
|
||||
pannable = _route->pannable ();
|
||||
vpot_parameter = PanAzimuthAutomation;
|
||||
if (_surface->mcp().flip_mode() != MackieControlProtocol::Normal) {
|
||||
/* gain to vpot, pan azi to fader */
|
||||
_vpot->set_control (_route->group_gain_control());
|
||||
|
|
@ -1362,6 +1495,7 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
case PanWidthAutomation:
|
||||
_pan_mode = PanWidthAutomation;
|
||||
pannable = _route->pannable ();
|
||||
vpot_parameter = PanWidthAutomation;
|
||||
if (_surface->mcp().flip_mode() != MackieControlProtocol::Normal) {
|
||||
/* gain to vpot, pan width to fader */
|
||||
_vpot->set_control (_route->group_gain_control());
|
||||
|
|
@ -1394,6 +1528,7 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
break;
|
||||
case TrimAutomation:
|
||||
_trim_mode = TrimAutomation;
|
||||
vpot_parameter = TrimAutomation;
|
||||
if (_surface->mcp().flip_mode() != MackieControlProtocol::Normal) {
|
||||
/* gain to vpot, trim to fader */
|
||||
_vpot->set_control (_route->group_gain_control());
|
||||
|
|
@ -1420,6 +1555,7 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
break;
|
||||
case PhaseAutomation:
|
||||
_trim_mode = PhaseAutomation;
|
||||
vpot_parameter = PhaseAutomation;
|
||||
if (_surface->mcp().flip_mode() != MackieControlProtocol::Normal) {
|
||||
/* gain to vpot, phase to fader */
|
||||
_vpot->set_control (_route->group_gain_control());
|
||||
|
|
@ -1445,6 +1581,7 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
}
|
||||
break;
|
||||
case SendAutomation:
|
||||
if (!Profile->get_mixbus()) {
|
||||
if (_surface->mcp().flip_mode() != MackieControlProtocol::Normal) {
|
||||
// gain to vpot, send to fader
|
||||
_vpot->set_control (_route->group_gain_control());
|
||||
|
|
@ -1463,6 +1600,19 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
_fader->set_control (boost::shared_ptr<AutomationControl>());
|
||||
control_by_parameter[SendAutomation] = 0;
|
||||
}
|
||||
} else {
|
||||
// gain to fader, send to vpot
|
||||
_fader->set_control (_route->group_gain_control());
|
||||
control_by_parameter[GainAutomation] = _fader;
|
||||
boost::shared_ptr<Processor> p = _route->nth_send (_current_send);
|
||||
if (p && p->name() != "Monitor 1") {
|
||||
boost::shared_ptr<Send> s = boost::dynamic_pointer_cast<Send>(p);
|
||||
boost::shared_ptr<Amp> a = s->amp();
|
||||
_vpot->set_control (a->gain_control());
|
||||
// connect to signal
|
||||
send_connections.drop_connections ();
|
||||
a->gain_control()->Changed.connect(send_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_processor_changed, this, false), ui_context());
|
||||
control_by_parameter[SendAutomation] = _vpot;
|
||||
} else {
|
||||
// gain to fader, send to vpot
|
||||
_fader->set_control (_route->group_gain_control());
|
||||
|
|
@ -1481,7 +1631,48 @@ Strip::set_vpot_parameter (Evoral::Parameter p)
|
|||
control_by_parameter[SendAutomation] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EQParam1: {
|
||||
const uint32_t eq_hi_freq = 3; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam1, eq_hi_freq);
|
||||
break;
|
||||
}
|
||||
case EQParam2: {
|
||||
const uint32_t eq_hi_gain = 4; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam2, eq_hi_gain);
|
||||
break;
|
||||
}
|
||||
case EQParam3: {
|
||||
const uint32_t eq_mid_freq = 5; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam3, eq_mid_freq);
|
||||
break;
|
||||
}
|
||||
case EQParam4: {
|
||||
const uint32_t eq_mid_gain = 6; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam4, eq_mid_gain);
|
||||
break;
|
||||
}
|
||||
case EQParam5: {
|
||||
const uint32_t eq_lo_freq = 7; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam5, eq_lo_freq);
|
||||
break;
|
||||
}
|
||||
case EQParam6: {
|
||||
const uint32_t eq_lo_gain = 8; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam6, eq_lo_gain);
|
||||
break;
|
||||
}
|
||||
case EQParam7: {
|
||||
const uint32_t eq_hp_freq = 2; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam7, eq_hp_freq);
|
||||
break;
|
||||
}
|
||||
case EQParam8: {
|
||||
const uint32_t eq_in = 1; /* gtk2_ardour/mixbus_ports.h */
|
||||
hookup_eq (EQParam8, eq_in);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("vpot mode %1 not known.\n", p));
|
||||
break;
|
||||
|
|
@ -1531,3 +1722,27 @@ Strip::notify_metering_state_changed()
|
|||
_transport_is_rolling = transport_is_rolling;
|
||||
_metering_active = metering_active;
|
||||
}
|
||||
|
||||
void
|
||||
Strip::hookup_eq (AutomationType param, uint32_t port_number)
|
||||
{
|
||||
if (!_subview_route) {
|
||||
_vpot->set_control (boost::shared_ptr<AutomationControl>());
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<PluginInsert> eq = _subview_route->ch_eq();
|
||||
|
||||
if (!eq) {
|
||||
_vpot->set_control (boost::shared_ptr<AutomationControl>());
|
||||
}
|
||||
|
||||
boost::shared_ptr<AutomationControl> control = boost::dynamic_pointer_cast<ARDOUR::AutomationControl> (eq->control (Evoral::Parameter (ARDOUR::PluginAutomation, 0, port_number)));
|
||||
|
||||
if (control) {
|
||||
control->Changed.connect (subview_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_eq_change, this, param, port_number, false), ui_context());
|
||||
_vpot->set_control (control);
|
||||
control_by_parameter[param] = _vpot;
|
||||
show_route_name ();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "control_group.h"
|
||||
#include "types.h"
|
||||
#include "mackie_control_protocol.h"
|
||||
#include "midi_byte_array.h"
|
||||
#include "device_info.h"
|
||||
|
||||
|
|
@ -88,6 +89,8 @@ public:
|
|||
void block_screen_display_for (uint32_t msecs);
|
||||
void block_vpot_mode_display_for (uint32_t msecs);
|
||||
|
||||
void use_subview (MackieControlProtocol::SubViewMode, boost::shared_ptr<ARDOUR::Route>);
|
||||
|
||||
private:
|
||||
Button* _solo;
|
||||
Button* _recenable;
|
||||
|
|
@ -106,11 +109,14 @@ private:
|
|||
uint64_t _block_vpot_mode_redisplay_until;
|
||||
uint64_t _block_screen_redisplay_until;
|
||||
boost::shared_ptr<ARDOUR::Route> _route;
|
||||
boost::shared_ptr<ARDOUR::Route> _subview_route;
|
||||
PBD::ScopedConnectionList route_connections;
|
||||
PBD::ScopedConnectionList subview_connections;
|
||||
PBD::ScopedConnectionList send_connections;
|
||||
|
||||
ARDOUR::AutomationType _pan_mode;
|
||||
ARDOUR::AutomationType _trim_mode;
|
||||
ARDOUR::AutomationType vpot_parameter;
|
||||
|
||||
float _last_gain_position_written;
|
||||
float _last_pan_azi_position_written;
|
||||
|
|
@ -155,7 +161,7 @@ private:
|
|||
std::vector<Evoral::Parameter> possible_pot_parameters;
|
||||
std::vector<Evoral::Parameter> possible_trim_parameters;
|
||||
void next_pot_mode ();
|
||||
void set_vpot_parameter (Evoral::Parameter);
|
||||
void set_vpot_parameter (Evoral::Parameter, boost::shared_ptr<ARDOUR::Route> target_route = boost::shared_ptr<ARDOUR::Route>());
|
||||
void show_route_name ();
|
||||
|
||||
void reset_saved_values ();
|
||||
|
|
@ -164,6 +170,9 @@ private:
|
|||
|
||||
typedef std::map<Evoral::Parameter,Control*> ControlParameterMap;
|
||||
ControlParameterMap control_by_parameter;
|
||||
|
||||
void hookup_eq (ARDOUR::AutomationType, uint32_t);
|
||||
void notify_eq_change (ARDOUR::AutomationType, uint32_t, bool force);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1037,6 +1037,29 @@ Surface::update_potmode ()
|
|||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Surface::update_subview_mode_display ()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/* no normal display required */
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Surface::update_view_mode_display ()
|
||||
{
|
||||
|
|
@ -1047,6 +1070,10 @@ Surface::update_view_mode_display ()
|
|||
return;
|
||||
}
|
||||
|
||||
if (update_subview_mode_display ()) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_mcp.view_mode()) {
|
||||
case MackieControlProtocol::Mixer:
|
||||
show_two_char_display ("Mx");
|
||||
|
|
@ -1087,16 +1114,6 @@ Surface::update_view_mode_display ()
|
|||
id = Button::User;
|
||||
text = _("Selected Routes");
|
||||
break;
|
||||
case MackieControlProtocol::Dynamics:
|
||||
show_two_char_display ("DI");
|
||||
id = Button::User;
|
||||
text = _("Dynamics");
|
||||
break;
|
||||
case MackieControlProtocol::EQ:
|
||||
show_two_char_display ("EQ");
|
||||
id = Button::User;
|
||||
text = _("EQ");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ public:
|
|||
int connection_state;
|
||||
|
||||
MidiByteArray display_line (std::string const& msg, int line_num);
|
||||
bool update_subview_mode_display ();
|
||||
|
||||
public:
|
||||
/* IP MIDI devices need to keep a handle on this and destroy it */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue