summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/NodeMenu.cpp47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/gui/NodeMenu.cpp b/src/gui/NodeMenu.cpp
index b9b6467c..f63384d3 100644
--- a/src/gui/NodeMenu.cpp
+++ b/src/gui/NodeMenu.cpp
@@ -73,46 +73,53 @@ NodeMenu::init(App& app, SharedPtr<const NodeModel> node)
}
if (plugin && plugin->type() == PluginModel::LV2) {
- LilvNode* preset_pred = lilv_new_uri(
- plugin->lilv_world(),
- "http://lv2plug.in/ns/ext/presets#hasPreset");
- LilvNode* title_pred = lilv_new_uri(
- plugin->lilv_world(),
- "http://www.w3.org/2000/01/rdf-schema#label");
- LilvNodes* presets = lilv_plugin_get_value(
- plugin->lilv_plugin(), preset_pred);
+
+ LilvNode* pset_Preset = lilv_new_uri(plugin->lilv_world(),
+ LV2_PRESETS__Preset);
+ LilvNode* rdfs_label = lilv_new_uri(plugin->lilv_world(),
+ LILV_NS_RDFS "label");
+ LilvNodes* presets = lilv_plugin_get_related(plugin->lilv_plugin(),
+ pset_Preset);
if (presets) {
_presets_menu = Gtk::manage(new Gtk::Menu());
LILV_FOREACH(nodes, i, presets) {
- const LilvNode* uri = lilv_nodes_get(presets, i);
- LilvNodes* titles = lilv_world_find_nodes(
- plugin->lilv_world(), uri, title_pred, NULL);
- if (titles) {
- const LilvNode* title = lilv_nodes_get_first(titles);
+ const LilvNode* preset = lilv_nodes_get(presets, i);
+ lilv_world_load_resource(plugin->lilv_world(), preset);
+ LilvNodes* labels = lilv_world_find_nodes(
+ plugin->lilv_world(), preset, rdfs_label, NULL);
+ if (labels) {
+ const LilvNode* label = lilv_nodes_get_first(labels);
_presets_menu->items().push_back(
Gtk::Menu_Helpers::MenuElem(
- lilv_node_as_string(title),
+ lilv_node_as_string(label),
sigc::bind(
sigc::mem_fun(this, &NodeMenu::on_preset_activated),
- string(lilv_node_as_string(uri)))));
+ string(lilv_node_as_string(preset)))));
// I have no idea why this is necessary, signal_activated doesn't work
// in this menu (and only this menu)
Gtk::MenuItem* item = &(_presets_menu->items().back());
item->signal_button_release_event().connect(
sigc::bind<0>(sigc::mem_fun(this, &NodeMenu::on_preset_clicked),
- string(lilv_node_as_string(uri))));
+ string(lilv_node_as_string(preset))));
+
+ lilv_nodes_free(labels);
+ } else {
+ Raul::error << "Preset <"
+ << lilv_node_as_string(lilv_nodes_get(presets, i))
+ << "> has no rdfs:label" << std::endl;
}
}
+
items().push_front(Gtk::Menu_Helpers::ImageMenuElem("_Presets",
- *(manage(new Gtk::Image(Gtk::Stock::INDEX, Gtk::ICON_SIZE_MENU)))));
+ *(manage(new Gtk::Image(Gtk::Stock::INDEX, Gtk::ICON_SIZE_MENU)))));
Gtk::MenuItem* presets_menu_item = &(items().front());
presets_menu_item->set_submenu(*_presets_menu);
+ lilv_nodes_free(presets);
}
- lilv_nodes_free(presets);
- lilv_node_free(title_pred);
- lilv_node_free(preset_pred);
+ lilv_node_free(pset_Preset);
+ lilv_node_free(rdfs_label);
}
if (has_control_inputs())