X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.cc;h=cc322df13d060a00583ed68ee4f7c0df7cf1f13f;hb=e0ad227381ca5caa921ad36473c6297398e28b89;hp=de4af60136465e048f4cd01cda1affcc0ea9ddcf;hpb=2726184f42652a84816096887948658177ea24f8;p=ardour.git diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index de4af60136..cc322df13d 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -37,12 +37,10 @@ #include #include #include -#include #include #include "ardour/amp.h" #include "ardour/ardour.h" -#include "ardour/audio_diskstream.h" #include "ardour/audio_track.h" #include "ardour/audioengine.h" #include "ardour/internal_send.h" @@ -89,6 +87,7 @@ using namespace Gtkmm2ext; ProcessorBox* ProcessorBox::_current_processor_box = 0; RefPtr ProcessorBox::paste_action; RefPtr ProcessorBox::cut_action; +RefPtr ProcessorBox::rename_action; Glib::RefPtr SendProcessorEntry::_slider; ProcessorEntry::ProcessorEntry (boost::shared_ptr p, Width w) @@ -107,8 +106,8 @@ ProcessorEntry::ProcessorEntry (boost::shared_ptr p, Width w) _active.set_active (_processor->active ()); _active.signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::active_toggled)); - _processor->ActiveChanged.connect (active_connection, boost::bind (&ProcessorEntry::processor_active_changed, this), gui_context()); - _processor->PropertyChanged.connect (name_connection, ui_bind (&ProcessorEntry::processor_property_changed, this, _1), gui_context()); + _processor->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_active_changed, this), gui_context()); + _processor->PropertyChanged.connect (name_connection, invalidator (*this), ui_bind (&ProcessorEntry::processor_property_changed, this, _1), gui_context()); } EventBox& @@ -177,10 +176,6 @@ ProcessorEntry::name () const boost::shared_ptr send; string name_display; - if (!_processor->active()) { - name_display = " ("; - } - if ((send = boost::dynamic_pointer_cast (_processor)) != 0 && !boost::dynamic_pointer_cast(_processor)) { @@ -214,10 +209,6 @@ ProcessorEntry::name () const } - if (!_processor->active()) { - name_display += ')'; - } - return name_display; } @@ -232,7 +223,7 @@ SendProcessorEntry::SendProcessorEntry (boost::shared_ptr s, Width w) _vbox.pack_start (_fader); _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &SendProcessorEntry::gain_adjusted)); - _send->amp()->gain_control()->Changed.connect (send_gain_connection, boost::bind (&SendProcessorEntry::show_gain, this), gui_context()); + _send->amp()->gain_control()->Changed.connect (send_gain_connection, invalidator (*this), boost::bind (&SendProcessorEntry::show_gain, this), gui_context()); show_gain (); } @@ -329,9 +320,9 @@ ProcessorBox::set_route (boost::shared_ptr r) no_processor_redisplay = false; _route = r; - _route->processors_changed.connect (connections, ui_bind (&ProcessorBox::route_processors_changed, this, _1), gui_context()); - _route->DropReferences.connect (connections, boost::bind (&ProcessorBox::route_going_away, this), gui_context()); - _route->PropertyChanged.connect (connections, ui_bind (&ProcessorBox::route_property_changed, this, _1), gui_context()); + _route->processors_changed.connect (connections, invalidator (*this), ui_bind (&ProcessorBox::route_processors_changed, this, _1), gui_context()); + _route->DropReferences.connect (connections, invalidator (*this), boost::bind (&ProcessorBox::route_going_away, this), gui_context()); + _route->PropertyChanged.connect (connections, invalidator (*this), ui_bind (&ProcessorBox::route_property_changed, this, _1), gui_context()); redisplay_processors (); } @@ -725,6 +716,11 @@ ProcessorBox::selection_changed () { bool sensitive = (processor_display.selection().empty()) ? false : true; ActionManager::set_sensitive (ActionManager::plugin_selection_sensitive_actions, sensitive); + + /* disallow rename for multiple selections and for plugin inserts */ + rename_action->set_sensitive ( + processor_display.selection().size() == 1 && boost::dynamic_pointer_cast (processor_display.selection().front()->processor()) == 0 + ); } void @@ -745,7 +741,8 @@ ProcessorBox::choose_plugin () _get_plugin_selector()->set_interested_object (*this); } -void +/** @return true if an error occurred, otherwise false */ +bool ProcessorBox::use_plugins (const SelectedPlugins& plugins) { for (SelectedPlugins::const_iterator p = plugins.begin(); p != plugins.end(); ++p) { @@ -760,6 +757,7 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins) if (_route->add_processor (processor, _placement, &err_streams)) { weird_plugin_dialog (**p, err_streams); + return true; // XXX SHAREDPTR delete plugin here .. do we even need to care? } else { @@ -768,12 +766,14 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins) } } } + + return false; } void ProcessorBox::weird_plugin_dialog (Plugin& p, Route::ProcessorStreams streams) { - ArdourDialog dialog (_("ardour: weird plugin dialog")); + ArdourDialog dialog (_("Plugin Incompatibility")); Label label; string text = string_compose(_("You attempted to add the plugin \"%1\" at index %2.\n"), @@ -1019,7 +1019,7 @@ ProcessorBox::compute_processor_sort_keys () /* now tell them about the problem */ - ArdourDialog dialog (_("ardour: weird plugin dialog")); + ArdourDialog dialog (_("Plugin Incompatibility")); Label label; label.set_text (_("\ @@ -1244,11 +1244,27 @@ ProcessorBox::rename_processor (boost::shared_ptr processor) case Gtk::RESPONSE_ACCEPT: name_prompter.get_result (result); if (result.length()) { - if (_session->route_by_name (result)) { - ARDOUR_UI::instance()->popup_error (_("A track already exists with that name.")); - return; - } - processor->set_name (result); + + int tries = 0; + string test = result; + + while (tries < 100) { + if (_session->io_name_is_legal (test)) { + result = test; + break; + } + tries++; + + test = string_compose ("%1-%2", result, tries); + } + + if (tries < 100) { + processor->set_name (result); + } else { + /* unlikely! */ + ARDOUR_UI::instance()->popup_error + (string_compose (_("At least 100 IO objects exist with a name like %1 - name not changed"), result)); + } } break; } @@ -1332,7 +1348,8 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr is a plugin. */ - p.reset (new PluginInsert (*_session, **niter)); + p.reset (new PluginInsert (*_session)); + p->set_state (**niter, Stateful::current_state_version); } copies.push_back (p); @@ -1602,9 +1619,8 @@ ProcessorBox::register_actions () paste_action = ActionManager::register_action (popup_act_grp, X_("paste"), _("Paste"), sigc::ptr_fun (ProcessorBox::rb_paste)); - act = ActionManager::register_action (popup_act_grp, X_("rename"), _("Rename"), + rename_action = ActionManager::register_action (popup_act_grp, X_("rename"), _("Rename"), sigc::ptr_fun (ProcessorBox::rb_rename)); - ActionManager::plugin_selection_sensitive_actions.push_back(act); ActionManager::register_action (popup_act_grp, X_("selectall"), _("Select All"), sigc::ptr_fun (ProcessorBox::rb_select_all)); ActionManager::register_action (popup_act_grp, X_("deselectall"), _("Deselect All"),