X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Froute_ui.cc;h=edc1b867ff95d72087e796016f242c31f2ea9d79;hb=dfbc9da79aef9cc05808d29a20c6d12c5d553a80;hp=86f8697647b038db6957407fca7a2d65e536efd9;hpb=90397c3ac9b46bb16219c7eb511fed2ef25bb158;p=ardour.git diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 86f8697647..edc1b867ff 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -77,6 +77,9 @@ RouteUI::RouteUI (ARDOUR::Session* sess) , sends_menu(0) , record_menu(0) , comment_window(0) + , comment_area(0) + , input_selector (0) + , output_selector (0) , _invert_menu(0) { if (sess) init (); @@ -91,10 +94,13 @@ RouteUI::~RouteUI() delete mute_menu; delete sends_menu; delete record_menu; - delete _invert_menu; delete comment_window; delete input_selector; delete output_selector; + delete _invert_menu; + + send_blink_connection.disconnect (); + rec_blink_connection.disconnect (); } void @@ -138,9 +144,11 @@ RouteUI::init () rec_enable_button = manage (new ArdourButton); rec_enable_button->set_name ("record enable button"); -// rec_enable_button->set_tweaks (ArdourButton::ImplicitUsesSolidColor); + rec_enable_button->set_markup ("\u2B24"); UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), ""); + rec_blink_connection = ARDOUR_UI::instance()->Blink.connect (sigc::mem_fun (*this, &RouteUI::blink_rec_display)); + show_sends_button = manage (new ArdourButton); show_sends_button->set_name ("send alert button"); UI::instance()->set_tip (show_sends_button, _("make mixer strips show sends to this bus"), ""); @@ -168,7 +176,7 @@ RouteUI::init () rec_enable_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::rec_enable_release), false); show_sends_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_press), false); - show_sends_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_release)); + show_sends_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_release), false); solo_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::solo_press), false); solo_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::solo_release), false); @@ -178,11 +186,11 @@ RouteUI::init () monitor_input_button->set_distinct_led_click (false); monitor_disk_button->set_distinct_led_click (false); - monitor_input_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_press)); - monitor_input_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_release)); + monitor_input_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_press), false); + monitor_input_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_release), false); - monitor_disk_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_press)); - monitor_disk_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_release)); + monitor_disk_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_press), false); + monitor_disk_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_release), false); BusSendDisplayChanged.connect_same_thread (*this, boost::bind(&RouteUI::bus_send_display_changed, this, _1)); } @@ -266,8 +274,6 @@ RouteUI::set_route (boost::shared_ptr rp) set up the name entry/name label display. */ - update_rec_display (); - if (is_track()) { boost::shared_ptr t = boost::dynamic_pointer_cast(_route); t->MonitoringChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::monitoring_changed, this), gui_context()); @@ -296,6 +302,8 @@ RouteUI::set_route (boost::shared_ptr rp) update_mute_display (); update_solo_display (); + + route_color_changed(); } void @@ -315,6 +323,10 @@ RouteUI::mute_press (GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + multiple_mute_change = false; if (Keyboard::is_context_menu_event (ev)) { @@ -324,18 +336,14 @@ RouteUI::mute_press (GdkEventButton* ev) } mute_menu->popup(0,ev->time); + + return true; } else { if (Keyboard::is_button2_event (ev)) { - // Primary-button2 click is the midi binding click // button2-click is "momentary" - - if (mute_button->on_button_press_event (ev)) { - return true; - } - _mute_release = new SoloMuteRelease (_route->muted ()); } @@ -413,11 +421,11 @@ RouteUI::mute_press (GdkEventButton* ev) } } - return true; + return false; } bool -RouteUI::mute_release (GdkEventButton*) +RouteUI::mute_release (GdkEventButton *ev) { if (_mute_release){ DisplaySuspender ds; @@ -426,7 +434,7 @@ RouteUI::mute_release (GdkEventButton*) _mute_release = 0; } - return true; + return false; } void @@ -484,6 +492,10 @@ RouteUI::solo_press(GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + multiple_solo_change = false; if (Keyboard::is_context_menu_event (ev)) { @@ -502,13 +514,7 @@ RouteUI::solo_press(GdkEventButton* ev) if (Keyboard::is_button2_event (ev)) { - // Primary-button2 click is the midi binding click // button2-click is "momentary" - - if (solo_button->on_button_press_event (ev)) { - return true; - } - _solo_release = new SoloMuteRelease (_route->self_soloed()); } @@ -617,11 +623,11 @@ RouteUI::solo_press(GdkEventButton* ev) } } - return true; + return false; } bool -RouteUI::solo_release (GdkEventButton*) +RouteUI::solo_release (GdkEventButton *ev) { if (_solo_release) { @@ -640,7 +646,7 @@ RouteUI::solo_release (GdkEventButton*) _solo_release = 0; } - return true; + return false; } bool @@ -650,10 +656,14 @@ RouteUI::rec_enable_press(GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + if (!_session->engine().connected()) { MessageDialog msg (_("Not connected to AudioEngine - cannot engage record")); msg.run (); - return true; + return false; } if (is_midi_track()) { @@ -662,21 +672,21 @@ RouteUI::rec_enable_press(GdkEventButton* ev) if (midi_track()->step_editing()) { midi_track()->set_step_editing (false); - return true; + return false; } } if (is_track() && rec_enable_button) { if (Keyboard::is_button2_event (ev)) { - - // do nothing on midi sigc::bind event - return rec_enable_button->on_button_press_event (ev); + + //rec arm does not have a momentary mode + return false; } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { DisplaySuspender ds; - _session->set_record_enabled (_session->get_routes(), !rec_enable_button->active_state()); + _session->set_record_enabled (_session->get_routes(), !_route->record_enabled()); } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -698,7 +708,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } DisplaySuspender ds; - _session->set_record_enabled (rl, !rec_enable_button->active_state(), Session::rt_cleanup, true); + _session->set_record_enabled (rl, !_route->record_enabled(), Session::rt_cleanup, true); } } else if (Keyboard::is_context_menu_event (ev)) { @@ -710,11 +720,11 @@ RouteUI::rec_enable_press(GdkEventButton* ev) boost::shared_ptr rl (new RouteList); rl->push_back (route()); DisplaySuspender ds; - _session->set_record_enabled (rl, !rec_enable_button->active_state()); + _session->set_record_enabled (rl, !_route->record_enabled()); } } - return true; + return false; } void @@ -762,7 +772,7 @@ RouteUI::update_monitoring_display () bool RouteUI::monitor_input_press(GdkEventButton*) { - return true; + return false; } bool @@ -774,7 +784,7 @@ RouteUI::monitor_input_release(GdkEventButton* ev) bool RouteUI::monitor_disk_press (GdkEventButton*) { - return true; + return false; } bool @@ -830,7 +840,7 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) DisplaySuspender ds; _session->set_monitoring (rl, mc, Session::rt_cleanup, true); - return true; + return false; } void @@ -907,10 +917,10 @@ RouteUI::rec_enable_release (GdkEventButton* ev) if (record_menu) { record_menu->popup (1, ev->time); } - return true; + return false; } - return true; + return false; } void @@ -1218,19 +1228,18 @@ RouteUI::update_mute_display () void RouteUI::route_rec_enable_changed () { - update_rec_display (); + blink_rec_display(true); //this lets the button change "immediately" rather than wait for the next blink update_monitoring_display (); } void RouteUI::session_rec_enable_changed () { - update_rec_display (); update_monitoring_display (); } void -RouteUI::update_rec_display () +RouteUI::blink_rec_display (bool blinkOn) { if (!rec_enable_button || !_route) { return; @@ -1244,7 +1253,10 @@ RouteUI::update_rec_display () case Session::Disabled: case Session::Enabled: - rec_enable_button->set_active_state (Gtkmm2ext::ImplicitActive); + if ( ARDOUR_UI::config()->get_blink_rec_arm() ) + rec_enable_button->set_active_state ( blinkOn ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off ); + else + rec_enable_button->set_active_state ( ImplicitActive ); break; } @@ -1417,7 +1429,7 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) } } - return true; + return false; } bool @@ -1425,7 +1437,6 @@ RouteUI::solo_safe_button_release (GdkEventButton* ev) { if (ev->button == 1) { _route->set_solo_safe (!solo_safe_led->active_state(), this); - return true; } return false; } @@ -1708,6 +1719,8 @@ RouteUI::comment_changed (void *src) void RouteUI::comment_editor_done_editing () { + ENSURE_GUI_THREAD (*this, &MixerStrip::comment_editor_done_editing, src) + string const str = comment_area->get_buffer()->get_text(); if (str == _route->comment ()) { return; @@ -1996,8 +2009,8 @@ RouteUI::setup_invert_buttons () for (uint32_t i = 0; i < to_add; ++i) { 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->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press), false); + b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i), false); b->set_name (X_("invert button")); if (to_add == 1) { @@ -2064,7 +2077,7 @@ RouteUI::invert_release (GdkEventButton* ev, uint32_t i) if (N <= _max_invert_buttons) { /* left-click inverts phase so long as we have a button per channel */ _route->set_phase_invert (i, !_invert_buttons[i]->get_active()); - return true; + return false; } } return false; @@ -2082,7 +2095,7 @@ RouteUI::invert_press (GdkEventButton* ev) up a menu on right-click; left click is handled on release. */ - return true; + return false; } delete _invert_menu; @@ -2100,7 +2113,7 @@ RouteUI::invert_press (GdkEventButton* ev) _invert_menu->popup (0, ev->time); - return false; + return true; } void