change some parameter names to make things a bit clearer,and require that an Automati...
[ardour.git] / gtk2_ardour / route_ui.cc
index b7fef2d6ff371d933d86ca662a29513282633f5d..385279ac30e4123fdcea1d2a8caf298faca3362b 100644 (file)
@@ -587,7 +587,7 @@ RouteUI::build_record_menu ()
                 using namespace Menu_Helpers;
                 MenuList& items = record_menu->items();
                 
-                items.push_back (CheckMenuElem (_("Step Edit"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit)));
+                items.push_back (CheckMenuElem (_("Step Entry"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit)));
                 step_edit_item = dynamic_cast<CheckMenuItem*> (&items.back());
 
                 if (_route->record_enabled()) {
@@ -659,24 +659,51 @@ RouteUI::build_sends_menu ()
        sends_menu->set_name ("ArdourContextMenu");
        MenuList& items = sends_menu->items();
 
-       items.push_back (MenuElem(_("Assign all tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader)));
-       items.push_back (MenuElem(_("Assign all tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader)));
-       items.push_back (MenuElem(_("Assign selected tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader)));
-       items.push_back (MenuElem(_("Assign selected tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader)));
-       items.push_back (MenuElem(_("Copy track gains to sends"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_from_track)));
+       items.push_back (
+               MenuElem(_("Assign all tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader, false))
+               );
+       
+       items.push_back (
+               MenuElem(_("Assign all tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PreFader, true))
+               );
+       
+       items.push_back (
+               MenuElem(_("Assign all tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader, false))
+               );
+       
+       items.push_back (
+               MenuElem(_("Assign all tracks and buses (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_sends), PostFader, true))
+               );
+
+       items.push_back (
+               MenuElem(_("Assign selected tracks (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader, false))
+               );
+
+       items.push_back (
+               MenuElem(_("Assign selected tracks and buses (prefader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PreFader, true)));
+       
+       items.push_back (
+               MenuElem(_("Assign selected tracks (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader, false))
+               );
+
+       items.push_back (
+               MenuElem(_("Assign selected tracks and buses (postfader)"), sigc::bind (sigc::mem_fun (*this, &RouteUI::create_selected_sends), PostFader, true))
+               );
+       
+       items.push_back (MenuElem(_("Copy track/bus gains to sends"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_from_track)));
        items.push_back (MenuElem(_("Set sends gain to -inf"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_to_zero)));
        items.push_back (MenuElem(_("Set sends gain to 0dB"), sigc::mem_fun (*this, &RouteUI::set_sends_gain_to_unity)));
 
 }
 
 void
-RouteUI::create_sends (Placement p)
+RouteUI::create_sends (Placement p, bool include_buses)
 {
-       _session->globally_add_internal_sends (_route, p);
+       _session->globally_add_internal_sends (_route, p, include_buses);
 }
 
 void
-RouteUI::create_selected_sends (Placement p)
+RouteUI::create_selected_sends (Placement p, bool include_buses)
 {
        boost::shared_ptr<RouteList> rlist (new RouteList);
        TrackSelection& selected_tracks (ARDOUR_UI::instance()->the_editor().get_selection().tracks);
@@ -686,7 +713,7 @@ RouteUI::create_selected_sends (Placement p)
                RouteUI* rui;
                if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
                        if ((rui = dynamic_cast<RouteUI*>(rtv)) != 0) {
-                               if (boost::dynamic_pointer_cast<AudioTrack>(rui->route())) {
+                               if (include_buses || boost::dynamic_pointer_cast<AudioTrack>(rui->route())) {
                                        rlist->push_back (rui->route());
                                }
                        }
@@ -984,7 +1011,7 @@ RouteUI::update_mute_display ()
                --_i_am_the_modifier;
        }
 
-       mute_button->set_visual_state (mute_visual_state (_session, _route));
+        mute_button->set_visual_state (mute_visual_state (_session, _route));
 }
 
 void
@@ -1267,8 +1294,8 @@ RouteUI::ensure_xml_node ()
                        xml_node = new XMLNode ("GUI");
                        _route->add_extra_xml (*xml_node);
                } else {
-                       /* the Route has one, so it must have been loaded */
-                       if (Stateful::loading_state_version < 3000) {
+                       /* the Route has one; it may have been loaded */
+                       if (Stateful::loading_state_version != 0 && Stateful::loading_state_version < 3000) {
                                /* the GUI extra XML is in 2.X format; we must convert it to the new
                                   format to avoid problems later
                                */
@@ -1293,6 +1320,7 @@ RouteUI::ensure_xml_node ()
                                }
 
                                _route->add_extra_xml (*new_xml_node);
+                               xml_node = new_xml_node;
                        }
                }
        }
@@ -1443,7 +1471,7 @@ RouteUI::toggle_route_active ()
 
        if (route_active_menu_item) {
                if (route_active_menu_item->get_active() != (yn = _route->active())) {
-                       _route->set_active (!yn);
+                       _route->set_active (!yn, this);
                }
        }
 }
@@ -1583,6 +1611,7 @@ RouteUI::save_as_template ()
 
        p.set_title (_("Save As Template"));
        p.set_prompt (_("Template name:"));
+       p.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
        switch (p.run()) {
        case RESPONSE_ACCEPT:
                break;
@@ -1616,9 +1645,7 @@ RouteUI::parameter_changed (string const & p)
 {
        if (p == "disable-disarm-during-roll") {
                check_rec_enable_sensitivity ();
-       } else if (p == "solo-control-is-listen-control") {
-               set_button_names ();
-       } else if (p == "listen-position") {
+       } else if (p == "use-monitor-bus" || p == "solo-control-is-listen-control" || p == "listen-position") {
                set_button_names ();
        }
 }
@@ -1795,3 +1822,11 @@ RouteUI::invert_menu_toggled (uint32_t c)
        
        _route->set_phase_invert (c, !_route->phase_invert (c));
 }
+
+void
+RouteUI::set_invert_sensitive (bool yn)
+{
+        for (list<BindableToggleButton*>::iterator b = _invert_buttons.begin(); b != _invert_buttons.end(); ++b) {
+                (*b)->set_sensitive (yn);
+        }
+}