+ PBD::ScopedConnection active_connection;
+ PBD::ScopedConnection name_connection;
+ PBD::ScopedConnection config_connection;
+
+ class Control : public sigc::trackable {
+ public:
+ Control (boost::shared_ptr<ARDOUR::AutomationControl>, std::string const &);
+
+ void set_visible (bool);
+ void add_state (XMLNode *) const;
+ void set_state (XMLNode const *);
+ void hide_things ();
+
+ bool visible () const {
+ return _visible;
+ }
+
+ std::string name () const {
+ return _name;
+ }
+
+ Gtk::Alignment box;
+
+ private:
+ void slider_adjusted ();
+ void button_clicked ();
+ void control_changed ();
+ std::string state_id () const;
+ void set_tooltip ();
+
+ boost::weak_ptr<ARDOUR::AutomationControl> _control;
+ /* things for a slider */
+ Gtk::Adjustment _adjustment;
+ Gtkmm2ext::HSliderController _slider;
+ Gtkmm2ext::PersistentTooltip _slider_persistant_tooltip;
+ /* things for a button */
+ ArdourButton _button;
+ bool _ignore_ui_adjustment;
+ PBD::ScopedConnection _connection;
+ bool _visible;
+ std::string _name;
+ };
+
+ std::list<Control*> _controls;
+
+ void toggle_control_visibility (Control *);
+ void toggle_panner_link ();
+
+ class PortIcon : public Gtk::DrawingArea {
+ public:
+ PortIcon(bool input) {
+ _input = input;
+ _ports = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
+ set_size_request (-1, 2);
+ }
+ void set_ports(ARDOUR::ChanCount const ports) { _ports = ports; }
+ private:
+ bool on_expose_event (GdkEventExpose *);
+ bool _input;
+ ARDOUR::ChanCount _ports;
+ };
+
+ class RoutingIcon : public Gtk::DrawingArea {
+ public:
+ RoutingIcon() {
+ _sources = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
+ _sinks = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
+ _splitting = false;
+ set_size_request (-1, 4);
+ }
+ void set_sources(ARDOUR::ChanCount const sources) { _sources = sources; }
+ void set_sinks(ARDOUR::ChanCount const sinks) { _sinks = sinks; }
+ void set_splitting(const bool splitting) { _splitting = splitting; }
+ private:
+ bool on_expose_event (GdkEventExpose *);
+ ARDOUR::ChanCount _sources; // signals available to feed into the processor(s)
+ ARDOUR::ChanCount _sinks; // combined number of outputs of the processor
+ bool _splitting;
+ };
+
+protected:
+ RoutingIcon _routing_icon;
+ PortIcon _input_icon;
+ PortIcon _output_icon;