compare plugin/creator/category names UTF8-aware
[ardour.git] / gtk2_ardour / plugin_selector.cc
index b1698b59aef550bc5dde6299a5361157874b4c9e..bb96c7f392dc97e26b8d97d15f90f645f6bd42d9 100644 (file)
@@ -37,8 +37,7 @@
 
 #include "ardour/plugin_manager.h"
 #include "ardour/plugin.h"
-#include "ardour/configuration.h"
-#include "ardour/session.h"
+#include "ardour/utils.h"
 
 #include "ardour_ui.h"
 #include "plugin_selector.h"
@@ -68,7 +67,6 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        , manager (mgr)
          
 {
-       set_position (Gtk::WIN_POS_MOUSE);
        set_name ("PluginSelectorWindow");
        add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
 
@@ -85,7 +83,7 @@ PluginSelector::PluginSelector (PluginManager& mgr)
           related to "hidden"
        */
        plugin_display.append_column (_("Fav"), plugin_columns.favorite);
-       plugin_display.append_column (_("Hid"), plugin_columns.hidden);
+       plugin_display.append_column (_("Hide"), plugin_columns.hidden);
        plugin_display.append_column (_("Available Plugins"), plugin_columns.name);
        plugin_display.append_column (_("Type"), plugin_columns.type_name);
        plugin_display.append_column (_("Category"), plugin_columns.category);
@@ -181,7 +179,7 @@ PluginSelector::PluginSelector (PluginManager& mgr)
        //plugin_display.set_name("PluginSelectorList");
        added_list.set_name("PluginSelectorList");
 
-       plugin_display.signal_button_press_event().connect_notify (sigc::mem_fun(*this, &PluginSelector::row_clicked));
+       plugin_display.signal_row_activated().connect_notify (sigc::mem_fun(*this, &PluginSelector::row_activated));
        plugin_display.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::display_selection_changed));
        plugin_display.grab_focus();
 
@@ -199,11 +197,9 @@ PluginSelector::~PluginSelector ()
 }
 
 void
-PluginSelector::row_clicked(GdkEventButton* event)
+PluginSelector::row_activated(Gtk::TreeModel::Path, Gtk::TreeViewColumn*)
 {
-       if (event->type == GDK_2BUTTON_PRESS) {
-               btn_add_clicked();
-       }
+       btn_add_clicked();
 }
 
 bool
@@ -321,15 +317,22 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& filte
 
                        newrow[plugin_columns.creator] = creator;
 
-                       snprintf (buf, sizeof(buf), "%d", (*i)->n_inputs.n_audio());
-                       newrow[plugin_columns.audio_ins] = buf;
-                       snprintf (buf, sizeof(buf), "%d", (*i)->n_inputs.n_midi());
-                       newrow[plugin_columns.midi_ins] = buf;
-
-                       snprintf (buf, sizeof(buf), "%d", (*i)->n_outputs.n_audio());
-                       newrow[plugin_columns.audio_outs] = buf;
-                       snprintf (buf, sizeof(buf), "%d", (*i)->n_outputs.n_midi());
-                       newrow[plugin_columns.midi_outs] = buf;
+                       if ((*i)->reconfigurable_io ()) {
+                               newrow[plugin_columns.audio_ins] = _("variable");
+                               newrow[plugin_columns.midi_ins] = _("variable");
+                               newrow[plugin_columns.audio_outs] = _("variable");
+                               newrow[plugin_columns.midi_outs] = _("variable");
+                       } else {
+                               snprintf (buf, sizeof(buf), "%d", (*i)->n_inputs.n_audio());
+                               newrow[plugin_columns.audio_ins] = buf;
+                               snprintf (buf, sizeof(buf), "%d", (*i)->n_inputs.n_midi());
+                               newrow[plugin_columns.midi_ins] = buf;
+                               
+                               snprintf (buf, sizeof(buf), "%d", (*i)->n_outputs.n_audio());
+                               newrow[plugin_columns.audio_outs] = buf;
+                               snprintf (buf, sizeof(buf), "%d", (*i)->n_outputs.n_midi());
+                               newrow[plugin_columns.midi_outs] = buf;
+                       }
 
                        newrow[plugin_columns.plugin] = *i;
                }
@@ -536,13 +539,13 @@ struct PluginMenuCompareByCreator {
     bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
            int cmp;
 
-           cmp = strcasecmp (a->creator.c_str(), b->creator.c_str());
+           cmp = cmp_nocase_utf8 (a->creator, b->creator);
 
            if (cmp < 0) {
                    return true;
            } else if (cmp == 0) {
                    /* same creator ... compare names */
-                   if (strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
+                   if (cmp_nocase_utf8 (a->name, b->name) < 0) {
                            return true;
                    }
            }
@@ -554,7 +557,7 @@ struct PluginMenuCompareByName {
     bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
            int cmp;
 
-           cmp = strcasecmp (a->name.c_str(), b->name.c_str());
+           cmp = cmp_nocase_utf8 (a->name, b->name);
 
            if (cmp < 0) {
                    return true;
@@ -572,13 +575,13 @@ struct PluginMenuCompareByCategory {
     bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
            int cmp;
 
-           cmp = strcasecmp (a->category.c_str(), b->category.c_str());
+           cmp = cmp_nocase_utf8 (a->category, b->category);
 
            if (cmp < 0) {
                    return true;
            } else if (cmp == 0) {
                    /* same category ... compare names */
-                   if (strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
+                   if (cmp_nocase_utf8 (a->name, b->name) < 0) {
                            return true;
                    }
            }
@@ -817,6 +820,8 @@ PluginSelector::hidden_changed (const std::string& path)
                manager.set_status (pi->type, pi->unique_id, status);
 
                manager.save_statuses ();
+
+               build_plugin_menu ();
        }
        in_row_change = false;
 }