|
@@ -1,15 +1,17 @@ |
|
|
#include "app/ModuleWidget.hpp" |
|
|
#include "app/ModuleWidget.hpp" |
|
|
|
|
|
#include "app/Scene.hpp" |
|
|
|
|
|
#include "app/SvgPanel.hpp" |
|
|
#include "engine/Engine.hpp" |
|
|
#include "engine/Engine.hpp" |
|
|
|
|
|
#include "plugin/Plugin.hpp" |
|
|
#include "system.hpp" |
|
|
#include "system.hpp" |
|
|
#include "asset.hpp" |
|
|
#include "asset.hpp" |
|
|
#include "app/Scene.hpp" |
|
|
|
|
|
#include "app/SvgPanel.hpp" |
|
|
|
|
|
#include "helpers.hpp" |
|
|
#include "helpers.hpp" |
|
|
#include "app.hpp" |
|
|
#include "app.hpp" |
|
|
#include "settings.hpp" |
|
|
#include "settings.hpp" |
|
|
#include "history.hpp" |
|
|
#include "history.hpp" |
|
|
|
|
|
|
|
|
#include "osdialog.h" |
|
|
#include "osdialog.h" |
|
|
|
|
|
#include <thread> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace rack { |
|
|
namespace rack { |
|
@@ -19,6 +21,80 @@ namespace app { |
|
|
static const char PRESET_FILTERS[] = "VCV Rack module preset (.vcvm):vcvm"; |
|
|
static const char PRESET_FILTERS[] = "VCV Rack module preset (.vcvm):vcvm"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct ModuleUrlItem : ui::MenuItem { |
|
|
|
|
|
std::string url; |
|
|
|
|
|
void onAction(const event::Action &e) override { |
|
|
|
|
|
std::thread t(system::openBrowser, url); |
|
|
|
|
|
t.detach(); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
struct ModulePluginItem : ui::MenuItem { |
|
|
|
|
|
plugin::Plugin *plugin; |
|
|
|
|
|
ModulePluginItem() { |
|
|
|
|
|
disabled = true; |
|
|
|
|
|
} |
|
|
|
|
|
ui::Menu *createChildMenu() override { |
|
|
|
|
|
ui::Menu *menu = new ui::Menu; |
|
|
|
|
|
|
|
|
|
|
|
ui::MenuLabel *versionLabel = new ui::MenuLabel; |
|
|
|
|
|
versionLabel->text = "v" + plugin->version; |
|
|
|
|
|
menu->addChild(versionLabel); |
|
|
|
|
|
|
|
|
|
|
|
if (!plugin->author.empty()) { |
|
|
|
|
|
if (!plugin->authorUrl.empty()) { |
|
|
|
|
|
ModuleUrlItem *authorItem = new ModuleUrlItem; |
|
|
|
|
|
authorItem->text = plugin->author; |
|
|
|
|
|
authorItem->url = plugin->authorUrl; |
|
|
|
|
|
menu->addChild(authorItem); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
ui::MenuLabel *authorLabel = new ui::MenuLabel; |
|
|
|
|
|
authorLabel->text = plugin->author; |
|
|
|
|
|
menu->addChild(authorLabel); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!plugin->pluginUrl.empty()) { |
|
|
|
|
|
ModuleUrlItem *websiteItem = new ModuleUrlItem; |
|
|
|
|
|
websiteItem->text = "Website"; |
|
|
|
|
|
websiteItem->url = plugin->pluginUrl; |
|
|
|
|
|
menu->addChild(websiteItem); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!plugin->manualUrl.empty()) { |
|
|
|
|
|
ModuleUrlItem *manualItem = new ModuleUrlItem; |
|
|
|
|
|
manualItem->text = "Manual"; |
|
|
|
|
|
manualItem->url = plugin->manualUrl; |
|
|
|
|
|
menu->addChild(manualItem); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!plugin->sourceUrl.empty()) { |
|
|
|
|
|
ModuleUrlItem *sourceItem = new ModuleUrlItem; |
|
|
|
|
|
sourceItem->text = "Source code"; |
|
|
|
|
|
sourceItem->url = plugin->sourceUrl; |
|
|
|
|
|
menu->addChild(sourceItem); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!plugin->donateUrl.empty()) { |
|
|
|
|
|
ModuleUrlItem *donateItem = new ModuleUrlItem; |
|
|
|
|
|
donateItem->text = "Donate"; |
|
|
|
|
|
donateItem->url = plugin->donateUrl; |
|
|
|
|
|
menu->addChild(donateItem); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// TODO open folder location with file explorer instead of browser |
|
|
|
|
|
if (!plugin->path.empty()) { |
|
|
|
|
|
ModuleUrlItem *pathItem = new ModuleUrlItem; |
|
|
|
|
|
pathItem->text = "Open folder"; |
|
|
|
|
|
pathItem->url = plugin->path; |
|
|
|
|
|
menu->addChild(pathItem); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return menu; |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
struct ModuleDisconnectItem : ui::MenuItem { |
|
|
struct ModuleDisconnectItem : ui::MenuItem { |
|
|
ModuleWidget *moduleWidget; |
|
|
ModuleWidget *moduleWidget; |
|
|
ModuleDisconnectItem() { |
|
|
ModuleDisconnectItem() { |
|
@@ -680,9 +756,14 @@ void ModuleWidget::createContextMenu() { |
|
|
ui::Menu *menu = createMenu(); |
|
|
ui::Menu *menu = createMenu(); |
|
|
assert(model); |
|
|
assert(model); |
|
|
|
|
|
|
|
|
ui::MenuLabel *menuLabel = new ui::MenuLabel; |
|
|
|
|
|
menuLabel->text = model->plugin->name + " " + model->name + " v" + model->plugin->version; |
|
|
|
|
|
menu->addChild(menuLabel); |
|
|
|
|
|
|
|
|
ui::MenuLabel *modelLabel = new ui::MenuLabel; |
|
|
|
|
|
modelLabel->text = model->name; |
|
|
|
|
|
menu->addChild(modelLabel); |
|
|
|
|
|
|
|
|
|
|
|
ModulePluginItem *pluginItem = new ModulePluginItem; |
|
|
|
|
|
pluginItem->text = model->plugin->name; |
|
|
|
|
|
pluginItem->plugin = model->plugin; |
|
|
|
|
|
menu->addChild(pluginItem); |
|
|
|
|
|
|
|
|
ModuleResetItem *resetItem = new ModuleResetItem; |
|
|
ModuleResetItem *resetItem = new ModuleResetItem; |
|
|
resetItem->moduleWidget = this; |
|
|
resetItem->moduleWidget = this; |
|
|