36 void readCurrentValue()
override { this->setValue(getCurrentAudioClip()->sampleControls.reversed); }
37 void writeCurrentValue()
override {
38 auto* clip = getCurrentAudioClip();
39 bool active = (playbackHandler.isEitherClockActive() && currentSong->isClipActive(clip) && clip->voiceSample);
41 clip->unassignVoiceSample(
false);
43 clip->sampleControls.reversed = this->getValue();
45 if (clip->sampleHolder.audioFile !=
nullptr) {
46 if (clip->sampleControls.isCurrentlyReversed()) {
47 uint64_t lengthInSamples = (
static_cast<Sample*
>(clip->sampleHolder.audioFile))->lengthInSamples;
48 if (clip->sampleHolder.endPos > lengthInSamples) {
49 clip->sampleHolder.endPos = lengthInSamples;
53 clip->sampleHolder.claimClusterReasons(clip->sampleControls.isCurrentlyReversed());
56 char modelStackMemory[MODEL_STACK_MAX_SIZE];
58 currentSong->setupModelStackWithCurrentClip(modelStackMemory);
60 clip->resumePlayback(modelStack,
true);
63 uiNeedsRendering(&audioClipView, 0xFFFFFFFF, 0);
67 void renderInHorizontalMenu(int32_t startX, int32_t width, int32_t startY, int32_t height)
override {
68 const bool reversed = getValue();
69 OLED::main.drawIconCentered(OLED::directionIcon, startX, width, startY + 3, reversed);
72 void getColumnLabel(StringBuf& label)
override { label.append(l10n::get(l10n::String::STRING_FOR_PLAY)); }
75 valueBuf.append(l10n::get(getValue() ? l10n::String::STRING_FOR_ON : l10n::String::STRING_FOR_OFF));
79 if (parent !=
nullptr && parent->renderingStyle() == Submenu::RenderingStyle::HORIZONTAL) {
87 return getCurrentAudioClip()->sampleHolder.audioFile !=
nullptr;