mirror of
https://codeberg.org/armin/monoslicer.git
synced 2026-09-01 12:10:46 +02:00
41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
|
|
#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 = 12;
|
||
|
|
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)
|
||
|
|
};
|