use syntactic sugar
[ardour.git] / gtk2_ardour / route_ui.cc
index b9ece1ed075340a57381854de54e4976696dfa5e..68c9a0909e103a538efa4e64cb89d65505b2e97c 100644 (file)
@@ -773,9 +773,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
        if (BindingProxy::is_bind_action(ev) )
                return false;
 
-       if (!_session->engine().connected()) {
-               MessageDialog msg (_("Not connected to AudioEngine - cannot engage record"));
-               msg.run ();
+       if (!ARDOUR_UI_UTILS::engine_is_running ()) {
                return false;
        }
 
@@ -2323,6 +2321,10 @@ RouteUI::manage_pins ()
 void
 RouteUI::fan_out (bool to_busses, bool group)
 {
+       if (!ARDOUR_UI_UTILS::engine_is_running ()) {
+               return;
+       }
+
        DisplaySuspender ds;
        boost::shared_ptr<ARDOUR::Route> route = _route;
        boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (route->the_instrument ());
@@ -2368,19 +2370,27 @@ RouteUI::fan_out (bool to_busses, bool group)
                std::string bn = BUSNAME;
                boost::shared_ptr<Route> r = _session->route_by_name (bn);
                if (!r) {
-                       if (to_busses) {
-                               RouteList rl = _session->new_audio_route (busnames[bn], outputs, NULL, 1, bn, PresentationInfo::AudioBus, PresentationInfo::max_order);
-                               r = rl.front ();
-                               assert (r);
-                       } else {
-                               list<boost::shared_ptr<AudioTrack> > tl =
-                                       _session->new_audio_track (busnames[bn], outputs, NULL, 1, bn, PresentationInfo::max_order, Normal);
-                               r = tl.front ();
-                               assert (r);
-
-                               boost::shared_ptr<ControlList> cl (new ControlList);
-                               cl->push_back (r->monitoring_control ());
-                               _session->set_controls (cl, (double) MonitorInput, Controllable::NoGroup);
+                       try {
+                               if (to_busses) {
+                                       RouteList rl = _session->new_audio_route (busnames[bn], outputs, NULL, 1, bn, PresentationInfo::AudioBus, PresentationInfo::max_order);
+                                       r = rl.front ();
+                                       assert (r);
+                               } else {
+                                       list<boost::shared_ptr<AudioTrack> > tl =
+                                               _session->new_audio_track (busnames[bn], outputs, NULL, 1, bn, PresentationInfo::max_order, Normal);
+                                       r = tl.front ();
+                                       assert (r);
+
+                                       boost::shared_ptr<ControlList> cl (new ControlList);
+                                       cl->push_back (r->monitoring_control ());
+                                       _session->set_controls (cl, (double) MonitorInput, Controllable::NoGroup);
+                               }
+                       } catch (...) {
+                               if (!to_group.empty()) {
+                                       boost::shared_ptr<RouteList> rl (&to_group);
+                                       _session->remove_routes (rl);
+                               }
+                               return;
                        }
                        r->input ()->disconnect (this);
                }