Krotos Modules 3
Loading...
Searching...
No Matches
WaveformViewerAndEditor.h
Go to the documentation of this file.
4namespace krotos
5{
6
7 class WaveformViewerAndEditor : public ZoomableComponent, public FileDragAndDropTarget, public Timer
8 {
9 public:
10 // classes, enums, and aliases
11
13 {
14 public:
15 virtual ~Listener() = default;
16 virtual void selectionsChanged(WaveformViewerAndEditor* areaSelectionComp,
17 std::vector<Range<int>> selections) = 0;
18 virtual void fileHasBeenDropped(WaveformViewerAndEditor* areaSelectionComp, const StringArray& files) = 0;
19 virtual void resizeScrollBar(float newThumbSize){};
20 virtual void resizeScrollBarFromRange(juce::Range<float>){};
21 virtual void moveScrollBarThumb(float thumbX){};
22 };
23
26 enum class ZoomStyle
27 {
28 start,
29 centre,
31 };
32
33 // constructors, assignments, destructor
34
35 WaveformViewerAndEditor(Colour waveformColour, bool minimumSelectionAreaOn, bool enableAreaSelection = true);
36 ~WaveformViewerAndEditor() override = default;
37
38 // functions
39
40 void paintOverChildren(Graphics& g) override;
41 void timerCallback() override;
42
45
46 void resized() override;
47
48 String getFileName();
50
51 void update(AudioBuffer<float>* newAudio, int sampleRate);
53
54 void setViewerDropText(String newText);
55
57 void setViewCentre(float newRangeStart);
58
60
61 void clear();
62
66 void setSelectionEnabled(bool newState);
67
68 // Dummy methods to keep build alive
69 void setStartPosInPercentage(float startPos, float nonModulatedValue = -1.0f){};
70 void setEndPosInPercentage(float endPos){};
71
72 void setGrainData(Grain* grains, int numSamples, int numChannels);
73 void copySampleEngineSegmentToSelector(Selector& selector, int segmentIndex);
74
78
80 void setZooms(const Range<float> newRange);
81
83 void zoomIn();
84
86 void zoomOut();
87
90
91 Array<File> getExtendedFilePaths(const StringArray& fileNames);
92
95 void setChildComponentIds(String newId);
96
98 int mouseXToSampleX(int x);
99
103 void showFileChooser();
104
110 void zoomToSegment(size_t segmentIndex);
111
112 private:
113 // classes, enums, and aliases
114
115 struct Layout
116 {
117 public:
119 const float dragSelectAreaBoundary{0.66f};
120 const String waveformAreaBackdropImageName{"Sample_Backdrop_x_2_png"};
122
124 {
125 const Colour selectionStartClick{Colours::white.withAlpha(1.0f)};
126 const Colour selectionStartHover{Colours::white.withAlpha(0.7f)};
127 const Colour selectionStart{Colours::white.withAlpha(0.5f)};
128 const Colour selectionEndClick{Colours::white.withAlpha(1.0f)};
129 const Colour selectionEndHover{Colours::white.withAlpha(0.7f)};
130 const Colour selectionEnd{Colours::white.withAlpha(0.5f)};
131 const Colour draggedHighlight{Colour::fromFloatRGBA(1.0f, 1.0f, 1.0f, 0.1f)};
132 const Colour selectedAreaShading{Colour::fromFloatRGBA(0.0f, 0.0f, 0.0f, 0.4f)};
134
145
146 // functions
147
148 void moveSelectionStart(int segmentIndex, int diff);
149 void setSelectionStart(int segmentIndex, int sampleIndex);
150 void moveSelectionEnd(int segmentIndex, int diff);
151 void setSelectionEnd(int segmentIndex, int sampleIndex);
152 void moveSelection(int segmentIndex, int diff);
153 Range<int> getSelection(int segmentIndex);
154 void setHoverFromDirection(int segmentIndex, int mouseDeltaX);
155 MouseCursor hoverModeToMouseCursor(HoverMode hMode);
156 HoverMode deduceSegmentHoverMode(int segmentIndex);
157 void zoomByDelta(float delta);
158 void reportAnyInvalidFiles(const StringArray& filelist);
159
160 // overridden functions
161
162 void mouseDrag(const MouseEvent& event) override;
163 void mouseWheelMove(const MouseEvent& e, const MouseWheelDetails& wheel) override;
164 void mouseUp(const MouseEvent& event) override;
165 void mouseDown(const MouseEvent& event) override;
166 void mouseMove(const MouseEvent& event) override;
167 void mouseEnter(const MouseEvent& event) override;
168 void mouseExit(const MouseEvent& event) override;
169 bool isInterestedInFileDrag(const StringArray& files) override;
170 void filesDropped(const StringArray& files, int x, int y) override;
171 void fileDragEnter(const StringArray& files, int x, int y) override;
172 void fileDragExit(const StringArray& files) override;
173
174 void mouseMove();
175
176 // data
178 bool m_middleMouseDown{false};
179 ListenerList<Listener> m_listeners;
180
183 std::vector<Selector> m_selectors;
186 int m_mouseX{0};
187 int m_mouseY{0};
188
190
192 std::unique_ptr<GrainDisplay> m_grainDisplay;
193 std::unique_ptr<WaveformViewer> m_waveformView;
194
197
200
203
205 // The number of frames to paint after grain activity stops
206 static const int FRAME_COOLDOWN{30};
207
208 std::unique_ptr<FileChooser> m_sampleChooser;
209 const String m_fileChooserWindowTitle{"Select file"};
210 const String m_chooserAllowedFileTypes{"*.wav;*.aif;*.aiff;*.flac;*.ogg"};
211 const String m_validFileExtensions{"wav;aif;aiff;flac;ogg;"};
213
214 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WaveformViewerAndEditor)
215 };
216} // namespace krotos
Definition OscillatorUtils.h:39
Definition KrotosSynthesiserSound.h:19
Definition SampleEngine.h:84
A class containing the logic to zoom and scroll within a timeline.
Definition HelperClasses.h:62
Definition WaveformViewerAndEditor.h:13
virtual void fileHasBeenDropped(WaveformViewerAndEditor *areaSelectionComp, const StringArray &files)=0
virtual void moveScrollBarThumb(float thumbX)
Definition WaveformViewerAndEditor.h:21
virtual void resizeScrollBar(float newThumbSize)
Definition WaveformViewerAndEditor.h:19
virtual void resizeScrollBarFromRange(juce::Range< float >)
Definition WaveformViewerAndEditor.h:20
virtual void selectionsChanged(WaveformViewerAndEditor *areaSelectionComp, std::vector< Range< int > > selections)=0
Definition WaveformViewerAndEditor.h:8
ZoomStyle
Definition WaveformViewerAndEditor.h:27
void fileDragExit(const StringArray &files) override
Definition WaveformViewerAndEditor.cpp:659
void copySampleEngineSegmentToSelector(Selector &selector, int segmentIndex)
Definition WaveformViewerAndEditor.cpp:174
ScrollAndZoomManager m_scrollManager
Definition WaveformViewerAndEditor.h:181
int m_sampleMouseX
Definition WaveformViewerAndEditor.h:185
void reportAnyInvalidFiles(const StringArray &filelist)
Definition WaveformViewerAndEditor.cpp:661
void showFileChooser()
Show the waveform view file chooser.
Definition WaveformViewerAndEditor.cpp:683
void setHoverFromDirection(int segmentIndex, int mouseDeltaX)
Definition WaveformViewerAndEditor.cpp:317
int m_mouseY
Definition WaveformViewerAndEditor.h:187
std::unique_ptr< WaveformViewer > m_waveformView
Definition WaveformViewerAndEditor.h:193
ZoomStyle m_zoomStyle
Definition WaveformViewerAndEditor.h:212
bool m_middleMouseDown
Definition WaveformViewerAndEditor.h:178
String m_filePath
Definition WaveformViewerAndEditor.h:196
void moveSelectionEnd(int segmentIndex, int diff)
Definition WaveformViewerAndEditor.cpp:273
void mouseExit(const MouseEvent &event) override
Definition WaveformViewerAndEditor.cpp:621
void setViewerDropText(String newText)
Definition WaveformViewerAndEditor.cpp:143
void setZoomStyle(ZoomStyle)
Definition WaveformViewerAndEditor.cpp:722
int m_frameCooldownCounter
Definition WaveformViewerAndEditor.h:204
void zoomIn()
Definition WaveformViewerAndEditor.cpp:704
Array< File > getExtendedFilePaths(const StringArray &fileNames)
Definition WaveformViewerAndEditor.cpp:237
bool m_selectionChanged
Definition WaveformViewerAndEditor.h:177
int m_activeSegmentIndex
Definition WaveformViewerAndEditor.h:184
void fileDragEnter(const StringArray &files, int x, int y) override
Definition WaveformViewerAndEditor.cpp:654
void mouseDown(const MouseEvent &event) override
Definition WaveformViewerAndEditor.cpp:328
const String m_validFileExtensions
Definition WaveformViewerAndEditor.h:211
void moveSelectionStart(int segmentIndex, int diff)
Definition WaveformViewerAndEditor.cpp:248
void mouseWheelMove(const MouseEvent &e, const MouseWheelDetails &wheel) override
Definition WaveformViewerAndEditor.cpp:476
struct krotos::WaveformViewerAndEditor::Layout m_layout
std::vector< Selector > m_selectors
Definition WaveformViewerAndEditor.h:183
Range< int > getSelection(int segmentIndex)
Definition WaveformViewerAndEditor.cpp:310
void mouseMove()
Definition WaveformViewerAndEditor.cpp:549
void setGrainData(Grain *grains, int numSamples, int numChannels)
Definition WaveformViewerAndEditor.cpp:169
ListenerList< Listener > m_listeners
Definition WaveformViewerAndEditor.h:179
void setSampleEngineToDisplay(KrotosSampleOscillatorSound *sampEngine)
Definition WaveformViewerAndEditor.cpp:205
WaveformViewer * getWaveformViewer()
Definition WaveformViewerAndEditor.cpp:152
bool m_hasFileBeenDropped
Definition WaveformViewerAndEditor.h:202
void mouseUp(const MouseEvent &event) override
Definition WaveformViewerAndEditor.cpp:449
bool m_minimumSelectionAreaOn
Definition WaveformViewerAndEditor.h:201
HoverMode m_hoverMode
Definition WaveformViewerAndEditor.h:182
int m_totalSampleLength
Definition WaveformViewerAndEditor.h:198
std::unique_ptr< FileChooser > m_sampleChooser
Definition WaveformViewerAndEditor.h:208
WaveformViewerAndEditor(Colour waveformColour, bool minimumSelectionAreaOn, bool enableAreaSelection=true)
Definition WaveformViewerAndEditor.cpp:3
int m_mouseX
Definition WaveformViewerAndEditor.h:186
String m_fileName
Definition WaveformViewerAndEditor.h:195
void clear()
Definition WaveformViewerAndEditor.cpp:154
void addListener(Listener *Listener)
Definition WaveformViewerAndEditor.cpp:103
static const int FRAME_COOLDOWN
Definition WaveformViewerAndEditor.h:206
void moveSelection(int segmentIndex, int diff)
Definition WaveformViewerAndEditor.cpp:298
void setChildComponentIds(String newId)
Definition WaveformViewerAndEditor.cpp:724
void update(AudioBuffer< float > *newAudio, int sampleRate)
Definition WaveformViewerAndEditor.cpp:125
const String m_fileChooserWindowTitle
Definition WaveformViewerAndEditor.h:209
int mouseXToSampleX(int x)
Definition WaveformViewerAndEditor.cpp:242
void setViewCentre(float newRangeStart)
Definition WaveformViewerAndEditor.cpp:145
void timerCallback() override
Definition WaveformViewerAndEditor.cpp:27
void filesDropped(const StringArray &files, int x, int y) override
Definition WaveformViewerAndEditor.cpp:639
void zoomToSegment(size_t segmentIndex)
Centres the waveform viewer around a given segment, so that the segment fills the entire viewer windo...
Definition WaveformViewerAndEditor.cpp:730
SampleEngine * m_sampleEngine
Definition WaveformViewerAndEditor.h:191
HoverMode deduceSegmentHoverMode(int segmentIndex)
Definition WaveformViewerAndEditor.cpp:484
void mouseDrag(const MouseEvent &event) override
Definition WaveformViewerAndEditor.cpp:362
String getFileName()
Definition WaveformViewerAndEditor.cpp:115
std::unique_ptr< GrainDisplay > m_grainDisplay
Definition WaveformViewerAndEditor.h:192
void mouseEnter(const MouseEvent &event) override
Definition WaveformViewerAndEditor.cpp:615
HoverMode
Definition WaveformViewerAndEditor.h:136
@ noHover
Definition WaveformViewerAndEditor.h:137
@ rightEdgeDrag
Definition WaveformViewerAndEditor.h:141
@ selectionDrag
Definition WaveformViewerAndEditor.h:139
@ undecidedDrag
Definition WaveformViewerAndEditor.h:142
@ leftEdgeDrag
Definition WaveformViewerAndEditor.h:140
@ NUM_HOVER_MODES
Definition WaveformViewerAndEditor.h:143
@ segmentDrag
Definition WaveformViewerAndEditor.h:138
String getLoadedFilePathsAsCSV()
Definition WaveformViewerAndEditor.cpp:117
const String m_chooserAllowedFileTypes
Definition WaveformViewerAndEditor.h:210
struct krotos::WaveformViewerAndEditor::ColourDefinitions m_colourDefinitions
void removeListener(Listener *Listener)
Definition WaveformViewerAndEditor.cpp:105
void paintOverChildren(Graphics &g) override
Definition WaveformViewerAndEditor.cpp:47
void setSelectionEnd(int segmentIndex, int sampleIndex)
Definition WaveformViewerAndEditor.cpp:286
void zoomOut()
Definition WaveformViewerAndEditor.cpp:713
void setZooms(const Range< float > newRange)
Definition WaveformViewerAndEditor.cpp:230
~WaveformViewerAndEditor() override=default
void copySegmentsToSelectors()
Definition WaveformViewerAndEditor.cpp:182
void resized() override
Definition WaveformViewerAndEditor.cpp:107
bool isInterestedInFileDrag(const StringArray &files) override
Definition WaveformViewerAndEditor.cpp:634
void setStartPosInPercentage(float startPos, float nonModulatedValue=-1.0f)
Definition WaveformViewerAndEditor.h:69
float m_sampleRate
Definition WaveformViewerAndEditor.h:199
void setSelectionEnabled(bool newState)
Definition WaveformViewerAndEditor.cpp:167
void setEndPosInPercentage(float endPos)
Definition WaveformViewerAndEditor.h:70
void zoomByDelta(float delta)
Definition WaveformViewerAndEditor.cpp:464
MouseCursor hoverModeToMouseCursor(HoverMode hMode)
Definition WaveformViewerAndEditor.cpp:514
void setSelectionStart(int segmentIndex, int sampleIndex)
Definition WaveformViewerAndEditor.cpp:261
int m_nextSampleEngineSegment
Definition WaveformViewerAndEditor.h:189
Definition WaveformViewer.h:6
Enables zooming of a painted component using special drawing methods.
Definition ZoomableComponent.h:7
Definition AirAbsorptionFilter.cpp:2
A structure to hold info on a selected area.
Definition HelperClasses.h:30
Definition WaveformViewerAndEditor.h:124
const Colour selectionEndHover
Definition WaveformViewerAndEditor.h:129
const Colour selectedAreaShading
Definition WaveformViewerAndEditor.h:132
const Colour selectionStartHover
Definition WaveformViewerAndEditor.h:126
const Colour selectionEnd
Definition WaveformViewerAndEditor.h:130
const Colour selectionStartClick
Definition WaveformViewerAndEditor.h:125
const Colour selectionEndClick
Definition WaveformViewerAndEditor.h:128
const Colour draggedHighlight
Definition WaveformViewerAndEditor.h:131
const Colour selectionStart
Definition WaveformViewerAndEditor.h:127
Definition WaveformViewerAndEditor.h:116
const String waveformAreaBackdropImageName
Definition WaveformViewerAndEditor.h:120
const int endMarkerPixelTolerance
Definition WaveformViewerAndEditor.h:118
const float dragSelectAreaBoundary
Definition WaveformViewerAndEditor.h:119