mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
mackie: basically (fully?) operation fader automatio control for first selected route
This commit is contained in:
parent
da35f58218
commit
d5a8825ce8
3 changed files with 102 additions and 15 deletions
|
|
@ -123,7 +123,6 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
|
|||
, _initialized (false)
|
||||
, configuration_state (0)
|
||||
, state_version (0)
|
||||
, _group_on (false)
|
||||
{
|
||||
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
|
||||
|
||||
|
|
@ -615,6 +614,10 @@ MackieControlProtocol::update_global_button (int id, LedState ls)
|
|||
if (x != surface->controls_by_device_independent_id.end()) {
|
||||
Button * button = dynamic_cast<Button*> (x->second);
|
||||
surface->write (button->set_state (ls));
|
||||
|
||||
if (ls == on) {
|
||||
// blinkers.erase (id);
|
||||
}
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Button %1 not found\n", id));
|
||||
}
|
||||
|
|
@ -1962,6 +1965,8 @@ MackieControlProtocol::_gui_track_selection_changed (ARDOUR::RouteNotificationLi
|
|||
|
||||
if (gui_selection_did_change) {
|
||||
|
||||
check_fader_automation_state ();
|
||||
|
||||
/* note: this method is also called when we switch banks.
|
||||
* But ... we don't allow bank switching when in subview mode.
|
||||
*
|
||||
|
|
@ -1981,6 +1986,82 @@ MackieControlProtocol::_gui_track_selection_changed (ARDOUR::RouteNotificationLi
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::check_fader_automation_state ()
|
||||
{
|
||||
fader_automation_connections.drop_connections ();
|
||||
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
|
||||
if (!r) {
|
||||
update_global_button (Button::Read, off);
|
||||
update_global_button (Button::Write, off);
|
||||
update_global_button (Button::Touch, off);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, on);
|
||||
return;
|
||||
}
|
||||
|
||||
r->gain_control()->alist()->automation_state_changed.connect (fader_automation_connections,
|
||||
MISSING_INVALIDATOR,
|
||||
boost::bind (&MackieControlProtocol::update_fader_automation_state, this),
|
||||
this);
|
||||
|
||||
update_fader_automation_state ();
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::update_fader_automation_state ()
|
||||
{
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
|
||||
if (!r) {
|
||||
update_global_button (Button::Read, off);
|
||||
update_global_button (Button::Write, off);
|
||||
update_global_button (Button::Touch, off);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, on);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (r->gain_control()->automation_state()) {
|
||||
case Off:
|
||||
update_global_button (Button::Read, off);
|
||||
update_global_button (Button::Write, off);
|
||||
update_global_button (Button::Touch, off);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, on);
|
||||
break;
|
||||
case Play:
|
||||
update_global_button (Button::Read, on);
|
||||
update_global_button (Button::Write, off);
|
||||
update_global_button (Button::Touch, off);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, off);
|
||||
break;
|
||||
case Write:
|
||||
update_global_button (Button::Read, off);
|
||||
update_global_button (Button::Write, on);
|
||||
update_global_button (Button::Touch, off);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, off);
|
||||
break;
|
||||
case Touch:
|
||||
update_global_button (Button::Read, off);
|
||||
update_global_button (Button::Write, off);
|
||||
update_global_button (Button::Touch, on);
|
||||
update_global_button (Button::Trim, off);
|
||||
update_global_button (Button::Latch, off);
|
||||
update_global_button (Button::Grp, off);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
framepos_t
|
||||
MackieControlProtocol::transport_frame() const
|
||||
{
|
||||
|
|
@ -2420,16 +2501,17 @@ MackieControlProtocol::request_factory (uint32_t num_requests)
|
|||
void
|
||||
MackieControlProtocol::set_automation_state (AutoState as)
|
||||
{
|
||||
for (RouteNotificationList::iterator wr = _last_selected_routes.begin(); wr != _last_selected_routes.end(); ++wr) {
|
||||
boost::shared_ptr<Route> r = (*wr).lock();
|
||||
boost::shared_ptr<Route> r = first_selected_route ();
|
||||
|
||||
if (!r) {
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<AutomationControl> ac = r->gain_control();
|
||||
|
||||
if (!ac) {
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
ac->set_automation_state (as);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,6 +166,8 @@ class MackieControlProtocol
|
|||
bool is_mapped (boost::shared_ptr<ARDOUR::Route>) const;
|
||||
boost::shared_ptr<ARDOUR::Route> first_selected_route () const;
|
||||
|
||||
void check_fader_automation_state ();
|
||||
void update_fader_automation_state ();
|
||||
void set_automation_state (ARDOUR::AutoState);
|
||||
|
||||
void set_view_mode (ViewMode);
|
||||
|
|
@ -328,6 +330,7 @@ class MackieControlProtocol
|
|||
PBD::ScopedConnectionList route_connections;
|
||||
PBD::ScopedConnectionList subview_route_connections;
|
||||
PBD::ScopedConnectionList gui_connections;
|
||||
PBD::ScopedConnectionList fader_automation_connections;
|
||||
// timer for two quick marker left presses
|
||||
Mackie::Timer _frm_left_last;
|
||||
// last written timecode string
|
||||
|
|
@ -357,7 +360,6 @@ class MackieControlProtocol
|
|||
XMLNode* configuration_state;
|
||||
int state_version;
|
||||
int _last_bank[9];
|
||||
bool _group_on;
|
||||
|
||||
boost::shared_ptr<ArdourSurface::Mackie::Surface> _master_surface;
|
||||
|
||||
|
|
|
|||
|
|
@ -817,7 +817,7 @@ MackieControlProtocol::read_press (Mackie::Button&)
|
|||
Mackie::LedState
|
||||
MackieControlProtocol::read_release (Mackie::Button&)
|
||||
{
|
||||
set_automation_state (ARDOUR::Off);
|
||||
set_automation_state (ARDOUR::Play);
|
||||
return none;
|
||||
}
|
||||
Mackie::LedState
|
||||
|
|
@ -987,8 +987,11 @@ MackieControlProtocol::grp_press (Mackie::Button&)
|
|||
Mackie::LedState
|
||||
MackieControlProtocol::grp_release (Mackie::Button&)
|
||||
{
|
||||
_group_on = !_group_on;
|
||||
return _group_on;
|
||||
/* There is no "Off" button for automation,
|
||||
so we use Group for this purpose.
|
||||
*/
|
||||
set_automation_state (Off);
|
||||
return none;
|
||||
}
|
||||
Mackie::LedState
|
||||
MackieControlProtocol::nudge_press (Mackie::Button&)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue