All Projects → ffAudio → Foleys_gui_magic

ffAudio / Foleys_gui_magic

Licence: other
A GUI builder module for JUCE

Projects that are alternatives of or similar to Foleys gui magic

Qbt Theme
collection of themes for qbittorrent
Stars: ✭ 776 (+771.91%)
Mutual labels:  gui, stylesheet
Gnvim
GUI for neovim, without any web bloat
Stars: ✭ 1,271 (+1328.09%)
Mutual labels:  gui
Nplusminer
NPlusMiner + GUI | NVIDIA/AMD/CPU miner | AI | Autoupdate | MultiRig remote management
Stars: ✭ 75 (-15.73%)
Mutual labels:  gui
Iced
A cross-platform GUI library for Rust, inspired by Elm
Stars: ✭ 12,176 (+13580.9%)
Mutual labels:  gui
Ptdesigner
Library and GUI tool for designing and generation of procedural textures, made as a part of my Bachelor thesis.
Stars: ✭ 77 (-13.48%)
Mutual labels:  gui
Qode
Qode is a lightly modified fork of Node.js that merges Node's event loop with Qt's event loop. It is designed to be used together with @nodegui/nodegui.
Stars: ✭ 84 (-5.62%)
Mutual labels:  gui
Pyrustic
Lightweight framework and software suite to help develop, package, and publish Python desktop applications
Stars: ✭ 75 (-15.73%)
Mutual labels:  gui
Lv binding micropython
LVGL bindings to other languages
Stars: ✭ 87 (-2.25%)
Mutual labels:  gui
Bumblebee
🚕 A spreadsheet-like data preparation web app that works over Optimus (pandas, dask, cuDF, dask-cuDF and PySpark)
Stars: ✭ 86 (-3.37%)
Mutual labels:  gui
Patternfly Design
Use this repo to file all new feature or design change requests for the PatternFly project
Stars: ✭ 82 (-7.87%)
Mutual labels:  gui
Sprite Loader
A image sprite loader for webpack.
Stars: ✭ 82 (-7.87%)
Mutual labels:  stylesheet
Abr Broadcaster
A real time encoder for Adaptive Bitrate Broadcast
Stars: ✭ 80 (-10.11%)
Mutual labels:  gui
Imgui Rs
Rust bindings for Dear ImGui
Stars: ✭ 1,258 (+1313.48%)
Mutual labels:  gui
Chrysalisp
Parallel OS, with GUI, Terminal, OO Assembler, Class libraries, C-Script compiler, Lisp interpreter and more...
Stars: ✭ 1,205 (+1253.93%)
Mutual labels:  gui
Neuron
Python project for creating desktop applications with HTML and Javascript
Stars: ✭ 86 (-3.37%)
Mutual labels:  gui
Corewar
School 42 project // Implementation of programming game “Core War” [Champions + Assembler + Disassembler + Virtual Machine + Visualizer]
Stars: ✭ 76 (-14.61%)
Mutual labels:  gui
Ui
Cross-platform UI library written in V
Stars: ✭ 1,223 (+1274.16%)
Mutual labels:  gui
Vertical Rhythm
Put some typographical vertical rhythm in your CSS. LESS, Stylus and SCSS/SASS versions included.
Stars: ✭ 83 (-6.74%)
Mutual labels:  stylesheet
Glassos
Simulated OS project for Unity engine.
Stars: ✭ 87 (-2.25%)
Mutual labels:  gui
Iup
Common Lisp CFFI bindings to the IUP Portable User Interface library (pre-ALPHA)
Stars: ✭ 86 (-3.37%)
Mutual labels:  gui

foleys_gui_magic

This module allows to create GUIs without any coding. It is created with a DOM model that provides a hierarchical information, and a CSS cascading stylesheet to define rules for the appearance of the GUI.

There is a drag and drop editor to add GUI elements, and to connect to parameters of your AudioProcessorValueTreeState. Also an editor in the style of FireBug to investigate the individual properties, and how they were obtained/calculated.

Support

For the modules of Foleys Finest Audio there is a new forum where you can search for information and ask questions: https://forum.foleysfinest.com All feedback is welcome.

Setup

To use the WYSWYG plugin editor, add this module via Projucer to your JUCE project.

Instead of inheriting from juce::AudioProcessor inherit foleys::MagicProcessor. Get rid of those methods:

  • bool hasEditor()
  • juce::PluginEditor* createEditor()
  • void setStateInformation() and void getStateInformation() (optional, a default saving and loading method is provided)

The foleys::MagicProcessor will provide a foleys::MagicProcessorState magicState (protected visibility) to add visualisations or other objects to expose to the GUI.

It is also possible to use the module in an Application. In that case you add a MagicGuiState and a MagicGUIBuilder yourself. There is an example available in the examples repository called PlayerExample.

Add Visualisations

To add visualisations like an Analyser or Oscilloscope to your plugin, add them in the constructor:

// Member:
foleys::MagicPlotSource* analyser = nullptr;

// Constructor
analyser = magicState.createAndAddObject<foleys::MagicAnalyser>("input");

// prepareToPlay
analyser->prepareToPlay (sampleRate, samplesPerBlockExpected);

// e.g. in processBlock send the samples to the analyser:
analyser->pushSamples (buffer);

In your editor, drag a Plot component into the UI and select the name you supplied as source, in this case "input".

Saving and restoring the plugin

The foleys::MagicProcessor takes care of saving and restoring the parameters and properties. You can add your own values to the ValueTree in the magicState. There is a callback after restoring that you can override, in case you need to do some additional action.

Bake in the xml

To bake in the GUI save the XML from the PGM panel and add it to the BinaryResources via Projucer. In the constructor you set the XML file:

magicState.setGuiValueTree (BinaryData::magic_xml, BinaryData::magic_xmlSize);

Removing the WYSWYG editor

The WYSWYG editor panel (attached outside the PluginEditor) is switched on or off with the config in Projucer named FOLEYS_SHOW_GUI_EDITOR_PALLETTE. An effective way is to add FOLEYS_SHOW_GUI_EDITOR_PALLETTE=0 into extra preprocessor defines of the release build, that way you can design in debug mode, and avoid the WYSWYG editor from being included in the release build for deployment.

Currently available Components

It is completely possible to register your own bespoke Components into the builder. These Components are already available:

  • Slider (attachable to parameters)
  • ComboBox ( -"- )
  • ToggleButton ( -"- )
  • TextButton ( -"- )
  • XYDragComponent (attachable to two parameters)
  • Plot (displays various 2-d data)
  • LevelMeter (displays different RMS / Max levels)
  • Label
  • MidiKeyboardComponent
  • MidiLearn
  • ListBox
  • WebBrowserComponent

All Components have the option to add margins/paddings and a border also with rounded corners. The View component serves as container, that has the option to layer all child components on top of each other or to layout them using flex-box.

Demo projects

There is a repository with demo projects, that includes this module as git submodule: PluginGuiMagic examples

Contributing

Everybody is welcome and encouraged to contribute. This is supposed to be helpful for as many people as possible, so please give your ideas as github issues and send pull requests.

We might ask you to change things in your pull requests to keep the style consistent and to keep the API as concise as possible.

We have a repository containing example projects, that are our reference what must not break. These will be built on our CI for OSX and Windows 10, so we catch hopefully any breakage early on. Clone that repository using:

git clone --recurse-submodules https://github.com/ffAudio/PluginGuiMagic.git

To update:

git pull origin master
git submodule update

Brighton, UK - started Sept. 2019

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].