LMMS
Loading...
Searching...
No Matches
juce_GenericAudioProcessorEditor.cpp
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
31 private Timer
32{
33public:
35 : processor (proc), parameter (param), isLegacyParam (LegacyAudioParameter::isLegacy (&param))
36 {
37 if (isLegacyParam)
38 processor.addListener (this);
39 else
40 parameter.addListener (this);
41
42 startTimer (100);
43 }
44
46 {
47 if (isLegacyParam)
48 processor.removeListener (this);
49 else
50 parameter.removeListener (this);
51 }
52
57
58 virtual void handleNewParameterValue() = 0;
59
60private:
61 //==============================================================================
62 void parameterValueChanged (int, float) override
63 {
65 }
66
67 void parameterGestureChanged (int, bool) override {}
68
69 //==============================================================================
70 void audioProcessorParameterChanged (AudioProcessor*, int index, float) override
71 {
72 if (index == parameter.getParameterIndex())
74 }
75
77
78 //==============================================================================
79 void timerCallback() override
80 {
81 if (parameterValueHasChanged.compareAndSetBool (0, 1))
82 {
84 startTimerHz (50);
85 }
86 else
87 {
88 startTimer (jmin (250, getTimerInterval() + 10));
89 }
90 }
91
95 const bool isLegacyParam;
96
98};
99
101 public ParameterListener
102{
103public:
105};
106
107//==============================================================================
109{
110public:
112 : ParameterComponent (proc, param)
113 {
114 // Set the initial value.
116
117 button.onClick = [this] { buttonClicked(); };
118
120 }
121
122 void paint (Graphics&) override {}
123
124 void resized() override
125 {
126 auto area = getLocalBounds();
127 area.removeFromLeft (8);
128 button.setBounds (area.reduced (0, 10));
129 }
130
132 {
133 button.setToggleState (isParameterOn(), dontSendNotification);
134 }
135
136private:
138 {
139 if (isParameterOn() != button.getToggleState())
140 {
141 getParameter().beginChangeGesture();
142 getParameter().setValueNotifyingHost (button.getToggleState() ? 1.0f : 0.0f);
143 getParameter().endChangeGesture();
144 }
145 }
146
147 bool isParameterOn() const { return getParameter().getValue() >= 0.5f; }
148
150
152};
153
154//==============================================================================
156{
157public:
159 : ParameterComponent (proc, param)
160 {
161 for (auto& button : buttons)
162 {
163 button.setRadioGroupId (293847);
164 button.setClickingTogglesState (true);
165 }
166
167 buttons[0].setButtonText (getParameter().getText (0.0f, 16));
168 buttons[1].setButtonText (getParameter().getText (1.0f, 16));
169
170 buttons[0].setConnectedEdges (Button::ConnectedOnRight);
171 buttons[1].setConnectedEdges (Button::ConnectedOnLeft);
172
173 // Set the initial value.
174 buttons[0].setToggleState (true, dontSendNotification);
176
177 buttons[1].onStateChange = [this] { rightButtonChanged(); };
178
179 for (auto& button : buttons)
181 }
182
183 void paint (Graphics&) override {}
184
185 void resized() override
186 {
187 auto area = getLocalBounds().reduced (0, 8);
188 area.removeFromLeft (8);
189
190 for (auto& button : buttons)
191 button.setBounds (area.removeFromLeft (80));
192 }
193
195 {
196 bool newState = isParameterOn();
197
198 if (buttons[1].getToggleState() != newState)
199 {
200 buttons[1].setToggleState (newState, dontSendNotification);
201 buttons[0].setToggleState (! newState, dontSendNotification);
202 }
203 }
204
205private:
207 {
208 auto buttonState = buttons[1].getToggleState();
209
210 if (isParameterOn() != buttonState)
211 {
212 getParameter().beginChangeGesture();
213
214 if (getParameter().getAllValueStrings().isEmpty())
215 {
216 getParameter().setValueNotifyingHost (buttonState ? 1.0f : 0.0f);
217 }
218 else
219 {
220 // When a parameter provides a list of strings we must set its
221 // value using those strings, rather than a float, because VSTs can
222 // have uneven spacing between the different allowed values and we
223 // want the snapping behaviour to be consistent with what we do with
224 // a combo box.
225 auto selectedText = buttons[buttonState ? 1 : 0].getButtonText();
226 getParameter().setValueNotifyingHost (getParameter().getValueForText (selectedText));
227 }
228
229 getParameter().endChangeGesture();
230 }
231 }
232
233 bool isParameterOn() const
234 {
235 if (getParameter().getAllValueStrings().isEmpty())
236 return getParameter().getValue() > 0.5f;
237
238 auto index = getParameter().getAllValueStrings()
239 .indexOf (getParameter().getCurrentValueAsText());
240
241 if (index < 0)
242 {
243 // The parameter is producing some unexpected text, so we'll do
244 // some linear interpolation.
245 index = roundToInt (getParameter().getValue());
246 }
247
248 return index == 1;
249 }
250
252
254};
255
256//==============================================================================
258{
259public:
261 : ParameterComponent (proc, param),
262 parameterValues (getParameter().getAllValueStrings())
263 {
264 box.addItemList (parameterValues, 1);
265
266 // Set the initial value.
268
269 box.onChange = [this] { boxChanged(); };
271 }
272
273 void paint (Graphics&) override {}
274
275 void resized() override
276 {
277 auto area = getLocalBounds();
278 area.removeFromLeft (8);
279 box.setBounds (area.reduced (0, 10));
280 }
281
282private:
284 {
285 auto index = parameterValues.indexOf (getParameter().getCurrentValueAsText());
286
287 if (index < 0)
288 {
289 // The parameter is producing some unexpected text, so we'll do
290 // some linear interpolation.
291 index = roundToInt (getParameter().getValue() * (float) (parameterValues.size() - 1));
292 }
293
294 box.setSelectedItemIndex (index);
295 }
296
298 {
299 if (getParameter().getCurrentValueAsText() != box.getText())
300 {
301 getParameter().beginChangeGesture();
302
303 // When a parameter provides a list of strings we must set its
304 // value using those strings, rather than a float, because VSTs can
305 // have uneven spacing between the different allowed values.
306 getParameter().setValueNotifyingHost (getParameter().getValueForText (box.getText()));
307
308 getParameter().endChangeGesture();
309 }
310 }
311
314
316};
317
318//==============================================================================
320{
321public:
323 : ParameterComponent (proc, param)
324 {
326 slider.setRange (0.0, 1.0, 1.0 / (getParameter().getNumSteps() - 1.0));
327 else
328 slider.setRange (0.0, 1.0);
329
330 slider.setDoubleClickReturnValue (true, param.getDefaultValue());
331
332 slider.setScrollWheelEnabled (false);
334
336 valueLabel.setBorderSize ({ 1, 1, 1, 1 });
337 valueLabel.setJustificationType (Justification::centred);
339
340 // Set the initial value.
342
343 slider.onValueChange = [this] { sliderValueChanged(); };
344 slider.onDragStart = [this] { sliderStartedDragging(); };
345 slider.onDragEnd = [this] { sliderStoppedDragging(); };
346 }
347
348 void paint (Graphics&) override {}
349
350 void resized() override
351 {
352 auto area = getLocalBounds().reduced (0, 10);
353
354 valueLabel.setBounds (area.removeFromRight (80));
355
356 area.removeFromLeft (6);
357 slider.setBounds (area);
358 }
359
361 {
362 if (! isDragging)
363 {
364 slider.setValue (getParameter().getValue(), dontSendNotification);
366 }
367 }
368
369private:
371 {
372 valueLabel.setText (getParameter().getCurrentValueAsText(), dontSendNotification);
373 }
374
376 {
377 auto newVal = (float) slider.getValue();
378
379 if (getParameter().getValue() != newVal)
380 {
381 if (! isDragging)
382 getParameter().beginChangeGesture();
383
384 getParameter().setValueNotifyingHost ((float) slider.getValue());
386
387 if (! isDragging)
388 getParameter().endChangeGesture();
389 }
390 }
391
393 {
394 isDragging = true;
395 getParameter().beginChangeGesture();
396 }
397
399 {
400 isDragging = false;
401 getParameter().endChangeGesture();
402 }
403
406 bool isDragging = false;
407
409};
410
411//==============================================================================
414 private AsyncUpdater
415{
416public:
418 : editor (editorIn), parameter (param)
419 {
420 editor.processor.addListener (this);
421
422 parameterName.setText (parameter.getName (128), dontSendNotification);
423 parameterName.setJustificationType (Justification::centredRight);
424 parameterName.setInterceptsMouseClicks (false, false);
426
427 parameterLabel.setText (parameter.getLabel(), dontSendNotification);
428 parameterLabel.setInterceptsMouseClicks (false, false);
430
432
433 setSize (400, 40);
434 }
435
437 {
439 editor.processor.removeListener (this);
440 }
441
442 void resized() override
443 {
444 auto area = getLocalBounds();
445
446 parameterName.setBounds (area.removeFromLeft (100));
447 parameterLabel.setBounds (area.removeFromRight (50));
448 parameterComp->setBounds (area);
449 }
450
451 void mouseDown (const MouseEvent& e) override
452 {
453 if (e.mods.isRightButtonDown())
454 if (auto* context = editor.getHostContext())
455 if (auto menu = context->getContextMenuForParameter (&parameter))
456 menu->getEquivalentPopupMenu().showMenuAsync (PopupMenu::Options().withTargetComponent (this)
457 .withMousePosition());
458 }
459
460private:
464 std::unique_ptr<ParameterComponent> parameterComp;
465
466 std::unique_ptr<ParameterComponent> createParameterComp (AudioProcessor& processor) const
467 {
468 // The AU, AUv3 and VST (only via a .vstxml file) SDKs support
469 // marking a parameter as boolean. If you want consistency across
470 // all formats then it might be best to use a
471 // SwitchParameterComponent instead.
472 if (parameter.isBoolean())
473 return std::make_unique<BooleanParameterComponent> (processor, parameter);
474
475 // Most hosts display any parameter with just two steps as a switch.
476 if (parameter.getNumSteps() == 2)
477 return std::make_unique<SwitchParameterComponent> (processor, parameter);
478
479 // If we have a list of strings to represent the different states a
480 // parameter can be in then we should present a dropdown allowing a
481 // user to pick one of them.
482 if (! parameter.getAllValueStrings().isEmpty()
483 && std::abs (parameter.getNumSteps() - parameter.getAllValueStrings().size()) <= 1)
484 return std::make_unique<ChoiceParameterComponent> (processor, parameter);
485
486 // Everything else can be represented as a slider.
487 return std::make_unique<SliderParameterComponent> (processor, parameter);
488 }
489
490 void audioProcessorParameterChanged (AudioProcessor*, int, float) override {}
491
492 void audioProcessorChanged (AudioProcessor*, const ChangeDetails& details) override
493 {
494 if (! details.parameterInfoChanged)
495 return;
496
497 if (MessageManager::getInstance()->isThisTheMessageThread())
499 else
501 }
502
503 void handleAsyncUpdate() override
504 {
505 parameterName .setText (parameter.getName (128), dontSendNotification);
506 parameterLabel.setText (parameter.getLabel(), dontSendNotification);
507
508 if (auto* p = parameterComp.get())
509 p->handleNewParameterValue();
510 }
511
513};
514
515//==============================================================================
517{
519 : editor (editorIn), param (paramIn) {}
520
521 bool mightContainSubItems() override { return false; }
522
523 std::unique_ptr<Component> createItemComponent() override
524 {
525 return std::make_unique<ParameterDisplayComponent> (editor, param);
526 }
527
528 int getItemHeight() const override { return 40; }
529
532};
533
535{
537 : name (group.getName())
538 {
539 for (auto* node : group)
540 {
541 if (auto* param = node->getParameter())
542 if (param->isAutomatable())
543 addSubItem (new ParamControlItem (editor, *param));
544
545 if (auto* inner = node->getGroup())
546 {
547 auto groupItem = std::make_unique<ParameterGroupItem> (editor, *inner);
548
549 if (groupItem->getNumSubItems() != 0)
550 addSubItem (groupItem.release());
551 }
552 }
553 }
554
555 bool mightContainSubItems() override { return getNumSubItems() > 0; }
556
557 std::unique_ptr<Component> createItemComponent() override
558 {
559 return std::make_unique<Label> (name, name);
560 }
561
563};
564
565//==============================================================================
567{
569 : legacyParameters (editor.processor, false),
570 groupItem (editor, legacyParameters.getGroup())
571 {
572 const auto numIndents = getNumIndents (groupItem);
573 const auto width = 400 + view.getIndentSize() * numIndents;
574
575 view.setSize (width, 400);
576 view.setDefaultOpenness (true);
577 view.setRootItemVisible (false);
578 view.setRootItem (&groupItem);
579 }
580
581 static int getNumIndents (const TreeViewItem& item)
582 {
583 int maxInner = 0;
584
585 for (auto i = 0; i < item.getNumSubItems(); ++i)
586 maxInner = jmax (maxInner, 1 + getNumIndents (*item.getSubItem (i)));
587
588 return maxInner;
589 }
590
594};
595
596//==============================================================================
598 : AudioProcessorEditor (p), pimpl (std::make_unique<Pimpl> (*this))
599{
600 auto* viewport = pimpl->view.getViewport();
601
602 setOpaque (true);
603 addAndMakeVisible (pimpl->view);
604
605 setResizable (true, false);
606 setSize (viewport->getViewedComponent()->getWidth() + viewport->getVerticalScrollBar().getWidth(),
607 jlimit (125, 400, viewport->getViewedComponent()->getHeight()));
608}
609
611
616
618{
619 pimpl->view.setBounds (getLocalBounds());
620}
621
622} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
void triggerAsyncUpdate()
Definition juce_AsyncUpdater.cpp:62
void cancelPendingUpdate() noexcept
Definition juce_AsyncUpdater.cpp:74
AsyncUpdater()
Definition juce_AsyncUpdater.cpp:44
Definition juce_AudioProcessorEditor.h:43
AudioProcessorEditor(AudioProcessor &) noexcept
Definition juce_AudioProcessorEditor.cpp:29
void setResizable(bool allowHostToResize, bool useBottomRightCornerResizer)
Definition juce_AudioProcessorEditor.cpp:63
AudioProcessor & processor
Definition juce_AudioProcessorEditor.h:58
Definition juce_AudioProcessor.h:46
static int getDefaultNumParameterSteps() noexcept
Definition juce_AudioProcessor.cpp:573
Definition juce_AudioProcessorListener.h:40
Definition juce_AudioProcessorParameter.h:294
Definition juce_AudioProcessorParameterGroup.h:42
Definition juce_AudioProcessorParameter.h:40
virtual float getDefaultValue() const =0
void buttonClicked()
Definition juce_GenericAudioProcessorEditor.cpp:137
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:124
ToggleButton button
Definition juce_GenericAudioProcessorEditor.cpp:149
void handleNewParameterValue() override
Definition juce_GenericAudioProcessorEditor.cpp:131
bool isParameterOn() const
Definition juce_GenericAudioProcessorEditor.cpp:147
BooleanParameterComponent(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:111
void paint(Graphics &) override
Definition juce_GenericAudioProcessorEditor.cpp:122
@ ConnectedOnLeft
Definition juce_Button.h:322
@ ConnectedOnRight
Definition juce_Button.h:323
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:275
const StringArray parameterValues
Definition juce_GenericAudioProcessorEditor.cpp:313
void handleNewParameterValue() override
Definition juce_GenericAudioProcessorEditor.cpp:283
void boxChanged()
Definition juce_GenericAudioProcessorEditor.cpp:297
ComboBox box
Definition juce_GenericAudioProcessorEditor.cpp:312
ChoiceParameterComponent(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:260
void paint(Graphics &) override
Definition juce_GenericAudioProcessorEditor.cpp:273
Definition juce_ComboBox.h:49
void addAndMakeVisible(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1554
void setOpaque(bool shouldBeOpaque)
Definition juce_Component.cpp:829
Component() noexcept
Definition juce_Component.cpp:517
void setSize(int newWidth, int newHeight)
Definition juce_Component.cpp:1262
Colour findColour(int colourID, bool inheritFromParent=false) const
Definition juce_Component.cpp:2219
LookAndFeel & getLookAndFeel() const noexcept
Definition juce_Component.cpp:2173
Rectangle< int > getLocalBounds() const noexcept
Definition juce_Component.cpp:2283
std::unique_ptr< Pimpl > pimpl
Definition juce_GenericAudioProcessorEditor.h:60
GenericAudioProcessorEditor(AudioProcessor &)
Definition juce_GenericAudioProcessorEditor.cpp:597
void paint(Graphics &) override
Definition juce_GenericAudioProcessorEditor.cpp:612
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:617
Definition juce_GraphicsContext.h:45
@ centredRight
Definition juce_Justification.h:148
@ centred
Definition juce_Justification.h:138
Definition juce_Label.h:41
@ outlineColourId
Definition juce_Label.h:108
Definition juce_LegacyAudioParameter.cpp:33
Definition juce_LegacyAudioParameter.cpp:121
static MessageManager * getInstance()
Definition juce_MessageManager.cpp:47
Definition juce_MouseEvent.h:39
Definition juce_GenericAudioProcessorEditor.cpp:102
ParameterListener(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:34
Definition juce_GenericAudioProcessorEditor.cpp:415
void handleAsyncUpdate() override
Definition juce_GenericAudioProcessorEditor.cpp:503
Label parameterName
Definition juce_GenericAudioProcessorEditor.cpp:463
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:442
~ParameterDisplayComponent() override
Definition juce_GenericAudioProcessorEditor.cpp:436
Label parameterLabel
Definition juce_GenericAudioProcessorEditor.cpp:463
AudioProcessorEditor & editor
Definition juce_GenericAudioProcessorEditor.cpp:461
std::unique_ptr< ParameterComponent > parameterComp
Definition juce_GenericAudioProcessorEditor.cpp:464
void audioProcessorChanged(AudioProcessor *, const ChangeDetails &details) override
Definition juce_GenericAudioProcessorEditor.cpp:492
void audioProcessorParameterChanged(AudioProcessor *, int, float) override
Definition juce_GenericAudioProcessorEditor.cpp:490
AudioProcessorParameter & parameter
Definition juce_GenericAudioProcessorEditor.cpp:462
std::unique_ptr< ParameterComponent > createParameterComp(AudioProcessor &processor) const
Definition juce_GenericAudioProcessorEditor.cpp:466
ParameterDisplayComponent(AudioProcessorEditor &editorIn, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:417
void mouseDown(const MouseEvent &e) override
Definition juce_GenericAudioProcessorEditor.cpp:451
~ParameterListener() override
Definition juce_GenericAudioProcessorEditor.cpp:45
AudioProcessorParameter & parameter
Definition juce_GenericAudioProcessorEditor.cpp:93
void audioProcessorParameterChanged(AudioProcessor *, int index, float) override
Definition juce_GenericAudioProcessorEditor.cpp:70
void timerCallback() override
Definition juce_GenericAudioProcessorEditor.cpp:79
void audioProcessorChanged(AudioProcessor *, const ChangeDetails &) override
Definition juce_GenericAudioProcessorEditor.cpp:76
AudioProcessorParameter & getParameter() const noexcept
Definition juce_GenericAudioProcessorEditor.cpp:53
void parameterValueChanged(int, float) override
Definition juce_GenericAudioProcessorEditor.cpp:62
Atomic< int > parameterValueHasChanged
Definition juce_GenericAudioProcessorEditor.cpp:94
AudioProcessor & processor
Definition juce_GenericAudioProcessorEditor.cpp:92
ParameterListener(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:34
const bool isLegacyParam
Definition juce_GenericAudioProcessorEditor.cpp:95
void parameterGestureChanged(int, bool) override
Definition juce_GenericAudioProcessorEditor.cpp:67
virtual void handleNewParameterValue()=0
Definition juce_PopupMenu.h:457
@ backgroundColourId
Definition juce_ResizableWindow.h:312
Definition juce_Slider.h:54
@ LinearHorizontal
Definition juce_Slider.h:63
@ textBoxOutlineColourId
Definition juce_Slider.h:876
@ NoTextBox
Definition juce_Slider.h:95
SliderParameterComponent(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:322
bool isDragging
Definition juce_GenericAudioProcessorEditor.cpp:406
void updateTextDisplay()
Definition juce_GenericAudioProcessorEditor.cpp:370
void sliderStoppedDragging()
Definition juce_GenericAudioProcessorEditor.cpp:398
void sliderValueChanged()
Definition juce_GenericAudioProcessorEditor.cpp:375
void handleNewParameterValue() override
Definition juce_GenericAudioProcessorEditor.cpp:360
Slider slider
Definition juce_GenericAudioProcessorEditor.cpp:404
void sliderStartedDragging()
Definition juce_GenericAudioProcessorEditor.cpp:392
void paint(Graphics &) override
Definition juce_GenericAudioProcessorEditor.cpp:348
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:350
Label valueLabel
Definition juce_GenericAudioProcessorEditor.cpp:405
Definition juce_StringArray.h:35
Definition juce_String.h:53
SwitchParameterComponent(AudioProcessor &proc, AudioProcessorParameter &param)
Definition juce_GenericAudioProcessorEditor.cpp:158
void handleNewParameterValue() override
Definition juce_GenericAudioProcessorEditor.cpp:194
TextButton buttons[2]
Definition juce_GenericAudioProcessorEditor.cpp:251
void paint(Graphics &) override
Definition juce_GenericAudioProcessorEditor.cpp:183
void resized() override
Definition juce_GenericAudioProcessorEditor.cpp:185
void rightButtonChanged()
Definition juce_GenericAudioProcessorEditor.cpp:206
bool isParameterOn() const
Definition juce_GenericAudioProcessorEditor.cpp:233
Definition juce_TextButton.h:39
int getTimerInterval() const noexcept
Definition juce_Timer.h:116
Timer() noexcept
Definition juce_Timer.cpp:316
void startTimerHz(int timerFrequencyHz) noexcept
Definition juce_Timer.cpp:349
void startTimer(int intervalInMilliseconds) noexcept
Definition juce_Timer.cpp:332
Definition juce_ToggleButton.h:41
Definition juce_TreeView.h:657
Definition juce_TreeView.h:48
int getNumSubItems() const noexcept
Definition juce_TreeView.cpp:1493
TreeViewItem()
Definition juce_TreeView.cpp:1472
void addSubItem(TreeViewItem *newItem, int insertPosition=-1)
Definition juce_TreeView.cpp:1525
TreeViewItem * getSubItem(int index) const noexcept
Definition juce_TreeView.cpp:1498
* e
Definition inflate.c:1404
int g
Definition inflate.c:1573
register unsigned i
Definition inflate.c:1575
static int width
Definition pugl.h:1593
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition carla_juce.cpp:31
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
constexpr Type jmax(Type a, Type b)
Definition juce_MathsFunctions.h:94
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
@ dontSendNotification
Definition juce_NotificationType.h:33
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
@ button
Definition juce_AccessibilityRole.h:38
@ group
Definition juce_AccessibilityRole.h:61
Definition juce_Uuid.h:141
#define false
Definition ordinals.h:83
Definition juce_Atomic.h:42
Definition juce_AudioProcessorListener.h:63
bool parameterInfoChanged
Definition juce_AudioProcessorListener.h:67
Definition juce_GenericAudioProcessorEditor.cpp:567
ParameterGroupItem groupItem
Definition juce_GenericAudioProcessorEditor.cpp:592
Pimpl(AudioProcessorEditor &editor)
Definition juce_GenericAudioProcessorEditor.cpp:568
LegacyAudioParametersWrapper legacyParameters
Definition juce_GenericAudioProcessorEditor.cpp:591
TreeView view
Definition juce_GenericAudioProcessorEditor.cpp:593
static int getNumIndents(const TreeViewItem &item)
Definition juce_GenericAudioProcessorEditor.cpp:581
Definition juce_GenericAudioProcessorEditor.cpp:517
AudioProcessorParameter & param
Definition juce_GenericAudioProcessorEditor.cpp:531
AudioProcessorEditor & editor
Definition juce_GenericAudioProcessorEditor.cpp:530
bool mightContainSubItems() override
Definition juce_GenericAudioProcessorEditor.cpp:521
std::unique_ptr< Component > createItemComponent() override
Definition juce_GenericAudioProcessorEditor.cpp:523
ParamControlItem(AudioProcessorEditor &editorIn, AudioProcessorParameter &paramIn)
Definition juce_GenericAudioProcessorEditor.cpp:518
int getItemHeight() const override
Definition juce_GenericAudioProcessorEditor.cpp:528
Definition juce_GenericAudioProcessorEditor.cpp:535
std::unique_ptr< Component > createItemComponent() override
Definition juce_GenericAudioProcessorEditor.cpp:557
String name
Definition juce_GenericAudioProcessorEditor.cpp:562
bool mightContainSubItems() override
Definition juce_GenericAudioProcessorEditor.cpp:555
ParameterGroupItem(AudioProcessorEditor &editor, const AudioProcessorParameterGroup &group)
Definition juce_GenericAudioProcessorEditor.cpp:536
uch * p
Definition crypt.c:594
#define const
Definition zconf.h:137