Vital
Loading...
Searching...
No Matches
modulation_button.h
Go to the documentation of this file.
1#pragma once
2
3#include "JuceHeader.h"
5
6namespace vital {
7 struct ModulationConnection;
8} // namespace vital
9
11
22public:
24 static constexpr float kFontAreaHeightRatio = 0.3f;
26 static constexpr int kModulationKnobColumns = 3;
28 static constexpr int kModulationKnobRows = 2;
32 static constexpr float kMeterAreaRatio = 0.05f;
33
43
55
60 class Listener {
61 public:
62 virtual ~Listener() = default;
63
67 virtual void modulationConnectionChanged() { }
68
74 virtual void modulationDisconnected(vital::ModulationConnection* connection, bool last) { }
75
80 virtual void modulationSelected(ModulationButton* source) { }
81
86 virtual void modulationLostFocus(ModulationButton* source) { }
87
93 virtual void startModulationMap(ModulationButton* source, const MouseEvent& e) { }
94
99 virtual void modulationDragged(const MouseEvent& e) { }
100
106 virtual void modulationWheelMoved(const MouseEvent& e, const MouseWheelDetails& wheel) { }
107
111 virtual void endModulationMap() { }
112
117 virtual void modulationClicked(ModulationButton* source) { }
118
122 virtual void modulationCleared() { }
123 };
124
129 ModulationButton(String name);
130
134 virtual ~ModulationButton();
135
140 void paintBackground(Graphics& g) override;
141
147 void parentHierarchyChanged() override;
148
152 void resized() override;
153
159 virtual void render(OpenGlWrapper& open_gl, bool animate) override;
160
165 void mouseDown(const MouseEvent& e) override;
166
171 void mouseDrag(const MouseEvent& e) override;
172
177 void mouseUp(const MouseEvent& e) override;
178
183 void mouseEnter(const MouseEvent& e) override;
184
189 void mouseExit(const MouseEvent& e) override;
190
196 void mouseWheelMove(const MouseEvent& e, const MouseWheelDetails& wheel) override;
197
202 void focusLost(FocusChangeType cause) override;
203
208 void addListener(Listener* listener);
209
214 void disconnectIndex(int index);
215
220 void select(bool select);
221
226 bool isSelected() const { return selected_; }
227
232 void setActiveModulation(bool active);
233
238 bool isActiveModulation() const { return active_modulation_; }
239
244
249 bool hasAnyModulation();
250
255 void setFontSize(float size) { font_size_ = size; }
256
263 Rectangle<int> getModulationAmountBounds(int index, int total);
264
269 Rectangle<int> getModulationAreaBounds();
270
275 Rectangle<int> getMeterBounds();
276
281 void setConnectRight(bool connect) { connect_right_ = connect; repaint(); }
282
287 void setDrawBorder(bool border) { draw_border_ = border; repaint(); }
288
293 void overrideText(String text) { text_override_ = std::move(text); repaint(); }
294
295private:
300 void disconnectModulation(vital::ModulationConnection* connection);
301
302 String text_override_;
303 SynthGuiInterface* parent_;
304 std::vector<Listener*> listeners_;
305 MouseState mouse_state_;
306 bool selected_;
307 bool connect_right_;
308 bool draw_border_;
309 bool active_modulation_;
310 OpenGlImageComponent drag_drop_;
311 Component drag_drop_area_;
312 float font_size_;
313
314 Colour drag_drop_color_;
315 bool show_drag_drop_;
316 float drag_drop_alpha_;
317
318 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ModulationButton)
319};
Interface for receiving notifications about modulation events from the ModulationButton.
Definition modulation_button.h:60
virtual void modulationConnectionChanged()
Called when a modulation connection is changed (e.g., added or removed).
Definition modulation_button.h:67
virtual void endModulationMap()
Called when the user finishes dragging out modulation connections.
Definition modulation_button.h:111
virtual void modulationDragged(const MouseEvent &e)
Called while modulation is being dragged out (during mouse drag).
Definition modulation_button.h:99
virtual void modulationClicked(ModulationButton *source)
Called when the modulation button is clicked (mouse up) without dragging out.
Definition modulation_button.h:117
virtual void modulationDisconnected(vital::ModulationConnection *connection, bool last)
Called when a modulation connection is disconnected.
Definition modulation_button.h:74
virtual void modulationLostFocus(ModulationButton *source)
Called when the modulation button loses keyboard focus.
Definition modulation_button.h:86
virtual void modulationWheelMoved(const MouseEvent &e, const MouseWheelDetails &wheel)
Called when the mouse wheel moves while interacting with the modulation button.
Definition modulation_button.h:106
virtual void startModulationMap(ModulationButton *source, const MouseEvent &e)
Called when the user begins dragging out to map the modulation (dragging out of the button).
Definition modulation_button.h:93
virtual void modulationSelected(ModulationButton *source)
Called when this modulation button is selected.
Definition modulation_button.h:80
virtual void modulationCleared()
Called when all modulations associated with this button have been cleared.
Definition modulation_button.h:122
virtual ~Listener()=default
A component representing a modulation source or connection button.
Definition modulation_button.h:21
ModulationButton(String name)
Constructs a ModulationButton.
Definition modulation_button.cpp:9
void select(bool select)
Selects or deselects this modulation source.
Definition modulation_button.cpp:298
static constexpr int kMaxModulationKnobs
Maximum number of modulation knobs displayed.
Definition modulation_button.h:30
void mouseDrag(const MouseEvent &e) override
Handles mouse drag events to start modulation mapping or continue dragging.
Definition modulation_button.cpp:221
static constexpr float kMeterAreaRatio
Ratio of the meter area to the total width.
Definition modulation_button.h:32
static constexpr int kModulationKnobRows
Number of modulation knob rows.
Definition modulation_button.h:28
void setForceEnableModulationSource()
Forces the enable state of this modulation source in the parent synthesizer interface.
Definition modulation_button.cpp:308
void disconnectIndex(int index)
Disconnects a modulation connection at a given index in the popup menu.
Definition modulation_button.cpp:281
void mouseWheelMove(const MouseEvent &e, const MouseWheelDetails &wheel) override
Handles mouse wheel events to adjust modulation parameters.
Definition modulation_button.cpp:267
void resized() override
Called when the component is resized. Repositions internal sub-components.
Definition modulation_button.cpp:145
void setActiveModulation(bool active)
Sets whether this modulation source is actively modulating something.
Definition modulation_button.cpp:303
Rectangle< int > getMeterBounds()
Gets the bounding area used for a modulation meter.
Definition modulation_button.cpp:51
void mouseUp(const MouseEvent &e) override
Handles mouse up events to finalize selection or modulation mappings.
Definition modulation_button.cpp:240
virtual void render(OpenGlWrapper &open_gl, bool animate) override
Renders the drag-drop shape overlay using OpenGL.
Definition modulation_button.cpp:161
void setConnectRight(bool connect)
Sets whether the modulation button should connect to the right edge.
Definition modulation_button.h:281
void mouseExit(const MouseEvent &e) override
Handles mouse exit events to hide the drag-drop overlay.
Definition modulation_button.cpp:262
void addListener(Listener *listener)
Adds a Listener to receive events from this ModulationButton.
Definition modulation_button.cpp:277
static constexpr int kModulationKnobColumns
Number of modulation knob columns.
Definition modulation_button.h:26
void mouseEnter(const MouseEvent &e) override
Handles mouse enter events to show the drag-drop overlay.
Definition modulation_button.cpp:254
static constexpr float kFontAreaHeightRatio
Ratio of the component's width used to display the text (font area).
Definition modulation_button.h:24
void mouseDown(const MouseEvent &e) override
Handles mouse down events to select or show disconnect menus.
Definition modulation_button.cpp:186
Rectangle< int > getModulationAmountBounds(int index, int total)
Gets the bounds for a modulation amount knob at a given index.
Definition modulation_button.cpp:37
bool isActiveModulation() const
Checks if the modulation source is active.
Definition modulation_button.h:238
void setDrawBorder(bool border)
Sets whether a border should be drawn around the button.
Definition modulation_button.h:287
void paintBackground(Graphics &g) override
Paints the background of the button, including meter areas and text.
Definition modulation_button.cpp:85
bool isSelected() const
Checks if the modulation button is currently selected.
Definition modulation_button.h:226
bool hasAnyModulation()
Checks if this modulation source is currently connected to any parameters.
Definition modulation_button.cpp:31
void setFontSize(float size)
Sets the font size for the modulation source text.
Definition modulation_button.h:255
MouseState
States representing the current mouse interaction state.
Definition modulation_button.h:48
@ kNone
Definition modulation_button.h:49
@ kMouseDown
Definition modulation_button.h:51
@ kHover
Definition modulation_button.h:50
@ kMouseDragging
Definition modulation_button.h:52
@ kDraggingOut
Definition modulation_button.h:53
MenuId
Identifiers for menu actions on the ModulationButton.
Definition modulation_button.h:38
@ kCancel
Definition modulation_button.h:39
@ kDisconnect
Definition modulation_button.h:40
@ kModulationList
Definition modulation_button.h:41
void focusLost(FocusChangeType cause) override
Called when the component loses keyboard focus.
Definition modulation_button.cpp:272
Rectangle< int > getModulationAreaBounds()
Gets the bounding area used for modulation knobs.
Definition modulation_button.cpp:60
virtual ~ModulationButton()
Destructor.
Definition modulation_button.cpp:26
void overrideText(String text)
Overrides the displayed text on the modulation button.
Definition modulation_button.h:293
void parentHierarchyChanged() override
Called when the component's parent hierarchy changes.
Definition modulation_button.cpp:138
A component that uses OpenGL to render a cached image of a JUCE component or custom drawing.
Definition open_gl_image_component.h:18
A component that draws a shape into an OpenGlImageComponent.
Definition open_gl_image_component.h:417
An interface class linking the Vital synthesizer backend (SynthBase) with a GUI.
Definition synth_gui_interface.h:56
Contains classes and functions used within the Vital synthesizer framework.
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174
A structure representing a single modulation connection between a modulation source and a destination...
Definition synth_types.h:30