Browse Source

Add Select All and Deselect menu items and key commands.

tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
1a1a988535
4 changed files with 33 additions and 15 deletions
  1. +2
    -1
      include/app/RackWidget.hpp
  2. +2
    -4
      src/app/MenuBar.cpp
  3. +21
    -10
      src/app/RackWidget.cpp
  4. +8
    -0
      src/app/Scene.cpp

+ 2
- 1
include/app/RackWidget.hpp View File

@@ -74,7 +74,8 @@ struct RackWidget : widget::OpaqueWidget {
// Module selection methods

void updateModuleSelections();
void clearModuleSelections();
void deselectModules();
void selectAllModules();
bool hasSelectedModules();
int getNumSelectedModules();
std::list<ModuleWidget*> getSelectedModules();


+ 2
- 4
src/app/MenuBar.cpp View File

@@ -215,10 +215,8 @@ struct EditButton : MenuButton {
disconnectCablesItem->text = "Clear cables";
menu->addChild(disconnectCablesItem);

if (APP->scene->rack->hasSelectedModules()) {
menu->addChild(new ui::MenuSeparator);
APP->scene->rack->appendSelectionContextMenu(menu);
}
menu->addChild(new ui::MenuSeparator);
APP->scene->rack->appendSelectionContextMenu(menu);

menu->addChild(new ui::MenuSeparator);



+ 21
- 10
src/app/RackWidget.cpp View File

@@ -654,12 +654,18 @@ void RackWidget::updateModuleSelections() {
}
}

void RackWidget::clearModuleSelections() {
void RackWidget::deselectModules() {
for (ModuleWidget* mw : getModules()) {
mw->selected() = false;
}
}

void RackWidget::selectAllModules() {
for (ModuleWidget* mw : getModules()) {
mw->selected() = true;
}
}

bool RackWidget::hasSelectedModules() {
for (widget::Widget* w : internal->moduleContainer->children) {
ModuleWidget* mw = dynamic_cast<ModuleWidget*>(w);
@@ -833,39 +839,44 @@ void RackWidget::appendSelectionContextMenu(ui::Menu* menu) {
int n = getNumSelectedModules();
menu->addChild(createMenuLabel(string::f("%d selected %s", n, n == 1 ? "module" : "modules")));

// Deselect
menu->addChild(createMenuItem("Deselect", "", [=]() {
clearModuleSelections();
// Select all
menu->addChild(createMenuItem("Select all", RACK_MOD_CTRL_NAME "+A", [=]() {
selectAllModules();
}));

// Deselect
menu->addChild(createMenuItem("Deselect", RACK_MOD_CTRL_NAME "+" RACK_MOD_SHIFT_NAME "+A", [=]() {
deselectModules();
}, n == 0));

// Initialize
menu->addChild(createMenuItem("Initialize", RACK_MOD_CTRL_NAME "+I", [=]() {
resetSelectedModulesAction();
}));
}, n == 0));

// Randomize
menu->addChild(createMenuItem("Randomize", RACK_MOD_CTRL_NAME "+R", [=]() {
randomizeSelectedModulesAction();
}));
}, n == 0));

// Disconnect cables
menu->addChild(createMenuItem("Disconnect cables", RACK_MOD_CTRL_NAME "+U", [=]() {
disconnectSelectedModulesAction();
}));
}, n == 0));

// Bypass
std::string bypassText = RACK_MOD_CTRL_NAME "+E";
bool bypassed = areSelectedModulesBypassed();
bool bypassed = (n > 0) && areSelectedModulesBypassed();
if (bypassed)
bypassText += " " CHECKMARK_STRING;
menu->addChild(createMenuItem("Bypass", bypassText, [=]() {
bypassSelectedModulesAction(!bypassed);
}));
}, n == 0));

// Delete
menu->addChild(createMenuItem("Delete", "Backspace/Delete", [=]() {
deleteSelectedModulesAction();
}));
}, n == 0));
}

void RackWidget::clearCables() {


+ 8
- 0
src/app/Scene.cpp View File

@@ -212,6 +212,14 @@ void Scene::onHoverKey(const HoverKeyEvent& e) {
}

// Module selections
if (e.keyName == "a" && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) {
rack->selectAllModules();
e.consume(this);
}
if (e.keyName == "a" && (e.mods & RACK_MOD_MASK) == (RACK_MOD_CTRL | GLFW_MOD_SHIFT)) {
rack->deselectModules();
e.consume(this);
}
if (e.keyName == "i" && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) {
if (rack->hasSelectedModules())
rack->resetSelectedModulesAction();


Loading…
Cancel
Save