A GUI agnostic parameter management system for openFrameworks. I.e. For managing a bunch of parameters (toggles, buttons, ints, floats, dropdowns etc.) with ranges, groups, hierarchies etc. But it doesn't actually draw anything. The idea is that you can use this to manage your options or settings (or even, each of your modules can have its own parameter groups or hierarchies of options), and then you can save / load / manage presets for different groups of options, and use another lightweight wrapper addon to display on screen as a GUI (which could be on another computer as you could send the XML schema over the network).
Currently I have a custom opengl gui for this (ofxMSAControlFreakGui), but I now prefer to use ofxMSAControlFreakImGui which is a very lightweight wrapper for ImGui (using ofxImGui). I also used to have a native Cocoa GUI, but that is currently very out of date. One could easily write Cocoa, GTK, Qt, HTML5 etc. wrappers.
The main motivation is to be able to create, manipulate, save and load parameters (options / settings) as quickly and with as minimal code as possible with maximum flexibility. Goals are:
Separate my data (i.e. parameters, options, settings, state etc) from displaying / visualising. So I can display using different GUIs, or send the schema to another computer for display.
Add a new parameter with as minimal code as possible. E.g.
params.addInt("my param")is enough and is ready to be used (will automatically be displayed, included in presets for save / load / send / receive etc).
Access a parameter with as minimal code as possible. E.g.
Allow a hierarchy where actions (save / load / display / send / receive etc) can be applied to the entire parameter group, or sub groups. Different modules can have parameters, and they can be joined or treated individually.
See the tutorial for details.
- Add as a usual openframeworks addon (copy to your openframeworks/addons directory and add to your project)
- Make sure addons folder (e.g. '../../../addons') is in your project's 'header search path' (I believe by default this is set)