monoslicer/Source/PianoRollDisplay.h

41 lines
1.2 KiB
C
Raw Normal View History

2026-07-21 02:06:45 +02:00
#pragma once
#include <juce_audio_processors/juce_audio_processors.h>
#include "SliceManager.h"
#include <functional>
class PianoRollDisplay : public juce::Component,
public juce::Timer
{
public:
static constexpr int numRows = 25;
2026-07-21 02:06:45 +02:00
static constexpr int baseMidiNote = 60;
static constexpr float keyWidth = 50.0f;
PianoRollDisplay(SliceManager& sm);
~PianoRollDisplay() override;
void paint(juce::Graphics& g) override;
void resized() override;
void timerCallback() override;
void mouseDown(const juce::MouseEvent& e) override;
void mouseUp(const juce::MouseEvent& e) override;
void setActiveSlice(int index);
void setSelectedSlice(int index);
void setTotalSamples(int total);
void setOnKeyClick(std::function<void(int sliceIndex)> callback);
private:
SliceManager& sliceManager;
int activeSlice = -1;
int selectedSlice = -1;
int totalSamples = 0;
int pressedKey = -1;
std::function<void(int)> onKeyClick;
juce::Colour sliceColour(int sliceIndex) const;
int rowToSliceIndex(int row) const;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PianoRollDisplay)
};