From d4c15aab3f92c26e735aa0fb4d1c4bc0e86729b3 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 6 May 2022 04:40:26 +0200 Subject: [PATCH] List I/O Plugins in DSP-load window --- gtk2_ardour/plugin_dspload_window.cc | 43 ++++++++++++++++++++++------ gtk2_ardour/plugin_dspload_window.h | 3 ++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/plugin_dspload_window.cc b/gtk2_ardour/plugin_dspload_window.cc index a35bdf0a19..bcc568743d 100644 --- a/gtk2_ardour/plugin_dspload_window.cc +++ b/gtk2_ardour/plugin_dspload_window.cc @@ -20,8 +20,8 @@ #include #include +#include "ardour/io_plug.h" #include "ardour/session.h" -#include "ardour/plugin_insert.h" #include "gtkmm2ext/gui_thread.h" @@ -110,6 +110,9 @@ PluginDSPLoadWindow::clear_all_stats () for (RouteList::const_iterator i = routes.begin(); i != routes.end(); ++i) { (*i)->foreach_processor (sigc::mem_fun (*this, &PluginDSPLoadWindow::clear_processor_stats)); } + for (auto const& iop : *_session->io_plugs ()) { + clear_pluginsert_stats (iop); + } } struct DSPLoadSorter @@ -185,6 +188,14 @@ PluginDSPLoadWindow::refill_processors () ); } + _session->IOPluginsChanged.connect ( + _route_connections, invalidator (*this), boost::bind (&PluginDSPLoadWindow::refill_processors, this), gui_context() + ); + + for (auto const& iop : *_session->io_plugs ()) { + add_pluginsert_to_display (iop, iop->is_pre () ? _("I/O Pre") : _("I/O Post")); + } + if (_box.get_children().size() == 0) { _box.add (*Gtk::manage (new Gtk::Label (_("No Plugins")))); _box.show_all (); @@ -198,14 +209,22 @@ void PluginDSPLoadWindow::add_processor_to_display (boost::weak_ptr w, std::string const& route_name) { boost::shared_ptr p = w.lock (); - boost::shared_ptr pi = boost::dynamic_pointer_cast (p); - if (!pi || !pi->provides_stats ()) { + boost::shared_ptr pib = boost::dynamic_pointer_cast (p); + if (pib) { + add_pluginsert_to_display (pib, route_name); + } +} + +void +PluginDSPLoadWindow::add_pluginsert_to_display (boost::shared_ptr p, std::string const& route_name) +{ + if (!p->provides_stats ()) { return; } p->DropReferences.connect (_processor_connections, MISSING_INVALIDATOR, boost::bind (&PluginDSPLoadWindow::refill_processors, this), gui_context()); - PluginLoadStatsGui* plsg = new PluginLoadStatsGui (pi); - - std::string name = route_name + " - " + pi->name(); + PluginLoadStatsGui* plsg = new PluginLoadStatsGui (p); + + std::string name = route_name + " - " + p->plugin ()->name (); Gtk::Frame* frame = new Gtk::Frame (name.c_str()); frame->add (*Gtk::manage (plsg)); _box.pack_start (*frame, Gtk::PACK_SHRINK, 2); @@ -218,8 +237,14 @@ void PluginDSPLoadWindow::clear_processor_stats (boost::weak_ptr w) { boost::shared_ptr p = w.lock (); - boost::shared_ptr pi = boost::dynamic_pointer_cast (p); - if (pi) { - pi->clear_stats (); + boost::shared_ptr pib = boost::dynamic_pointer_cast (p); + if (pib) { + clear_pluginsert_stats (pib); } } + +void +PluginDSPLoadWindow::clear_pluginsert_stats (boost::shared_ptr pib) +{ + pib->clear_stats (); +} diff --git a/gtk2_ardour/plugin_dspload_window.h b/gtk2_ardour/plugin_dspload_window.h index ee84729679..d2850ca5f9 100644 --- a/gtk2_ardour/plugin_dspload_window.h +++ b/gtk2_ardour/plugin_dspload_window.h @@ -31,6 +31,7 @@ namespace ARDOUR { class Processor; + class PlugInsertBase; } class PluginLoadStatsGui; @@ -55,7 +56,9 @@ private: void clear_all_stats (); void sort_by_stats (bool); void add_processor_to_display (boost::weak_ptr, std::string const&); + void add_pluginsert_to_display (boost::shared_ptr, std::string const&); void clear_processor_stats (boost::weak_ptr); + void clear_pluginsert_stats (boost::shared_ptr); Gtk::ScrolledWindow _scroller; Gtk::VBox _box;