Browse Source

Move MenuItem properties to the caller instead of its constructor

tags/v1.0.0
Andrew Belt 6 years ago
parent
commit
f7e70f5daf
3 changed files with 147 additions and 160 deletions
  1. +4
    -0
      include/ui/common.hpp
  2. +9
    -5
      src/app/ModuleWidget.cpp
  3. +134
    -155
      src/app/Toolbar.cpp

+ 4
- 0
include/ui/common.hpp View File

@@ -3,5 +3,9 @@
#include <nanovg.h> #include <nanovg.h>
#include <blendish.h> #include <blendish.h>


/** Useful for menu items with a "true" boolean state */
#define CHECKMARK_STRING "✔" #define CHECKMARK_STRING "✔"
#define CHECKMARK(_cond) ((_cond) ? CHECKMARK_STRING : "") #define CHECKMARK(_cond) ((_cond) ? CHECKMARK_STRING : "")

/** Useful for menu items that open a sub-menu */
#define RIGHT_ARROW "▸"

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

@@ -742,6 +742,7 @@ void ModuleWidget::createContextMenu() {


ModulePluginItem *pluginItem = new ModulePluginItem; ModulePluginItem *pluginItem = new ModulePluginItem;
pluginItem->text = model->plugin->name; pluginItem->text = model->plugin->name;
pluginItem->rightText = RIGHT_ARROW;
pluginItem->plugin = model->plugin; pluginItem->plugin = model->plugin;
menu->addChild(pluginItem); menu->addChild(pluginItem);


@@ -769,6 +770,14 @@ void ModuleWidget::createContextMenu() {
cloneItem->moduleWidget = this; cloneItem->moduleWidget = this;
menu->addChild(cloneItem); menu->addChild(cloneItem);


if (!model->presetPaths.empty()) {
ModuleListPresetsItem *presetsItem = new ModuleListPresetsItem;
presetsItem->text = "Factory presets";
presetsItem->rightText = RIGHT_ARROW;
presetsItem->moduleWidget = this;
menu->addChild(presetsItem);
}

ModuleCopyItem *copyItem = new ModuleCopyItem; ModuleCopyItem *copyItem = new ModuleCopyItem;
copyItem->text = "Copy preset"; copyItem->text = "Copy preset";
copyItem->rightText = WINDOW_MOD_CTRL_NAME "+C"; copyItem->rightText = WINDOW_MOD_CTRL_NAME "+C";
@@ -791,11 +800,6 @@ void ModuleWidget::createContextMenu() {
saveItem->moduleWidget = this; saveItem->moduleWidget = this;
menu->addChild(saveItem); menu->addChild(saveItem);


ModuleListPresetsItem *presetsItem = new ModuleListPresetsItem;
presetsItem->text = "Factory presets";
presetsItem->moduleWidget = this;
menu->addChild(presetsItem);

ModuleBypassItem *bypassItem = new ModuleBypassItem; ModuleBypassItem *bypassItem = new ModuleBypassItem;
bypassItem->text = "Disable"; bypassItem->text = "Disable";
bypassItem->rightText = WINDOW_MOD_CTRL_NAME "+E"; bypassItem->rightText = WINDOW_MOD_CTRL_NAME "+E";


+ 134
- 155
src/app/Toolbar.cpp View File

@@ -34,10 +34,6 @@ struct MenuButton : ui::Button {




struct NewItem : ui::MenuItem { struct NewItem : ui::MenuItem {
NewItem() {
text = "New";
rightText = WINDOW_MOD_CTRL_NAME "+N";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->resetDialog(); APP->patch->resetDialog();
} }
@@ -45,10 +41,6 @@ struct NewItem : ui::MenuItem {




struct OpenItem : ui::MenuItem { struct OpenItem : ui::MenuItem {
OpenItem() {
text = "Open";
rightText = WINDOW_MOD_CTRL_NAME "+O";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->loadDialog(); APP->patch->loadDialog();
} }
@@ -56,10 +48,6 @@ struct OpenItem : ui::MenuItem {




struct SaveItem : ui::MenuItem { struct SaveItem : ui::MenuItem {
SaveItem() {
text = "Save";
rightText = WINDOW_MOD_CTRL_NAME "+S";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->saveDialog(); APP->patch->saveDialog();
} }
@@ -67,10 +55,6 @@ struct SaveItem : ui::MenuItem {




struct SaveAsItem : ui::MenuItem { struct SaveAsItem : ui::MenuItem {
SaveAsItem() {
text = "Save as";
rightText = WINDOW_MOD_CTRL_NAME "+Shift+S";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->saveAsDialog(); APP->patch->saveAsDialog();
} }
@@ -78,9 +62,6 @@ struct SaveAsItem : ui::MenuItem {




struct SaveTemplateItem : ui::MenuItem { struct SaveTemplateItem : ui::MenuItem {
SaveTemplateItem() {
text = "Save template";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->saveTemplateDialog(); APP->patch->saveTemplateDialog();
} }
@@ -88,9 +69,6 @@ struct SaveTemplateItem : ui::MenuItem {




struct RevertItem : ui::MenuItem { struct RevertItem : ui::MenuItem {
RevertItem() {
text = "Revert";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->revertDialog(); APP->patch->revertDialog();
} }
@@ -98,9 +76,6 @@ struct RevertItem : ui::MenuItem {




struct DisconnectCablesItem : ui::MenuItem { struct DisconnectCablesItem : ui::MenuItem {
DisconnectCablesItem() {
text = "Disconnect cables";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->patch->disconnectDialog(); APP->patch->disconnectDialog();
} }
@@ -108,10 +83,6 @@ struct DisconnectCablesItem : ui::MenuItem {




struct QuitItem : ui::MenuItem { struct QuitItem : ui::MenuItem {
QuitItem() {
text = "Quit";
rightText = WINDOW_MOD_CTRL_NAME "+Q";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->window->close(); APP->window->close();
} }
@@ -119,32 +90,52 @@ struct QuitItem : ui::MenuItem {




struct FileButton : MenuButton { struct FileButton : MenuButton {
FileButton() {
text = "File";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
ui::Menu *menu = createMenu(); ui::Menu *menu = createMenu();
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));
menu->box.size.x = box.size.x; menu->box.size.x = box.size.x;


menu->addChild(new NewItem);
menu->addChild(new OpenItem);
menu->addChild(new SaveItem);
menu->addChild(new SaveAsItem);
menu->addChild(new SaveTemplateItem);
menu->addChild(new RevertItem);
menu->addChild(new DisconnectCablesItem);
menu->addChild(new QuitItem);
NewItem *newItem = new NewItem;
newItem->text = "New";
newItem->rightText = WINDOW_MOD_CTRL_NAME "+N";
menu->addChild(newItem);

OpenItem *openItem = new OpenItem;
openItem->text = "Open";
openItem->rightText = WINDOW_MOD_CTRL_NAME "+O";
menu->addChild(openItem);

SaveItem *saveItem = new SaveItem;
saveItem->text = "Save";
saveItem->rightText = WINDOW_MOD_CTRL_NAME "+S";
menu->addChild(saveItem);

SaveAsItem *saveAsItem = new SaveAsItem;
saveAsItem->text = "Save as";
saveAsItem->rightText = WINDOW_MOD_CTRL_NAME "+Shift+S";
menu->addChild(saveAsItem);

SaveTemplateItem *saveTemplateItem = new SaveTemplateItem;
saveTemplateItem->text = "Save template";
menu->addChild(saveTemplateItem);

RevertItem *revertItem = new RevertItem;
revertItem->text = "Revert";
menu->addChild(revertItem);

DisconnectCablesItem *disconnectCablesItem = new DisconnectCablesItem;
disconnectCablesItem->text = "Disconnect cables";
menu->addChild(disconnectCablesItem);

QuitItem *quitItem = new QuitItem;
quitItem->text = "Quit";
quitItem->rightText = WINDOW_MOD_CTRL_NAME "+Q";
menu->addChild(quitItem);
} }
}; };




struct UndoItem : ui::MenuItem { struct UndoItem : ui::MenuItem {
UndoItem() {
text = "Undo " + APP->history->getUndoName();
rightText = WINDOW_MOD_CTRL_NAME "+Z";
disabled = !APP->history->canUndo();
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->history->undo(); APP->history->undo();
} }
@@ -152,11 +143,6 @@ struct UndoItem : ui::MenuItem {




struct RedoItem : ui::MenuItem { struct RedoItem : ui::MenuItem {
RedoItem() {
text = "Redo " + APP->history->getRedoName();
rightText = WINDOW_MOD_CTRL_NAME "+" WINDOW_MOD_SHIFT_NAME "+Z";
disabled = !APP->history->canRedo();
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->history->redo(); APP->history->redo();
} }
@@ -164,16 +150,22 @@ struct RedoItem : ui::MenuItem {




struct EditButton : MenuButton { struct EditButton : MenuButton {
EditButton() {
text = "Edit";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
ui::Menu *menu = createMenu(); ui::Menu *menu = createMenu();
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));
menu->box.size.x = box.size.x; menu->box.size.x = box.size.x;


menu->addChild(new UndoItem);
menu->addChild(new RedoItem);
UndoItem *undoItem = new UndoItem;
undoItem->text = "Undo " + APP->history->getUndoName();
undoItem->rightText = WINDOW_MOD_CTRL_NAME "+Z";
undoItem->disabled = !APP->history->canUndo();
menu->addChild(undoItem);

RedoItem *redoItem = new RedoItem;
redoItem->text = "Redo " + APP->history->getRedoName();
redoItem->rightText = WINDOW_MOD_CTRL_NAME "+" WINDOW_MOD_SHIFT_NAME "+Z";
redoItem->disabled = !APP->history->canRedo();
menu->addChild(redoItem);
} }
}; };


@@ -225,10 +217,6 @@ struct CableTensionQuantity : ui::Quantity {




struct CpuMeterItem : ui::MenuItem { struct CpuMeterItem : ui::MenuItem {
CpuMeterItem() {
text = "CPU meter";
rightText = CHECKMARK(settings.cpuMeter);
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
settings.cpuMeter ^= true; settings.cpuMeter ^= true;
} }
@@ -236,10 +224,6 @@ struct CpuMeterItem : ui::MenuItem {




struct ParamTooltipItem : ui::MenuItem { struct ParamTooltipItem : ui::MenuItem {
ParamTooltipItem() {
text = "Parameter tooltips";
rightText = CHECKMARK(settings.paramTooltip);
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
settings.paramTooltip ^= true; settings.paramTooltip ^= true;
} }
@@ -247,10 +231,6 @@ struct ParamTooltipItem : ui::MenuItem {




struct LockModulesItem : ui::MenuItem { struct LockModulesItem : ui::MenuItem {
LockModulesItem() {
text = "Lock modules";
rightText = CHECKMARK(settings.lockModules);
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
settings.lockModules ^= true; settings.lockModules ^= true;
} }
@@ -258,10 +238,6 @@ struct LockModulesItem : ui::MenuItem {




struct EnginePauseItem : ui::MenuItem { struct EnginePauseItem : ui::MenuItem {
EnginePauseItem() {
text = "Pause engine";
rightText = CHECKMARK(APP->engine->isPaused());
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->engine->setPaused(!APP->engine->isPaused()); APP->engine->setPaused(!APP->engine->isPaused());
} }
@@ -270,11 +246,6 @@ struct EnginePauseItem : ui::MenuItem {


struct SampleRateValueItem : ui::MenuItem { struct SampleRateValueItem : ui::MenuItem {
float sampleRate; float sampleRate;
void setSampleRate(float sampleRate) {
this->sampleRate = sampleRate;
text = string::f("%.0f Hz", sampleRate);
rightText = CHECKMARK(APP->engine->getSampleRate() == sampleRate);
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->engine->setSampleRate(sampleRate); APP->engine->setSampleRate(sampleRate);
APP->engine->setPaused(false); APP->engine->setPaused(false);
@@ -283,28 +254,28 @@ struct SampleRateValueItem : ui::MenuItem {




struct SampleRateItem : ui::MenuItem { struct SampleRateItem : ui::MenuItem {
SampleRateItem() {
text = "Engine sample rate";
}
ui::Menu *createChildMenu() override { ui::Menu *createChildMenu() override {
ui::Menu *menu = new ui::Menu; ui::Menu *menu = new ui::Menu;


menu->addChild(new EnginePauseItem);
EnginePauseItem *enginePauseItem = new EnginePauseItem;
enginePauseItem->text = "Pause engine";
enginePauseItem->rightText = CHECKMARK(APP->engine->isPaused());
menu->addChild(enginePauseItem);


for (int i = 0; i <= 4; i++) { for (int i = 0; i <= 4; i++) {
int oversample = 1 << i;
SampleRateValueItem *item = new SampleRateValueItem;
item->setSampleRate(44100.f * oversample);
if (oversample > 1)
item->text += string::f(" (%dx)", oversample);
menu->addChild(item);
item = new SampleRateValueItem;
item->setSampleRate(48000.f * oversample);
if (oversample > 1)
item->text += string::f(" (%dx)", oversample);
menu->addChild(item);
for (int j = 0; j < 2; j++) {
int oversample = 1 << i;
float sampleRate = (j == 0) ? 44100.f : 48000.f;
sampleRate *= oversample;
SampleRateValueItem *item = new SampleRateValueItem;
item->sampleRate = sampleRate;
item->text = string::f("%.0f Hz", sampleRate);
if (oversample > 1)
item->text += string::f(" (%dx)", oversample);
item->rightText = CHECKMARK(APP->engine->getSampleRate() == sampleRate);
menu->addChild(item);
}
} }
return menu; return menu;
} }
@@ -329,9 +300,6 @@ struct ThreadCountValueItem : ui::MenuItem {




struct ThreadCount : ui::MenuItem { struct ThreadCount : ui::MenuItem {
ThreadCount() {
text = "Thread count";
}
ui::Menu *createChildMenu() override { ui::Menu *createChildMenu() override {
ui::Menu *menu = new ui::Menu; ui::Menu *menu = new ui::Menu;


@@ -347,12 +315,6 @@ struct ThreadCount : ui::MenuItem {




struct FullscreenItem : ui::MenuItem { struct FullscreenItem : ui::MenuItem {
FullscreenItem() {
text = "Fullscreen";
rightText = "F11";
if (APP->window->isFullScreen())
rightText = CHECKMARK_STRING " " + rightText;
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
APP->window->setFullScreen(!APP->window->isFullScreen()); APP->window->setFullScreen(!APP->window->isFullScreen());
} }
@@ -360,20 +322,42 @@ struct FullscreenItem : ui::MenuItem {




struct SettingsButton : MenuButton { struct SettingsButton : MenuButton {
SettingsButton() {
text = "Settings";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
ui::Menu *menu = createMenu(); ui::Menu *menu = createMenu();
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));
menu->box.size.x = box.size.x; menu->box.size.x = box.size.x;


menu->addChild(new ParamTooltipItem);
menu->addChild(new CpuMeterItem);
menu->addChild(new LockModulesItem);
menu->addChild(new SampleRateItem);
menu->addChild(new ThreadCount);
menu->addChild(new FullscreenItem);
ParamTooltipItem *paramTooltipItem = new ParamTooltipItem;
paramTooltipItem->text = "Parameter tooltips";
paramTooltipItem->rightText = CHECKMARK(settings.paramTooltip);
menu->addChild(paramTooltipItem);

CpuMeterItem *cpuMeterItem = new CpuMeterItem;
cpuMeterItem->text = "CPU meter";
cpuMeterItem->rightText = CHECKMARK(settings.cpuMeter);
menu->addChild(cpuMeterItem);

LockModulesItem *lockModulesItem = new LockModulesItem;
lockModulesItem->text = "Lock modules";
lockModulesItem->rightText = CHECKMARK(settings.lockModules);
menu->addChild(lockModulesItem);

SampleRateItem *sampleRateItem = new SampleRateItem;
sampleRateItem->text = "Engine sample rate";
sampleRateItem->rightText = RIGHT_ARROW;
menu->addChild(sampleRateItem);

ThreadCount *threadCount = new ThreadCount;
threadCount->text = "Thread count";
threadCount->rightText = RIGHT_ARROW;
menu->addChild(threadCount);

FullscreenItem *fullscreenItem = new FullscreenItem;
fullscreenItem->text = "Fullscreen";
fullscreenItem->rightText = "F11";
if (APP->window->isFullScreen())
fullscreenItem->rightText = CHECKMARK_STRING " " + fullscreenItem->rightText;
menu->addChild(fullscreenItem);


ui::Slider *zoomSlider = new ui::Slider; ui::Slider *zoomSlider = new ui::Slider;
zoomSlider->box.size.x = 200.0; zoomSlider->box.size.x = 200.0;
@@ -394,9 +378,6 @@ struct SettingsButton : MenuButton {




struct RegisterItem : ui::MenuItem { struct RegisterItem : ui::MenuItem {
RegisterItem() {
text = "Register VCV account";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
std::thread t([&]() { std::thread t([&]() {
system::openBrowser("https://vcvrack.com/"); system::openBrowser("https://vcvrack.com/");
@@ -408,9 +389,6 @@ struct RegisterItem : ui::MenuItem {


struct AccountEmailField : ui::TextField { struct AccountEmailField : ui::TextField {
ui::TextField *passwordField; ui::TextField *passwordField;
AccountEmailField() {
placeholder = "Email";
}
void onSelectKey(const event::SelectKey &e) override { void onSelectKey(const event::SelectKey &e) override {
if (e.action == GLFW_PRESS && e.key == GLFW_KEY_TAB) { if (e.action == GLFW_PRESS && e.key == GLFW_KEY_TAB) {
APP->event->selectedWidget = passwordField; APP->event->selectedWidget = passwordField;
@@ -425,9 +403,6 @@ struct AccountEmailField : ui::TextField {


struct AccountPasswordField : ui::PasswordField { struct AccountPasswordField : ui::PasswordField {
ui::MenuItem *logInItem; ui::MenuItem *logInItem;
AccountPasswordField() {
placeholder = "Password";
}
void onSelectKey(const event::SelectKey &e) override { void onSelectKey(const event::SelectKey &e) override {
if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) {
logInItem->doAction(); logInItem->doAction();
@@ -443,9 +418,6 @@ struct AccountPasswordField : ui::PasswordField {
struct LogInItem : ui::MenuItem { struct LogInItem : ui::MenuItem {
ui::TextField *emailField; ui::TextField *emailField;
ui::TextField *passwordField; ui::TextField *passwordField;
LogInItem() {
text = "Log in";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
std::string email = emailField->text; std::string email = emailField->text;
std::string password = passwordField->text; std::string password = passwordField->text;
@@ -459,7 +431,6 @@ struct LogInItem : ui::MenuItem {


struct ManageItem : ui::MenuItem { struct ManageItem : ui::MenuItem {
ManageItem() { ManageItem() {
text = "Manage plugins";
} }
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
std::thread t([&]() { std::thread t([&]() {
@@ -471,10 +442,6 @@ struct ManageItem : ui::MenuItem {




struct SyncItem : ui::MenuItem { struct SyncItem : ui::MenuItem {
SyncItem() {
text = "Sync plugins";
disabled = true;
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
} }
}; };
@@ -517,9 +484,6 @@ struct SyncItem : ui::MenuItem {




struct LogOutItem : ui::MenuItem { struct LogOutItem : ui::MenuItem {
LogOutItem() {
text = "Log out";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
plugin::logOut(); plugin::logOut();
} }
@@ -546,9 +510,6 @@ struct DownloadQuantity : ui::Quantity {




struct PluginsButton : MenuButton { struct PluginsButton : MenuButton {
PluginsButton() {
text = "Plugins";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
ui::Menu *menu = createMenu(); ui::Menu *menu = createMenu();
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));
@@ -561,20 +522,37 @@ struct PluginsButton : MenuButton {
menu->addChild(downloadProgressBar); menu->addChild(downloadProgressBar);
} }
else if (plugin::isLoggedIn()) { else if (plugin::isLoggedIn()) {
menu->addChild(new ManageItem);
menu->addChild(new SyncItem);
menu->addChild(new LogOutItem);
ManageItem *manageItem = new ManageItem;
manageItem->text = "Manage plugins";
menu->addChild(manageItem);

SyncItem *syncItem = new SyncItem;
syncItem->text = "Sync plugins";
syncItem->disabled = true;
menu->addChild(syncItem);

LogOutItem *logOutItem = new LogOutItem;
logOutItem->text = "Log out";
menu->addChild(logOutItem);
} }
else { else {
menu->addChild(new RegisterItem);
RegisterItem *registerItem = new RegisterItem;
registerItem->text = "Register VCV account";
menu->addChild(registerItem);

AccountEmailField *emailField = new AccountEmailField; AccountEmailField *emailField = new AccountEmailField;
emailField->placeholder = "Email";
emailField->box.size.x = 200.0; emailField->box.size.x = 200.0;
menu->addChild(emailField); menu->addChild(emailField);

AccountPasswordField *passwordField = new AccountPasswordField; AccountPasswordField *passwordField = new AccountPasswordField;
passwordField->placeholder = "Password";
passwordField->box.size.x = 200.0; passwordField->box.size.x = 200.0;
emailField->passwordField = passwordField; emailField->passwordField = passwordField;
menu->addChild(passwordField); menu->addChild(passwordField);

LogInItem *logInItem = new LogInItem; LogInItem *logInItem = new LogInItem;
logInItem->text = "Log in";
logInItem->emailField = emailField; logInItem->emailField = emailField;
logInItem->passwordField = passwordField; logInItem->passwordField = passwordField;
passwordField->logInItem = logInItem; passwordField->logInItem = logInItem;
@@ -598,10 +576,6 @@ struct PluginsButton : MenuButton {




struct ManualItem : ui::MenuItem { struct ManualItem : ui::MenuItem {
ManualItem() {
text = "Manual";
rightText = "F1";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
std::thread t([&]() { std::thread t([&]() {
system::openBrowser("https://vcvrack.com/manual/"); system::openBrowser("https://vcvrack.com/manual/");
@@ -612,9 +586,6 @@ struct ManualItem : ui::MenuItem {




struct WebsiteItem : ui::MenuItem { struct WebsiteItem : ui::MenuItem {
WebsiteItem() {
text = "VCVRack.com";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
std::thread t([&]() { std::thread t([&]() {
system::openBrowser("https://vcvrack.com/"); system::openBrowser("https://vcvrack.com/");
@@ -625,10 +596,6 @@ struct WebsiteItem : ui::MenuItem {




struct CheckVersionItem : ui::MenuItem { struct CheckVersionItem : ui::MenuItem {
CheckVersionItem() {
text = "Check version on launch";
rightText = CHECKMARK(settings.checkVersion);
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
settings.checkVersion ^= true; settings.checkVersion ^= true;
} }
@@ -636,17 +603,24 @@ struct CheckVersionItem : ui::MenuItem {




struct HelpButton : MenuButton { struct HelpButton : MenuButton {
HelpButton() {
text = "Help";
}
void onAction(const event::Action &e) override { void onAction(const event::Action &e) override {
ui::Menu *menu = createMenu(); ui::Menu *menu = createMenu();
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y));
menu->box.size.x = box.size.x; menu->box.size.x = box.size.x;


menu->addChild(new ManualItem);
menu->addChild(new WebsiteItem);
menu->addChild(new CheckVersionItem);
ManualItem *manualItem = new ManualItem;
manualItem->text = "Manual";
manualItem->rightText = "F1";
menu->addChild(manualItem);

WebsiteItem *websiteItem = new WebsiteItem;
websiteItem->text = "VCVRack.com";
menu->addChild(websiteItem);

CheckVersionItem *checkVersionItem = new CheckVersionItem;
checkVersionItem->text = "Check version on launch";
checkVersionItem->rightText = CHECKMARK(settings.checkVersion);
menu->addChild(checkVersionItem);
} }
}; };


@@ -661,18 +635,23 @@ Toolbar::Toolbar() {
addChild(layout); addChild(layout);


FileButton *fileButton = new FileButton; FileButton *fileButton = new FileButton;
fileButton->text = "File";
layout->addChild(fileButton); layout->addChild(fileButton);


EditButton *editButton = new EditButton; EditButton *editButton = new EditButton;
editButton->text = "Edit";
layout->addChild(editButton); layout->addChild(editButton);


SettingsButton *settingsButton = new SettingsButton; SettingsButton *settingsButton = new SettingsButton;
settingsButton->text = "Settings";
layout->addChild(settingsButton); layout->addChild(settingsButton);


PluginsButton *pluginsButton = new PluginsButton; PluginsButton *pluginsButton = new PluginsButton;
pluginsButton->text = "Plugins";
layout->addChild(pluginsButton); layout->addChild(pluginsButton);


HelpButton *helpButton = new HelpButton; HelpButton *helpButton = new HelpButton;
helpButton->text = "Help";
layout->addChild(helpButton); layout->addChild(helpButton);
} }




Loading…
Cancel
Save