From 49f28513f5f3f343ee9d51b0df25c7bd78478542 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 4 May 2009 17:49:28 +0000 Subject: clean up that godawful ugly latency GUI in plugin UIs git-svn-id: svn://localhost/ardour2/branches/3.0@5038 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/generic_pluginui.cc | 10 +++++----- gtk2_ardour/latency_gui.cc | 2 +- gtk2_ardour/plugin_ui.cc | 34 +++++++++++++++++++++++++++++++++- gtk2_ardour/plugin_ui.h | 14 +++++++++++--- libs/ardour/ardour/latent.h | 8 ++++++++ libs/ardour/lv2_plugin.cc | 2 ++ libs/ardour/plugin_manager.cc | 1 + 7 files changed, 61 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 5d6dd172d9..713fcfcc87 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -82,11 +82,11 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr pi, bool scrol Label* combo_label = manage (new Label (_("Presets"))); combo_label->set_use_markup (true); - Label* latency_label = manage (new Label (_("Latency"))); - latency_label->set_use_markup (true); - - smaller_hbox->pack_start (*latency_label, false, false, 10); - smaller_hbox->pack_start (latency_gui, false, false, 10); + latency_button.add (latency_label); + latency_button.signal_clicked().connect (mem_fun (*this, &PlugUIBase::latency_button_clicked)); + set_latency_label (); + + smaller_hbox->pack_start (latency_button, false, false, 10); smaller_hbox->pack_start (preset_combo, false, false); smaller_hbox->pack_start (save_button, false, false); smaller_hbox->pack_start (bypass_button, false, true); diff --git a/gtk2_ardour/latency_gui.cc b/gtk2_ardour/latency_gui.cc index 5ca139cd40..1f3ae38da4 100644 --- a/gtk2_ardour/latency_gui.cc +++ b/gtk2_ardour/latency_gui.cc @@ -45,7 +45,7 @@ LatencyGUI::LatencyGUI (Latent& l, nframes64_t sr, nframes64_t psz) /* max 1 second, step by frames, page by msecs */ adjustment (initial_value, 0.0, sample_rate, 1.0, sample_rate / 1000.0f), bc (adjustment, ignored, sigc::mem_fun (*this, &LatencyGUI::latency_printer)), - reset_button (_("Automatic")) + reset_button (_("Reset")) { Widget* w; diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 38de2bae04..21f0a938d6 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -50,6 +50,7 @@ #include +#include "ardour_dialog.h" #include "ardour_ui.h" #include "prompter.h" #include "plugin_ui.h" @@ -57,6 +58,7 @@ #include "gui_thread.h" #include "public_editor.h" #include "keyboard.h" +#include "latency_gui.h" #include "plugin_eq_gui.h" #include "i18n.h" @@ -345,7 +347,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) plugin (insert->plugin()), save_button(_("Add")), bypass_button (_("Bypass")), - latency_gui (*pi, pi->session().frame_rate(), pi->session().get_block_size()), + latency_gui (0), eqgui_toggle (_("Freq Analysis")) { //preset_combo.set_use_arrows_always(true); @@ -389,6 +391,36 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) PlugUIBase::~PlugUIBase() { + delete latency_gui; +} + +void +PlugUIBase::set_latency_label () +{ + char buf[64]; + nframes_t l = insert->effective_latency (); + nframes_t sr = insert->session().frame_rate(); + + if (l < sr / 1000) { + snprintf (buf, sizeof (buf), "latency (%d samples)", l); + } else { + snprintf (buf, sizeof (buf), "latency (%.2f msecs)", (float) l / ((float) sr / 1000.0f)); + } + + latency_label.set_text (buf); +} + +void +PlugUIBase::latency_button_clicked () +{ + if (!latency_gui) { + latency_gui = new LatencyGUI (*(insert.get()), insert->session().frame_rate(), insert->session().get_block_size()); + latency_dialog = new ArdourDialog ("Edit Latency", false, false); + latency_dialog->get_vbox()->pack_start (*latency_gui); + latency_dialog->signal_hide().connect (mem_fun (*this, &PlugUIBase::set_latency_label)); + } + + latency_dialog->show_all (); } void diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index e074a9f7b0..e65abbac59 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -43,8 +43,6 @@ #include "ardour/types.h" -#include "ardour_dialog.h" -#include "latency_gui.h" #include "automation_controller.h" namespace ARDOUR { @@ -67,6 +65,9 @@ namespace Gtkmm2ext { class PixmapButton; } +class LatencyGUI; +class ArdourDialog; + class PlugUIBase : public virtual sigc::trackable { public: @@ -83,6 +84,8 @@ class PlugUIBase : public virtual sigc::trackable virtual void update_presets (); + void latency_button_clicked (); + protected: boost::shared_ptr insert; boost::shared_ptr plugin; @@ -91,7 +94,12 @@ class PlugUIBase : public virtual sigc::trackable Gtk::ToggleButton bypass_button; Gtk::EventBox focus_button; - LatencyGUI latency_gui; + Gtk::Label latency_label; + Gtk::Button latency_button; + void set_latency_label (); + + LatencyGUI* latency_gui; + ArdourDialog* latency_dialog; Gtk::Expander plugin_eq_bin; Gtk::ToggleButton eqgui_toggle; diff --git a/libs/ardour/ardour/latent.h b/libs/ardour/ardour/latent.h index 53a6882a3c..c5dc792f06 100644 --- a/libs/ardour/ardour/latent.h +++ b/libs/ardour/ardour/latent.h @@ -13,6 +13,14 @@ class Latent { virtual nframes_t signal_latency() const = 0; nframes_t user_latency () const { return _user_latency; } + nframes_t effective_latency() const { + if (_user_latency) { + return _user_latency; + } else { + return signal_latency (); + } + } + virtual void set_latency_delay (nframes_t val) { _own_latency = val; } virtual void set_user_latency (nframes_t val) { _user_latency = val; } diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index e7617671a0..5b4696b48c 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -683,6 +683,8 @@ LV2PluginInfo::discover (void* lv2_world) LV2World* world = (LV2World*)lv2_world; SLV2Plugins plugins = slv2_world_get_all_plugins(world->world); + cerr << "Discovered " << slv2_plugins_size (plugins) << " Lv2 plugins\n"; + for (unsigned i=0; i < slv2_plugins_size(plugins); ++i) { SLV2Plugin p = slv2_plugins_get_at(plugins, i); LV2PluginInfoPtr info (new LV2PluginInfo(lv2_world, p)); diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index c0c854180f..ce7a94a517 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -127,6 +127,7 @@ PluginManager::PluginManager () } #ifdef HAVE_SLV2 + cerr << "Creating a new lv2 world\n"; _lv2_world = new LV2World(); #endif -- cgit v1.2.3