fix phase invert button functionality, lost in switch to ArdourButton
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 30 Nov 2011 16:40:05 +0000 (16:40 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 30 Nov 2011 16:40:05 +0000 (16:40 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10842 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h

index a0f93646878e7b792f7c72a01d683be226b72067..e11bf91259fbf1808066d091b096024029fe8119 100644 (file)
@@ -1765,7 +1765,7 @@ void
 RouteUI::setup_invert_buttons ()
 {
        /* remove old invert buttons */
-       for (list<ArdourButton*>::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);
        }
 
@@ -1781,8 +1781,8 @@ RouteUI::setup_invert_buttons ()
 
        for (uint32_t i = 0; i < to_add; ++i) {
                ArdourButton* b = manage (new ArdourButton);
-               b->StateChanged.connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_toggled), i, b));
                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_("mixer strip button"));
                if (to_add == 1) {
@@ -1817,37 +1817,29 @@ RouteUI::set_invert_button_state ()
        }
 
        int j = 0;
-       for (list<ArdourButton*>::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, ArdourButton* 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;
        }
@@ -1884,7 +1876,7 @@ RouteUI::invert_menu_toggled (uint32_t c)
 void
 RouteUI::set_invert_sensitive (bool yn)
 {
-        for (list<ArdourButton*>::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);
         }
 }
index 9420e4aa5977fd615c20d3760c00bfb6b6e81fdb..0501c78937406c80721aadc299c37de2cedb716c 100644 (file)
@@ -271,12 +271,12 @@ class RouteUI : public virtual AxisView
 
        void setup_invert_buttons ();
        void set_invert_button_state ();
-       void invert_toggled (uint32_t, ArdourButton *);
        void invert_menu_toggled (uint32_t);
        bool invert_press (GdkEventButton *);
+       bool invert_release (GdkEventButton *, uint32_t i);
 
        int _i_am_the_modifier;
-       std::list<ArdourButton*> _invert_buttons;
+       std::vector<ArdourButton*> _invert_buttons;
        Gtk::Menu* _invert_menu;
 
        static void set_showing_sends_to (boost::shared_ptr<ARDOUR::Route>);