mackie: clean up (some) interactions between subview mode and selection
Also, stop Plugin button from doing anything, since it has nothing to do yet
This commit is contained in:
parent
d121e6bf15
commit
e63c805fe2
|
@ -1624,7 +1624,43 @@ MackieControlProtocol::notify_subview_route_deleted ()
|
|||
set_view_mode (Mixer);
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
MackieControlProtocol::subview_mode_would_be_ok (SubViewMode mode, boost::shared_ptr<Route> r)
|
||||
{
|
||||
|
||||
if (!r) {
|
||||
/* no selected track? no subview mode */
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case None:
|
||||
return true;
|
||||
break;
|
||||
|
||||
case Sends:
|
||||
if (r->send_level_controllable (0)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EQ:
|
||||
if (r->eq_band_cnt() > 0) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Dynamics:
|
||||
if (r->comp_enable_controllable()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route> r)
|
||||
{
|
||||
SubViewMode old_mode = _subview_mode;
|
||||
|
@ -1637,6 +1673,35 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route
|
|||
_subview_route = r;
|
||||
}
|
||||
|
||||
if (!subview_mode_would_be_ok (sm, r)) {
|
||||
|
||||
Glib::Threads::Mutex::Lock lm (surfaces_lock);
|
||||
|
||||
if (!surfaces.empty()) {
|
||||
|
||||
string msg;
|
||||
|
||||
switch (sm) {
|
||||
case Sends:
|
||||
msg = _("no sends for selected track/bus");
|
||||
break;
|
||||
case EQ:
|
||||
msg = _("no EQ in the track/bus");
|
||||
break;
|
||||
case Dynamics:
|
||||
msg = _("no dynamics in selected track/bus");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (!msg.empty()) {
|
||||
surfaces.front()->display_message_for (msg, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((_subview_mode != old_mode) || (_subview_route != old_route)) {
|
||||
|
||||
if (r != old_route) {
|
||||
|
@ -1699,6 +1764,8 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1753,6 +1820,10 @@ MackieControlProtocol::set_pot_mode (PotMode m)
|
|||
return;
|
||||
}
|
||||
|
||||
/* switch to a pot mode cancels any subview mode */
|
||||
|
||||
set_subview_mode (None, boost::shared_ptr<Route>());
|
||||
|
||||
_pot_mode = m;
|
||||
|
||||
{
|
||||
|
@ -1859,8 +1930,12 @@ MackieControlProtocol::_gui_track_selection_changed (ARDOUR::RouteNotificationLi
|
|||
}
|
||||
|
||||
if (gui_selection_did_change) {
|
||||
/* actual GUI selection changed */
|
||||
set_subview_mode (_subview_mode, first_selected_route());
|
||||
|
||||
/* actual GUI selection changed, which may affect subview state */
|
||||
|
||||
if (set_subview_mode (_subview_mode, first_selected_route())) {
|
||||
set_subview_mode (None, boost::shared_ptr<Route>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -152,6 +152,7 @@ class MackieControlProtocol
|
|||
FlipMode flip_mode () const { return _flip_mode; }
|
||||
ViewMode view_mode () const { return _view_mode; }
|
||||
SubViewMode subview_mode () const { return _subview_mode; }
|
||||
static bool subview_mode_would_be_ok (SubViewMode, boost::shared_ptr<ARDOUR::Route>);
|
||||
boost::shared_ptr<ARDOUR::Route> subview_route() const;
|
||||
PotMode pot_mode () const { return _pot_mode; }
|
||||
bool zoom_mode () const { return modifier_state() & MODIFIER_ZOOM; }
|
||||
|
@ -165,7 +166,7 @@ class MackieControlProtocol
|
|||
boost::shared_ptr<ARDOUR::Route> first_selected_route () const;
|
||||
|
||||
void set_view_mode (ViewMode);
|
||||
void set_subview_mode (SubViewMode, boost::shared_ptr<ARDOUR::Route>);
|
||||
int set_subview_mode (SubViewMode, boost::shared_ptr<ARDOUR::Route>);
|
||||
void set_flip_mode (FlipMode);
|
||||
void set_pot_mode (PotMode);
|
||||
void pot_mode_globals ();
|
||||
|
|
|
@ -689,20 +689,16 @@ MackieControlProtocol::plugin_press (Button &)
|
|||
LedState
|
||||
MackieControlProtocol::plugin_release (Button &)
|
||||
{
|
||||
set_view_mode (Plugins);
|
||||
// Do not do this yet, since it does nothing
|
||||
// set_view_mode (Plugins);
|
||||
return none; /* LED state set by set_view_mode */
|
||||
}
|
||||
LedState
|
||||
MackieControlProtocol::eq_press (Button &)
|
||||
{
|
||||
if (Profile->get_mixbus()) {
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
if (r && r->eq_band_cnt() > 0) {
|
||||
set_subview_mode (EQ, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
}
|
||||
}
|
||||
return none;
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
set_subview_mode (EQ, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
|
||||
}
|
||||
LedState
|
||||
|
@ -713,16 +709,9 @@ MackieControlProtocol::eq_release (Button &)
|
|||
LedState
|
||||
MackieControlProtocol::dyn_press (Button &)
|
||||
{
|
||||
if (Profile->get_mixbus()) {
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
|
||||
if (r) {
|
||||
set_subview_mode (Dynamics, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
}
|
||||
}
|
||||
|
||||
return none;
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
set_subview_mode (Dynamics, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
}
|
||||
|
||||
LedState
|
||||
|
@ -879,20 +868,8 @@ Mackie::LedState
|
|||
MackieControlProtocol::send_press (Mackie::Button&)
|
||||
{
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
if (r) {
|
||||
#ifndef MIXBUS
|
||||
if (!r->nth_send (0)) {
|
||||
/* no sends ... no send subview mode */
|
||||
if (!surfaces.empty()) {
|
||||
surfaces.front()->display_message_for (_("No sends for this track/bus"), 1000);
|
||||
}
|
||||
return none;
|
||||
}
|
||||
#endif
|
||||
set_subview_mode (Sends, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
}
|
||||
return none;
|
||||
set_subview_mode (Sends, r);
|
||||
return none; /* led state handled by set_subview_mode() */
|
||||
}
|
||||
Mackie::LedState
|
||||
MackieControlProtocol::send_release (Mackie::Button&)
|
||||
|
|
|
@ -771,23 +771,52 @@ Strip::vselect_event (Button&, ButtonState bs)
|
|||
{
|
||||
if (_surface->mcp().subview_mode() != MackieControlProtocol::None) {
|
||||
|
||||
/* subview mode: vpot press acts like a button for toggle parameters */
|
||||
/* most subview modes: vpot press acts like a button for toggle parameters */
|
||||
|
||||
if (bs != press) {
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<AutomationControl> control = _vpot->control ();
|
||||
if (!control) {
|
||||
return;
|
||||
}
|
||||
if (_surface->mcp().subview_mode() != MackieControlProtocol::Sends) {
|
||||
|
||||
boost::shared_ptr<AutomationControl> control = _vpot->control ();
|
||||
if (!control) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (control->toggled()) {
|
||||
if (control->toggled()) {
|
||||
control->set_value (!control->get_value(), Controllable::NoGroup);
|
||||
if (control->toggled()) {
|
||||
control->set_value (!control->get_value(), Controllable::NoGroup);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
/* Send mode: press enables/disables the relevant send */
|
||||
|
||||
if (_route) {
|
||||
|
||||
const uint32_t global_pos = _surface->mcp().global_index (*this);
|
||||
boost::shared_ptr<AutomationControl> control = _route->send_enable_controllable (global_pos);
|
||||
|
||||
if (control) {
|
||||
bool currently_enabled = (bool) control->get_value();
|
||||
control->set_value (!currently_enabled, Controllable::UseGroup);
|
||||
|
||||
if (currently_enabled) {
|
||||
/* we just turned it off */
|
||||
display (1, "off");
|
||||
} else {
|
||||
/* we just turned it on, show the level
|
||||
*/
|
||||
control = _route->send_level_controllable (global_pos);
|
||||
do_parameter_display (BusSendLevel, control->get_value());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* done with this event in subview mode */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1477,6 +1506,8 @@ Strip::subview_mode_changed ()
|
|||
switch (_surface->mcp().subview_mode()) {
|
||||
case MackieControlProtocol::None:
|
||||
set_vpot_parameter (vpot_parameter);
|
||||
/* need to show strip name again */
|
||||
show_route_name ();
|
||||
notify_metering_state_changed ();
|
||||
eq_band = -1;
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue
Block a user