Add "Description" pane to generic plugin UI for LV2 plugins with documentation (rdfs:comment property).

A Gtk::Entry might be better here, making Gtk::Label wrap based on size is tedious...


git-svn-id: svn://localhost/ardour2/branches/3.0@12043 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard
2012-04-20 02:12:29 +00:00
parent 8439514ffa
commit ffe5a6c5c2
6 changed files with 50 additions and 3 deletions

View File

@@ -101,6 +101,9 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
VBox* v1_box = manage (new VBox);
VBox* v2_box = manage (new VBox);
pack_end (plugin_analysis_expander, false, false);
if (!plugin->get_docs().empty()) {
pack_end (description_expander, false, false);
}
v1_box->pack_start (*smaller_hbox, false, true);
v2_box->pack_start (focus_button, false, true);
@@ -265,7 +268,7 @@ GenericPluginUI::build ()
}
const std::string param_docs = plugin->get_parameter_docs(i);
if (param_docs != "") {
if (!param_docs.empty()) {
ARDOUR_UI::instance()->set_tip(cui, param_docs.c_str());
}

View File

@@ -452,6 +452,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
, save_button (_("Save"))
, delete_button (_("Delete"))
, bypass_button (ArdourButton::led_default_elements)
, description_expander (_("Description"))
, plugin_analysis_expander (_("Plugin analysis"))
, latency_gui (0)
, latency_dialog (0)
@@ -499,6 +500,9 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
ARDOUR_UI::instance()->set_tip (focus_button, string_compose (_("Click to allow the plugin to receive keyboard events that %1 would normally use as a shortcut"), PROGRAM_NAME));
ARDOUR_UI::instance()->set_tip (bypass_button, _("Click to enable/disable this plugin"));
description_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_description));
description_expander.set_expanded(false);
plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis));
plugin_analysis_expander.set_expanded(false);
@@ -662,11 +666,34 @@ PlugUIBase::focus_toggled (GdkEventButton*)
return true;
}
void
PlugUIBase::toggle_description()
{
if (description_expander.get_expanded() &&
!description_expander.get_child()) {
const std::string text = plugin->get_docs();
if (text.empty()) {
return;
}
Gtk::Label* label = manage(new Gtk::Label(text));
label->set_line_wrap(true);
label->set_line_wrap_mode(Pango::WRAP_WORD);
description_expander.add(*label);
description_expander.show_all();
}
if (!description_expander.get_expanded()) {
description_expander.remove();
}
}
void
PlugUIBase::toggle_plugin_analysis()
{
if (plugin_analysis_expander.get_expanded() &&
!plugin_analysis_expander.get_child()) {
!plugin_analysis_expander.get_child()) {
// Create the GUI
if (eqgui == 0) {
eqgui = new PluginEqGui (insert);
@@ -684,7 +711,6 @@ PlugUIBase::toggle_plugin_analysis()
}
if (!plugin_analysis_expander.get_expanded()) {
// Hide & remove from expander
eqgui->hide ();

View File

@@ -125,6 +125,8 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL
ArdourButton bypass_button;
/** a button to acquire keyboard focus */
Gtk::EventBox focus_button;
/** an expander containing the plugin description */
Gtk::Expander description_expander;
/** an expander containing the plugin analysis graph */
Gtk::Expander plugin_analysis_expander;
/** a label indicating the plugin latency */
@@ -150,6 +152,7 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL
void delete_plugin_setting ();
bool focus_toggled(GdkEventButton*);
bool bypass_button_release(GdkEventButton*);
void toggle_description ();
void toggle_plugin_analysis ();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
void plugin_going_away ();

View File

@@ -56,6 +56,7 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
framecnt_t signal_latency () const;
void set_parameter (uint32_t port, float val);
float get_parameter (uint32_t port) const;
std::string get_docs() const;
std::string get_parameter_docs(uint32_t which) const;
int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
uint32_t nth_parameter (uint32_t port, bool& ok) const;

View File

@@ -118,6 +118,7 @@ class Plugin : public PBD::StatefulDestructible, public Latent
virtual uint32_t parameter_count () const = 0;
virtual float default_value (uint32_t port) = 0;
virtual float get_parameter(uint32_t which) const = 0;
virtual std::string get_docs() const { return ""; }
virtual std::string get_parameter_docs(uint32_t which) const { return ""; }
virtual int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const = 0;

View File

@@ -584,6 +584,19 @@ LV2Plugin::get_parameter(uint32_t which) const
return 0.0f;
}
std::string
LV2Plugin::get_docs() const
{
LilvNodes* comments = lilv_plugin_get_value(_impl->plugin, _world.rdfs_comment);
if (comments) {
const std::string docs(lilv_node_as_string(lilv_nodes_get_first(comments)));
lilv_nodes_free(comments);
return docs;
}
return "";
}
std::string
LV2Plugin::get_parameter_docs(uint32_t which) const
{