Start adding processor box

This commit is contained in:
Len Ovens 2019-01-25 12:22:49 -08:00
parent 5bdfe4dc4c
commit 5414728c18
2 changed files with 217 additions and 73 deletions

View file

@ -81,12 +81,15 @@ FoldbackStrip::FoldbackStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr<Rou
, RouteUI (sess) , RouteUI (sess)
, _mixer(mx) , _mixer(mx)
, _mixer_owned (true) , _mixer_owned (true)
, _pr_selection ()
, panners (sess) , panners (sess)
, button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL)) , button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL))
, mute_solo_table (1, 2) , mute_solo_table (1, 2)
, bottom_button_table (1, 1) , bottom_button_table (1, 1)
, _plugin_insert_cnt (0)
, _comment_button (_("Comments")) , _comment_button (_("Comments"))
, fb_level_control (0) , fb_level_control (0)
// , _visibility (X_("mixer-element-visibility"))
{ {
init (); init ();
set_route (rt); set_route (rt);
@ -106,11 +109,9 @@ FoldbackStrip::init ()
/* the length of this string determines the width of the mixer strip when it is set to `wide' */ /* the length of this string determines the width of the mixer strip when it is set to `wide' */
longest_label = "longest label"; longest_label = "longest label";
//input_button_box.set_spacing(2);
output_button.set_text (_("Output")); output_button.set_text (_("Output"));
output_button.set_name ("foldback strip button"); output_button.set_name ("mixer strip button");
// send_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); // send_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
// send_scroller.add (send_display); // send_scroller.add (send_display);
@ -120,6 +121,9 @@ FoldbackStrip::init ()
send_display.set_size_request (48, -1); send_display.set_size_request (48, -1);
send_display.set_spacing (0); send_display.set_spacing (0);
insert_box = new ProcessorBox (0, boost::bind (&FoldbackStrip::plugin_selector, this), _pr_selection, 0);
insert_box->set_no_show_all ();
insert_box->show ();
// send_scroller.show (); // send_scroller.show ();
send_display.show (); send_display.show ();
@ -151,16 +155,13 @@ FoldbackStrip::init ()
name_button.set_name ("monitor section button"); name_button.set_name ("monitor section button");
name_button.set_text_ellipsize (Pango::ELLIPSIZE_END); name_button.set_text_ellipsize (Pango::ELLIPSIZE_END);
name_button.signal_size_allocate().connect (sigc::mem_fun (*this, &FoldbackStrip::name_button_resized));
_select_button.set_name ("monitor section button"); _select_button.set_name ("monitor section button");
_select_button.set_text (_("Select Foldback Bus")); _select_button.set_text (_("Select Foldback Bus"));
_comment_button.set_name (X_("mixer strip button"));
_comment_button.set_name (X_("foldback strip button"));
_comment_button.set_text_ellipsize (Pango::ELLIPSIZE_END); _comment_button.set_text_ellipsize (Pango::ELLIPSIZE_END);
_comment_button.signal_clicked.connect (sigc::mem_fun (*this, &RouteUI::toggle_comment_editor)); _comment_button.signal_clicked.connect (sigc::mem_fun (*this, &RouteUI::toggle_comment_editor));
_comment_button.signal_size_allocate().connect (sigc::mem_fun (*this, &FoldbackStrip::comment_button_resized));
global_vpacker.set_border_width (1); global_vpacker.set_border_width (1);
@ -171,9 +172,9 @@ FoldbackStrip::init ()
global_vpacker.pack_start (show_sends_box, Gtk::PACK_SHRINK); global_vpacker.pack_start (show_sends_box, Gtk::PACK_SHRINK);
#ifndef MIXBUS #ifndef MIXBUS
//add a spacer underneath the master bus; //add a spacer underneath the foldback bus;
//this fills the area that is taken up by the scrollbar on the tracks; //this fills the area that is taken up by the scrollbar on the tracks;
//and therefore keeps the faders "even" across the bottom //and therefore keeps the strip boxes "even" across the bottom
int scrollbar_height = 0; int scrollbar_height = 0;
{ {
Gtk::Window window (WINDOW_TOPLEVEL); Gtk::Window window (WINDOW_TOPLEVEL);
@ -192,6 +193,8 @@ FoldbackStrip::init ()
global_vpacker.pack_end (mute_solo_table, Gtk::PACK_SHRINK); global_vpacker.pack_end (mute_solo_table, Gtk::PACK_SHRINK);
global_vpacker.pack_end (panners, Gtk::PACK_SHRINK); global_vpacker.pack_end (panners, Gtk::PACK_SHRINK);
global_vpacker.pack_end (bottom_button_table, Gtk::PACK_SHRINK); global_vpacker.pack_end (bottom_button_table, Gtk::PACK_SHRINK);
// global_vpacker.pack_end (*insert_box, true, true);
global_vpacker.pack_end (*insert_box, Gtk::PACK_SHRINK);
global_frame.add (global_vpacker); global_frame.add (global_vpacker);
global_frame.set_shadow_type (Gtk::SHADOW_IN); global_frame.set_shadow_type (Gtk::SHADOW_IN);
@ -214,7 +217,6 @@ FoldbackStrip::init ()
output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &FoldbackStrip::output_press), false); output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &FoldbackStrip::output_press), false);
output_button.signal_button_release_event().connect (sigc::mem_fun(*this, &FoldbackStrip::output_release), false); output_button.signal_button_release_event().connect (sigc::mem_fun(*this, &FoldbackStrip::output_release), false);
output_button.signal_size_allocate().connect (sigc::mem_fun (*this, &FoldbackStrip::output_button_resized));
name_button.signal_button_press_event().connect (sigc::mem_fun(*this, &FoldbackStrip::name_button_button_press), false); name_button.signal_button_press_event().connect (sigc::mem_fun(*this, &FoldbackStrip::name_button_button_press), false);
@ -241,7 +243,19 @@ FoldbackStrip::init ()
*this, invalidator (*this), boost::bind (&FoldbackStrip::port_connected_or_disconnected, this, _1, _3), gui_context () *this, invalidator (*this), boost::bind (&FoldbackStrip::port_connected_or_disconnected, this, _1, _3), gui_context ()
); );
/* Add the widgets under visibility control to the VisibilityGroup; the names used here
must be the same as those used in RCOptionEditor so that the configuration changes
are recognised when they occur.
*/
/* _visibility.add (&_invert_button_box, X_("PhaseInvert"), _("Phase Invert"), false);
_visibility.add (&output_button, X_("Output"), _("Output"), false);
_visibility.add (&_comment_button, X_("Comments"), _("Comments"), false);
parameter_changed (X_("mixer-element-visibility"));
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &FoldbackStrip::parameter_changed));
Config->ParameterChanged.connect (_config_connection, MISSING_INVALIDATOR, boost::bind (&FoldbackStrip::parameter_changed, this, _1), gui_context());
_session->config.ParameterChanged.connect (_config_connection, MISSING_INVALIDATOR, boost::bind (&FoldbackStrip::parameter_changed, this, _1), gui_context());
*/
//watch for mouse enter/exit so we can do some stuff //watch for mouse enter/exit so we can do some stuff
signal_enter_notify_event().connect (sigc::mem_fun(*this, &FoldbackStrip::mixer_strip_enter_event )); signal_enter_notify_event().connect (sigc::mem_fun(*this, &FoldbackStrip::mixer_strip_enter_event ));
signal_leave_notify_event().connect (sigc::mem_fun(*this, &FoldbackStrip::mixer_strip_leave_event )); signal_leave_notify_event().connect (sigc::mem_fun(*this, &FoldbackStrip::mixer_strip_leave_event ));
@ -265,7 +279,7 @@ FoldbackStrip::mixer_strip_enter_event (GdkEventCrossing* /*ev*/)
//although we are triggering on the "enter", to the user it will appear that it is happenin on the "leave" //although we are triggering on the "enter", to the user it will appear that it is happenin on the "leave"
//because the FoldbackStrip control is a parent that encompasses the strip //because the FoldbackStrip control is a parent that encompasses the strip
//deselect_all_processors(); deselect_all_processors();
return false; return false;
} }
@ -304,35 +318,27 @@ FoldbackStrip::set_route (boost::shared_ptr<Route> rt)
/// FIX NO route /// FIX NO route
if (!rt) { if (!rt) {
RouteUI::self_delete (); RouteUI::self_delete ();
/* _route.reset (); // drop reference to route, so that it can be cleaned up
route_connections.drop_connections ();
delete solo_menu;
delete mute_menu;
delete sends_menu;
delete record_menu;
delete comment_window;
delete input_selector;
delete output_selector;
delete monitor_input_button;
delete monitor_disk_button;
delete _invert_menu;
send_blink_connection.disconnect ();
rec_blink_connection.disconnect ();*/
return; return;
} }
//the rec/monitor stuff only shows up for tracks.
//the show_sends only shows up for buses.
//remove them all here, and we may add them back later
if (show_sends_button->get_parent()) { if (show_sends_button->get_parent()) {
show_sends_box.remove (*show_sends_button); show_sends_box.remove (*show_sends_button);
} }
RouteUI::set_route (rt); RouteUI::set_route (rt);
/* ProcessorBox needs access to _route so that it can read
GUI object state.
*/
// processor_box.set_route (rt);
insert_box->set_route (rt);
revert_to_default_display (); revert_to_default_display ();
// mute_solo_table.attach (gpm.gain_display,0,1,1,2, EXPAND|FILL, EXPAND);
// mute_solo_table.attach (gpm.peak_display,1,2,1,2, EXPAND|FILL, EXPAND);
if (solo_button->get_parent()) { if (solo_button->get_parent()) {
mute_solo_table.remove (*solo_button); mute_solo_table.remove (*solo_button);
} }
@ -389,6 +395,8 @@ FoldbackStrip::set_route (boost::shared_ptr<Route> rt)
add_events (Gdk::BUTTON_RELEASE_MASK); add_events (Gdk::BUTTON_RELEASE_MASK);
insert_box->show ();
Route::FedBy fed_by = _route->fed_by(); Route::FedBy fed_by = _route->fed_by();
for (Route::FedBy::iterator i = fed_by.begin(); i != fed_by.end(); ++i) { for (Route::FedBy::iterator i = fed_by.begin(); i != fed_by.end(); ++i) {
if (i->sends_only) { if (i->sends_only) {
@ -445,6 +453,7 @@ FoldbackStrip::set_stuff_from_route ()
Width width; Width width;
if (get_gui_property ("strip-width", width)) { if (get_gui_property ("strip-width", width)) {
// set_width_enum (width, this);
} }
} }
@ -641,10 +650,10 @@ FoldbackStrip::connect_to_pan ()
* we switch the panner eg. AUX-Send and back * we switch the panner eg. AUX-Send and back
* _route->panner_shell()->Changed() vs _panshell->Changed * _route->panner_shell()->Changed() vs _panshell->Changed
*/ */
/* if (panners._panner == 0) { /*if (panners._panner == 0) {
panners.panshell_changed (); panners.panshell_changed ();
} }*/
*/ update_panner_choices(); update_panner_choices();
} }
void void
@ -853,8 +862,8 @@ FoldbackStrip::update_io_button ()
vector<string> phys; vector<string> phys;
string playorcapture; string playorcapture;
_session->engine().get_physical_outputs(dt, phys); _session->engine().get_physical_outputs(dt, phys);
playorcapture = "playback_"; playorcapture = "playback_";
for (PortSet::iterator port = io->ports().begin(dt); for (PortSet::iterator port = io->ports().begin(dt);
port != io->ports().end(dt); port != io->ports().end(dt);
++port) { ++port) {
@ -933,9 +942,8 @@ FoldbackStrip::update_io_button ()
char * cstr = new char[tooltip.str().size() + 1]; char * cstr = new char[tooltip.str().size() + 1];
strcpy(cstr, tooltip.str().c_str()); strcpy(cstr, tooltip.str().c_str());
output_button.set_text (label.str());
output_button.set_text (label.str()); set_tooltip (&output_button, cstr);
set_tooltip (&output_button, cstr);
delete [] cstr; delete [] cstr;
} }
@ -1002,6 +1010,24 @@ FoldbackStrip::show_passthru_color ()
//reset_strip_style (); //reset_strip_style ();
} }
void
FoldbackStrip::help_count_plugins (boost::weak_ptr<Processor> p)
{
boost::shared_ptr<Processor> processor (p.lock ());
if (!processor || !processor->display_to_user()) {
return;
}
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (processor);
#ifdef MIXBUS
if (pi && pi->is_channelstrip ()) {
return;
}
#endif
if (pi) {
++_plugin_insert_cnt;
}
}
void void
FoldbackStrip::build_route_ops_menu () FoldbackStrip::build_route_ops_menu ()
{ {
@ -1017,6 +1043,8 @@ FoldbackStrip::build_route_ops_menu ()
items.push_back (SeparatorElem()); items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Save As Template..."), sigc::mem_fun(*this, &RouteUI::save_as_template)));
items.push_back (MenuElem (_("Rename..."), sigc::mem_fun(*this, &RouteUI::route_rename))); items.push_back (MenuElem (_("Rename..."), sigc::mem_fun(*this, &RouteUI::route_rename)));
items.push_back (SeparatorElem()); items.push_back (SeparatorElem());
@ -1109,6 +1137,25 @@ FoldbackStrip::list_fb_routes ()
build_route_select_menu (); build_route_select_menu ();
} }
void
FoldbackStrip::set_selected (bool yn)
{
AxisView::set_selected (yn);
if (selected()) {
global_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
global_frame.set_name ("MixerStripSelectedFrame");
} else {
global_frame.set_shadow_type (Gtk::SHADOW_IN);
global_frame.set_name ("MixerStripFrame");
}
global_frame.queue_draw ();
// if (!yn)
// processor_box.deselect_all_processors();
}
void void
FoldbackStrip::route_property_changed (const PropertyChange& what_changed) FoldbackStrip::route_property_changed (const PropertyChange& what_changed)
{ {
@ -1127,25 +1174,25 @@ FoldbackStrip::name_changed ()
set_tooltip (name_button, Gtkmm2ext::markup_escape_text(_route->name())); set_tooltip (name_button, Gtkmm2ext::markup_escape_text(_route->name()));
} }
/*
void void
FoldbackStrip::output_button_resized (Gtk::Allocation& alloc) FoldbackStrip::output_button_resized (Gtk::Allocation& alloc)
{ {
output_button.set_layout_ellipsize_width (alloc.get_width() * PANGO_SCALE); //output_button.set_layout_ellipsize_width (alloc.get_width() * PANGO_SCALE);
} }
void void
FoldbackStrip::name_button_resized (Gtk::Allocation& alloc) FoldbackStrip::name_button_resized (Gtk::Allocation& alloc)
{ {
name_button.set_layout_ellipsize_width (20); //name_button.set_layout_ellipsize_width (20);
} }
void void
FoldbackStrip::comment_button_resized (Gtk::Allocation& alloc) FoldbackStrip::comment_button_resized (Gtk::Allocation& alloc)
{ {
_comment_button.set_layout_ellipsize_width (alloc.get_width() * PANGO_SCALE); //_comment_button.set_layout_ellipsize_width (alloc.get_width() * PANGO_SCALE);
} }
*/
void void
FoldbackStrip::set_embedded (bool yn) FoldbackStrip::set_embedded (bool yn)
{ {
@ -1164,12 +1211,34 @@ FoldbackStrip::map_frozen ()
void void
FoldbackStrip::hide_redirect_editors () FoldbackStrip::hide_redirect_editors ()
{ {
_route->foreach_processor (sigc::mem_fun (*this, &FoldbackStrip::hide_processor_editor));
}
void
FoldbackStrip::hide_processor_editor (boost::weak_ptr<Processor> p)
{
boost::shared_ptr<Processor> processor (p.lock ());
if (!processor) {
return;
}
// Gtk::Window* w = processor_box.get_processor_ui (processor);
Gtk::Window* w = insert_box->get_processor_ui (processor);
if (w) {
w->hide ();
}
} }
void void
FoldbackStrip::reset_strip_style () FoldbackStrip::reset_strip_style ()
{ {
set_name ("AudioBusStripBase"); if (_route->active()) {
set_name ("AudioBusStripBase");
} else {
set_name ("AudioBusStripBaseInactive");
}
} }
void void
@ -1233,28 +1302,31 @@ void
FoldbackStrip::set_button_names () FoldbackStrip::set_button_names ()
{ {
mute_button->set_text (_("Mute")); mute_button->set_text (_("Mute"));
if (_route && _route->solo_safe_control()->solo_safe()) {
if (_route && _route->solo_safe_control()->solo_safe()) { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive));
solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); } else {
} else { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive));
solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); }
} if (!Config->get_solo_control_is_listen_control()) {
if (!Config->get_solo_control_is_listen_control()) { solo_button->set_text (_("Solo"));
solo_button->set_text (_("Solo")); } else {
} else { switch (Config->get_listen_position()) {
switch (Config->get_listen_position()) { case AfterFaderListen:
case AfterFaderListen: solo_button->set_text (_("AFL"));
solo_button->set_text (_("AFL")); break;
break; case PreFaderListen:
case PreFaderListen: solo_button->set_text (_("PFL"));
solo_button->set_text (_("PFL")); break;
break;
}
} }
}
}
PluginSelector*
FoldbackStrip::plugin_selector()
{
return _mixer.plugin_selector();
} }
string string
@ -1275,6 +1347,57 @@ FoldbackStrip::route_active_changed ()
reset_strip_style (); reset_strip_style ();
} }
void
FoldbackStrip::copy_processors ()
{
// processor_box.processor_operation (ProcessorBox::ProcessorsCopy);
insert_box->processor_operation (ProcessorBox::ProcessorsCopy);
}
void
FoldbackStrip::cut_processors ()
{
// processor_box.processor_operation (ProcessorBox::ProcessorsCut);
insert_box->processor_operation (ProcessorBox::ProcessorsCut);
}
void
FoldbackStrip::paste_processors ()
{
insert_box->processor_operation (ProcessorBox::ProcessorsPaste);
}
void
FoldbackStrip::select_all_processors ()
{
insert_box->processor_operation (ProcessorBox::ProcessorsSelectAll);
}
void
FoldbackStrip::deselect_all_processors ()
{
// processor_box.processor_operation (ProcessorBox::ProcessorsSelectNone);
insert_box->processor_operation (ProcessorBox::ProcessorsSelectNone);
}
bool
FoldbackStrip::delete_processors ()
{
return insert_box->processor_operation (ProcessorBox::ProcessorsDelete);
}
void
FoldbackStrip::toggle_processors ()
{
insert_box->processor_operation (ProcessorBox::ProcessorsToggleActive);
}
void
FoldbackStrip::ab_plugins ()
{
insert_box->processor_operation (ProcessorBox::ProcessorsAB);
}
void void
FoldbackStrip::build_sends_menu () FoldbackStrip::build_sends_menu ()
{ {
@ -1310,13 +1433,13 @@ FoldbackStrip::color () const
{ {
return route_color (); return route_color ();
} }
/*
bool /*bool
FoldbackStrip::marked_for_display () const FoldbackStrip::marked_for_display () const
{ {
return !_route->presentation_info().hidden(); return !_route->presentation_info().hidden();
} }*/
*/
void void
FoldbackStrip::remove_current_fb () FoldbackStrip::remove_current_fb ()
{ {

View file

@ -30,9 +30,7 @@
#include <gtkmm/frame.h> #include <gtkmm/frame.h>
#include <gtkmm/label.h> #include <gtkmm/label.h>
#include <gtkmm/menu.h> #include <gtkmm/menu.h>
//#include <gtkmm/scrolledwindow.h> // test
#include <gtkmm/sizegroup.h> #include <gtkmm/sizegroup.h>
#include <gtkmm/table.h>
#include <gtkmm/textview.h> #include <gtkmm/textview.h>
#include <gtkmm/togglebutton.h> #include <gtkmm/togglebutton.h>
@ -51,6 +49,10 @@
#include "route_ui.h" #include "route_ui.h"
#include "panner_ui.h" #include "panner_ui.h"
#include "enums.h" #include "enums.h"
#include "processor_box.h"
//#include "visibility_group.h"
#include "processor_selection.h"
namespace ARDOUR { namespace ARDOUR {
class Route; class Route;
class Send; class Send;
@ -81,15 +83,18 @@ public:
boost::shared_ptr<ARDOUR::Stripable> stripable() const { return RouteUI::stripable(); } boost::shared_ptr<ARDOUR::Stripable> stripable() const { return RouteUI::stripable(); }
// Width get_width_enum () const { return _width; }
void* width_owner () const { return _width_owner; } void* width_owner () const { return _width_owner; }
PannerUI& panner_ui() { return panners; } PannerUI& panner_ui() { return panners; }
PluginSelector* plugin_selector();
void fast_update (); void fast_update ();
void set_embedded (bool); void set_embedded (bool);
void set_route (boost::shared_ptr<ARDOUR::Route>); void set_route (boost::shared_ptr<ARDOUR::Route>);
void set_button_names (); void set_button_names ();
// void show_send (boost::shared_ptr<ARDOUR::Send>);
void revert_to_default_display (); void revert_to_default_display ();
/** @return the delivery that is being edited using our fader; it will be the /** @return the delivery that is being edited using our fader; it will be the
@ -110,8 +115,20 @@ public:
std::string state_id() const; std::string state_id() const;
// void parameter_changed (std::string);
void route_active_changed (); void route_active_changed ();
void copy_processors ();
void cut_processors ();
void paste_processors ();
void select_all_processors ();
void deselect_all_processors ();
bool delete_processors (); //note: returns false if nothing was deleted
void toggle_processors ();
void ab_plugins ();
void set_selected (bool yn);
static FoldbackStrip* entered_foldback_strip() { return _entered_foldback_strip; } static FoldbackStrip* entered_foldback_strip() { return _entered_foldback_strip; }
protected: protected:
@ -132,12 +149,14 @@ private:
Width _width; Width _width;
void* _width_owner; void* _width_owner;
Gtk::EventBox spacer; Gtk::EventBox spacer;
Gtk::VBox send_display; Gtk::VBox send_display;
Gtk::Frame global_frame; Gtk::Frame global_frame;
Gtk::VBox global_vpacker; Gtk::VBox global_vpacker;
ProcessorBox* insert_box;
ProcessorSelection _pr_selection;
PannerUI panners; PannerUI panners;
Glib::RefPtr<Gtk::SizeGroup> button_size_group; Glib::RefPtr<Gtk::SizeGroup> button_size_group;
@ -147,13 +166,13 @@ private:
ArdourWidgets::ArdourButton output_button; ArdourWidgets::ArdourButton output_button;
void output_button_resized (Gtk::Allocation&);
void comment_button_resized (Gtk::Allocation&);
Gtk::HBox show_sends_box; Gtk::HBox show_sends_box;
std::string longest_label; std::string longest_label;
void help_count_plugins (boost::weak_ptr<ARDOUR::Processor>);
uint32_t _plugin_insert_cnt;
gint mark_update_safe (); gint mark_update_safe ();
guint32 mode_switch_in_progress; guint32 mode_switch_in_progress;
@ -207,10 +226,10 @@ private:
void show_passthru_color (); void show_passthru_color ();
void route_property_changed (const PBD::PropertyChange&); void route_property_changed (const PBD::PropertyChange&);
void name_button_resized (Gtk::Allocation&);
void name_changed (); void name_changed ();
void update_speed_display (); void update_speed_display ();
void map_frozen (); void map_frozen ();
void hide_processor_editor (boost::weak_ptr<ARDOUR::Processor> processor);
void hide_redirect_editors (); void hide_redirect_editors ();
bool ignore_speed_adjustment; bool ignore_speed_adjustment;
@ -220,6 +239,8 @@ private:
void engine_running(); void engine_running();
void engine_stopped(); void engine_stopped();
// virtual void bus_send_display_changed (boost::shared_ptr<ARDOUR::Route>);
void set_current_delivery (boost::shared_ptr<ARDOUR::Delivery>); void set_current_delivery (boost::shared_ptr<ARDOUR::Delivery>);
void drop_send (); void drop_send ();