boost::shared_ptr<Route> s = _showing_sends_to.lock ();
bus_send_display_changed (s);
+
+ update_mute_display ();
+ update_solo_display ();
}
void
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 ();
}
}
- 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)) {
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;
} 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);
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);
}
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 */
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);
}
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) {
_invert_button_box.pack_start (*b);
}
+ _invert_button_box.set_spacing (1);
_invert_button_box.show_all ();
}
}
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;
}
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);
}
}
send_blink_connection.disconnect ();
}
}
+
+RouteGroup*
+RouteUI::route_group() const
+{
+ return _route->route_group();
+}