Move MIDI control port ownership into the MIDI Manager, since control port state...
[ardour.git] / libs / surfaces / control_protocol / basic_ui.cc
index 8c3eb029823d18a6d7bbad71b2aaff6caff73c8c..2c3305e66faf3b97e6229f13b9510861aea59657 100644 (file)
@@ -126,7 +126,7 @@ BasicUI::transport_play (bool from_last_start)
        } 
 
        if (session->get_play_range ()) {
-               session->request_play_range (false);
+               session->request_play_range (0);
        }
        
        if (from_last_start && rolling) {
@@ -296,3 +296,98 @@ BasicUI::sample_to_timecode (nframes_t sample, Timecode::Time& timecode, bool us
        session->sample_to_timecode (sample, *((Timecode::Time*)&timecode), use_offset, use_subframes);
 }
 
+#if 0
+this stuff is waiting to go in so that all UIs can offer complex solo/mute functionality
+
+void
+BasicUI::solo_release (boost::shared_ptr<Route> r)
+{
+}
+
+void
+BasicUI::solo_press (boost::shared_ptr<Route> r, bool momentary, bool global, bool exclusive, bool isolate, bool solo_group)
+{
+       if (momentary) {
+               _solo_release = new SoloMuteRelease (_route->soloed());
+       }
+       
+       if (global) {
+               
+               if (_solo_release) {
+                       _solo_release->routes = _session->get_routes ();
+               }
+               
+               if (Config->get_solo_control_is_listen_control()) {
+                       _session->set_listen (_session->get_routes(), !_route->listening(),  Session::rt_cleanup, true);
+               } else {
+                       _session->set_solo (_session->get_routes(), !_route->soloed(),  Session::rt_cleanup, true);
+               }
+               
+       } else if (exclusive) {
+               
+               if (_solo_release) {
+                       _solo_release->exclusive = true;
+                       
+                       boost::shared_ptr<RouteList> routes = _session->get_routes();
+                       
+                       for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
+                               if ((*i)->soloed ()) {
+                                       _solo_release->routes_on->push_back (*i);
+                               } else {
+                                       _solo_release->routes_off->push_back (*i);
+                               }
+                       }
+               }
+               
+               if (Config->get_solo_control_is_listen_control()) {
+                       /* ??? we need a just_one_listen() method */
+               } else {
+                       _session->set_just_one_solo (_route, true);
+               }
+               
+       } else if (isolate) {
+               
+               // shift-click: toggle solo isolated status
+               
+               _route->set_solo_isolated (!_route->solo_isolated(), this);
+               delete _solo_release;
+               _solo_release = 0;
+               
+       } else if (solo_group) {
+               
+               /* Primary-button1: solo mix group.
+                  NOTE: Primary-button2 is MIDI learn.
+               */
+               
+               if (_route->route_group()) {
+                       
+                       if (_solo_release) {
+                               _solo_release->routes = _route->route_group()->route_list();
+                       }
+                       
+                       if (Config->get_solo_control_is_listen_control()) {
+                               _session->set_listen (_route->route_group()->route_list(), !_route->listening(),  Session::rt_cleanup, true);
+                       } else {
+                               _session->set_solo (_route->route_group()->route_list(), !_route->soloed(),  Session::rt_cleanup, true);
+                       }
+               }
+               
+       } else {
+               
+               /* click: solo this route */
+               
+               boost::shared_ptr<RouteList> rl (new RouteList);
+               rl->push_back (route());
+               
+               if (_solo_release) {
+                       _solo_release->routes = rl;
+               }
+               
+               if (Config->get_solo_control_is_listen_control()) {
+                       _session->set_listen (rl, !_route->listening());
+               } else {
+                       _session->set_solo (rl, !_route->soloed());
+               }
+       }
+}
+#endif