LMMS
Loading...
Searching...
No Matches
juce_Button.h
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
29//==============================================================================
41class JUCE_API Button : public Component,
43{
44protected:
45 //==============================================================================
52 explicit Button (const String& buttonName);
53
54public:
56 ~Button() override;
57
58 //==============================================================================
62 void setButtonText (const String& newText);
63
67 const String& getButtonText() const { return text; }
68
69 //==============================================================================
73 bool isDown() const noexcept;
74
79 bool isOver() const noexcept;
80
81 //==============================================================================
94 void setToggleable (bool shouldBeToggleable);
95
101
117 void setToggleState (bool shouldBeOn, NotificationType notification);
118
127 bool getToggleState() const noexcept { return isOn.getValue(); }
128
138
147 void setClickingTogglesState (bool shouldAutoToggleOnClick) noexcept;
148
153
154 //==============================================================================
175 void setRadioGroupId (int newGroupId, NotificationType notification = sendNotification);
176
181
182 //==============================================================================
189 {
190 public:
192 virtual ~Listener() = default;
193
195 virtual void buttonClicked (Button*) = 0;
196
198 virtual void buttonStateChanged (Button*) {}
199 };
200
205 void addListener (Listener* newListener);
206
210 void removeListener (Listener* listener);
211
212 //==============================================================================
214 std::function<void()> onClick;
215
217 std::function<void()> onStateChange;
218
219 //==============================================================================
227 virtual void triggerClick();
228
229 //==============================================================================
246 bool generateTooltip);
247
250
251 //==============================================================================
261 void addShortcut (const KeyPress&);
262
266 void clearShortcuts();
267
271 bool isRegisteredForShortcut (const KeyPress&) const;
272
273 //==============================================================================
287 void setRepeatSpeed (int initialDelayInMillisecs,
288 int repeatDelayInMillisecs,
289 int minimumDelayInMillisecs = -1) noexcept;
290
300 void setTriggeredOnMouseDown (bool isTriggeredOnMouseDown) noexcept;
301
305 bool getTriggeredOnMouseDown() const noexcept;
306
310 uint32 getMillisecondsSinceButtonDown() const noexcept;
311
312 //==============================================================================
316 void setTooltip (const String& newTooltip) override;
317
318 //==============================================================================
327
339 void setConnectedEdges (int connectedEdgeFlags);
340
343
348
353
358
363
364
365 //==============================================================================
373
382 void setState (ButtonState newState);
383
386
387 //==============================================================================
392 {
393 virtual ~LookAndFeelMethods() = default;
394
395 virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour,
396 bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) = 0;
397
398 virtual Font getTextButtonFont (TextButton&, int buttonHeight) = 0;
399 virtual int getTextButtonWidthToFitText (TextButton&, int buttonHeight) = 0;
400
403 bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) = 0;
404
407 bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) = 0;
408
410
411 virtual void drawTickBox (Graphics&, Component&, float x, float y, float w, float h,
412 bool ticked, bool isEnabled,
413 bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) = 0;
414
416 bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) = 0;
417 };
418
419 //==============================================================================
420 #ifndef DOXYGEN
421 [[deprecated ("This method's parameters have changed.")]]
422 void setToggleState (bool, bool);
423 #endif
424
425protected:
426 //==============================================================================
434 virtual void clicked();
435
443 virtual void clicked (const ModifierKeys& modifiers);
444
454 virtual void paintButton (Graphics& g,
455 bool shouldDrawButtonAsHighlighted,
456 bool shouldDrawButtonAsDown) = 0;
457
465 virtual void buttonStateChanged();
466
467 //==============================================================================
469 virtual void internalClickCallback (const ModifierKeys&);
471 void handleCommandMessage (int commandId) override;
473 void mouseEnter (const MouseEvent&) override;
475 void mouseExit (const MouseEvent&) override;
477 void mouseDown (const MouseEvent&) override;
479 void mouseDrag (const MouseEvent&) override;
481 void mouseUp (const MouseEvent&) override;
483 bool keyPressed (const KeyPress&) override;
487 void paint (Graphics&) override;
489 void parentHierarchyChanged() override;
491 void visibilityChanged() override;
493 void focusGained (FocusChangeType) override;
495 void focusLost (FocusChangeType) override;
497 void enablementChanged() override;
498
499private:
500 //==============================================================================
505
506 struct CallbackHelper;
507 std::unique_ptr<CallbackHelper> callbackHelper;
514
516 bool canBeToggled = false;
517 bool lastToggleState = false;
518 bool clickTogglesState = false;
519 bool needsToRelease = false;
520 bool needsRepainting = false;
521 bool isKeyDown = false;
522 bool triggerOnMouseDown = false;
523 bool generateTooltip = false;
524
525 std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
526 void checkToggleableState (bool wasToggleable);
527
528 void repeatTimerCallback();
532
535 bool isShortcutPressed() const;
537
538 void flashButtonState();
539 void sendClickMessage (const ModifierKeys&);
540 void sendStateMessage();
541 void setToggleState (bool shouldBeOn, NotificationType click, NotificationType state);
542
543 bool isMouseSourceOver (const MouseEvent& e);
544
546};
547
548
549} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define override
Definition DistrhoDefines.h:73
Definition juce_ApplicationCommandManager.h:88
Definition juce_Array.h:56
Definition juce_Button.h:189
virtual ~Listener()=default
virtual void buttonClicked(Button *)=0
virtual void buttonStateChanged(Button *)
Definition juce_Button.h:198
int autoRepeatSpeed
Definition juce_Button.h:510
bool generateTooltip
Definition juce_Button.h:523
ButtonState getState() const noexcept
Definition juce_Button.h:385
void focusLost(FocusChangeType) override
Definition juce_Button.cpp:520
uint32 buttonPressTime
Definition juce_Button.h:508
bool lastToggleState
Definition juce_Button.h:517
virtual void clicked()
Definition juce_Button.cpp:339
bool needsRepainting
Definition juce_Button.h:520
bool isConnectedOnBottom() const noexcept
Definition juce_Button.h:362
bool keyStateChangedCallback()
Definition juce_Button.cpp:634
virtual void buttonStateChanged()
Definition juce_Button.cpp:320
void sendClickMessage(const ModifierKeys &)
Definition juce_Button.cpp:401
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
bool isConnectedOnTop() const noexcept
Definition juce_Button.h:357
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
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
int autoRepeatDelay
Definition juce_Button.h:510
bool getClickingTogglesState() const noexcept
Definition juce_Button.h:152
std::function< void()> onClick
Definition juce_Button.h:214
bool isDown() const noexcept
Definition juce_Button.cpp:317
bool canBeToggled
Definition juce_Button.h:516
std::unique_ptr< CallbackHelper > callbackHelper
Definition juce_Button.h:507
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
const String & getButtonText() const
Definition juce_Button.h:67
int getConnectedEdgeFlags() const noexcept
Definition juce_Button.h:342
CommandID commandID
Definition juce_Button.h:512
bool clickTogglesState
Definition juce_Button.h:518
ButtonState buttonState
Definition juce_Button.h:513
void paint(Graphics &) override
Definition juce_Button.cpp:447
void visibilityChanged() override
Definition juce_Button.cpp:526
ConnectedEdgeFlags
Definition juce_Button.h:321
@ ConnectedOnBottom
Definition juce_Button.h:325
@ ConnectedOnLeft
Definition juce_Button.h:322
@ ConnectedOnRight
Definition juce_Button.h:323
@ ConnectedOnTop
Definition juce_Button.h:324
void mouseDrag(const MouseEvent &) override
Definition juce_Button.cpp:497
Array< KeyPress > shortcuts
Definition juce_Button.h:501
int getRadioGroupId() const noexcept
Definition juce_Button.h:180
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
bool isConnectedOnLeft() const noexcept
Definition juce_Button.h:347
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 mouseEnter(const MouseEvent &) override
Definition juce_Button.cpp:460
virtual void triggerClick()
Definition juce_Button.cpp:350
bool isConnectedOnRight() const noexcept
Definition juce_Button.h:352
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
ButtonState
Definition juce_Button.h:368
@ buttonDown
Definition juce_Button.h:371
@ buttonNormal
Definition juce_Button.h:369
@ buttonOver
Definition juce_Button.h:370
CommandID getCommandID() const noexcept
Definition juce_Button.h:249
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
Value & getToggleStateValue() noexcept
Definition juce_Button.h:137
Definition juce_Colour.h:38
FocusChangeType
Definition juce_Component.h:1890
Component() noexcept
Definition juce_Component.cpp:517
virtual bool keyStateChanged(bool isKeyDown)
Definition juce_Component.cpp:3231
bool isEnabled() const noexcept
Definition juce_Component.cpp:3104
Definition juce_DrawableButton.h:41
Definition juce_Font.h:42
Definition juce_GraphicsContext.h:45
Definition juce_KeyPress.h:40
Definition juce_ListenerList.h:70
Definition juce_ModifierKeys.h:41
Definition juce_MouseEvent.h:39
Definition juce_String.h:53
Definition juce_TextButton.h:39
Definition juce_ToggleButton.h:41
Definition juce_Value.h:51
Definition juce_WeakReference.h:78
* e
Definition inflate.c:1404
UINT_D64 w
Definition inflate.c:942
int y
Definition inflate.c:1588
int g
Definition inflate.c:1573
unsigned x[BMAX+1]
Definition inflate.c:1586
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
unsigned int uint32
Definition juce_MathsFunctions.h:45
int CommandID
Definition juce_ApplicationCommandID.h:37
NotificationType
Definition juce_NotificationType.h:32
@ sendNotification
Definition juce_NotificationType.h:34
Definition juce_ApplicationCommandInfo.h:45
Definition juce_Button.cpp:33
Definition juce_Button.h:392
virtual void changeToggleButtonWidthToFitText(ToggleButton &)=0
virtual void drawTickBox(Graphics &, Component &, float x, float y, float w, float h, bool ticked, bool isEnabled, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
virtual Font getTextButtonFont(TextButton &, int buttonHeight)=0
virtual void drawButtonText(Graphics &, TextButton &, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
virtual void drawToggleButton(Graphics &, ToggleButton &, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
virtual int getTextButtonWidthToFitText(TextButton &, int buttonHeight)=0
virtual void drawDrawableButton(Graphics &, DrawableButton &, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
virtual void drawButtonBackground(Graphics &, Button &, const Colour &backgroundColour, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)=0
virtual ~LookAndFeelMethods()=default
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
#define void
Definition unzip.h:396
float click[]
Definition click.h:1
#define const
Definition zconf.h:137