diff options
-rw-r--r-- | gtk2_ardour/actions.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/actions.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/dark.colors | 2 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 74 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 5 |
5 files changed, 62 insertions, 21 deletions
diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 43d2eb83c9..7f11d053e8 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -49,7 +49,6 @@ using namespace ARDOUR; vector<RefPtr<Gtk::Action> > ActionManager::session_sensitive_actions; vector<RefPtr<Gtk::Action> > ActionManager::write_sensitive_actions; vector<RefPtr<Gtk::Action> > ActionManager::region_list_selection_sensitive_actions; -vector<RefPtr<Gtk::Action> > ActionManager::plugin_selection_sensitive_actions; vector<RefPtr<Gtk::Action> > ActionManager::track_selection_sensitive_actions; vector<RefPtr<Gtk::Action> > ActionManager::point_selection_sensitive_actions; vector<RefPtr<Gtk::Action> > ActionManager::time_selection_sensitive_actions; diff --git a/gtk2_ardour/actions.h b/gtk2_ardour/actions.h index 6900e8392a..13358349ca 100644 --- a/gtk2_ardour/actions.h +++ b/gtk2_ardour/actions.h @@ -37,7 +37,6 @@ namespace ActionManager { extern std::vector<Glib::RefPtr<Gtk::Action> > session_sensitive_actions; extern std::vector<Glib::RefPtr<Gtk::Action> > write_sensitive_actions; extern std::vector<Glib::RefPtr<Gtk::Action> > region_list_selection_sensitive_actions; - extern std::vector<Glib::RefPtr<Gtk::Action> > plugin_selection_sensitive_actions; extern std::vector<Glib::RefPtr<Gtk::Action> > track_selection_sensitive_actions; extern std::vector<Glib::RefPtr<Gtk::Action> > point_selection_sensitive_actions; diff --git a/gtk2_ardour/dark.colors b/gtk2_ardour/dark.colors index 13151ae5b4..648b21b031 100644 --- a/gtk2_ardour/dark.colors +++ b/gtk2_ardour/dark.colors @@ -351,6 +351,8 @@ <ColorAlias name="processor prefader: fill" alias="color 40"/> <ColorAlias name="processor prefader: fill active" alias="color 80"/> <ColorAlias name="processor prefader: led active" alias="color 37"/> + <ColorAlias name="processor stub: fill" alias="color 46"/> + <ColorAlias name="processor stub: fill active" alias="color 46"/> <ColorAlias name="punch button: fill" alias="color 20"/> <ColorAlias name="punch button: fill active" alias="color 9"/> <ColorAlias name="punch button: led active" alias="color 4"/> diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 32140a8a54..536d5f26f9 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -91,7 +91,9 @@ using namespace Gtkmm2ext; ProcessorBox* ProcessorBox::_current_processor_box = 0; RefPtr<Action> ProcessorBox::paste_action; RefPtr<Action> ProcessorBox::cut_action; +RefPtr<Action> ProcessorBox::copy_action; RefPtr<Action> ProcessorBox::rename_action; +RefPtr<Action> ProcessorBox::delete_action; RefPtr<Action> ProcessorBox::edit_action; RefPtr<Action> ProcessorBox::edit_generic_action; @@ -103,6 +105,7 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo , _position (PreFader) , _position_num(0) , _selectable(true) + , _unknown_processor(false) , _parent (parent) , _processor (p) , _width (w) @@ -122,6 +125,7 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo } if (boost::dynamic_pointer_cast<UnknownProcessor> (_processor)) { _button.set_elements(ArdourButton::Element(_button.elements() & ~ArdourButton::Indicator)); + _unknown_processor = true; } if (_processor) { @@ -231,6 +235,11 @@ ProcessorEntry::set_visual_state (Gtkmm2ext::VisualState s, bool yn) void ProcessorEntry::setup_visuals () { + if (_unknown_processor) { + _button.set_name ("processor stub"); + return; + } + switch (_position) { case PreFader: _button.set_name ("processor prefader"); @@ -321,6 +330,11 @@ ProcessorEntry::setup_tooltip () } return; } + if(boost::dynamic_pointer_cast<UnknownProcessor> (_processor)) { + ARDOUR_UI::instance()->set_tip (_button, + string_compose (_("<b>%1</b>\nThe Plugin is not available on this system\nand has been replaced by a stub."), name (Wide))); + return; + } } ARDOUR_UI::instance()->set_tip (_button, string_compose ("<b>%1</b>", name (Wide))); } @@ -1096,6 +1110,9 @@ ProcessorBox::object_drop(DnDVBox<ProcessorEntry>* source, ProcessorEntry* posit list<boost::shared_ptr<Processor> > procs; for (list<ProcessorEntry*>::const_iterator i = children.begin(); i != children.end(); ++i) { if ((*i)->processor ()) { + if (boost::dynamic_pointer_cast<UnknownProcessor> ((*i)->processor())) { + continue; + } procs.push_back ((*i)->processor ()); } } @@ -1234,11 +1251,14 @@ ProcessorBox::show_processor_menu (int arg) /* Sensitise actions as approprioate */ - cut_action->set_sensitive (can_cut()); + + const bool sensitive = !processor_display.selection().empty() && ! stub_processor_selected (); + paste_action->set_sensitive (!_rr_selection.processors.empty()); + cut_action->set_sensitive (sensitive && can_cut ()); + copy_action->set_sensitive (sensitive); + delete_action->set_sensitive (sensitive || stub_processor_selected ()); - const bool sensitive = !processor_display.selection().empty(); - ActionManager::set_sensitive (ActionManager::plugin_selection_sensitive_actions, sensitive); edit_action->set_sensitive (one_processor_can_be_edited ()); edit_generic_action->set_sensitive (one_processor_can_be_edited ()); @@ -1251,7 +1271,10 @@ ProcessorBox::show_processor_menu (int arg) edit_action->set_sensitive (pi && pi->plugin()->has_editor ()); /* disallow rename for multiple selections, for plugin inserts and for the fader */ - rename_action->set_sensitive (single_selection && !pi && !boost::dynamic_pointer_cast<Amp> (single_selection->processor ())); + rename_action->set_sensitive (single_selection + && !pi + && !boost::dynamic_pointer_cast<Amp> (single_selection->processor ()) + && !boost::dynamic_pointer_cast<UnknownProcessor> (single_selection->processor ())); processor_menu->popup (1, arg); @@ -1781,9 +1804,10 @@ ProcessorBox::add_processor_to_display (boost::weak_ptr<Processor> p) boost::shared_ptr<Send> send = boost::dynamic_pointer_cast<Send> (processor); boost::shared_ptr<PortInsert> ext = boost::dynamic_pointer_cast<PortInsert> (processor); + boost::shared_ptr<UnknownProcessor> stub = boost::dynamic_pointer_cast<UnknownProcessor> (processor); //faders and meters are not deletable, copy/paste-able, so they shouldn't be selectable - if (!send && !plugin_insert && !ext) + if (!send && !plugin_insert && !ext && !stub) e->set_selectable(false); bool mark_send_visible = false; @@ -1908,22 +1932,38 @@ ProcessorBox::rename_processors () bool ProcessorBox::can_cut () const { - vector<boost::shared_ptr<Processor> > sel; + vector<boost::shared_ptr<Processor> > sel; - get_selected_processors (sel); + get_selected_processors (sel); - /* cut_processors () does not cut inserts */ + /* cut_processors () does not cut inserts */ - for (vector<boost::shared_ptr<Processor> >::const_iterator i = sel.begin (); i != sel.end (); ++i) { + for (vector<boost::shared_ptr<Processor> >::const_iterator i = sel.begin (); i != sel.end (); ++i) { if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 || (boost::dynamic_pointer_cast<Send>((*i)) != 0) || (boost::dynamic_pointer_cast<Return>((*i)) != 0)) { - return true; - } - } + return true; + } + } - return false; + return false; +} + +bool +ProcessorBox::stub_processor_selected () const +{ + vector<boost::shared_ptr<Processor> > sel; + + get_selected_processors (sel); + + for (vector<boost::shared_ptr<Processor> >::const_iterator i = sel.begin (); i != sel.end (); ++i) { + if (boost::dynamic_pointer_cast<UnknownProcessor>((*i)) != 0) { + return true; + } + } + + return false; } void @@ -2520,14 +2560,10 @@ ProcessorBox::register_actions () /* standard editing stuff */ cut_action = ActionManager::register_action (popup_act_grp, X_("cut"), _("Cut"), sigc::ptr_fun (ProcessorBox::rb_cut)); - ActionManager::plugin_selection_sensitive_actions.push_back(cut_action); - act = ActionManager::register_action (popup_act_grp, X_("copy"), _("Copy"), + copy_action = ActionManager::register_action (popup_act_grp, X_("copy"), _("Copy"), sigc::ptr_fun (ProcessorBox::rb_copy)); - ActionManager::plugin_selection_sensitive_actions.push_back(act); - - act = ActionManager::register_action (popup_act_grp, X_("delete"), _("Delete"), + delete_action = ActionManager::register_action (popup_act_grp, X_("delete"), _("Delete"), sigc::ptr_fun (ProcessorBox::rb_delete)); - ActionManager::plugin_selection_sensitive_actions.push_back(act); // ?? paste_action = ActionManager::register_action (popup_act_grp, X_("paste"), _("Paste"), sigc::ptr_fun (ProcessorBox::rb_paste)); diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 0776feb2b9..a76970b721 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -126,6 +126,7 @@ public: }; void set_position (Position, uint32_t); + bool unknown_processor () const { return _unknown_processor; } ; boost::shared_ptr<ARDOUR::Processor> processor () const; void set_enum_width (Width); @@ -150,6 +151,7 @@ protected: private: bool _selectable; + bool _unknown_processor; void led_clicked(); void processor_active_changed (); void processor_property_changed (const PBD::PropertyChange&); @@ -394,10 +396,13 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void get_selected_processors (ProcSelection&) const; bool can_cut() const; + bool stub_processor_selected() const; static Glib::RefPtr<Gtk::Action> cut_action; + static Glib::RefPtr<Gtk::Action> copy_action; static Glib::RefPtr<Gtk::Action> paste_action; static Glib::RefPtr<Gtk::Action> rename_action; + static Glib::RefPtr<Gtk::Action> delete_action; static Glib::RefPtr<Gtk::Action> edit_action; static Glib::RefPtr<Gtk::Action> edit_generic_action; void paste_processor_state (const XMLNodeList&, boost::shared_ptr<ARDOUR::Processor>); |