X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.cc;h=ce7d0f5567ff5bc931813848c669b0c2f93c9a3c;hb=900309993c485527145be4265247bd521073ee61;hp=e5ccc827f3ff04617677efbab272c5c1933fe49c;hpb=df5cf878ce791175a67f35df0bac5958b8425b1b;p=ardour.git diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index e5ccc827f3..ce7d0f5567 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -19,6 +19,7 @@ #include #include +#include #include @@ -46,6 +47,7 @@ #include #include #include +#include #include "ardour_ui.h" #include "ardour_dialog.h" @@ -57,15 +59,14 @@ #include "mixer_ui.h" #include "actions.h" #include "plugin_ui.h" -#include "send_ui.h" #include "io_selector.h" #include "utils.h" #include "gui_thread.h" #include "i18n.h" -#ifdef HAVE_AUDIOUNIT -#include "au_pluginui.h" +#ifdef HAVE_AUDIOUNITS +class AUPluginUI; #endif using namespace sigc; @@ -81,10 +82,9 @@ bool ProcessorBox::get_colors = true; Gdk::Color* ProcessorBox::active_processor_color; Gdk::Color* ProcessorBox::inactive_processor_color; -ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, boost::shared_ptr rt, PluginSelector &plugsel, - RouteRedirectSelection & rsel, bool owner_is_mixer) - : _route(rt), - _session(sess), +ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, PluginSelector &plugsel, + RouteRedirectSelection & rsel, bool owner_is_mixer) + : _session(sess), _owner_is_mixer (owner_is_mixer), _placement(pcmnt), _plugin_selector(plugsel), @@ -93,8 +93,8 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, boost::shared_ptrset_sizing(TREE_VIEW_COLUMN_FIXED); processor_display.get_column(0)->set_fixed_width(48); - processor_display.set_enable_search (false); - processor_display.add_object_drag (columns.processor.index(), "redirects"); - processor_display.signal_object_drop.connect (mem_fun (*this, &ProcessorBox::object_drop)); + processor_display.add_object_drag (columns.processor.index(), "processors"); + processor_display.signal_drop.connect (mem_fun (*this, &ProcessorBox::object_drop)); TreeViewColumn* name_col = processor_display.get_column(0); CellRendererText* renderer = dynamic_cast(processor_display.get_column_cell_renderer (0)); @@ -139,31 +137,29 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, boost::shared_ptrprocessors_changed.connect (mem_fun(*this, &ProcessorBox::redisplay_processors)); - _route->GoingAway.connect (mem_fun (*this, &ProcessorBox::route_going_away)); - processor_eventbox.signal_enter_notify_event().connect (bind (sigc::ptr_fun (ProcessorBox::enter_box), this)); processor_display.signal_button_press_event().connect (mem_fun(*this, &ProcessorBox::processor_button_press_event), false); processor_display.signal_button_release_event().connect (mem_fun(*this, &ProcessorBox::processor_button_release_event)); - - /* start off as a passthru strip. we'll correct this, if necessary, - in update_diskstream_display(). - */ - - /* now force an update of all the various elements */ - - redisplay_processors (); - processor_eventbox.show(); - processor_scroller.show(); - processor_display.show(); - show(); } ProcessorBox::~ProcessorBox () { } +void +ProcessorBox::set_route (boost::shared_ptr r) +{ + connections.clear (); + + _route = r; + + connections.push_back (_route->processors_changed.connect (mem_fun(*this, &ProcessorBox::redisplay_processors))); + connections.push_back (_route->GoingAway.connect (mem_fun (*this, &ProcessorBox::route_going_away))); + + redisplay_processors (); +} + void ProcessorBox::route_going_away () { @@ -171,22 +167,18 @@ ProcessorBox::route_going_away () no_processor_redisplay = true; } + void -ProcessorBox::object_drop (string type, uint32_t cnt, const boost::shared_ptr* ptr) +ProcessorBox::object_drop (const list >& procs) { - if (type != "redirects" || cnt == 0 || !ptr) { - return; - } - - /* do something with the dropped processors */ + for (std::list >::const_iterator i = procs.begin(); i != procs.end(); ++i) { - list > processors; - - for (uint32_t n = 0; n < cnt; ++n) { - processors.push_back (ptr[n]); + XMLNode& state = (*i)->get_state (); + XMLNodeList nlist; + nlist.push_back (&state); + paste_processor_state (nlist); + delete &state; } - - paste_processor_list (processors); } void @@ -211,12 +203,14 @@ void ProcessorBox::remove_processor_gui (boost::shared_ptr processor) { boost::shared_ptr send; - boost::shared_ptr port_processor; + boost::shared_ptr port_insert; + + if ((port_insert = boost::dynamic_pointer_cast (processor)) != 0) { + + PortInsertUI *io_selector = reinterpret_cast (port_insert->get_gui()); + port_insert->set_gui (0); + delete io_selector; - if ((port_processor = boost::dynamic_pointer_cast (processor)) != 0) { - PortInsertUI *io_selector = reinterpret_cast (port_processor->get_gui()); - port_processor->set_gui (0); - delete io_selector; } else if ((send = boost::dynamic_pointer_cast (processor)) != 0) { SendUIWindow *sui = reinterpret_cast (send->get_gui()); send->set_gui (0); @@ -257,6 +251,12 @@ ProcessorBox::show_processor_menu (gint arg) processor_menu = build_processor_menu (); } + Gtk::MenuItem* plugin_menu_item = dynamic_cast(ActionManager::get_widget("/processormenu/newplugin")); + + if (plugin_menu_item) { + plugin_menu_item->set_submenu (_plugin_selector.plugin_menu()); + } + paste_action->set_sensitive (!_rr_selection.processors.empty()); processor_menu->popup (1, arg); @@ -305,8 +305,14 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev) } else if (processor && ev->button == 1 && selected) { // this is purely informational but necessary - InsertSelected (processor); // emit + ProcessorSelected (processor); // emit + + } else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) { + + choose_plugin (); + _plugin_selector.show_manager (); } + return ret; } @@ -339,9 +345,15 @@ ProcessorBox::processor_button_release_event (GdkEventButton *ev) show_processor_menu(ev->time); ret = true; - } else if (processor && (ev->button == 2) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) { + } else if (processor && Keyboard::is_button2_event (ev) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) { - processor->set_active (!processor->active()); + /* button2-click with no modifiers */ + + if (processor->active()) { + processor->deactivate (); + } else { + processor->activate (); + } ret = true; } @@ -382,25 +394,30 @@ ProcessorBox::deselect_all_processors () void ProcessorBox::choose_plugin () { - sigc::connection newplug_connection = _plugin_selector.PluginCreated.connect (mem_fun(*this,&ProcessorBox::processor_plugin_chosen)); - _plugin_selector.show_all(); - _plugin_selector.run (); - newplug_connection.disconnect(); + _plugin_selector.set_interested_object (*this); } void -ProcessorBox::processor_plugin_chosen (boost::shared_ptr plugin) +ProcessorBox::use_plugins (const SelectedPlugins& plugins) { - if (plugin) { + for (SelectedPlugins::const_iterator p = plugins.begin(); p != plugins.end(); ++p) { - boost::shared_ptr processor (new PluginInsert (_session, plugin, _placement)); - - Route::ProcessorStreams err; + boost::shared_ptr processor (new PluginInsert (_session, *p, _placement)); + + Route::ProcessorStreams err_streams; - if (_route->add_processor (processor, &err)) { - weird_plugin_dialog (*plugin, err, _route); + if (Config->get_new_plugins_active()) { + processor->activate (); + } + + if (_route->add_processor (processor, &err_streams)) { + weird_plugin_dialog (**p, err_streams, _route); // XXX SHAREDPTR delete plugin here .. do we even need to care? } else { + + if (Profile->get_sae()) { + processor->activate (); + } processor->ActiveChanged.connect (bind (mem_fun (*this, &ProcessorBox::show_processor_active), boost::weak_ptr(processor))); } } @@ -470,7 +487,7 @@ ProcessorBox::weird_plugin_dialog (Plugin& p, Route::ProcessorStreams streams, b } void -ProcessorBox::choose_processor () +ProcessorBox::choose_insert () { boost::shared_ptr processor (new PortInsert (_session, _placement)); processor->ActiveChanged.connect (bind (mem_fun(*this, &ProcessorBox::show_processor_active), boost::weak_ptr(processor))); @@ -493,35 +510,64 @@ ProcessorBox::choose_send () outs = _route->n_outputs(); } - send->io()->ensure_io (ChanCount::ZERO, outs, false, this); + /* XXX need processor lock on route */ - SendUIWindow* gui = new SendUIWindow (send, _session); + try { + send->io()->ensure_io (ChanCount::ZERO, outs, false, this); + } catch (AudioEngine::PortRegistrationFailure& err) { + error << string_compose (_("Cannot set up new send: %1"), err.what()) << endmsg; + return; + } /* let the user adjust the output setup (number and connections) before passing it along to the Route */ - gui->show_all (); - gui->present (); + IOSelectorWindow *ios = new IOSelectorWindow (_session, send->io(), false, true); + + ios->show_all (); - /* pass shared_ptr, it will go out of scope when the GUI is deleted */ - /* also, connect it *before* existing handlers so that its definitely executed */ + /* bit of a hack; keep a shared_ptr to send around so that it doesn't get deleted while + the IOSelectorWindow is doing its stuff */ + _send_being_created = send; - gui->signal_delete_event().connect (bind (mem_fun(*this, &ProcessorBox::send_io_finished), send, gui), false); + boost::shared_ptr r = boost::static_pointer_cast(send); + + ios->selector().Finished.connect (bind (mem_fun(*this, &ProcessorBox::send_io_finished), boost::weak_ptr(r), ios)); } -bool -ProcessorBox::send_io_finished (GdkEventAny* ev, boost::shared_ptr send, SendUIWindow* sui) +void +ProcessorBox::send_io_finished (IOSelector::Result r, boost::weak_ptr weak_processor, IOSelectorWindow* ios) { - _route->add_processor (send); - delete sui; - return false; + boost::shared_ptr processor (weak_processor.lock()); + + /* now we can lose the dummy shared_ptr */ + _send_being_created.reset (); + + if (!processor) { + return; + } + + switch (r) { + case IOSelector::Cancelled: + // processor will go away when all shared_ptrs to it vanish + break; + + case IOSelector::Accepted: + _route->add_processor (processor); + if (Profile->get_sae()) { + processor->activate (); + } + break; + } + + delete_when_idle (ios); } void ProcessorBox::redisplay_processors () { - ENSURE_GUI_THREAD(mem_fun(*this, &ProcessorBox::redisplay_processors)); + ENSURE_GUI_THREAD (mem_fun(*this, &ProcessorBox::redisplay_processors)); if (no_processor_redisplay) { return; @@ -534,22 +580,26 @@ ProcessorBox::redisplay_processors () processor_active_connections.clear (); processor_name_connections.clear (); - void (ProcessorBox::*pmf)(boost::shared_ptr) = &ProcessorBox::add_processor_to_display; - _route->foreach_processor (this, pmf); + _route->foreach_processor (mem_fun (*this, &ProcessorBox::add_processor_to_display)); switch (_placement) { case PreFader: - build_processor_tooltip(processor_eventbox, _("Pre-fader processors, sends & plugins:")); + build_processor_tooltip(processor_eventbox, _("Pre-fader inserts, sends & plugins:")); break; case PostFader: - build_processor_tooltip(processor_eventbox, _("Post-fader processors, sends & plugins:")); + build_processor_tooltip(processor_eventbox, _("Post-fader inserts, sends & plugins:")); break; } } void -ProcessorBox::add_processor_to_display (boost::shared_ptr processor) +ProcessorBox::add_processor_to_display (boost::weak_ptr p) { + boost::shared_ptr processor (p.lock ()); + if (!processor) { + return; + } + if (processor->placement() != _placement) { return; } @@ -628,11 +678,7 @@ ProcessorBox::build_processor_tooltip (EventBox& box, string start) for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { Gtk::TreeModel::Row row = *iter; tip += '\n'; - - /* don't use the column text, since it may be narrowed */ - - boost::shared_ptr i = row[columns.processor]; - tip += i->name(); + tip += row[columns.text]; } ARDOUR_UI::instance()->tooltips().set_tip (box, tip); } @@ -647,14 +693,14 @@ ProcessorBox::show_processor_name (boost::weak_ptr processor) void ProcessorBox::show_processor_active (boost::weak_ptr weak_processor) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &ProcessorBox::show_processor_active), weak_processor)); - boost::shared_ptr processor (weak_processor.lock()); if (!processor) { return; } + ENSURE_GUI_THREAD(bind (mem_fun(*this, &ProcessorBox::show_processor_active), weak_processor)); + Gtk::TreeModel::Children children = model->children(); Gtk::TreeModel::Children::iterator iter = children.begin(); @@ -692,8 +738,8 @@ ProcessorBox::compute_processor_sort_keys () Gtk::TreeModel::Children children = model->children(); for (Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { - boost::shared_ptr i = (*iter)[columns.processor]; - i->set_sort_key (sort_key); + boost::shared_ptr r = (*iter)[columns.processor]; + r->set_sort_key (sort_key); sort_key++; } @@ -753,9 +799,10 @@ ProcessorBox::cut_processors () no_processor_redisplay = true; for (vector >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) { - // Do not cut inserts or sends + // Do not cut inserts + if (boost::dynamic_pointer_cast((*i)) != 0 || + (boost::dynamic_pointer_cast((*i)) != 0)) { - if (boost::dynamic_pointer_cast((*i)) != 0) { void* gui = (*i)->get_gui (); if (gui) { @@ -792,8 +839,9 @@ ProcessorBox::copy_processors () } for (vector >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) { - // Do not copy processors or sends - if (boost::dynamic_pointer_cast((*i)) != 0) { + // Do not copy inserts + if (boost::dynamic_pointer_cast((*i)) != 0 || + (boost::dynamic_pointer_cast((*i)) != 0)) { node->add_child_nocopy ((*i)->get_state()); } } @@ -879,42 +927,15 @@ ProcessorBox::paste_processors () cerr << "paste from node called " << _rr_selection.processors.get_node().name() << endl; - paste_processor_state (_rr_selection.processors.get_node()); + paste_processor_state (_rr_selection.processors.get_node().children()); } void -ProcessorBox::paste_processor_list (list >& processors) +ProcessorBox::paste_processor_state (const XMLNodeList& nlist) { - list > copies; - - for (list >::iterator i = processors.begin(); i != processors.end(); ++i) { - - boost::shared_ptr copy = Processor::clone (*i); - - copy->set_placement (_placement); - copies.push_back (copy); - } - - if (_route->add_processors (copies)) { - - string msg = _( - "Copying the set of processors on the clipboard failed,\n\ -probably because the I/O configuration of the plugins\n\ -could not match the configuration of this track."); - MessageDialog am (msg); - am.run (); - } -} - -void -ProcessorBox::paste_processor_state (const XMLNode& node) -{ - XMLNodeList nlist; XMLNodeConstIterator niter; list > copies; - nlist = node.children(); - cerr << "Pasting processor selection containing " << nlist.size() << endl; if (nlist.empty()) { @@ -923,8 +944,22 @@ ProcessorBox::paste_processor_state (const XMLNode& node) for (niter = nlist.begin(); niter != nlist.end(); ++niter) { cerr << "try using " << (*niter)->name() << endl; + XMLProperty const * type = (*niter)->property ("type"); + assert (type); + + boost::shared_ptr p; try { - copies.push_back (boost::shared_ptr (new PluginInsert (_session, **niter))); + if (type->value() == "send") { + XMLNode n (**niter); + Send::make_unique (n, _session); + p.reset (new Send (_session, n)); + + } else { + p.reset (new PluginInsert (_session, **niter)); + } + + p->set_placement (_placement); + copies.push_back (p); } catch (...) { cerr << "plugin insert constructor failed\n"; @@ -945,13 +980,13 @@ could not match the configuration of this track."); void ProcessorBox::activate_processor (boost::shared_ptr r) { - r->set_active (true); + r->activate (); } void ProcessorBox::deactivate_processor (boost::shared_ptr r) { - r->set_active (false); + r->deactivate (); } void @@ -965,30 +1000,13 @@ ProcessorBox::get_selected_processors (vector >& pr } void -ProcessorBox::for_selected_processors (void (ProcessorBox::*pmf)(boost::shared_ptr)) +ProcessorBox::for_selected_processors (void (ProcessorBox::*method)(boost::shared_ptr)) { vector pathlist = processor_display.get_selection()->get_selected_rows(); for (vector::iterator iter = pathlist.begin(); iter != pathlist.end(); ++iter) { boost::shared_ptr processor = (*(model->get_iter(*iter)))[columns.processor]; - (this->*pmf)(processor); - } -} - -void -ProcessorBox::clone_processors () -{ - RouteSelection& routes (_rr_selection.routes); - - if (!routes.empty()) { - if (_route->copy_processors (*routes.front(), _placement)) { - string msg = _( -"Copying the set of processors on the clipboard failed,\n\ -probably because the I/O configuration of the plugins\n\ -could not match the configuration of this track."); - MessageDialog am (msg); - am.run (); - } + (this->*method)(processor); } } @@ -998,16 +1016,6 @@ ProcessorBox::all_processors_active (bool state) _route->all_processors_active (_placement, state); } -void -ProcessorBox::all_plugins_active (bool state) -{ - if (state) { - // XXX not implemented - } else { - _route->disable_plugins (_placement); - } -} - void ProcessorBox::ab_plugins () { @@ -1015,6 +1023,7 @@ ProcessorBox::ab_plugins () ab_direction = !ab_direction; } + void ProcessorBox::clear_processors () { @@ -1053,8 +1062,9 @@ void ProcessorBox::edit_processor (boost::shared_ptr processor) { boost::shared_ptr send; - boost::shared_ptr plugin_processor; - boost::shared_ptr port_processor; + boost::shared_ptr plugin_insert; + boost::shared_ptr port_insert; + Window* gidget = 0; if (boost::dynamic_pointer_cast(_route) != 0) { @@ -1069,6 +1079,8 @@ ProcessorBox::edit_processor (boost::shared_ptr processor) return; } + boost::shared_ptr send = boost::dynamic_pointer_cast (processor); + SendUIWindow *send_ui; if (send->get_gui() == 0) { @@ -1085,94 +1097,64 @@ ProcessorBox::edit_processor (boost::shared_ptr processor) send_ui = reinterpret_cast (send->get_gui()); } - if (send_ui->is_visible()) { - send_ui->get_window()->raise (); - } else { - send_ui->show_all (); - send_ui->present (); - } + gidget = send_ui; + + } else if ((plugin_insert = boost::dynamic_pointer_cast (processor)) != 0) { + + PluginUIWindow *plugin_ui; + + /* these are both allowed to be null */ + + Container* toplevel = get_toplevel(); + Window* win = dynamic_cast(toplevel); - } else if ((plugin_processor = boost::dynamic_pointer_cast (processor)) != 0) { + if (plugin_insert->get_gui() == 0) { - ARDOUR::PluginType type = plugin_processor->type(); - - if (type == ARDOUR::LADSPA || type == ARDOUR::VST) { - PluginUIWindow *plugin_ui; + plugin_ui = new PluginUIWindow (win, plugin_insert); - if (plugin_processor->get_gui() == 0) { - - plugin_ui = new PluginUIWindow (plugin_processor, _session.frame_rate(), _session.engine().frames_per_cycle()); - - if (_owner_is_mixer) { - ARDOUR_UI::instance()->the_mixer()->ensure_float (*plugin_ui); - } else { - ARDOUR_UI::instance()->the_editor().ensure_float (*plugin_ui); - } - - WindowTitle title(Glib::get_application_name()); - title += generate_processor_title (plugin_processor); - plugin_ui->set_title (title.get_string()); - - plugin_processor->set_gui (plugin_ui); - - // change window title when route name is changed - _route->NameChanged.connect (bind (mem_fun(*this, &ProcessorBox::route_name_changed), plugin_ui, boost::weak_ptr (plugin_processor))); - - - } else { - plugin_ui = reinterpret_cast (plugin_processor->get_gui()); - } + WindowTitle title(Glib::get_application_name()); + title += generate_processor_title (plugin_insert); + plugin_ui->set_title (title.get_string()); - if (plugin_ui->is_visible()) { - plugin_ui->get_window()->raise (); - } else { - plugin_ui->show_all (); - plugin_ui->present (); - } -#ifdef HAVE_AUDIOUNIT - } else if (type == ARDOUR::AudioUnit) { - AUPluginUI* plugin_ui; - if (plugin_processor->get_gui() == 0) { - plugin_ui = new AUPluginUI (plugin_processor); - } else { - plugin_ui = reinterpret_cast (plugin_processor->get_gui()); - } - - if (plugin_ui->is_visible()) { - plugin_ui->get_window()->raise (); - } else { - plugin_ui->show_all (); - plugin_ui->present (); - } -#endif - } else { - warning << "Unsupported plugin sent to ProcessorBox::edit_processor()" << endmsg; - return; - } - - } else if ((port_processor = boost::dynamic_pointer_cast (processor)) != 0) { - + plugin_insert->set_gui (plugin_ui); + + // change window title when route name is changed + _route->NameChanged.connect (bind (mem_fun(*this, &ProcessorBox::route_name_changed), plugin_ui, boost::weak_ptr (plugin_insert))); + + } else { + plugin_ui = reinterpret_cast (plugin_insert->get_gui()); + plugin_ui->set_parent (win); + } + + gidget = plugin_ui; + + } else if ((port_insert = boost::dynamic_pointer_cast (processor)) != 0) { + if (!_session.engine().connected()) { MessageDialog msg ( _("Not connected to JACK - no I/O changes are possible")); msg.run (); return; } - + PortInsertWindow *io_selector; - - if (port_processor->get_gui() == 0) { - io_selector = new PortInsertWindow (_session, port_processor); - port_processor->set_gui (io_selector); - + + if (port_insert->get_gui() == 0) { + io_selector = new PortInsertWindow (_session, port_insert); + port_insert->set_gui (io_selector); + } else { - io_selector = reinterpret_cast (port_processor->get_gui()); + io_selector = reinterpret_cast (port_insert->get_gui()); } + + gidget = io_selector; + } - if (io_selector->is_visible()) { - io_selector->get_window()->raise (); + if (gidget) { + if (gidget->is_visible()) { + gidget->get_window()->raise (); } else { - io_selector->show_all (); - io_selector->present (); + gidget->show_all (); + gidget->present (); } } } @@ -1201,9 +1183,9 @@ ProcessorBox::register_actions () Glib::RefPtr act; /* new stuff */ - ActionManager::register_action (popup_act_grp, X_("newplugin"), _("New Plugin ..."), sigc::ptr_fun (ProcessorBox::rb_choose_plugin)); + ActionManager::register_action (popup_act_grp, X_("newplugin"), _("New Plugin"), sigc::ptr_fun (ProcessorBox::rb_choose_plugin)); - act = ActionManager::register_action (popup_act_grp, X_("newinsert"), _("New Insert"), sigc::ptr_fun (ProcessorBox::rb_choose_processor)); + act = ActionManager::register_action (popup_act_grp, X_("newinsert"), _("New Insert"), sigc::ptr_fun (ProcessorBox::rb_choose_insert)); ActionManager::jack_sensitive_actions.push_back (act); act = ActionManager::register_action (popup_act_grp, X_("newsend"), _("New Send ..."), sigc::ptr_fun (ProcessorBox::rb_choose_send)); ActionManager::jack_sensitive_actions.push_back (act); @@ -1233,9 +1215,6 @@ ProcessorBox::register_actions () ActionManager::register_action (popup_act_grp, X_("activate_all"), _("Activate all"), sigc::ptr_fun (ProcessorBox::rb_activate_all)); ActionManager::register_action (popup_act_grp, X_("deactivate_all"), _("Deactivate all"), sigc::ptr_fun (ProcessorBox::rb_deactivate_all)); - ActionManager::register_action (popup_act_grp, X_("a_b_plugins"), _("A/B plugins"), sigc::ptr_fun (ProcessorBox::rb_ab_plugins)); - ActionManager::register_action (popup_act_grp, X_("deactivate_plugins"), _("Deactivate plugins"), sigc::ptr_fun (ProcessorBox::rb_deactivate_plugins)); - /* show editors */ act = ActionManager::register_action (popup_act_grp, X_("edit"), _("Edit"), sigc::ptr_fun (ProcessorBox::rb_edit)); ActionManager::plugin_selection_sensitive_actions.push_back(act); @@ -1255,12 +1234,12 @@ ProcessorBox::rb_choose_plugin () } void -ProcessorBox::rb_choose_processor () +ProcessorBox::rb_choose_insert () { if (_current_processor_box == 0) { return; } - _current_processor_box->choose_processor (); + _current_processor_box->choose_insert (); } void @@ -1388,27 +1367,6 @@ ProcessorBox::rb_deactivate_all () _current_processor_box->all_processors_active (false); } -void -ProcessorBox::rb_deactivate_plugins () -{ - if (_current_processor_box == 0) { - return; - } - _current_processor_box->all_plugins_active (false); -} - - -void -ProcessorBox::rb_ab_plugins () -{ - if (_current_processor_box == 0) { - return; - } - - _current_processor_box->ab_plugins (); -} - - void ProcessorBox::rb_edit () { @@ -1423,8 +1381,8 @@ void ProcessorBox::route_name_changed (PluginUIWindow* plugin_ui, boost::weak_ptr wpi) { ENSURE_GUI_THREAD(bind (mem_fun (*this, &ProcessorBox::route_name_changed), plugin_ui, wpi)); + boost::shared_ptr pi (wpi.lock()); - if (pi) { WindowTitle title(Glib::get_application_name()); @@ -1436,7 +1394,7 @@ ProcessorBox::route_name_changed (PluginUIWindow* plugin_ui, boost::weak_ptr pi) { - string maker = pi->plugin()->maker(); + string maker = pi->plugin()->maker() ? pi->plugin()->maker() : ""; string::size_type email_pos; if ((email_pos = maker.find_first_of ('<')) != string::npos) {