}
}
+ boost::shared_ptr<InternalSend> aux;
+ if ((aux = boost::dynamic_pointer_cast<InternalSend> (_processor))) {
+ if (aux->allow_feedback ()) {
+ _button.set_name ("processor auxfeedback");
+ return;
+ }
+ }
+
switch (_position) {
case PreFader:
if (_plugin_display) { _plugin_display->set_name ("processor prefader"); }
if (pi) {
std::string postfix = "";
uint32_t replicated;
+
+ if (pi->plugin()->has_inline_display()) {
+ postfix += string_compose(_("\n%1+double-click to toggle inline-display"), Keyboard::tertiary_modifier_name ());
+ }
+
if ((replicated = pi->get_count()) > 1) {
- postfix = string_compose(_("\nThis mono plugin has been replicated %1 times."), replicated);
+ postfix += string_compose(_("\nThis mono plugin has been replicated %1 times."), replicated);
}
+
if (pi->plugin()->has_editor()) {
ARDOUR_UI_UTILS::set_tooltip (_button,
- string_compose (_("<b>%1</b>\nDouble-click to show GUI.\n%2+double-click to show generic GUI.%3"), name (Wide), Keyboard::primary_modifier_name (), postfix));
+ string_compose (_("<b>%1</b>\nDouble-click to show GUI.\n%2+double-click to show generic GUI.%3"), name (Wide), Keyboard::secondary_modifier_name (), postfix));
} else {
ARDOUR_UI_UTILS::set_tooltip (_button,
string_compose (_("<b>%1</b>\nDouble-click to show generic GUI.%2"), name (Wide), postfix));
Menu* menu = manage (new Menu);
MenuList& items = menu->items ();
- boost::shared_ptr<Send> send = boost::dynamic_pointer_cast<Send> (_processor);
- if (send) {
+ if (!ARDOUR::Profile->get_mixbus()) {
+ boost::shared_ptr<Send> send = boost::dynamic_pointer_cast<Send> (_processor);
+ if (send) {
+ items.push_back (CheckMenuElem (_("Link panner controls")));
+ Gtk::CheckMenuItem* c = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
+ c->set_active (send->panner_shell()->is_linked_to_route());
+ c->signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::toggle_panner_link));
+ }
+ }
- items.push_back (CheckMenuElem (_("Link panner controls")));
+ boost::shared_ptr<InternalSend> aux = boost::dynamic_pointer_cast<InternalSend> (_processor);
+ if (aux) {
+ items.push_back (CheckMenuElem (_("Allow Feedback Loop")));
Gtk::CheckMenuItem* c = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
- c->set_active (send->panner_shell()->is_linked_to_route());
- c->signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::toggle_panner_link));
-
+ c->set_active (aux->allow_feedback());
+ c->signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::toggle_allow_feedback));
}
return menu;
}
}
}
+void
+ProcessorEntry::toggle_allow_feedback ()
+{
+ boost::shared_ptr<InternalSend> aux = boost::dynamic_pointer_cast<InternalSend> (_processor);
+ if (aux) {
+ aux->set_allow_feedback (!aux->allow_feedback ());
+ }
+}
+
ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string const & n)
: _control (c)
, _adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1)
{
set_name ("processor prefader");
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
+ _plug->DropReferences.connect (_death_connection, invalidator (*this), boost::bind (&PluginDisplay::plugin_going_away, this), gui_context());
_plug->QueueDraw.connect (_qdraw_connection, invalidator (*this),
boost::bind (&Gtk::Widget::queue_draw, this), gui_context ());
- std::string postfix = "";
+ std::string postfix = string_compose(_("\n%1+double-click to toggle inline-display"), Keyboard::tertiary_modifier_name ());
+
if (_plug->has_editor()) {
ARDOUR_UI_UTILS::set_tooltip (*this,
string_compose (_("<b>%1</b>\nDouble-click to show GUI.\n%2+double-click to show generic GUI.%3"), e.name (Wide), Keyboard::primary_modifier_name (), postfix));
{
assert (_entry.processor ());
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (_entry.processor());
+ // duplicated code :(
// consider some tweaks to pass this up to the DnDVBox somehow:
// select processor, then call (private)
//_entry._parent->processor_button_press_event (ev, &_entry);
- if (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS)) {
+ if (pi && pi->plugin() && pi->plugin()->has_inline_display()
+ && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)
+ && ev->button == 1
+ && ev->type == GDK_2BUTTON_PRESS) {
+ _entry.toggle_inline_display_visibility ();
+ return true;
+ }
+ else if (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS)) {
if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) {
_entry._parent->generic_edit_processor (_entry.processor ());
} else {
}
- if (!ARDOUR::Profile->get_mixbus()) {
- Gtk::MenuItem* send_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/ProcessorMenu/send_options"));
- if (send_menu_item) {
- if (single_selection && !_route->is_monitor()) {
- Menu* m = single_selection->build_send_options_menu ();
- if (m && !m->items().empty()) {
- send_menu_item->set_submenu (*m);
- send_menu_item->set_sensitive (true);
- } else {
- gtk_menu_item_set_submenu (send_menu_item->gobj(), 0);
- send_menu_item->set_sensitive (false);
- }
+ Gtk::MenuItem* send_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/ProcessorMenu/send_options"));
+ if (send_menu_item) {
+ if (single_selection && !_route->is_monitor()) {
+ Menu* m = single_selection->build_send_options_menu ();
+ if (m && !m->items().empty()) {
+ send_menu_item->set_submenu (*m);
+ send_menu_item->set_sensitive (true);
} else {
+ gtk_menu_item_set_submenu (send_menu_item->gobj(), 0);
send_menu_item->set_sensitive (false);
}
+ } else {
+ send_menu_item->set_sensitive (false);
}
}
int ret = false;
bool selected = processor_display.selected (child);
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (processor);
+ if (pi && pi->plugin() && pi->plugin()->has_inline_display()
+ && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)
+ && ev->button == 1
+ && ev->type == GDK_2BUTTON_PRESS) {
+ child->toggle_inline_display_visibility ();
+ return true;
+ }
+
if (processor && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS))) {
if (_session->engine().connected()) {
void
ProcessorBox::weird_plugin_dialog (Plugin& p, Route::ProcessorStreams streams)
{
+ /* XXX this needs to be re-worked!
+ *
+ * With new pin-management "streams" is no longer correct.
+ * p.get_info () is also incorrect for variable i/o plugins (always -1,-1).
+ *
+ * Since pin-management was added, this dialog will only show in a very rare
+ * condition (non-replicated variable i/o configuration failed).
+ *
+ * TODO: simplify the message after the string-freeze is lifted.
+ */
ArdourDialog dialog (_("Plugin Incompatibility"));
Label label;