+ set_width_enum (_width, this);
+}
+
+void
+MixerStrip::switch_io (boost::shared_ptr<Route> target)
+{
+ if (_route == target || _route->is_master()) {
+ /* don't change the display for the target or the master bus */
+ return;
+ } else if (!is_track() && show_sends_button) {
+ /* make sure our show sends button is inactive, and we no longer blink,
+ since we're not the target.
+ */
+ send_blink_connection.disconnect ();
+ show_sends_button->set_active (false);
+ show_sends_button->set_state (STATE_NORMAL);
+ }
+
+ if (!target) {
+ /* switch back to default */
+ revert_to_default_display ();
+ return;
+ }
+
+ boost::shared_ptr<Send> send;
+
+ if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_current_delivery))) {
+ send->set_metering (false);
+ }
+
+ _current_delivery = _route->internal_send_for (target);
+
+ cerr << "internal send from " << _route->name() << " to " << target->name() << " = "
+ << _current_delivery << endl;
+
+ if (_current_delivery) {
+ send = boost::dynamic_pointer_cast<Send>(_current_delivery);
+ send->set_metering (true);
+ _current_delivery->GoingAway.connect (mem_fun (*this, &MixerStrip::revert_to_default_display));
+ gain_meter().set_controls (_route, send->meter(), send->amp());
+ panner_ui().set_panner (_current_delivery->panner());
+
+ } else {
+ _current_delivery = _route->main_outs ();
+ gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp());
+ panner_ui().set_panner (_route->main_outs()->panner());
+ }
+
+ gain_meter().setup_meters ();
+ panner_ui().setup_pan ();
+}
+
+
+void
+MixerStrip::revert_to_default_display ()
+{
+ show_sends_button->set_active (false);
+
+ boost::shared_ptr<Send> send;
+
+ if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_current_delivery))) {
+ send->set_metering (false);
+ }
+
+ _current_delivery = _route->main_outs();
+
+ gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp());
+ gain_meter().setup_meters ();
+ panner_ui().set_panner (_route->main_outs()->panner());
+ panner_ui().setup_pan ();
+}
+
+void
+MixerStrip::set_button_names ()
+{
+ switch (_width) {
+ case Wide:
+ rec_enable_button_label.set_text (_("Rec"));
+ mute_button_label.set_text (_("Mute"));
+ if (!Config->get_solo_control_is_listen_control()) {
+ solo_button_label.set_text (_("Solo"));
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("AFL"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("PFL"));
+ break;
+ }
+ }
+ break;
+
+ default:
+ rec_enable_button_label.set_text (_("R"));
+ mute_button_label.set_text (_("M"));
+ if (!Config->get_solo_control_is_listen_control()) {
+ solo_button_label.set_text (_("S"));
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("A"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("P"));
+ break;
+ }
+ }
+ break;
+
+ }
+}
+
+bool
+MixerStrip::on_key_press_event (GdkEventKey* ev)
+{
+ GdkEventButton fake;
+ fake.type = GDK_BUTTON_PRESS;
+ fake.button = 1;
+ fake.state = ev->state;
+
+ switch (ev->keyval) {
+ case GDK_m:
+ mute_press (&fake);
+ return true;
+ break;
+
+ case GDK_s:
+ solo_press (&fake);
+ return true;
+ break;
+
+ case GDK_r:
+ rec_enable_press (&fake);
+ return true;
+ break;
+
+ case GDK_e:
+ show_sends_press (&fake);
+ return true;
+ break;
+
+ case GDK_g:
+ if (ev->state & Keyboard::PrimaryModifier) {
+ step_gain_down ();
+ } else {
+ step_gain_up ();
+ }
+ return true;
+ break;
+
+ case GDK_0:
+ if (_route) {
+ _route->set_gain (1.0, this);
+ }
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;