X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplugin_selector.cc;h=3a0fed0d67851e0e1effdb6bde010903ec70d3be;hb=6424a0eab93c85f8b1ff56334f779c1232dfe475;hp=a38ad7d2e06a3cf210c7c2def9e9260ca3f1d527;hpb=04c0f24753a16fb5d89220980051dd8638e65e3e;p=ardour.git diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index a38ad7d2e0..3a0fed0d67 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -42,7 +42,7 @@ #include "gui_thread.h" #include "tooltips.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace PBD; @@ -83,6 +83,8 @@ PluginSelector::PluginSelector (PluginManager& mgr) manager.PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), gui_context()); manager.PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::refill, this), gui_context()); + manager.PluginStatusesChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), gui_context()); + manager.PluginStatusesChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::refill, this), gui_context()); build_plugin_menu (); plugin_model = Gtk::ListStore::create (plugin_columns); @@ -105,6 +107,11 @@ PluginSelector::PluginSelector (PluginManager& mgr) plugin_display.set_headers_clickable (true); plugin_display.set_reorderable (false); plugin_display.set_rules_hint (true); + plugin_display.add_object_drag (plugin_columns.plugin.index(), "PluginInfoPtr"); + plugin_display.set_drag_column (plugin_columns.name.index()); + + // setting a sort-column prevents re-ordering via Drag/Drop + plugin_model->set_sort_column (plugin_columns.name.index(), Gtk::SORT_ASCENDING); CellRendererToggle* fav_cell = dynamic_cast(plugin_display.get_column_cell_renderer (0)); fav_cell->property_activatable() = true; @@ -203,18 +210,29 @@ PluginSelector::PluginSelector (PluginManager& mgr) filter_frame->show_all (); + HBox* side_by_side = manage (new HBox); + VBox* right_side = manage (new VBox); + table->attach (scroller, 0, 7, 0, 5); table->attach (*filter_frame, 0, 7, 6, 7, FILL|EXPAND, FILL, 5, 5); - table->attach(*btn_add, 1, 2, 7, 8, FILL, FILL, 5, 5); - table->attach(*btn_remove, 5, 6, 7, 8, FILL, FILL, 5, 5); - table->attach(ascroller, 0, 7, 8, 10); + right_side->pack_start (ascroller); + + HBox* add_remove = manage (new HBox); + add_remove->pack_start (*btn_add, true, true); + add_remove->pack_start (*btn_remove, true, true); + + right_side->pack_start (*add_remove, false, false); + right_side->set_size_request (200, -1); + + side_by_side->pack_start (*table); + side_by_side->pack_start (*right_side); add_button (Stock::CLOSE, RESPONSE_CLOSE); add_button (_("Insert Plugin(s)"), RESPONSE_APPLY); set_default_response (RESPONSE_APPLY); set_response_sensitive (RESPONSE_APPLY, false); - get_vbox()->pack_start (*table); + get_vbox()->pack_start (*side_by_side); table->set_name("PluginSelectorTable"); plugin_display.set_name("PluginSelectorDisplay"); @@ -323,6 +341,9 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& case LXVST: compstr = X_("LXVST"); break; + case Lua: + compstr = X_("Lua"); + break; } } else if (mode == _("Author contains")) { @@ -370,6 +391,7 @@ PluginSelector::refill () vst_refiller (filterstr); lxvst_refiller (filterstr); au_refiller (filterstr); + lua_refiller (filterstr); in_row_change = false; } @@ -393,18 +415,23 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& filte string creator = (*i)->creator; string::size_type pos = 0; - /* stupid LADSPA creator strings */ + if ((*i)->type == ARDOUR::LADSPA) { + /* stupid LADSPA creator strings */ #ifdef PLATFORM_WINDOWS - while (pos < creator.length() && creator[pos] > -2 && creator[pos] < 256 && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; + while (pos < creator.length() && creator[pos] > -2 && creator[pos] < 256 && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; #else - while (pos < creator.length() && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; + while (pos < creator.length() && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; #endif + } else { + pos = creator.length (); + } // If there were too few characters to create a // meaningful name, mark this creator as 'Unknown' - if (creator.length()<2 || pos<3) + if (creator.length() < 2 || pos < 3) { creator = "Unknown"; - else + } else{ creator = creator.substr (0, pos); + } newrow[plugin_columns.creator] = creator; @@ -436,6 +463,12 @@ PluginSelector::ladspa_refiller (const std::string& filterstr) refiller (manager.ladspa_plugin_info(), filterstr, "LADSPA"); } +void +PluginSelector::lua_refiller (const std::string& filterstr) +{ + refiller (manager.lua_plugin_info(), filterstr, "Lua"); +} + void PluginSelector::lv2_refiller (const std::string& filterstr) { @@ -696,6 +729,7 @@ PluginSelector::build_plugin_menu () PluginInfoList all_plugs; all_plugs.insert (all_plugs.end(), manager.ladspa_plugin_info().begin(), manager.ladspa_plugin_info().end()); + all_plugs.insert (all_plugs.end(), manager.lua_plugin_info().begin(), manager.lua_plugin_info().end()); #ifdef WINDOWS_VST_SUPPORT all_plugs.insert (all_plugs.end(), manager.windows_vst_plugin_info().begin(), manager.windows_vst_plugin_info().end()); #endif @@ -773,23 +807,25 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs) if (manager.get_status (*i) == PluginManager::Hidden) continue; string creator = (*i)->creator; - - /* stupid LADSPA creator strings */ string::size_type pos = 0; + + if ((*i)->type == ARDOUR::LADSPA) { + /* stupid LADSPA creator strings */ #ifdef PLATFORM_WINDOWS - while (pos < creator.length() && creator[pos]>(-2) && creator[pos]<256 && (isprint (creator[pos]))) ++pos; + while (pos < creator.length() && creator[pos] > -2 && creator[pos] < 256 && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; #else - while (pos < creator.length() && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; + while (pos < creator.length() && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos; #endif + } else { + pos = creator.length (); + } - // Check to see if we found any invalid characters. - if (creator.length() != pos) { - // If there were too few characters to create a - // meaningful name, mark this creator as 'Unknown' - if (pos<3) - creator = "Unknown?"; - else - creator = creator.substr (0, pos); + // If there were too few characters to create a + // meaningful name, mark this creator as 'Unknown' + if (creator.length() < 2 || pos < 3) { + creator = "Unknown"; + } else{ + creator = creator.substr (0, pos); } SubmenuMap::iterator x; @@ -955,6 +991,12 @@ static Gtkmm2ext::ActiveState next_state (Gtkmm2ext::ActiveState s){ break; default: assert(0); break; // not reached } + /* impossible, but keep some compiles happy */ + fatal << string_compose (_("programming error: %1"), + X_("Illegal Active State.")) + << endmsg; + abort(); /*NOTREACHED*/ + return Gtkmm2ext::Off; } static Gtkmm2ext::ActiveState prev_state (Gtkmm2ext::ActiveState s){ @@ -970,6 +1012,12 @@ static Gtkmm2ext::ActiveState prev_state (Gtkmm2ext::ActiveState s){ break; default: assert(0); break; // not reached } + /* impossible, but keep some compiles happy */ + fatal << string_compose (_("programming error: %1"), + X_("Illegal Active State.")) + << endmsg; + abort(); /*NOTREACHED*/ + return Gtkmm2ext::Off; } bool