diff --git a/include/plugin/Model.hpp b/include/plugin/Model.hpp index f8a1a57b..f8731182 100644 --- a/include/plugin/Model.hpp +++ b/include/plugin/Model.hpp @@ -40,6 +40,7 @@ struct Model { /** The manual of the module. HTML, PDF, or GitHub readme/wiki are fine. */ std::string manualUrl; + std::string modularGridUrl; virtual ~Model() {} /** Creates a Module. */ diff --git a/src/app/ModuleWidget.cpp b/src/app/ModuleWidget.cpp index a05911d0..1e1674c0 100644 --- a/src/app/ModuleWidget.cpp +++ b/src/app/ModuleWidget.cpp @@ -98,12 +98,20 @@ struct ModuleInfoItem : ui::MenuItem { menu->addChild(new ui::MenuSeparator); - // library + // VCV Library page ModuleUrlItem* libraryItem = new ModuleUrlItem; - libraryItem->text = "VCV Library entry"; + libraryItem->text = "VCV Library page"; libraryItem->url = "https://library.vcvrack.com/" + model->plugin->slug + "/" + model->slug; menu->addChild(libraryItem); + // modularGridUrl + if (model->modularGridUrl != "") { + ModuleUrlItem* modularGridItem = new ModuleUrlItem; + modularGridItem->text = "ModularGrid page"; + modularGridItem->url = model->modularGridUrl; + menu->addChild(modularGridItem); + } + // manual std::string manualUrl = (model->manualUrl != "") ? model->manualUrl : model->plugin->manualUrl; if (manualUrl != "") { diff --git a/src/app/TipWindow.cpp b/src/app/TipWindow.cpp index 6c7e9e84..740fa18e 100644 --- a/src/app/TipWindow.cpp +++ b/src/app/TipWindow.cpp @@ -60,6 +60,10 @@ static std::vector tipInfos = { {"Some plugin developers accept donations for their work. Right-click a module panel and select Info > Donate.\n\nYou can support VCV Rack by purchasing VCV plugins.", "VCV Library", "https://library.vcvrack.com/"}, // reviewed {"You can learn more about VCV Rack by browsing the official Rack manual.", "VCV Rack manual", "https://vcvrack.com/manual/"}, {"Follow VCV Rack on Twitter for new modules, product announcements, and development news.", "Twitter @vcvrack", "https://twitter.com/vcvrack"}, // reviewed + {"Did you know that patch cables in Rack can carry up to 16 signals? You can use this to easily build polyphonic patches with modules with the \"Polyphonic\" tag. Cables carrying more than 1 signal appear thicker than normal cables. To try out polyphony, add the VCV MIDI-CV module to your patch, right-click its panel, and select your desired number of polyphonic channels.", "Learn more about polyphony in VCV Rack", "https://vcvrack.com/manual/Polyphony"}, // reviewed + {"Know C++ programming and want to create your own modules for Rack? Developing Rack modules is a great way to learn digital signal processing and quickly test your ideas with an easy-to-learn platform.\n\nDownload the Rack SDK and follow the official tutorial to get started.", "Plugin Development Tutorial", "https://vcvrack.com/manual/PluginDevelopmentTutorial"}, // reviewed + {"Confused about how to use a particular module? Right-click its panel and choose Info > User manual.\n\nYou can also open the module's Info menu to view the module's tags, website, VCV Library entry, and changelog.", "", ""}, // reviewed + {"Did you know that ModularGrid is interconnected with the VCV Library? If a Eurorack version of a Rack module is available, right-click its panel and choose Info > ModularGrid, or click the \"ModularGrid\" link on its VCV Library page.\nOn ModularGrid.net, you can click the \"Available for VCV Rack\" link if a hardware module has a virtual Rack version.", "Example: Grayscale Permutation on ModularGrid", "https://www.modulargrid.net/e/grayscale-permutation-18hp"}, // reviewed // {"", "", ""}, }; diff --git a/src/plugin/Model.cpp b/src/plugin/Model.cpp index 68b0266e..5bd2a953 100644 --- a/src/plugin/Model.cpp +++ b/src/plugin/Model.cpp @@ -49,6 +49,11 @@ void Model::fromJson(json_t* rootJ) { json_t* manualUrlJ = json_object_get(rootJ, "manualUrl"); if (manualUrlJ) manualUrl = json_string_value(manualUrlJ); + + // modularGridUrl + json_t* modularGridUrlJ = json_object_get(rootJ, "modularGridUrl"); + if (modularGridUrlJ) + modularGridUrl = json_string_value(modularGridUrlJ); }