#include "ardour/types.h"
#include "ardour/ardour.h"
#include "ardour/plugin_insert.h"
+#include "ardour/luaproc.h"
#include "ardour/port_insert.h"
#include "ardour/processor.h"
#include "ardour/route.h"
public:
ProcessorWindowProxy (std::string const &, ProcessorBox *, boost::weak_ptr<ARDOUR::Processor>);
~ProcessorWindowProxy();
-
+
Gtk::Window* get (bool create = false);
-
+
boost::weak_ptr<ARDOUR::Processor> processor () const {
return _processor;
}
-
+
ARDOUR::SessionHandlePtr* session_handle();
void show_the_right_window ();
void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; }
-
+
int set_state (const XMLNode&, int);
XMLNode& get_state ();
-
+
private:
ProcessorBox* _processor_box;
boost::weak_ptr<ARDOUR::Processor> _processor;
bool is_custom;
bool want_custom;
- bool _valid;
-
+
+ void processor_going_away ();
+ PBD::ScopedConnection going_away_connection;
+};
+
+
+class PluginPinWindowProxy : public WM::ProxyBase
+{
+ public:
+ PluginPinWindowProxy (std::string const &, boost::weak_ptr<ARDOUR::Processor>);
+ ~PluginPinWindowProxy();
+
+ Gtk::Window* get (bool create = false);
+ ARDOUR::SessionHandlePtr* session_handle();
+
+ private:
+ ProcessorBox* _processor_box;
+ boost::weak_ptr<ARDOUR::Processor> _processor;
+
void processor_going_away ();
PBD::ScopedConnection going_away_connection;
};
+
+
class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
{
public:
void set_selectable(bool s) { _selectable = s; }
bool drag_data_get (Glib::RefPtr<Gdk::DragContext> const, Gtk::SelectionData &);
+ bool can_copy_state (Gtkmm2ext::DnDVBoxChild*) const;
enum Position {
PreFader,
Gtk::VBox _vbox;
Position _position;
uint32_t _position_num;
+ ProcessorBox* _parent;
virtual void setup_visuals ();
std::string name (Width) const;
void setup_tooltip ();
- ProcessorBox* _parent;
boost::shared_ptr<ARDOUR::Processor> _processor;
Width _width;
PBD::ScopedConnection active_connection;
std::list<Control*> _controls;
+ void toggle_inline_display_visibility ();
void toggle_control_visibility (Control *);
void toggle_panner_link ();
+ class PluginDisplay : public Gtk::DrawingArea {
+ public:
+ PluginDisplay(ProcessorEntry&, boost::shared_ptr<ARDOUR::Plugin>, uint32_t max_height = 80);
+ virtual ~PluginDisplay();
+ protected:
+ bool on_expose_event (GdkEventExpose *);
+ void on_size_request (Gtk::Requisition* req);
+ bool on_button_press_event (GdkEventButton *ev);
+ bool on_button_release_event (GdkEventButton *ev);
+
+ void update_height_alloc (uint32_t inline_height);
+ virtual uint32_t render_inline (cairo_t *, uint32_t width);
+
+ ProcessorEntry& _entry;
+ boost::shared_ptr<ARDOUR::Plugin> _plug;
+ PBD::ScopedConnection _qdraw_connection;
+ cairo_surface_t* _surf;
+ uint32_t _max_height;
+ uint32_t _cur_height;
+ bool _scroll;
+ };
+
+ class LuaPluginDisplay : public PluginDisplay {
+ public:
+ LuaPluginDisplay(ProcessorEntry&, boost::shared_ptr<ARDOUR::LuaProc>, uint32_t max_height = 80);
+ ~LuaPluginDisplay();
+ protected:
+ virtual uint32_t render_inline (cairo_t *, uint32_t width);
+ private:
+ boost::shared_ptr<ARDOUR::LuaProc> _luaproc;
+ LuaState lua_gui;
+ luabridge::LuaRef * _lua_render_inline;
+ };
+
class PortIcon : public Gtk::DrawingArea {
public:
PortIcon(bool input);
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);
+ RoutingIcon(bool inputrouting = true);
+ void set (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+ void set_fed_by (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+
+ void set_feeding (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+
+ void set_terminal (bool b);
+
+ void copy_state (const RoutingIcon& other) {
+ _in = other._in;
+ _out = other._out;
+ _sources = other._sources;
+ _sinks = other._sinks;
+ _in_map = other._in_map;
+ _out_map = other._out_map;
+ _thru_map = other._thru_map;
+ _f_out = other._f_out;
+ _f_out_map = other._f_out_map;
+ _f_thru_map = other._f_thru_map;
+ _f_sources = other._f_sources;
+ _i_in = other._i_in;
+ _i_in_map = other._i_in_map;
+ _i_thru_map = other._i_thru_map;
+ _i_sinks = other._i_sinks;
+ _fed_by = other._fed_by;
+ _feeding = other._feeding;
}
- 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; }
+
+ void unset_fed_by () { _fed_by = false ; }
+ void unset_feeding () { _feeding = false ; }
+ bool in_identity () const;
+ bool out_identity () const;
+ bool can_coalesce () const;
+
+ static double pin_x_pos (uint32_t, double, uint32_t, uint32_t, bool);
+ static void draw_connection (cairo_t*, double, double, double, double, bool, bool dashed = false);
+ static void draw_gnd (cairo_t*, double, double, double, bool);
+ static void draw_sidechain (cairo_t*, double, double, double, bool);
+ static void draw_thru_src (cairo_t*, double, double, double, bool);
+ static void draw_thru_sink (cairo_t*, double, double, double, bool);
+
private:
bool on_expose_event (GdkEventExpose *);
- /* the wire icon sits on top of every processor if needed */
- ARDOUR::ChanCount _sources; // signals available (valid outputs from prev. processor)
- ARDOUR::ChanCount _sinks; // actual inputs of this processor
- bool _splitting;
+ void expose_input_map (cairo_t*, const double, const double);
+ void expose_coalesced_input_map (cairo_t*, const double, const double);
+ void expose_output_map (cairo_t*, const double, const double);
+
+ ARDOUR::ChanCount _in;
+ ARDOUR::ChanCount _out;
+ ARDOUR::ChanCount _sources;
+ ARDOUR::ChanCount _sinks;
+ ARDOUR::ChanMapping _in_map;
+ ARDOUR::ChanMapping _out_map;
+ ARDOUR::ChanMapping _thru_map;
+ ARDOUR::ChanCount _f_out;
+ ARDOUR::ChanMapping _f_out_map;
+ ARDOUR::ChanMapping _f_thru_map;
+ ARDOUR::ChanCount _f_sources;
+ ARDOUR::ChanCount _i_in;
+ ARDOUR::ChanMapping _i_in_map;
+ ARDOUR::ChanMapping _i_thru_map;
+ ARDOUR::ChanCount _i_sinks;
+ bool _fed_by;
+ bool _feeding;
+ bool _input;
+ bool _terminal;
};
+public:
+ PortIcon input_icon;
+ PortIcon output_icon;
+ RoutingIcon routing_icon; // sits on top of every processor (input routing)
+ RoutingIcon output_routing_icon; // only used by last processor in the chain
+
protected:
- RoutingIcon _routing_icon;
- PortIcon _input_icon;
- PortIcon _output_icon;
+ PluginDisplay *_plugin_display ;
};
class PluginInsertProcessorEntry : public ProcessorEntry
void hide_things ();
private:
- void plugin_insert_splitting_changed ();
+ void iomap_changed ();
boost::shared_ptr<ARDOUR::PluginInsert> _plugin_insert;
- PBD::ScopedConnection _splitting_connection;
+ PBD::ScopedConnectionList _iomap_connection;
};
class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARDOUR::SessionHandlePtr
void select_all_sends ();
void all_visible_processors_active(bool state);
+ void setup_routing_feeds ();
void hide_things ();
Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>, bool);
Gtk::Window* get_generic_editor_window (boost::shared_ptr<ARDOUR::Processor>);
+ void manage_pins (boost::shared_ptr<ARDOUR::Processor>);
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
void generic_edit_processor (boost::shared_ptr<ARDOUR::Processor>);
sigc::signal<void,boost::shared_ptr<ARDOUR::Processor> > ProcessorSelected;
sigc::signal<void,boost::shared_ptr<ARDOUR::Processor> > ProcessorUnselected;
+ static Glib::RefPtr<Gtk::ActionGroup> processor_box_actions;
+ static Gtkmm2ext::Bindings* bindings;
static void register_actions();
+
#ifndef NDEBUG
static bool show_all_processors;
#endif
private:
- static Gtkmm2ext::ActionMap processor_box_actions;
-
/* prevent copy construction */
ProcessorBox (ProcessorBox const &);
uint32_t _visible_prefader_processors;
RouteProcessorSelection& _rr_selection;
+ static Gtkmm2ext::ActionMap myactions;
+
+ static void load_bindings ();
void route_going_away ();
static Glib::RefPtr<Gtk::Action> paste_action;
static Glib::RefPtr<Gtk::Action> rename_action;
static Glib::RefPtr<Gtk::Action> delete_action;
+ static Glib::RefPtr<Gtk::Action> backspace_action;
+ static Glib::RefPtr<Gtk::Action> manage_pins_action;
static Glib::RefPtr<Gtk::Action> edit_action;
static Glib::RefPtr<Gtk::Action> edit_generic_action;
void paste_processor_state (const XMLNodeList&, boost::shared_ptr<ARDOUR::Processor>);
static void rb_activate_all ();
static void rb_deactivate_all ();
static void rb_ab_plugins ();
+ static void rb_manage_pins ();
static void rb_edit ();
static void rb_edit_generic ();
void set_processor_ui (boost::shared_ptr<ARDOUR::Processor>, Gtk::Window *);
void maybe_add_processor_to_ui_list (boost::weak_ptr<ARDOUR::Processor>);
+ void maybe_add_processor_pin_mgr (boost::weak_ptr<ARDOUR::Processor>);
bool one_processor_can_be_edited ();
bool processor_can_be_edited (boost::shared_ptr<ARDOUR::Processor>);