, sends_menu(0)
, record_menu(0)
, comment_window(0)
+ , comment_area(0)
+ , input_selector (0)
+ , output_selector (0)
, _invert_menu(0)
{
if (sess) init ();
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
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 ("<span weight=\"bold\" color=\"#f46f6f\">\u2B24</span>");
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"), "");
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);
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));
}
set up the name entry/name label display.
*/
- update_rec_display ();
-
if (is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route);
t->MonitoringChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::monitoring_changed, this), gui_context());
update_mute_display ();
update_solo_display ();
+
+ route_color_changed();
}
void
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)) {
}
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 ());
}
}
}
- return true;
+ return false;
}
bool
-RouteUI::mute_release (GdkEventButton*)
+RouteUI::mute_release (GdkEventButton *ev)
{
if (_mute_release){
DisplaySuspender ds;
_mute_release = 0;
}
- return true;
+ return false;
}
void
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)) {
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());
}
}
}
- return true;
+ return false;
}
bool
-RouteUI::solo_release (GdkEventButton*)
+RouteUI::solo_release (GdkEventButton *ev)
{
if (_solo_release) {
_solo_release = 0;
}
- return true;
+ return false;
}
bool
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()) {
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)) {
}
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)) {
boost::shared_ptr<RouteList> 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
bool
RouteUI::monitor_input_press(GdkEventButton*)
{
- return true;
+ return false;
}
bool
bool
RouteUI::monitor_disk_press (GdkEventButton*)
{
- return true;
+ return false;
}
bool
DisplaySuspender ds;
_session->set_monitoring (rl, mc, Session::rt_cleanup, true);
- return true;
+ return false;
}
void
if (record_menu) {
record_menu->popup (1, ev->time);
}
- return true;
+ return false;
}
- return true;
+ return false;
}
void
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;
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;
}
}
}
- return true;
+ return false;
}
bool
{
if (ev->button == 1) {
_route->set_solo_safe (!solo_safe_led->active_state(), this);
- return true;
}
return false;
}
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;
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) {
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;
up a menu on right-click; left click is handled
on release.
*/
- return true;
+ return false;
}
delete _invert_menu;
_invert_menu->popup (0, ev->time);
- return false;
+ return true;
}
void