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);
}
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) {
}
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;
}
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);
}
}
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>);