+ add_events (Gdk::BUTTON_RELEASE_MASK|
+ Gdk::ENTER_NOTIFY_MASK|
+ Gdk::LEAVE_NOTIFY_MASK|
+ Gdk::KEY_PRESS_MASK|
+ Gdk::KEY_RELEASE_MASK);
+
+ set_flags (get_flags() | Gtk::CAN_FOCUS);
+
+ SwitchIO.connect (sigc::mem_fun (*this, &MixerStrip::switch_io));
+}
+
+MixerStrip::~MixerStrip ()
+{
+ CatchDeletion (this);
+
+ delete input_selector;
+ delete output_selector;
+ delete comment_window;
+}
+
+void
+MixerStrip::set_route (boost::shared_ptr<Route> rt)
+{
+ if (rec_enable_button->get_parent()) {
+ button_table.remove (*rec_enable_button);
+ }
+
+ if (show_sends_button->get_parent()) {
+ button_table.remove (*show_sends_button);
+ }
+
+ RouteUI::set_route (rt);
+
+ delete input_selector;
+ input_selector = 0;
+
+ delete output_selector;
+ output_selector = 0;
+
+ revert_to_default_display ();
+
+ processor_box.set_route (rt);
+
+ if (set_color_from_route()) {
+ set_color (unique_random_color());
+ }
+
+ if (_mixer_owned && (route()->is_master() || route()->is_control())) {
+
+ if (scrollbar_height == 0) {
+ HScrollbar scrollbar;
+ Gtk::Requisition requisition(scrollbar.size_request ());
+ scrollbar_height = requisition.height;
+ }
+
+ spacer = manage (new EventBox);
+ spacer->set_size_request (-1, scrollbar_height);
+ global_vpacker.pack_start (*spacer, false, false);
+ }
+
+ if (is_audio_track()) {
+
+ boost::shared_ptr<AudioTrack> at = audio_track();
+
+ at->FreezeChange.connect (route_connections, boost::bind (&MixerStrip::map_frozen, this), gui_context());
+
+ button_table.attach (*rec_enable_button, 0, 2, 2, 3);
+ rec_enable_button->set_sensitive (_session->writable());
+ rec_enable_button->show();
+
+ } else if (!is_track()) {
+ /* non-master bus */
+
+ if (!_route->is_master()) {
+ button_table.attach (*show_sends_button, 0, 2, 2, 3);
+ show_sends_button->show();
+ }
+ }
+
+ if (_route->phase_invert()) {
+ name_label.set_text (X_("Ø ") + name_label.get_text());
+ } else {
+ name_label.set_text (_route->name());
+ }
+
+ _mono_button.set_name ("MixerMonoButton");
+ _mono_button.signal_clicked().connect (sigc::mem_fun (*this, &MixerStrip::mono_button_clicked));
+
+ switch (_route->meter_point()) {
+ case MeterInput:
+ meter_point_label.set_text (_("input"));
+ break;
+
+ case MeterPreFader:
+ meter_point_label.set_text (_("pre"));
+ break;
+
+ case MeterPostFader:
+ meter_point_label.set_text (_("post"));
+ break;
+
+ case MeterCustom:
+ meter_point_label.set_text (_("custom"));
+ break;
+ }
+
+ delete route_ops_menu;
+ route_ops_menu = 0;
+
+ ARDOUR_UI::instance()->set_tip (comment_button, _route->comment().empty() ?
+ _("Click to Add/Edit Comments"):
+ _route->comment());
+
+ _route->meter_change.connect (route_connections, ui_bind (&MixerStrip::meter_changed, this, _1), gui_context());
+ _route->input()->changed.connect (route_connections, ui_bind (&MixerStrip::input_changed, this, _1, _2), gui_context());
+ _route->output()->changed.connect (route_connections, ui_bind (&MixerStrip::output_changed, this, _1, _2), gui_context());
+ _route->route_group_changed.connect (route_connections, boost::bind (&MixerStrip::route_group_changed, this), gui_context());
+
+ if (_route->panner()) {
+ _route->panner()->Changed.connect (route_connections, boost::bind (&MixerStrip::connect_to_pan, this), gui_context());
+ }
+
+ if (is_audio_track()) {
+ audio_track()->DiskstreamChanged.connect (route_connections, boost::bind (&MixerStrip::diskstream_changed, this), gui_context());
+ }
+
+ _route->comment_changed.connect (route_connections, ui_bind (&MixerStrip::comment_changed, this, _1), gui_context());
+ _route->gui_changed.connect (route_connections, ui_bind (&MixerStrip::route_gui_changed, this, _1, _2), gui_context());
+
+ set_stuff_from_route ();
+