centralize legal-session-name-checkng and include : and ; in characters that we disal...
[ardour.git] / gtk2_ardour / route_ui.cc
index 3eca92702a948c9c2f940783cc38202dd0284e61..2257acd83e66b7c7afff56ad72df8442a52b01c9 100644 (file)
@@ -265,6 +265,9 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
 
        boost::shared_ptr<Route> s = _showing_sends_to.lock ();
        bus_send_display_changed (s);
+
+       update_mute_display ();
+       update_solo_display ();
 }
 
 void
@@ -1071,7 +1074,8 @@ RouteUI::mute_active_state (Session* s, boost::shared_ptr<Route> r)
                if (r->muted ()) {
                        /* full mute */
                        return Active;
-               } else if (s->soloing() && !r->soloed() && !r->solo_isolated()) {
+               } else if (!r->is_master() && s->soloing() && !r->soloed() && !r->solo_isolated()) {
+                       /* master is NEVER muted by others */
                        return Mid;
                } else {
                        /* no mute at all */
@@ -1508,6 +1512,9 @@ RouteUI::route_rename ()
                                done = true;
                        }
                        break;
+               default:
+                       done = true;
+                       break;
                }
        }
 
@@ -1761,7 +1768,7 @@ void
 RouteUI::setup_invert_buttons ()
 {
        /* remove old invert buttons */
-       for (list<BindableToggleButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i) {
+       for (vector<ArdourButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i) {
                _invert_button_box.remove (**i);
        }
 
@@ -1776,15 +1783,15 @@ RouteUI::setup_invert_buttons ()
        uint32_t const to_add = (N <= _max_invert_buttons) ? N : 1;
 
        for (uint32_t i = 0; i < to_add; ++i) {
-               BindableToggleButton* b = manage (new BindableToggleButton);
-               b->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_toggled), i, b));
+               ArdourButton* b = manage (new ArdourButton);
                b->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press));
+               b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i));
 
-               b->set_name (X_("MixerInvertButton"));
+               b->set_name (X_("mixer strip button"));
                if (to_add == 1) {
-                       b->add (*manage (new Label (X_("Ø"))));
+                       b->set_text (X_("Ø"));
                } else {
-                       b->add (*manage (new Label (string_compose (X_("Ø%1"), i + 1))));
+                       b->set_text (string_compose (X_("Ø%1"), i + 1));
                }
 
                if (N <= 4) {
@@ -1797,6 +1804,7 @@ RouteUI::setup_invert_buttons ()
                _invert_button_box.pack_start (*b);
        }
 
+       _invert_button_box.set_spacing (1);
        _invert_button_box.show_all ();
 }
 
@@ -1813,37 +1821,29 @@ RouteUI::set_invert_button_state ()
        }
 
        int j = 0;
-       for (list<BindableToggleButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) {
+       for (vector<ArdourButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) {
                (*i)->set_active (_route->phase_invert (j));
        }
 
        --_i_am_the_modifier;
 }
 
-void
-RouteUI::invert_toggled (uint32_t i, BindableToggleButton* b)
+bool
+RouteUI::invert_release (GdkEventButton* ev, uint32_t i)
 {
-       if (_i_am_the_modifier) {
-               return;
-       }
-
-       uint32_t const N = _route->input()->n_ports().n_audio();
-       if (N <= _max_invert_buttons) {
-               _route->set_phase_invert (i, b->get_active ());
-       } else {
-               boost::dynamic_bitset<> p (N);
-               if (b->get_active ()) {
-                       p.set ();
-               }
-               _route->set_phase_invert (p);
+       if (ev->button == 1 && i < _invert_buttons.size()) {
+               _route->set_phase_invert (i, !_invert_buttons[i]->get_active());
+               return true;
        }
+       return false;
 }
 
+
 bool
 RouteUI::invert_press (GdkEventButton* ev)
 {
        using namespace Menu_Helpers;
-
+       
        if (ev->button != 3) {
                return true;
        }
@@ -1880,7 +1880,7 @@ RouteUI::invert_menu_toggled (uint32_t c)
 void
 RouteUI::set_invert_sensitive (bool yn)
 {
-        for (list<BindableToggleButton*>::iterator b = _invert_buttons.begin(); b != _invert_buttons.end(); ++b) {
+        for (vector<ArdourButton*>::iterator b = _invert_buttons.begin(); b != _invert_buttons.end(); ++b) {
                 (*b)->set_sensitive (yn);
         }
 }