+ reversibly_apply_track_boolean ("rec-enable change", &Track::set_record_enable, !track()->record_enabled(), this);
+ check_rec_enable_sensitivity ();
+ }
+ }
+
+ return true;
+}
+
+bool
+RouteUI::rec_enable_release (GdkEventButton*)
+{
+ return true;
+}
+
+void
+RouteUI::build_sends_menu ()
+{
+ using namespace Menu_Helpers;
+
+ sends_menu = new Menu;
+ sends_menu->set_name ("ArdourContextMenu");
+ MenuList& items = sends_menu->items();
+
+ items.push_back (MenuElem(_("Assign all tracks (prefader)"), bind (mem_fun (*this, &RouteUI::create_sends), PreFader)));
+ items.push_back (MenuElem(_("Assign all tracks (postfader)"), bind (mem_fun (*this, &RouteUI::create_sends), PostFader)));
+ items.push_back (MenuElem(_("Assign selected tracks (prefader)"), bind (mem_fun (*this, &RouteUI::create_selected_sends), PreFader)));
+ items.push_back (MenuElem(_("Assign selected tracks (postfader)"), bind (mem_fun (*this, &RouteUI::create_selected_sends), PostFader)));
+ items.push_back (MenuElem(_("Copy track gains to sends"), mem_fun (*this, &RouteUI::set_sends_gain_from_track)));
+ items.push_back (MenuElem(_("Set sends gain to -inf"), mem_fun (*this, &RouteUI::set_sends_gain_to_zero)));
+ items.push_back (MenuElem(_("Set sends gain to 0dB"), mem_fun (*this, &RouteUI::set_sends_gain_to_unity)));
+
+}
+
+void
+RouteUI::create_sends (Placement p)
+{
+ _session.globally_add_internal_sends (_route, p);
+}
+
+void
+RouteUI::create_selected_sends (Placement p)
+{
+ boost::shared_ptr<RouteList> rlist (new RouteList);
+ TrackSelection& selected_tracks (ARDOUR_UI::instance()->the_editor().get_selection().tracks);
+
+ for (TrackSelection::iterator i = selected_tracks.begin(); i != selected_tracks.end(); ++i) {
+ RouteTimeAxisView* rtv;
+ RouteUI* rui;
+ if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
+ if ((rui = dynamic_cast<RouteUI*>(rtv)) != 0) {
+ if (boost::dynamic_pointer_cast<AudioTrack>(rui->route())) {
+ rlist->push_back (rui->route());
+ }
+ }
+ }
+ }
+
+ _session.add_internal_sends (_route, p, rlist);
+}
+
+void
+RouteUI::set_sends_gain_from_track ()
+{
+ _session.globally_set_send_gains_from_track (_route);
+}
+
+void
+RouteUI::set_sends_gain_to_zero ()
+{
+ _session.globally_set_send_gains_to_zero (_route);
+}
+
+void
+RouteUI::set_sends_gain_to_unity ()
+{
+ _session.globally_set_send_gains_to_unity (_route);
+}
+
+bool
+RouteUI::show_sends_press(GdkEventButton* ev)
+{
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
+ return true;
+ }
+
+ if (!ignore_toggle && !is_track() && show_sends_button) {
+
+ if (Keyboard::is_button2_event (ev) && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+
+ // do nothing on midi bind event
+ return false;
+
+ } else if (Keyboard::is_context_menu_event (ev)) {
+
+ if (sends_menu == 0) {
+ build_sends_menu ();
+ }
+
+ sends_menu->popup (0, ev->time);
+
+ } else {
+
+ /* change button state */
+
+ show_sends_button->set_active (!show_sends_button->get_active());
+
+ /* start blinking */
+
+ if (show_sends_button->get_active()) {
+ /* show sends to this bus */
+ MixerStrip::SwitchIO (_route);
+ send_blink_connection = ARDOUR_UI::instance()->Blink.connect (mem_fun(*this, &RouteUI::send_blink));
+ } else {
+ /* everybody back to normal */
+ send_blink_connection.disconnect ();
+ MixerStrip::SwitchIO (boost::shared_ptr<Route>());
+ }