LMMS
Loading...
Searching...
No Matches
juce_Button.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 public Value::Listener,
32 public KeyListener
33{
35
36 void timerCallback() override
37 {
38 button.repeatTimerCallback();
39 }
40
41 bool keyStateChanged (bool, Component*) override
42 {
43 return button.keyStateChangedCallback();
44 }
45
46 void valueChanged (Value& value) override
47 {
48 if (value.refersToSameSourceAs (button.isOn))
49 button.setToggleState (button.isOn.getValue(), dontSendNotification, sendNotification);
50 }
51
52 bool keyPressed (const KeyPress&, Component*) override
53 {
54 // returning true will avoid forwarding events for keys that we're using as shortcuts
55 return button.isShortcutPressed();
56 }
57
59 {
60 if (info.commandID == button.commandID
62 button.flashButtonState();
63 }
64
66 {
67 button.applicationCommandListChangeCallback();
68 }
69
71
73};
74
75//==============================================================================
77{
78 callbackHelper.reset (new CallbackHelper (*this));
79
81 isOn.addListener (callbackHelper.get());
82}
83
85{
87
88 if (commandManagerToUse != nullptr)
89 commandManagerToUse->removeListener (callbackHelper.get());
90
91 isOn.removeListener (callbackHelper.get());
92 callbackHelper.reset();
93}
94
95//==============================================================================
96void Button::setButtonText (const String& newText)
97{
98 if (text != newText)
99 {
100 text = newText;
101 repaint();
102 }
103}
104
105void Button::setTooltip (const String& newTooltip)
106{
108 generateTooltip = false;
109}
110
112{
113 if (generateTooltip && commandManagerToUse != nullptr)
114 {
115 auto tt = info.description.isNotEmpty() ? info.description
116 : info.shortName;
117
118 for (auto& kp : commandManagerToUse->getKeyMappings()->getKeyPressesAssignedToCommand (commandID))
119 {
120 auto key = kp.getTextDescription();
121
122 tt << " [";
123
124 if (key.length() == 1)
125 tt << TRANS("shortcut") << ": '" << key << "']";
126 else
127 tt << key << ']';
128 }
129
131 }
132}
133
134void Button::setConnectedEdges (int newFlags)
135{
136 if (connectedEdgeFlags != newFlags)
137 {
138 connectedEdgeFlags = newFlags;
139 repaint();
140 }
141}
142
143//==============================================================================
144void Button::checkToggleableState (bool wasToggleable)
145{
146 if (isToggleable() != wasToggleable)
148}
149
150void Button::setToggleable (bool isNowToggleable)
151{
152 const auto wasToggleable = isToggleable();
153
154 canBeToggled = isNowToggleable;
155 checkToggleableState (wasToggleable);
156}
157
158void Button::setToggleState (bool shouldBeOn, NotificationType notification)
159{
160 setToggleState (shouldBeOn, notification, notification);
161}
162
163void Button::setToggleState (bool shouldBeOn, NotificationType clickNotification, NotificationType stateNotification)
164{
165 if (shouldBeOn != lastToggleState)
166 {
167 WeakReference<Component> deletionWatcher (this);
168
169 if (shouldBeOn)
170 {
171 turnOffOtherButtonsInGroup (clickNotification, stateNotification);
172
173 if (deletionWatcher == nullptr)
174 return;
175 }
176
177 // This test is done so that if the value is void rather than explicitly set to
178 // false, the value won't be changed unless the required value is true.
179 if (getToggleState() != shouldBeOn)
180 {
181 isOn = shouldBeOn;
182
183 if (deletionWatcher == nullptr)
184 return;
185 }
186
187 lastToggleState = shouldBeOn;
188 repaint();
189
190 if (clickNotification != dontSendNotification)
191 {
192 // async callbacks aren't possible here
193 jassert (clickNotification != sendNotificationAsync);
194
196
197 if (deletionWatcher == nullptr)
198 return;
199 }
200
201 if (stateNotification != dontSendNotification)
203 else
205
206 if (auto* handler = getAccessibilityHandler())
207 handler->notifyAccessibilityEvent (AccessibilityEvent::valueChanged);
208 }
209}
210
211void Button::setToggleState (bool shouldBeOn, bool sendChange)
212{
213 setToggleState (shouldBeOn, sendChange ? sendNotification : dontSendNotification);
214}
215
216void Button::setClickingTogglesState (bool shouldToggle) noexcept
217{
218 const auto wasToggleable = isToggleable();
219
220 clickTogglesState = shouldToggle;
221 checkToggleableState (wasToggleable);
222
223 // if you've got clickTogglesState turned on, you shouldn't also connect the button
224 // up to be a command invoker. Instead, your command handler must flip the state of whatever
225 // it is that this button represents, and the button will update its state to reflect this
226 // in the applicationCommandListChanged() method.
228}
229
230void Button::setRadioGroupId (int newGroupId, NotificationType notification)
231{
232 if (radioGroupId != newGroupId)
233 {
234 radioGroupId = newGroupId;
235
236 if (lastToggleState)
237 turnOffOtherButtonsInGroup (notification, notification);
238
239 setToggleable (true);
241 }
242}
243
245{
246 if (auto* p = getParentComponent())
247 {
248 if (radioGroupId != 0)
249 {
250 WeakReference<Component> deletionWatcher (this);
251
252 for (auto* c : p->getChildren())
253 {
254 if (c != this)
255 {
256 if (auto b = dynamic_cast<Button*> (c))
257 {
258 if (b->getRadioGroupId() == radioGroupId)
259 {
260 b->setToggleState (false, clickNotification, stateNotification);
261
262 if (deletionWatcher == nullptr)
263 return;
264 }
265 }
266 }
267 }
268 }
269 }
270}
271
272//==============================================================================
274{
275 updateState();
276 repaint();
277}
278
283
285{
286 ButtonState newState = buttonNormal;
287
289 {
290 if ((down && (over || (triggerOnMouseDown && buttonState == buttonDown))) || isKeyDown)
291 newState = buttonDown;
292 else if (over)
293 newState = buttonOver;
294 }
295
296 setState (newState);
297 return newState;
298}
299
301{
302 if (buttonState != newState)
303 {
304 buttonState = newState;
305 repaint();
306
307 if (buttonState == buttonDown)
308 {
310 lastRepeatTime = 0;
311 }
312
314 }
315}
316
319
321
327
328void Button::setTriggeredOnMouseDown (bool isTriggeredOnMouseDown) noexcept
329{
330 triggerOnMouseDown = isTriggeredOnMouseDown;
331}
332
337
338//==============================================================================
340{
341}
342
344{
345 clicked();
346}
347
348enum { clickMessageId = 0x2f3f4f99 };
349
354
356{
358 {
359 const bool shouldBeOn = (radioGroupId != 0 || ! lastToggleState);
360
361 if (shouldBeOn != getToggleState())
362 {
363 setToggleState (shouldBeOn, sendNotification);
364 return;
365 }
366 }
367
368 sendClickMessage (modifiers);
369}
370
372{
373 if (isEnabled())
374 {
375 needsToRelease = true;
377 callbackHelper->startTimer (100);
378 }
379}
380
382{
383 if (commandId == clickMessageId)
384 {
385 if (isEnabled())
386 {
389 }
390 }
391 else
392 {
394 }
395}
396
397//==============================================================================
400
402{
403 Component::BailOutChecker checker (this);
404
405 if (commandManagerToUse != nullptr && commandID != 0)
406 {
409 info.originatingComponent = this;
410
411 commandManagerToUse->invoke (info, true);
412 }
413
414 clicked (modifiers);
415
416 if (checker.shouldBailOut())
417 return;
418
419 buttonListeners.callChecked (checker, [this] (Listener& l) { l.buttonClicked (this); });
420
421 if (checker.shouldBailOut())
422 return;
423
424 if (onClick != nullptr)
425 onClick();
426}
427
429{
430 Component::BailOutChecker checker (this);
431
433
434 if (checker.shouldBailOut())
435 return;
436
437 buttonListeners.callChecked (checker, [this] (Listener& l) { l.buttonStateChanged (this); });
438
439 if (checker.shouldBailOut())
440 return;
441
442 if (onStateChange != nullptr)
444}
445
446//==============================================================================
448{
449 if (needsToRelease && isEnabled())
450 {
451 needsToRelease = false;
452 needsRepainting = true;
453 }
454
455 paintButton (g, isOver(), isDown());
457}
458
459//==============================================================================
460void Button::mouseEnter (const MouseEvent&) { updateState (true, false); }
461void Button::mouseExit (const MouseEvent&) { updateState (false, false); }
462
464{
465 updateState (true, true);
466
467 if (isDown())
468 {
469 if (autoRepeatDelay >= 0)
470 callbackHelper->startTimer (autoRepeatDelay);
471
474 }
475}
476
478{
479 const auto wasDown = isDown();
480 const auto wasOver = isOver();
482
483 if (wasDown && wasOver && ! triggerOnMouseDown)
484 {
487
488 WeakReference<Component> deletionWatcher (this);
489
491
492 if (deletionWatcher != nullptr)
494 }
495}
496
498{
499 auto oldState = buttonState;
501
502 if (autoRepeatDelay >= 0 && buttonState != oldState && isDown())
503 callbackHelper->startTimer (autoRepeatSpeed);
504}
505
507{
508 if (e.source.isTouch() || e.source.isPen())
509 return getLocalBounds().toFloat().contains (e.position);
510
511 return isMouseOver();
512}
513
519
525
527{
528 needsToRelease = false;
529 updateState();
530}
531
533{
534 auto* newKeySource = shortcuts.isEmpty() ? nullptr : getTopLevelComponent();
535
536 if (newKeySource != keySource.get())
537 {
538 if (keySource != nullptr)
539 keySource->removeKeyListener (callbackHelper.get());
540
541 keySource = newKeySource;
542
543 if (keySource != nullptr)
544 keySource->addKeyListener (callbackHelper.get());
545 }
546}
547
548//==============================================================================
550 CommandID newCommandID, bool generateTip)
551{
552 commandID = newCommandID;
553 generateTooltip = generateTip;
554
555 if (commandManagerToUse != newCommandManager)
556 {
557 if (commandManagerToUse != nullptr)
558 commandManagerToUse->removeListener (callbackHelper.get());
559
560 commandManagerToUse = newCommandManager;
561
562 if (commandManagerToUse != nullptr)
563 commandManagerToUse->addListener (callbackHelper.get());
564
565 // if you've got clickTogglesState turned on, you shouldn't also connect the button
566 // up to be a command invoker. Instead, your command handler must flip the state of whatever
567 // it is that this button represents, and the button will update its state to reflect this
568 // in the applicationCommandListChanged() method.
570 }
571
572 if (commandManagerToUse != nullptr)
574 else
575 setEnabled (true);
576}
577
579{
580 if (commandManagerToUse != nullptr)
581 {
583
584 if (commandManagerToUse->getTargetForCommand (commandID, info) != nullptr)
585 {
589 }
590 else
591 {
592 setEnabled (false);
593 }
594 }
595}
596
597//==============================================================================
599{
600 if (key.isValid())
601 {
602 jassert (! isRegisteredForShortcut (key)); // already registered!
603
604 shortcuts.add (key);
606 }
607}
608
610{
611 shortcuts.clear();
613}
614
616{
618 for (auto& s : shortcuts)
619 if (s.isCurrentlyDown())
620 return true;
621
622 return false;
623}
624
626{
627 for (auto& s : shortcuts)
628 if (key == s)
629 return true;
630
631 return false;
632}
633
635{
636 if (! isEnabled())
637 return false;
638
639 const bool wasDown = isKeyDown;
641
642 if (autoRepeatDelay >= 0 && (isKeyDown && ! wasDown))
643 callbackHelper->startTimer (autoRepeatDelay);
644
645 updateState();
646
647 if (isEnabled() && wasDown && ! isKeyDown)
648 {
650
651 // (return immediately - this button may now have been deleted)
652 return true;
653 }
654
655 return wasDown || isKeyDown;
656}
657
659{
660 if (isEnabled() && key.isKeyCode (KeyPress::returnKey))
661 {
662 triggerClick();
663 return true;
664 }
665
666 return false;
667}
668
669//==============================================================================
670void Button::setRepeatSpeed (int initialDelayMillisecs,
671 int repeatMillisecs,
672 int minimumDelayInMillisecs) noexcept
673{
674 autoRepeatDelay = initialDelayMillisecs;
675 autoRepeatSpeed = repeatMillisecs;
676 autoRepeatMinimumDelay = jmin (autoRepeatSpeed, minimumDelayInMillisecs);
677}
678
680{
681 if (needsRepainting)
682 {
683 callbackHelper->stopTimer();
684 updateState();
685 needsRepainting = false;
686 }
687 else if (autoRepeatSpeed > 0 && (isKeyDown || (updateState() == buttonDown)))
688 {
689 auto repeatSpeed = autoRepeatSpeed;
690
691 if (autoRepeatMinimumDelay >= 0)
692 {
693 auto timeHeldDown = jmin (1.0, getMillisecondsSinceButtonDown() / 4000.0);
694 timeHeldDown *= timeHeldDown;
695
696 repeatSpeed = repeatSpeed + (int) (timeHeldDown * (autoRepeatMinimumDelay - repeatSpeed));
697 }
698
699 repeatSpeed = jmax (1, repeatSpeed);
700
701 auto now = Time::getMillisecondCounter();
702
703 // if we've been blocked from repeating often enough, speed up the repeat timer to compensate..
704 if (lastRepeatTime != 0 && (int) (now - lastRepeatTime) > repeatSpeed * 2)
705 repeatSpeed = jmax (1, repeatSpeed / 2);
706
707 lastRepeatTime = now;
708 callbackHelper->startTimer (repeatSpeed);
709
711 }
712 else if (! needsToRelease)
713 {
714 callbackHelper->stopTimer();
715 }
716}
717
718//==============================================================================
720{
721public:
722 explicit ButtonAccessibilityHandler (Button& buttonToWrap, AccessibilityRole roleIn)
723 : AccessibilityHandler (buttonToWrap,
724 isRadioButton (buttonToWrap) ? AccessibilityRole::radioButton : roleIn,
725 getAccessibilityActions (buttonToWrap),
726 getAccessibilityInterfaces (buttonToWrap)),
727 button (buttonToWrap)
728 {
729 }
730
732 {
734
735 if (button.isToggleable())
736 {
737 state = state.withCheckable();
738
739 if (button.getToggleState())
740 state = state.withChecked();
741 }
742
743 return state;
744 }
745
746 String getTitle() const override
747 {
749
750 if (title.isEmpty())
751 return button.getButtonText();
752
753 return title;
754 }
755
756 String getHelp() const override { return button.getTooltip(); }
757
758private:
760 {
761 public:
762 explicit ButtonValueInterface (Button& buttonToWrap)
763 : button (buttonToWrap)
764 {
765 }
766
767 bool isReadOnly() const override { return true; }
768 String getCurrentValueAsString() const override { return button.getToggleState() ? "On" : "Off"; }
769 void setValueAsString (const String&) override {}
770
771 private:
773
774 //==============================================================================
776 };
777
778 static bool isRadioButton (const Button& button) noexcept
779 {
780 return button.getRadioGroupId() != 0;
781 }
782
784 {
786 [&button] { button.triggerClick(); });
787
788 if (button.isToggleable())
790 [&button] { button.setToggleState (! button.getToggleState(), sendNotification); });
791
792 return actions;
793 }
794
796 {
797 if (button.isToggleable())
798 return { std::make_unique<ButtonValueInterface> (button) };
799
800 return {};
801 }
802
804
805 //==============================================================================
807};
808
809std::unique_ptr<AccessibilityHandler> Button::createAccessibilityHandler()
810{
811 return std::make_unique<ButtonAccessibilityHandler> (*this, AccessibilityRole::button);
812}
813
814} // namespace juce
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
Definition juce_AccessibilityActions.h:73
AccessibilityActions & addAction(AccessibilityActionType type, std::function< void()> actionCallback)
Definition juce_AccessibilityActions.h:88
virtual AccessibleState getCurrentState() const
Definition juce_AccessibilityHandler.cpp:75
AccessibilityActions actions
Definition juce_AccessibilityHandler.h:311
virtual String getTitle() const
Definition juce_AccessibilityHandler.h:124
AccessibilityHandler(Component &componentToWrap, AccessibilityRole accessibilityRole, AccessibilityActions actions={}, Interfaces interfaces={})
Definition juce_AccessibilityHandler.cpp:55
Definition juce_AccessibilityValueInterface.h:140
Definition juce_AccessibilityState.h:39
Definition juce_ApplicationCommandManager.h:88
Definition juce_ApplicationCommandManager.h:330
Definition juce_Button.h:189
bool isReadOnly() const override
Definition juce_Button.cpp:767
Button & button
Definition juce_Button.cpp:772
void setValueAsString(const String &) override
Definition juce_Button.cpp:769
String getCurrentValueAsString() const override
Definition juce_Button.cpp:768
ButtonValueInterface(Button &buttonToWrap)
Definition juce_Button.cpp:762
String getHelp() const override
Definition juce_Button.cpp:756
AccessibleState getCurrentState() const override
Definition juce_Button.cpp:731
static bool isRadioButton(const Button &button) noexcept
Definition juce_Button.cpp:778
String getTitle() const override
Definition juce_Button.cpp:746
Button & button
Definition juce_Button.cpp:803
static Interfaces getAccessibilityInterfaces(Button &button)
Definition juce_Button.cpp:795
static AccessibilityActions getAccessibilityActions(Button &button)
Definition juce_Button.cpp:783
ButtonAccessibilityHandler(Button &buttonToWrap, AccessibilityRole roleIn)
Definition juce_Button.cpp:722
Definition juce_Button.h:43
void setState(ButtonState newState)
Definition juce_Button.cpp:300
int autoRepeatSpeed
Definition juce_Button.h:510
bool generateTooltip
Definition juce_Button.h:523
void focusLost(FocusChangeType) override
Definition juce_Button.cpp:520
uint32 buttonPressTime
Definition juce_Button.h:508
void setConnectedEdges(int connectedEdgeFlags)
Definition juce_Button.cpp:134
bool lastToggleState
Definition juce_Button.h:517
virtual void clicked()
Definition juce_Button.cpp:339
bool needsRepainting
Definition juce_Button.h:520
bool keyStateChangedCallback()
Definition juce_Button.cpp:634
virtual void buttonStateChanged()
Definition juce_Button.cpp:320
void sendClickMessage(const ModifierKeys &)
Definition juce_Button.cpp:401
bool isRegisteredForShortcut(const KeyPress &) const
Definition juce_Button.cpp:625
void updateAutomaticTooltip(const ApplicationCommandInfo &)
Definition juce_Button.cpp:111
bool keyPressed(const KeyPress &) override
Definition juce_Button.cpp:658
bool getToggleState() const noexcept
Definition juce_Button.h:127
void setToggleState(bool shouldBeOn, NotificationType notification)
Definition juce_Button.cpp:158
void turnOffOtherButtonsInGroup(NotificationType click, NotificationType state)
Definition juce_Button.cpp:244
bool isShortcutPressed() const
Definition juce_Button.cpp:615
virtual void internalClickCallback(const ModifierKeys &)
Definition juce_Button.cpp:355
bool isMouseSourceOver(const MouseEvent &e)
Definition juce_Button.cpp:506
void setButtonText(const String &newText)
Definition juce_Button.cpp:96
void flashButtonState()
Definition juce_Button.cpp:371
void handleCommandMessage(int commandId) override
Definition juce_Button.cpp:381
void setCommandToTrigger(ApplicationCommandManager *commandManagerToUse, CommandID commandID, bool generateTooltip)
Definition juce_Button.cpp:549
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_Button.cpp:809
Button(const String &buttonName)
Definition juce_Button.cpp:76
void setTriggeredOnMouseDown(bool isTriggeredOnMouseDown) noexcept
Definition juce_Button.cpp:328
void setToggleable(bool shouldBeToggleable)
Definition juce_Button.cpp:150
void clearShortcuts()
Definition juce_Button.cpp:609
int radioGroupId
Definition juce_Button.h:511
WeakReference< Component > keySource
Definition juce_Button.h:502
bool isToggleable() const noexcept
Definition juce_Button.h:100
int connectedEdgeFlags
Definition juce_Button.h:511
uint32 getMillisecondsSinceButtonDown() const noexcept
Definition juce_Button.cpp:322
int autoRepeatDelay
Definition juce_Button.h:510
std::function< void()> onClick
Definition juce_Button.h:214
bool isDown() const noexcept
Definition juce_Button.cpp:317
~Button() override
Definition juce_Button.cpp:84
bool canBeToggled
Definition juce_Button.h:516
std::unique_ptr< CallbackHelper > callbackHelper
Definition juce_Button.h:507
void removeListener(Listener *listener)
Definition juce_Button.cpp:399
ApplicationCommandManager * commandManagerToUse
Definition juce_Button.h:509
bool isKeyDown
Definition juce_Button.h:521
bool isOver() const noexcept
Definition juce_Button.cpp:318
void focusGained(FocusChangeType) override
Definition juce_Button.cpp:514
CommandID commandID
Definition juce_Button.h:512
bool clickTogglesState
Definition juce_Button.h:518
void setRepeatSpeed(int initialDelayInMillisecs, int repeatDelayInMillisecs, int minimumDelayInMillisecs=-1) noexcept
Definition juce_Button.cpp:670
ButtonState buttonState
Definition juce_Button.h:513
void addShortcut(const KeyPress &)
Definition juce_Button.cpp:598
void paint(Graphics &) override
Definition juce_Button.cpp:447
void addListener(Listener *newListener)
Definition juce_Button.cpp:398
void visibilityChanged() override
Definition juce_Button.cpp:526
void mouseDrag(const MouseEvent &) override
Definition juce_Button.cpp:497
Array< KeyPress > shortcuts
Definition juce_Button.h:501
void mouseDown(const MouseEvent &) override
Definition juce_Button.cpp:463
String text
Definition juce_Button.h:503
void parentHierarchyChanged() override
Definition juce_Button.cpp:532
int autoRepeatMinimumDelay
Definition juce_Button.h:510
ButtonState lastStatePainted
Definition juce_Button.h:513
ListenerList< Listener > buttonListeners
Definition juce_Button.h:504
void mouseExit(const MouseEvent &) override
Definition juce_Button.cpp:461
virtual void paintButton(Graphics &g, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
void mouseUp(const MouseEvent &) override
Definition juce_Button.cpp:477
void setRadioGroupId(int newGroupId, NotificationType notification=sendNotification)
Definition juce_Button.cpp:230
void mouseEnter(const MouseEvent &) override
Definition juce_Button.cpp:460
bool getTriggeredOnMouseDown() const noexcept
Definition juce_Button.cpp:333
virtual void triggerClick()
Definition juce_Button.cpp:350
void setClickingTogglesState(bool shouldAutoToggleOnClick) noexcept
Definition juce_Button.cpp:216
std::function< void()> onStateChange
Definition juce_Button.h:217
ButtonState updateState()
Definition juce_Button.cpp:279
void checkToggleableState(bool wasToggleable)
Definition juce_Button.cpp:144
void sendStateMessage()
Definition juce_Button.cpp:428
bool needsToRelease
Definition juce_Button.h:519
void applicationCommandListChangeCallback()
Definition juce_Button.cpp:578
bool triggerOnMouseDown
Definition juce_Button.h:522
void setTooltip(const String &newTooltip) override
Definition juce_Button.cpp:105
ButtonState
Definition juce_Button.h:368
@ buttonDown
Definition juce_Button.h:371
@ buttonNormal
Definition juce_Button.h:369
@ buttonOver
Definition juce_Button.h:370
void enablementChanged() override
Definition juce_Button.cpp:273
Value isOn
Definition juce_Button.h:515
uint32 lastRepeatTime
Definition juce_Button.h:508
void repeatTimerCallback()
Definition juce_Button.cpp:679
Definition juce_Component.h:2331
bool shouldBailOut() const noexcept
Definition juce_Component.cpp:3252
bool isMouseButtonDown(bool includeChildren=false) const
Definition juce_Component.cpp:3177
Component * getTopLevelComponent() const noexcept
Definition juce_Component.cpp:1667
bool isVisible() const noexcept
Definition juce_Component.h:122
Component * getParentComponent() const noexcept
Definition juce_Component.h:804
bool isShowing() const
Definition juce_Component.cpp:634
FocusChangeType
Definition juce_Component.h:1890
bool isCurrentlyBlockedByAnotherModalComponent() const
Definition juce_Component.cpp:1832
AccessibilityHandler * getAccessibilityHandler()
Definition juce_Component.cpp:3302
void postCommandMessage(int commandId)
Definition juce_Component.cpp:2361
void setEnabled(bool shouldBeEnabled)
Definition juce_Component.cpp:3110
void repaint()
Definition juce_Component.cpp:1917
Component() noexcept
Definition juce_Component.cpp:517
void setWantsKeyboardFocus(bool wantsFocus) noexcept
Definition juce_Component.cpp:2842
bool isMouseOver(bool includeChildren=false) const
Definition juce_Component.cpp:3159
bool isEnabled() const noexcept
Definition juce_Component.cpp:3104
Rectangle< int > getLocalBounds() const noexcept
Definition juce_Component.cpp:2283
void invalidateAccessibilityHandler()
Definition juce_Component.cpp:3297
virtual void handleCommandMessage(int commandId)
Definition juce_Component.cpp:2370
Definition juce_GraphicsContext.h:45
Definition juce_KeyListener.h:41
Definition juce_KeyPress.h:40
static const int returnKey
Definition juce_KeyPress.h:191
Definition juce_ModifierKeys.h:41
static ModifierKeys currentModifiers
Definition juce_ModifierKeys.h:189
Definition juce_MouseEvent.h:39
virtual void setTooltip(const String &newTooltip)
Definition juce_TooltipClient.h:76
Definition juce_String.h:53
static uint32 getApproximateMillisecondCounter() noexcept
Definition juce_Time.cpp:261
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
Timer() noexcept
Definition juce_Timer.cpp:316
Definition juce_Value.h:139
Definition juce_Value.h:51
Definition juce_WeakReference.h:78
* e
Definition inflate.c:1404
int * l
Definition inflate.c:1579
int g
Definition inflate.c:1573
unsigned s
Definition inflate.c:1555
static PuglViewHint int value
Definition pugl.h:1708
static const char * title
Definition pugl.h:1747
static const char * name
Definition pugl.h:1582
struct backing_store_struct * info
Definition jmemsys.h:183
#define TRANS(stringLiteral)
Definition juce_LocalisedStrings.h:208
#define jassert(expression)
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition carla_juce.cpp:31
unsigned int uint32
Definition juce_MathsFunctions.h:45
int CommandID
Definition juce_ApplicationCommandID.h:37
@ valueChanged
Definition juce_AccessibilityEvent.h:44
NotificationType
Definition juce_NotificationType.h:32
@ sendNotificationAsync
Definition juce_NotificationType.h:36
@ sendNotification
Definition juce_NotificationType.h:34
@ dontSendNotification
Definition juce_NotificationType.h:33
@ toggle
Definition juce_AccessibilityActions.h:47
@ press
Definition juce_AccessibilityActions.h:40
@ clickMessageId
Definition juce_Button.cpp:348
AccessibilityRole
Definition juce_AccessibilityRole.h:37
@ radioButton
Definition juce_AccessibilityRole.h:40
@ button
Definition juce_AccessibilityRole.h:38
Definition juce_AccessibilityHandler.h:49
Definition juce_ApplicationCommandInfo.h:45
@ isTicked
Definition juce_ApplicationCommandInfo.h:156
@ dontTriggerVisualFeedback
Definition juce_ApplicationCommandInfo.h:179
@ isDisabled
Definition juce_ApplicationCommandInfo.h:146
Definition juce_ApplicationCommandTarget.h:61
@ fromButton
Definition juce_ApplicationCommandTarget.h:81
Definition juce_Button.cpp:33
Button & button
Definition juce_Button.cpp:70
bool keyPressed(const KeyPress &, Component *) override
Definition juce_Button.cpp:52
void valueChanged(Value &value) override
Definition juce_Button.cpp:46
void applicationCommandListChanged() override
Definition juce_Button.cpp:65
void applicationCommandInvoked(const ApplicationCommandTarget::InvocationInfo &info) override
Definition juce_Button.cpp:58
CallbackHelper(Button &b)
Definition juce_Button.cpp:34
bool keyStateChanged(bool, Component *) override
Definition juce_Button.cpp:41
void timerCallback() override
Definition juce_Button.cpp:36
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
ZCONST char * key
Definition crypt.c:587
b
Definition crypt.c:628
void handler(int signal)
Definition fileio.c:1632
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137