diff --git a/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.cpp b/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.cpp index 4f2d4460d..0082950ed 100644 --- a/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.cpp +++ b/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.cpp @@ -274,6 +274,18 @@ void LaunchpadController::sequenceButton(const Button &button, ButtonAction acti if (button.is()) { _project.playState().fillAll(false); } + } else if (action == ButtonAction::DoublePress) { + if (!buttonState() && + !buttonState() && + !buttonState() && + !buttonState() && + !buttonState() && + !buttonState() && + !buttonState() && + button.isGrid()) { + // toggle gate + sequenceToggleStep(button.row, button.col); + } } } @@ -375,6 +387,32 @@ void LaunchpadController::sequenceSetRunMode(int mode) { } } +void LaunchpadController::sequenceToggleStep(int row, int col) { + switch (_project.selectedTrack().trackMode()) { + case Track::TrackMode::Note: + sequenceToggleNoteStep(row, col); + break; + default: + break; + } +} + +void LaunchpadController::sequenceToggleNoteStep(int row, int col) { + auto &sequence = _project.selectedNoteSequence(); + auto layer = _project.selectedNoteSequenceLayer(); + + int linearIndex = col + _sequence.navigation.col * 8; + + switch (layer) { + case NoteSequence::Layer::Gate: + case NoteSequence::Layer::Slide: + break; + default: + sequence.step(linearIndex).toggleGate(); + break; + } +} + void LaunchpadController::sequenceEditStep(int row, int col) { switch (_project.selectedTrack().trackMode()) { case Track::TrackMode::Note: diff --git a/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.h b/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.h index 151c89475..a982e28e8 100644 --- a/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.h +++ b/src/apps/sequencer/ui/controllers/launchpad/LaunchpadController.h @@ -98,6 +98,8 @@ class LaunchpadController : public Controller { void sequenceSetFirstStep(int step); void sequenceSetLastStep(int step); void sequenceSetRunMode(int mode); + void sequenceToggleStep(int row, int col); + void sequenceToggleNoteStep(int row, int col); void sequenceEditStep(int row, int col); void sequenceEditNoteStep(int row, int col); void sequenceEditCurveStep(int row, int col);