#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/choice.h>
#include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/stop_signal.h>
#include <gtkmm2ext/doi.h>
#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"
ProcessorBox* ProcessorBox::_current_processor_box = 0;
RefPtr<Action> ProcessorBox::paste_action;
RefPtr<Action> ProcessorBox::cut_action;
+RefPtr<Action> ProcessorBox::rename_action;
Glib::RefPtr<Gdk::Pixbuf> SendProcessorEntry::_slider;
ProcessorEntry::ProcessorEntry (boost::shared_ptr<Processor> 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&
boost::shared_ptr<Send> send;
string name_display;
- if (!_processor->active()) {
- name_display = " (";
- }
-
if ((send = boost::dynamic_pointer_cast<Send> (_processor)) != 0 &&
!boost::dynamic_pointer_cast<InternalSend>(_processor)) {
}
- if (!_processor->active()) {
- name_display += ')';
- }
-
return name_display;
}
_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 ();
}
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 ();
}
{
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<PluginInsert> (processor_display.selection().front()->processor()) == 0
+ );
}
void
_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) {
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 {
}
}
}
+
+ 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"),
/* now tell them about the problem */
- ArdourDialog dialog (_("ardour: weird plugin dialog"));
+ ArdourDialog dialog (_("Plugin Incompatibility"));
Label label;
label.set_text (_("\
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;
}
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);
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"),