+
+void
+MixerStrip::parameter_changed (string p)
+{
+ if (p == _visibility.get_state_name()) {
+ /* The user has made changes to the mixer strip visibility, so get
+ our VisibilityGroup to reflect these changes in our widgets.
+ */
+ _visibility.set_state (Config->get_mixer_strip_visibility ());
+ }
+}
+
+/** Called to decide whether the solo isolate / solo lock button visibility should
+ * be overridden from that configured by the user. We do this for the master bus.
+ *
+ * @return optional value that is present if visibility state should be overridden.
+ */
+boost::optional<bool>
+MixerStrip::override_solo_visibility () const
+{
+ if (_route && _route->is_master ()) {
+ return boost::optional<bool> (false);
+ }
+
+ return boost::optional<bool> ();
+}
+
+void
+MixerStrip::add_input_port (DataType t)
+{
+ _route->input()->add_port ("", this, t);
+}
+
+void
+MixerStrip::add_output_port (DataType t)
+{
+ _route->output()->add_port ("", this, t);
+}
+
+void
+MixerStrip::route_active_changed ()
+{
+ reset_strip_style ();
+}
+
+void
+MixerStrip::copy_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsCopy);
+}
+
+void
+MixerStrip::cut_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsCut);
+}
+
+void
+MixerStrip::paste_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsPaste);
+}
+
+void
+MixerStrip::select_all_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsSelectAll);
+}
+
+void
+MixerStrip::delete_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsDelete);
+}
+
+void
+MixerStrip::toggle_processors ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsToggleActive);
+}
+
+void
+MixerStrip::ab_plugins ()
+{
+ processor_box.processor_operation (ProcessorBox::ProcessorsAB);
+}
+
+bool
+MixerStrip::level_meter_button_press (GdkEventButton* ev)
+{
+ if (ev->button == 3) {
+ popup_level_meter_menu (ev);
+ return true;
+ }
+
+ return false;
+}
+
+void
+MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
+{
+ using namespace Gtk::Menu_Helpers;
+
+ Gtk::Menu* m = manage (new Menu);
+ MenuList& items = m->items ();
+
+ RadioMenuItem::Group group;
+
+ add_level_meter_item (items, group, _("Input"), MeterInput);
+ add_level_meter_item (items, group, _("Pre-fader"), MeterPreFader);
+ add_level_meter_item (items, group, _("Post-fader"), MeterPostFader);
+ add_level_meter_item (items, group, _("Output"), MeterOutput);
+ add_level_meter_item (items, group, _("Custom"), MeterCustom);
+
+ m->popup (ev->button, ev->time);
+}
+
+void
+MixerStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterPoint point)
+{
+ using namespace Menu_Helpers;
+
+ items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (*this, &MixerStrip::set_meter_point), point)));
+ RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+ i->set_active (_route->meter_point() == point);
+}
+
+void
+MixerStrip::set_meter_point (MeterPoint p)
+{
+ _route->set_meter_point (p);
+}