(hopefully) less ambiguous wording of processed stem exports. Update the info text...
[ardour.git] / gtk2_ardour / plugin_selector.cc
index f11753819a4405789c6fc524ac776982beba88c7..3c3d08c2d0da68f6449cc80e412054b5b25359b9 100644 (file)
@@ -73,6 +73,7 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        in_row_change = false;
 
        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());
        build_plugin_menu ();
 
        plugin_model = Gtk::ListStore::create (plugin_columns);
@@ -130,8 +131,6 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        btn_remove = manage(new Gtk::Button(Stock::REMOVE));
        btn_remove->set_sensitive (false);
        ARDOUR_UI::instance()->set_tip(*btn_remove, _("Remove a plugin from the effect list"));
-       Gtk::Button *btn_update = manage(new Gtk::Button(Stock::REFRESH));
-       ARDOUR_UI::instance()->set_tip(*btn_update, _("Update available plugins"));
 
        btn_add->set_name("PluginSelectorButton");
        btn_remove->set_name("PluginSelectorButton");
@@ -162,8 +161,7 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        table->attach (*filter_box, 0, 7, 5, 6, FILL|EXPAND, FILL, 5, 5);
 
        table->attach(*btn_add, 1, 2, 6, 7, FILL, FILL, 5, 5);
-       table->attach(*btn_remove, 3, 4, 6, 7, FILL, FILL, 5, 5);
-       table->attach(*btn_update, 5, 6, 6, 7, FILL, FILL, 5, 5);
+       table->attach(*btn_remove, 5, 6, 6, 7, FILL, FILL, 5, 5);
 
        table->attach(ascroller, 0, 7, 8, 10);
 
@@ -182,10 +180,10 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        plugin_display.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::display_selection_changed));
        plugin_display.grab_focus();
 
-       btn_update->signal_clicked().connect (sigc::mem_fun(*this, &PluginSelector::btn_update_clicked));
        btn_add->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_add_clicked));
        btn_remove->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_remove_clicked));
        added_list.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::added_list_selection_changed));
+       added_list.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::added_row_clicked));
 
        refill ();
 }
@@ -201,6 +199,13 @@ PluginSelector::row_activated(Gtk::TreeModel::Path, Gtk::TreeViewColumn*)
        btn_add_clicked();
 }
 
+void
+PluginSelector::added_row_clicked(GdkEventButton* event)
+{
+       if (event->type == GDK_2BUTTON_PRESS)
+               btn_remove_clicked();
+}
+
 bool
 PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& filterstr)
 {
@@ -310,9 +315,17 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& filte
                        string::size_type pos = 0;
 
                        /* stupid LADSPA creator strings */
-
+#ifdef PLATFORM_WINDOWS
+                       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;
-                       creator = creator.substr (0, pos);
+#endif
+                       // 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);
 
                        newrow[plugin_columns.creator] = creator;
 
@@ -429,13 +442,6 @@ PluginSelector::btn_remove_clicked()
        }
 }
 
-void
-PluginSelector::btn_update_clicked()
-{
-       manager.refresh ();
-       refill();
-}
-
 void
 PluginSelector::display_selection_changed()
 {
@@ -681,8 +687,21 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs)
 
                /* stupid LADSPA creator strings */
                string::size_type pos = 0;
+#ifdef PLATFORM_WINDOWS
+               while (pos < creator.length() && creator[pos]>(-2) && creator[pos]<256 && (isprint (creator[pos]))) ++pos;
+#else
                while (pos < creator.length() && (isalnum (creator[pos]) || isspace (creator[pos]))) ++pos;
-               creator = creator.substr (0, pos);
+#endif
+
+               // 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);
+               }
 
                SubmenuMap::iterator x;
                Gtk::Menu* submenu;