summaryrefslogtreecommitdiffstats
path: root/src/pluginguiinstance.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pluginguiinstance.c')
-rw-r--r--src/pluginguiinstance.c175
1 files changed, 0 insertions, 175 deletions
diff --git a/src/pluginguiinstance.c b/src/pluginguiinstance.c
deleted file mode 100644
index ee6de5b..0000000
--- a/src/pluginguiinstance.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* SLV2
- * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
- * Author: Lars Luthman
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define _XOPEN_SOURCE 500
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <dlfcn.h>
-#include <slv2/types.h>
-#include <slv2/plugin.h>
-#include <slv2/pluginuiinstance.h>
-#include <slv2/util.h>
-#include "slv2_internal.h"
-
-
-SLV2UIInstance
-slv2_plugin_ui_instantiate(SLV2Plugin plugin,
- SLV2Value ui,
- LV2UI_Write_Function write_function,
- LV2UI_Command_Function command_function,
- LV2UI_Program_Change_Function program_function,
- LV2UI_Program_Save_Function save_function,
- LV2UI_Controller controller,
- const LV2_Host_Feature* const* host_features)
-{
- assert(ui->type == SLV2_VALUE_UI);
-
- if (ui->val.ui_type_val != SLV2_UI_TYPE_GTK2)
- return NULL;
-
- struct _SLV2UIInstance* result = NULL;
-
- bool local_host_features = (host_features == NULL);
- if (local_host_features) {
- host_features = malloc(sizeof(LV2_Host_Feature));
- ((LV2_Host_Feature**)host_features)[0] = NULL;
- }
-
- const char* const lib_uri = slv2_value_as_uri(slv2_plugin_get_ui_library_uri(plugin, ui));
- const char* const lib_path = slv2_uri_to_path(lib_uri);
-
- if (!lib_path)
- return NULL;
-
- dlerror();
- void* lib = dlopen(lib_path, RTLD_NOW);
- if (!lib) {
- fprintf(stderr, "Unable to open UI library %s (%s)\n", lib_path, dlerror());
- return NULL;
- }
-
- LV2UI_DescriptorFunction df = dlsym(lib, "lv2ui_descriptor");
-
- if (!df) {
- fprintf(stderr, "Could not find symbol 'lv2ui_descriptor', "
- "%s is not a LV2 plugin UI.\n", lib_path);
- dlclose(lib);
- return NULL;
- } else {
- // Search for plugin by URI
-
- // FIXME: Bundle in plugin UI only, boo
- const char* bundle_path = slv2_uri_to_path(slv2_plugin_get_bundle_uri(plugin));
- printf("UI bundle path: %s\n", bundle_path);
-
- for (uint32_t i=0; 1; ++i) {
-
- const LV2UI_Descriptor* ld = df(i);
-
- if (!ld) {
- fprintf(stderr, "Did not find UI %s in %s\n",
- slv2_value_as_uri(ui), lib_path);
- dlclose(lib);
- break; // return NULL
- } else if (!strcmp(ld->URI, slv2_value_as_uri(ui))) {
-
- printf("Found UI %s at index %u in:\n\t%s\n\n",
- librdf_uri_as_string(plugin->plugin_uri), i, lib_path);
-
- assert(ld->instantiate);
-
- // Create SLV2UIInstance to return
- result = malloc(sizeof(struct _SLV2UIInstance));
- struct _SLV2UIInstanceImpl* impl = malloc(sizeof(struct _SLV2UIInstanceImpl));
- impl->lv2ui_descriptor = ld;
- impl->lv2ui_handle = ld->instantiate(ld,
- slv2_plugin_get_uri(plugin),
- (char*)bundle_path,
- write_function,
- command_function,
- program_function,
- save_function,
- controller,
- &impl->widget,
- host_features);
- impl->lib_handle = lib;
- result->pimpl = impl;
- break;
- }
- }
- }
-
- assert(result);
- assert(slv2_plugin_get_num_ports(plugin) > 0);
-
- // Failed to instantiate
- if (result->pimpl->lv2ui_handle == NULL) {
- //printf("Failed to instantiate %s\n", plugin->plugin_uri);
- free(result);
- return NULL;
- }
-
- // Failed to create a widget, but still got a handle - this means that
- // the plugin is buggy
- if (result->pimpl->widget == NULL) {
- slv2_ui_instance_free(result);
- return NULL;
- }
-
- if (local_host_features)
- free((LV2_Host_Feature**)host_features);
-
- return result;
-}
-
-
-void
-slv2_ui_instance_free(SLV2UIInstance instance)
-{
- struct _SLV2UIInstance* i = (struct _SLV2UIInstance*)instance;
- i->pimpl->lv2ui_descriptor->cleanup(i->pimpl->lv2ui_handle);
- i->pimpl->lv2ui_descriptor = NULL;
- dlclose(i->pimpl->lib_handle);
- i->pimpl->lib_handle = NULL;
- free(i->pimpl);
- i->pimpl = NULL;
- free(i);
-}
-
-
-LV2UI_Widget
-slv2_ui_instance_get_widget(SLV2UIInstance instance) {
- return instance->pimpl->widget;
-}
-
-
-const LV2UI_Descriptor*
-slv2_ui_instance_get_descriptor(SLV2UIInstance instance) {
- return instance->pimpl->lv2ui_descriptor;
-}
-
-
-LV2_Handle
-slv2_ui_instance_get_handle(SLV2UIInstance instance) {
- return instance->pimpl->lv2ui_handle;
-}
-