tweak spacings in the mixer strip, tweak tooltip text for input and output buttons
[ardour.git] / gtk2_ardour / route_ui.cc
index 112b3eb73e1e9c6a05e2e5ba1eca45e48105b5d2..0c4ceab4c33bc19ec084dcd91b010130e54a61de 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
@@ -385,7 +388,8 @@ RouteUI::solo_press(GdkEventButton* ev)
 
                if (Keyboard::is_context_menu_event (ev)) {
 
-                        if (!solo_isolated_led) {
+                        if (! (solo_isolated_led && solo_isolated_led->is_visible()) ||
+                           ! (solo_safe_led && solo_safe_led->is_visible())) {
 
                                 if (solo_menu == 0) {
                                         build_solo_menu ();
@@ -546,10 +550,6 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
                 }
         }
 
-       cerr << name() << " re button press, i am " << _i_am_the_modifier << " active state = " 
-            << rec_enable_button->active_state()
-            << endl;
-
        if (!_i_am_the_modifier && is_track() && rec_enable_button) {
 
                if (Keyboard::is_button2_event (ev)) {
@@ -991,7 +991,7 @@ RouteUI::update_solo_display ()
 
        if (Config->get_solo_control_is_listen_control()) {
 
-               if ((solo_button->active_state() == Active)!= (x = _route->listening_via_monitor())) {
+               if ((bool) solo_button->active_state() != (x = _route->listening_via_monitor())) {
                        ++_i_am_the_modifier;
                        solo_button->set_active_state (Active);
                        --_i_am_the_modifier;
@@ -999,7 +999,7 @@ RouteUI::update_solo_display ()
 
        } else {
 
-               if ((solo_button->active_state() == Active) != (x = _route->soloed())) {
+               if ((bool) solo_button->active_state() != (x = _route->soloed())) {
                        ++_i_am_the_modifier;
                        if (x) {
                                solo_button->set_active_state (Active);
@@ -1064,7 +1064,7 @@ RouteUI::mute_changed(void* /*src*/)
 ActiveState
 RouteUI::mute_active_state (Session* s, boost::shared_ptr<Route> r)
 {
-       if (r->is_master() || r->is_monitor()) {
+       if (r->is_monitor()) {
                return ActiveState(0);
        }
 
@@ -1074,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 */
@@ -1764,7 +1765,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);
        }
 
@@ -1779,15 +1780,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) {
@@ -1800,6 +1801,7 @@ RouteUI::setup_invert_buttons ()
                _invert_button_box.pack_start (*b);
        }
 
+       _invert_button_box.set_spacing (1);
        _invert_button_box.show_all ();
 }
 
@@ -1816,37 +1818,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;
        }
@@ -1883,7 +1877,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);
         }
 }
@@ -1940,3 +1934,9 @@ RouteUI::bus_send_display_changed (boost::shared_ptr<Route> send_to)
                send_blink_connection.disconnect ();
        }
 }
+
+RouteGroup*
+RouteUI::route_group() const
+{
+       return _route->route_group();
+}