diff options
Diffstat (limited to 'plugins/eg-sampler.lv2/sampler_ui.c')
| -rw-r--r-- | plugins/eg-sampler.lv2/sampler_ui.c | 78 | 
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), |