Lower transparency of marker/etc bars so tempo lines show.
[ardour.git] / gtk2_ardour / plugin_selector.cc
index deed9735d303da857187698d9f7435d186501540..77b8f26ca9533e6e4c63aa58ce00084199174b97 100644 (file)
@@ -37,8 +37,6 @@
 
 #include "ardour/plugin_manager.h"
 #include "ardour/plugin.h"
-#include "ardour/configuration.h"
-#include "ardour/session.h"
 
 #include "ardour_ui.h"
 #include "plugin_selector.h"
@@ -62,19 +60,20 @@ static const char* _filter_mode_strings[] = {
        0
 };
 
-PluginSelector::PluginSelector (PluginManager *mgr)
-       : ArdourDialog (_("Plugin Manager"), true, false),
-         filter_button (Stock::CLEAR)
+PluginSelector::PluginSelector (PluginManager& mgr)
+       : ArdourDialog (_("Plugin Manager"), true, false)
+       , filter_button (Stock::CLEAR)
+       , manager (mgr)
+         
 {
        set_position (Gtk::WIN_POS_MOUSE);
        set_name ("PluginSelectorWindow");
        add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
 
        _plugin_menu = 0;
-       manager = 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::build_plugin_menu, this), gui_context());
        build_plugin_menu ();
 
        plugin_model = Gtk::ListStore::create (plugin_columns);
@@ -180,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();
 
@@ -198,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
@@ -212,11 +209,11 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string&
        std::string mode = filter_mode.get_active_text ();
 
        if (mode == _("Favorites only")) {
-               return manager->get_status (info) == PluginManager::Favorite;
+               return manager.get_status (info) == PluginManager::Favorite;
        }
 
        if (mode == _("Hidden only")) {
-               return manager->get_status (info) == PluginManager::Hidden;
+               return manager.get_status (info) == PluginManager::Hidden;
        }
 
        if (!filterstr.empty()) {
@@ -237,9 +234,12 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string&
                        case LV2:
                                compstr = X_("LV2");
                                break;
-                       case VST:
+                       case Windows_VST:
                                compstr = X_("VST");
                                break;
+                       case LXVST:
+                               compstr = X_("LXVST");
+                               break;
                        }
 
                } else if (mode == _("Author contains")) {
@@ -285,6 +285,7 @@ PluginSelector::refill ()
        ladspa_refiller (filterstr);
        lv2_refiller (filterstr);
        vst_refiller (filterstr);
+       lxvst_refiller (filterstr);
        au_refiller (filterstr);
 
        in_row_change = false;
@@ -300,8 +301,8 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& filte
                if (show_this_plugin (*i, filterstr)) {
 
                        TreeModel::Row newrow = *(plugin_model->append());
-                       newrow[plugin_columns.favorite] = (manager->get_status (*i) == PluginManager::Favorite);
-                       newrow[plugin_columns.hidden] = (manager->get_status (*i) == PluginManager::Hidden);
+                       newrow[plugin_columns.favorite] = (manager.get_status (*i) == PluginManager::Favorite);
+                       newrow[plugin_columns.hidden] = (manager.get_status (*i) == PluginManager::Hidden);
                        newrow[plugin_columns.name] = (*i)->name;
                        newrow[plugin_columns.type_name] = type;
                        newrow[plugin_columns.category] = (*i)->category;
@@ -316,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;
                }
@@ -334,38 +342,50 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& filte
 void
 PluginSelector::ladspa_refiller (const std::string& filterstr)
 {
-       refiller (manager->ladspa_plugin_info(), filterstr, "LADSPA");
+       refiller (manager.ladspa_plugin_info(), filterstr, "LADSPA");
 }
 
 void
 PluginSelector::lv2_refiller (const std::string& filterstr)
 {
-#ifdef HAVE_SLV2
-       refiller (manager->lv2_plugin_info(), filterstr, "LV2");
+#ifdef LV2_SUPPORT
+       refiller (manager.lv2_plugin_info(), filterstr, "LV2");
 #endif
 }
 
 void
-#ifdef VST_SUPPORT
+#ifdef WINDOWS_VST_SUPPORT
 PluginSelector::vst_refiller (const std::string& filterstr)
 #else
 PluginSelector::vst_refiller (const std::string&)
 #endif
 {
-#ifdef VST_SUPPORT
-       refiller (manager->vst_plugin_info(), filterstr, "VST");
+#ifdef WINDOWS_VST_SUPPORT
+       refiller (manager.windows_vst_plugin_info(), filterstr, "VST");
+#endif
+}
+
+void
+#ifdef LXVST_SUPPORT
+PluginSelector::lxvst_refiller (const std::string& filterstr)
+#else
+PluginSelector::lxvst_refiller (const std::string&)
+#endif
+{
+#ifdef LXVST_SUPPORT
+       refiller (manager.lxvst_plugin_info(), filterstr, "LXVST");
 #endif
 }
 
 void
-#ifdef HAVE_AUDIOUNITS
+#ifdef AUDIOUNIT_SUPPORT
 PluginSelector::au_refiller (const std::string& filterstr)
 #else
 PluginSelector::au_refiller (const std::string&)
 #endif
 {
-#ifdef HAVE_AUDIOUNITS
-       refiller (manager->au_plugin_info(), filterstr, "AU");
+#ifdef AUDIOUNIT_SUPPORT
+       refiller (manager.au_plugin_info(), filterstr, "AU");
 #endif
 }
 
@@ -413,7 +433,7 @@ PluginSelector::btn_remove_clicked()
 void
 PluginSelector::btn_update_clicked()
 {
-       manager->refresh ();
+       manager.refresh ();
        refill();
 }
 
@@ -444,12 +464,12 @@ PluginSelector::run ()
        TreeModel::Children::iterator i;
 
        bool finish = false;
-       
+
        while (!finish) {
 
                SelectedPlugins plugins;
                r = (ResponseType) Dialog::run ();
-               
+
                switch (r) {
                case RESPONSE_APPLY:
                        for (i = amodel->children().begin(); i != amodel->children().end(); ++i) {
@@ -465,16 +485,16 @@ PluginSelector::run ()
                        if (interested_object && !plugins.empty()) {
                                finish = !interested_object->use_plugins (plugins);
                         }
-                       
+
                        break;
-                       
+
                default:
                        finish = true;
                        break;
                }
        }
-               
-               
+
+
        hide();
        amodel->clear();
        interested_object = 0;
@@ -581,24 +601,27 @@ PluginSelector::build_plugin_menu ()
 {
        PluginInfoList all_plugs;
 
-       all_plugs.insert (all_plugs.end(), manager->ladspa_plugin_info().begin(), manager->ladspa_plugin_info().end());
-#ifdef VST_SUPPORT
-       all_plugs.insert (all_plugs.end(), manager->vst_plugin_info().begin(), manager->vst_plugin_info().end());
+       all_plugs.insert (all_plugs.end(), manager.ladspa_plugin_info().begin(), manager.ladspa_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
+#ifdef LXVST_SUPPORT
+       all_plugs.insert (all_plugs.end(), manager.lxvst_plugin_info().begin(), manager.lxvst_plugin_info().end());
 #endif
-#ifdef HAVE_AUDIOUNITS
-       all_plugs.insert (all_plugs.end(), manager->au_plugin_info().begin(), manager->au_plugin_info().end());
+#ifdef AUDIOUNIT_SUPPORT
+       all_plugs.insert (all_plugs.end(), manager.au_plugin_info().begin(), manager.au_plugin_info().end());
 #endif
-#ifdef HAVE_SLV2
-       all_plugs.insert (all_plugs.end(), manager->lv2_plugin_info().begin(), manager->lv2_plugin_info().end());
+#ifdef LV2_SUPPORT
+       all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
 #endif
 
        using namespace Menu_Helpers;
 
        delete _plugin_menu;
-       
+
        _plugin_menu = manage (new Menu);
        _plugin_menu->set_name("ArdourContextMenu");
-       
+
        MenuList& items = _plugin_menu->items();
        items.clear ();
 
@@ -627,8 +650,10 @@ PluginSelector::create_favs_menu (PluginInfoList& all_plugs)
        all_plugs.sort (cmp_by_name);
 
        for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
-               if (manager->get_status (*i) == PluginManager::Favorite) {
-                       favs->items().push_back (MenuElem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i))));
+               if (manager.get_status (*i) == PluginManager::Favorite) {
+                       MenuElem elem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i)));
+                       elem.get_child()->set_use_underline (false);
+                       favs->items().push_back (elem);
                }
        }
        return favs;
@@ -651,7 +676,7 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs)
 
        for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
 
-               if (manager->get_status (*i) == PluginManager::Hidden) continue;
+               if (manager.get_status (*i) == PluginManager::Hidden) continue;
 
                string creator = (*i)->creator;
 
@@ -670,7 +695,9 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs)
                        creator_submenu_map.insert (pair<std::string,Menu*> (creator, submenu));
                        submenu->set_name("ArdourContextMenu");
                }
-               submenu->items().push_back (MenuElem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i))));
+               MenuElem elem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i)));
+               elem.get_child()->set_use_underline (false);
+               submenu->items().push_back (elem);
        }
        return by_creator;
 }
@@ -692,7 +719,7 @@ PluginSelector::create_by_category_menu (ARDOUR::PluginInfoList& all_plugs)
 
        for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
 
-               if (manager->get_status (*i) == PluginManager::Hidden) continue;
+               if (manager.get_status (*i) == PluginManager::Hidden) continue;
 
                string category = (*i)->category;
 
@@ -706,7 +733,9 @@ PluginSelector::create_by_category_menu (ARDOUR::PluginInfoList& all_plugs)
                        category_submenu_map.insert (pair<std::string,Menu*> (category, submenu));
                        submenu->set_name("ArdourContextMenu");
                }
-               submenu->items().push_back (MenuElem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i))));
+               MenuElem elem ((*i)->name, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i)));
+               elem.get_child()->set_use_underline (false);
+               submenu->items().push_back (elem);
        }
        return by_category;
 }
@@ -752,9 +781,9 @@ PluginSelector::favorite_changed (const std::string& path)
 
                pi = (*iter)[plugin_columns.plugin];
 
-               manager->set_status (pi->type, pi->unique_id, status);
+               manager.set_status (pi->type, pi->unique_id, status);
 
-               manager->save_statuses ();
+               manager.save_statuses ();
 
                build_plugin_menu ();
        }
@@ -788,9 +817,9 @@ PluginSelector::hidden_changed (const std::string& path)
 
                pi = (*iter)[plugin_columns.plugin];
 
-               manager->set_status (pi->type, pi->unique_id, status);
+               manager.set_status (pi->type, pi->unique_id, status);
 
-               manager->save_statuses ();
+               manager.save_statuses ();
        }
        in_row_change = false;
 }