diff --git a/README.md b/README.md index b2f1671..b8a4b1b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,32 @@ # XUiDesigner -Very early draft of a X11 LV2 GUI design tool +A WYSIWYG LV2 X11UI GUI creator tool ![XUiDesigner](https://i.imgur.com/wKA2eqO.gif) ## Goal -Provide a easy to use GUI generator tool to create UI's for LV2 plugins. +Provide a easy to use GUI generator tool to create X11 UI's for LV2 plugins. Currently only libxputty is supported, but the generated GUI C file could be used probably with other widget tool-kits as well, just a wrapper file is needed to translate the generated file to the needs of a toolkit. ## Currently state -XUiDesigner could parse the ttl file from a selected plugin and generate the needed controller widgets. +XUiDesigner parse the ttl file from a selected plugin and generate the needed controller widgets. Supported been the usual lv2:port parameter and as well the new atom based LV2_PATCH__writable and LV2_PATCH__readable so as LV2_ATOM__Path. XUiDesigner use the environment variable LV2_PATH to scan for plugins when no path is given with the -p command-line parameter. So you could easily create a GUI for a existing plugin. +A integrated Color chooser allow to create a Color theme for your GUI. The created GUI could be saved as UI-Bundle, which then could be build (just make) and installed (just make install) to replace or provide a new GUI for the plugin. -Additional control widgets could be created and moved freely around in the top Window, or, -a grid could be displayed and widgets could snap to grid (left, right, Center) to order them easily. +You could as well create a LV2 plugin from scratch and save it as Full Plugin-Bundle to a selected location. +The project settings window allow to setup the specs (like Author name, URI, Audio/Midi ports, etc.) for your plugin +XUIDesigner save the bundle in a git repository format, contain a working LV2 plugin with all needed resources +(ttl files, converted C files from used images, etc.) and build files to build, install and run the new generated plugin. +All you need to do to finish your plug is to implement your DSP part. + +Control widgets could be created and moved/resized freely around in the top Window. +A grid could be displayed and widgets could snap to grid (left, right, Center) to order them easily. Control widgets could be grouped in a frame or a tab box and then the complete group could be moved to the final position in the Window. Any control widget could be replaced with a other control widget, so for example a Toggle Button could be replaced with a ComboBox, or a Knob could be replaced with a slider, or . . @@ -27,12 +34,6 @@ You could set the range for a controller, and it's default value, You could crea Most Control widgets could be replaced with images you could select from a included file browser. -You could as well create a LV2 plugin from scratch and save it as Full Plugin-Bundle to a selected location. -The project settings window allow to setup the specs (like Author name, URI, Audio/Midi ports, etc.) for your plugin -XUIDesigner save the bundle in a git repository format, contain a working LV2 plugin with all needed resources -(ttl files, converted C files from used images, etc.) and build files to build, install and run it. -All you need to do to finish your plug is, implement your DSP part. - XUIDesigner have a test-mode as well, which will build and run the created GUI, and give some useful information out in the terminal. ## Currently supported widget types diff --git a/XUiDesigner/XUiImageLoader.c b/XUiDesigner/XUiImageLoader.c index 011dad5..77dc26a 100644 --- a/XUiDesigner/XUiImageLoader.c +++ b/XUiDesigner/XUiImageLoader.c @@ -328,7 +328,7 @@ void pop_menu_response(void *w_, void* item_, void* user_data) { designer->controls[designer->active_widget_num].is_type == IS_VSLIDER || designer->controls[designer->active_widget_num].is_type == IS_LABEL || designer->controls[designer->active_widget_num].is_type == IS_HSLIDER) break; - Widget_t *dia = open_file_dialog(designer->ui, designer->image_path, ".png"); + Widget_t *dia = open_file_dialog(designer->ui, designer->image_path, "image"); XSetTransientForHint(designer->ui->app->dpy, dia->widget, designer->ui->widget); if (designer->controls[designer->active_widget_num].is_type == IS_FRAME || designer->controls[designer->active_widget_num].is_type == IS_IMAGE) {