|
- #pragma once
- #include <common.hpp>
- #include <plugin/Plugin.hpp>
-
- #include <jansson.h>
-
- #include <list>
-
-
- namespace rack {
-
-
- namespace ui {
- struct Menu;
- } // namespace app
-
-
- namespace app {
- struct ModuleWidget;
- } // namespace app
-
-
- namespace engine {
- struct Module;
- } // namespace engine
-
-
- namespace plugin {
-
-
- /** Type information for a module.
- Factory for Module and ModuleWidget.
- */
- struct Model {
- Plugin* plugin = NULL;
-
- /** Must be unique. Used for saving patches. Never change this after releasing your module.
- The model slug must be unique within your plugin, but it doesn't need to be unique among different plugins.
- */
- std::string slug;
- /** Human readable name for your model, e.g. "Voltage Controlled Oscillator" */
- std::string name;
- /** List of tag IDs representing the function(s) of the module.
- Tag IDs are not part of the ABI and may change at any time.
- */
- std::list<int> tagIds;
- /** A one-line summary of the module's purpose */
- std::string description;
- /** The manual of the module. HTML, PDF, or GitHub readme/wiki are fine.
- */
- std::string manualUrl;
- std::string modularGridUrl;
-
- /** Hides model from the Module Browser but able to be loaded from a patch file.
- Useful for deprecating modules without breaking old patches.
- */
- bool hidden = false;
-
- virtual ~Model() {}
- /** Creates a Module. */
- virtual engine::Module* createModule() {
- return NULL;
- }
- /** Creates a ModuleWidget with a Module attached.
- Module may be NULL.
- */
- virtual app::ModuleWidget* createModuleWidget(engine::Module* m) {
- return NULL;
- }
-
- void fromJson(json_t* rootJ);
- /** Returns the branded name of the model, e.g. VCV VCO-1. */
- std::string getFullName();
- std::string getFactoryPresetDirectory();
- std::string getUserPresetDirectory();
- /** Returns the module or plugin manual URL, whichever exists. */
- std::string getManualUrl();
- void appendContextMenu(ui::Menu* menu);
- bool isFavorite();
- void setFavorite(bool favorite);
- };
-
-
- } // namespace plugin
- } // namespace rack
|