Browse Source

Add plugin menu item to module context menu.

tags/v1.0.0
Andrew Belt 6 years ago
parent
commit
f6989b7362
1 changed files with 86 additions and 5 deletions
  1. +86
    -5
      src/app/ModuleWidget.cpp

+ 86
- 5
src/app/ModuleWidget.cpp View File

@@ -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;


Loading…
Cancel
Save