+
+ return name_display;
+}
+
+SendProcessorEntry::SendProcessorEntry (boost::shared_ptr<Send> s, Width w)
+ : ProcessorEntry (s, w),
+ _send (s),
+ /* set the adjustment to a gain of 0dB so that the fader's default value is right */
+ _adjustment (0.781787, 0, 1, 0.01, 0.1),
+ _fader (_slider, &_adjustment, 0, false),
+ _ignore_gain_change (false)
+{
+ _fader.set_name ("SendFader");
+ _fader.set_controllable (_send->amp()->gain_control ());
+ _vbox.pack_start (_fader);
+
+ _fader.show ();
+
+ _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &SendProcessorEntry::gain_adjusted));
+ _send->amp()->gain_control()->Changed.connect (send_gain_connection, invalidator (*this), boost::bind (&SendProcessorEntry::show_gain, this), gui_context());
+ show_gain ();
+}
+
+void
+SendProcessorEntry::setup_slider_pix ()
+{
+ _slider = ::get_icon ("fader_belt_h_thin");
+ assert (_slider);
+}
+
+void
+SendProcessorEntry::show_gain ()
+{
+ ENSURE_GUI_THREAD (*this, &SendProcessorEntry::show_gain)
+
+ float const value = gain_to_slider_position (_send->amp()->gain ());
+
+ if (_adjustment.get_value() != value) {
+ _ignore_gain_change = true;
+ _adjustment.set_value (value);
+ _ignore_gain_change = false;
+
+ stringstream s;
+ s.precision (1);
+ s.setf (ios::fixed, ios::floatfield);
+ s << accurate_coefficient_to_dB (_send->amp()->gain ()) << _("dB");
+ _fader.set_tooltip_text (s.str ());
+ }
+}
+
+void
+SendProcessorEntry::gain_adjusted ()
+{
+ if (_ignore_gain_change) {
+ return;
+ }
+
+ _send->amp()->set_gain (slider_position_to_gain (_adjustment.get_value()), this);
+}
+
+void
+SendProcessorEntry::set_pixel_width (int p)
+{
+ _fader.set_fader_length (p);
+}
+
+PluginInsertProcessorEntry::PluginInsertProcessorEntry (boost::shared_ptr<ARDOUR::PluginInsert> p, Width w)
+ : ProcessorEntry (p, w)
+ , _plugin_insert (p)
+{
+ p->SplittingChanged.connect (
+ _splitting_connection, invalidator (*this), ui_bind (&PluginInsertProcessorEntry::plugin_insert_splitting_changed, this), gui_context()
+ );
+
+ _splitting_icon.set_size_request (-1, 12);
+
+ _vbox.pack_start (_splitting_icon);
+ _vbox.reorder_child (_splitting_icon, 0);
+
+ plugin_insert_splitting_changed ();
+}
+
+void
+PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
+{
+ if (_plugin_insert->splitting ()) {
+ _splitting_icon.show ();
+ } else {
+ _splitting_icon.hide ();
+ }
+}
+
+void
+PluginInsertProcessorEntry::setup_visuals ()
+{
+ switch (_position) {
+ case PreFader:
+ _splitting_icon.set_name ("ProcessorPreFader");
+ break;
+
+ case Fader:
+ _splitting_icon.set_name ("ProcessorFader");
+ break;
+
+ case PostFader:
+ _splitting_icon.set_name ("ProcessorPostFader");
+ break;
+ }
+
+ ProcessorEntry::setup_visuals ();
+}
+
+bool
+PluginInsertProcessorEntry::SplittingIcon::on_expose_event (GdkEventExpose* ev)
+{
+ cairo_t* cr = gdk_cairo_create (get_window()->gobj());
+
+ cairo_set_line_width (cr, 1);
+
+ double const width = ev->area.width;
+ double const height = ev->area.height;
+
+ Gdk::Color const bg = get_style()->get_bg (STATE_NORMAL);
+ cairo_set_source_rgb (cr, bg.get_red_p (), bg.get_green_p (), bg.get_blue_p ());
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_fill (cr);
+
+ Gdk::Color const fg = get_style()->get_fg (STATE_NORMAL);
+ cairo_set_source_rgb (cr, fg.get_red_p (), fg.get_green_p (), fg.get_blue_p ());
+
+ cairo_move_to (cr, width * 0.3, height);
+ cairo_line_to (cr, width * 0.3, height * 0.5);
+ cairo_line_to (cr, width * 0.7, height * 0.5);
+ cairo_line_to (cr, width * 0.7, height);
+ cairo_move_to (cr, width * 0.5, height * 0.5);
+ cairo_line_to (cr, width * 0.5, 0);
+ cairo_stroke (cr);
+
+ return true;
+}
+
+ProcessorBox::ProcessorBox (ARDOUR::Session* sess, boost::function<PluginSelector*()> get_plugin_selector,
+ RouteRedirectSelection& rsel, MixerStrip* parent, bool owner_is_mixer)
+ : _parent_strip (parent)
+ , _owner_is_mixer (owner_is_mixer)
+ , ab_direction (true)
+ , _get_plugin_selector (get_plugin_selector)
+ , _placement(PreFader)
+ , _rr_selection(rsel)
+{
+ set_session (sess);