aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/eg-sampler.lv2/sampler_ui.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-11-09 01:19:29 +0000
committerDavid Robillard <d@drobilla.net>2011-11-09 01:19:29 +0000
commitc43aed97c6b874a80fd5a9f759e651953bcec1f9 (patch)
treeb52b703474edafed6d80080076f55af8de27d5cd /plugins/eg-sampler.lv2/sampler_ui.c
parent836ecd0b091d70fc689fab1fcc94e5b165d33c2c (diff)
downloadlv2-c43aed97c6b874a80fd5a9f759e651953bcec1f9.tar.xz
Implement file name changing from UI.
Diffstat (limited to 'plugins/eg-sampler.lv2/sampler_ui.c')
-rw-r--r--plugins/eg-sampler.lv2/sampler_ui.c78
1 files changed, 35 insertions, 43 deletions
diff --git a/plugins/eg-sampler.lv2/sampler_ui.c b/plugins/eg-sampler.lv2/sampler_ui.c
index 1895f22..24a79aa 100644
--- a/plugins/eg-sampler.lv2/sampler_ui.c
+++ b/plugins/eg-sampler.lv2/sampler_ui.c
@@ -25,19 +25,17 @@
#include "lv2/lv2plug.in/ns/ext/atom/atom-helpers.h"
#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
-#include "lv2/lv2plug.in/ns/ext/uri-map/uri-map.h"
+#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
+#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
-#define NS_ATOM "http://lv2plug.in/ns/ext/atom#"
+#include "./uris.h"
-#define SAMPLER_URI "http://lv2plug.in/plugins/eg-sampler"
#define SAMPLER_UI_URI "http://lv2plug.in/plugins/eg-sampler#ui"
-#define MIDI_EVENT_URI "http://lv2plug.in/ns/ext/midi#MidiEvent"
-#define FILENAME_URI SAMPLER_URI "#filename"
-#define STRING_BUF 8192
typedef struct {
- LV2_URI_Map_Feature* uri_map;
+ LV2_URID_Mapper* mapper;
+ LV2_Atom_Forge* forge;
LV2UI_Write_Function write;
LV2UI_Controller controller;
@@ -45,11 +43,10 @@ typedef struct {
GtkWidget* button;
} SamplerUI;
-static uint32_t
+static LV2_URID
uri_to_id(SamplerUI* ui, const char* uri)
{
- return ui->uri_map->uri_to_id(ui->uri_map->callback_data,
- NULL, uri);
+ return ui->mapper->map_uri(ui->mapper->handle, uri);
}
static void
@@ -66,36 +63,29 @@ on_load_clicked(GtkWidget* widget,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- char* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- const size_t filename_len = strlen(filename);
- fprintf(stderr, "LOAD SAMPLE %s\n", filename);
- const size_t msg_size = sizeof(LV2_Atom)
- + sizeof(LV2_Object)
- + sizeof(LV2_Atom_Property)
- + filename_len + 1;;
-
- uint8_t buf[msg_size];
- LV2_Atom* msg = (LV2_Atom*)buf;
-
- msg->type = uri_to_id(ui, NS_ATOM "Blank");
- msg->size = 0;
- LV2_Object* obj = (LV2_Object*)msg->body;
- obj->context = 0;
- obj->id = 0;
-
- lv2_atom_append_property(msg,
- uri_to_id(ui, FILENAME_URI),
- uri_to_id(ui, NS_ATOM "String"),
- filename_len + 1,
- (const uint8_t*)filename);
-
- //ui->write(ui->controller,
- // 0,
-
-
-
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(dialog);
+ return;
}
+
+ char* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ const size_t filename_len = strlen(filename);
+ gtk_widget_destroy(dialog);
+
+ uint8_t msg_buf[4096];
+ LV2_Object* msg = (LV2_Object*)msg_buf;
+ lv2_atom_forge_set_message(ui->forge, msg, uri_to_id(ui, SET_MESSAGE_URI));
+ lv2_object_append(msg,
+ uri_to_id(ui, FILENAME_URI),
+ uri_to_id(ui, NS_ATOM "String"),
+ filename_len,
+ filename);
+
+ ui->write(ui->controller, 0, sizeof(LV2_Atom) + msg->size,
+ uri_to_id(ui, NS_ATOM "atomTransfer"),
+ msg);
+
+ g_free(filename);
}
static LV2UI_Handle
@@ -108,7 +98,7 @@ instantiate(const LV2UI_Descriptor* descriptor,
const LV2_Feature* const* features)
{
SamplerUI* ui = (SamplerUI*)malloc(sizeof(SamplerUI));
- ui->uri_map = NULL;
+ ui->mapper = NULL;
ui->write = write_function;
ui->controller = controller;
ui->button = NULL;
@@ -116,17 +106,19 @@ instantiate(const LV2UI_Descriptor* descriptor,
*widget = NULL;
for (int i = 0; features[i]; ++i) {
- if (strcmp(features[i]->URI, LV2_URI_MAP_URI) == 0) {
- ui->uri_map = (LV2_URI_Map_Feature*)features[i]->data;
+ if (!strcmp(features[i]->URI, LV2_URID_URI "#Mapper")) {
+ ui->mapper = (LV2_URID_Mapper*)features[i]->data;
}
}
- if (!ui->uri_map) {
+ if (!ui->mapper) {
fprintf(stderr, "sampler_ui: Host does not support uri-map\n");
free(ui);
return NULL;
}
+ ui->forge = lv2_atom_forge_new(ui->mapper);
+
ui->button = gtk_button_new_with_label("Load Sample");
g_signal_connect(ui->button, "clicked",
G_CALLBACK(on_load_clicked),