| 82 | using namespace rack; |
| 83 | |
| 84 | void appendSelectionContextMenu(ui::Menu* const menu) |
| 85 | { |
| 86 | app::RackWidget* const w = APP->scene->rack; |
| 87 | |
| 88 | int n = w->getSelected().size(); |
| 89 | menu->addChild(createMenuLabel(string::f("%d selected %s", n, n == 1 ? "module" : "modules"))); |
| 90 | |
| 91 | // Enable alwaysConsume of menu items if the number of selected modules changes |
| 92 | |
| 93 | // Select all |
| 94 | menu->addChild(createMenuItem("Select all", RACK_MOD_CTRL_NAME "+A", [w]() { |
| 95 | w->selectAll(); |
| 96 | }, false, true)); |
| 97 | |
| 98 | // Deselect |
| 99 | menu->addChild(createMenuItem("Deselect", RACK_MOD_CTRL_NAME "+" RACK_MOD_SHIFT_NAME "+A", [w]() { |
| 100 | w->deselectAll(); |
| 101 | }, n == 0, true)); |
| 102 | |
| 103 | // Copy |
| 104 | menu->addChild(createMenuItem("Copy", RACK_MOD_CTRL_NAME "+C", [w]() { |
| 105 | w->copyClipboardSelection(); |
| 106 | }, n == 0)); |
| 107 | |
| 108 | // Paste |
| 109 | menu->addChild(createMenuItem("Paste", RACK_MOD_CTRL_NAME "+V", [w]() { |
| 110 | w->pasteClipboardAction(); |
| 111 | }, false, true)); |
| 112 | |
| 113 | // Save |
| 114 | menu->addChild(createMenuItem( |
| 115 | #ifdef DISTRHO_OS_WASM |
| 116 | "Save selection", |
| 117 | #else |
| 118 | "Save selection as...", |
| 119 | #endif |
| 120 | "", [w]() { |
| 121 | CardinalModuleWidget__saveSelectionDialog(w); |
| 122 | }, n == 0)); |
| 123 | |
| 124 | // Initialize |
| 125 | menu->addChild(createMenuItem("Initialize", RACK_MOD_CTRL_NAME "+I", [w]() { |
| 126 | w->resetSelectionAction(); |
| 127 | }, n == 0)); |
| 128 | |
| 129 | // Randomize |
| 130 | menu->addChild(createMenuItem("Randomize", RACK_MOD_CTRL_NAME "+R", [w]() { |
| 131 | w->randomizeSelectionAction(); |
| 132 | }, n == 0)); |
| 133 | |
| 134 | // Disconnect cables |
| 135 | menu->addChild(createMenuItem("Disconnect cables", RACK_MOD_CTRL_NAME "+U", [w]() { |
| 136 | w->disconnectSelectionAction(); |
| 137 | }, n == 0)); |
| 138 | |
| 139 | // Bypass |
| 140 | std::string bypassText = RACK_MOD_CTRL_NAME "+E"; |
| 141 | bool bypassed = (n > 0) && w->isSelectionBypassed(); |
no test coverage detected