MackieControlProtocol::MackieControlProtocol (Session& session)
: ControlProtocol (session, X_("Mackie"))
- , AbstractUI<MackieControlUIRequest> ("mackie")
+ , AbstractUI<MackieControlUIRequest> (name())
, _current_initial_bank (0)
, _frame_last (0)
, _timecode_type (ARDOUR::AnyTime::BBT)
{
struct sched_param rtparam;
- pthread_set_name (X_("MackieControl"));
+ pthread_set_name (event_loop_name().c_str());
- PBD::notify_gui_about_thread_creation (X_("gui"), pthread_self(), X_("MackieControl"), 2048);
- ARDOUR::SessionEvent::create_per_thread_pool (X_("MackieControl"), 128);
+ PBD::notify_event_loops_about_thread_creation (pthread_self(), event_loop_name(), 2048);
+ ARDOUR::SessionEvent::create_per_thread_pool (event_loop_name(), 128);
memset (&rtparam, 0, sizeof (rtparam));
rtparam.sched_priority = 9; /* XXX should be relative to audio (JACK) thread */
break;
case Busses:
if (Profile->get_mixbus()) {
+#ifdef MIXBUS
if (route->mixbus()) {
sorted.push_back (route);
remote_ids.insert (route->remote_control_id());
}
+#endif
} else {
if (!is_track(route)) {
if (route->route_group()) {
update_global_button (Button::Rewind, session->transport_speed() < 0.0);
update_global_button (Button::Ffwd, session->transport_speed() > 1.0);
+ // sometimes a return to start leaves time code at old time
+ _timecode_last = string (10, ' ');
+
notify_metering_state_changed ();
}
}
}
+void
+MackieControlProtocol::notify_subview_route_deleted ()
+{
+ /* return to global/mixer view */
+ _subview_route.reset ();
+ set_view_mode (Mixer);
+}
+
void
MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route> r)
{
- SubViewMode old = _subview_mode;
+ SubViewMode old_mode = _subview_mode;
+ boost::shared_ptr<Route> old_route = _subview_route;
_subview_mode = sm;
if (r) {
- _subview_route = r;
+ /* retain _subview_route even if it is reset to null implicitly */
+ _subview_route = r;
}
- if (_subview_mode != old) {
+ if ((_subview_mode != old_mode) || (_subview_route != old_route)) {
+
+ if (r != old_route) {
+ subview_route_connections.drop_connections ();
+ if (_subview_route) {
+ _subview_route->DropReferences.connect (subview_route_connections, MISSING_INVALIDATOR, boost::bind (&MackieControlProtocol::notify_subview_route_deleted, this), this);
+ }
+ }
/* subview mode did actually change */
}
for (Surfaces::iterator s = copy.begin(); s != copy.end(); ++s) {
- (*s)->subview_mode_changed ();
+ (*s)->subview_mode_changed ();
}
}
- /* turn buttons related to vpot mode on or off as required */
+ if (_subview_mode != old_mode) {
- 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 ();
+ /* turn buttons related to vpot mode on or off as required */
+
+ switch (_subview_mode) {
+ case MackieControlProtocol::None:
+ pot_mode_globals ();
+ break;
+ case MackieControlProtocol::EQ:
+ update_global_button (Button::Eq, on);
+ update_global_button (Button::Dyn, off);
+ update_global_button (Button::AudioInstruments, off); /* faking up Dyn */
+ update_global_button (Button::Trim, off);
+ update_global_button (Button::Send, off);
+ update_global_button (Button::Pan, off);
+ break;
+ case MackieControlProtocol::Dynamics:
+ update_global_button (Button::Eq, off);
+ update_global_button (Button::Dyn, on);
+ update_global_button (Button::AudioInstruments, on); /* faking up Dyn */
+ update_global_button (Button::Trim, off);
+ update_global_button (Button::Send, off);
+ update_global_button (Button::Pan, off);
+ break;
+ }
}
}
}
set_subview_mode (None, boost::shared_ptr<Route>());
switch_banks(_last_bank[_view_mode], true);
+ display_view_mode ();
}
void
{
update_global_button (Button::Eq, off);
update_global_button (Button::Dyn, off);
+ update_global_button (Button::AudioInstruments, off);
switch (_pot_mode) {
case Trim:
return global;
}
+
+void*
+MackieControlProtocol::request_factory (uint32_t num_requests)
+{
+ /* AbstractUI<T>::request_buffer_factory() is a template method only
+ instantiated in this source module. To provide something visible for
+ use in the interface/descriptor, we have this static method that is
+ template-free.
+ */
+ return request_buffer_factory (num_requests);
+}