summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-05-04 17:49:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-05-04 17:49:28 +0000
commit49f28513f5f3f343ee9d51b0df25c7bd78478542 (patch)
treea9ad102148c0001a57893b99e3584bf382e72477
parent807bc4c3d6c619244ac01d6be8ad98109140e3e6 (diff)
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
-rw-r--r--gtk2_ardour/generic_pluginui.cc10
-rw-r--r--gtk2_ardour/latency_gui.cc2
-rw-r--r--gtk2_ardour/plugin_ui.cc34
-rw-r--r--gtk2_ardour/plugin_ui.h14
-rw-r--r--libs/ardour/ardour/latent.h8
-rw-r--r--libs/ardour/lv2_plugin.cc2
-rw-r--r--libs/ardour/plugin_manager.cc1
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<PluginInsert> pi, bool scrol
Label* combo_label = manage (new Label (_("<span size=\"large\">Presets</span>")));
combo_label->set_use_markup (true);
- Label* latency_label = manage (new Label (_("<span size=\"large\">Latency</span>")));
- 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 <lrdf.h>
+#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<PluginInsert> 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<PluginInsert> 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<ARDOUR::PluginInsert> insert;
boost::shared_ptr<ARDOUR::Plugin> 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