Browse Source

Made toggle buttons call their state change listeners when its toggle state is changed remotely by a connected Value

tags/2021-05-28
jules 7 years ago
parent
commit
b8b6afd9ce
2 changed files with 28 additions and 22 deletions
  1. +26
    -21
      modules/juce_gui_basics/buttons/juce_Button.cpp
  2. +2
    -1
      modules/juce_gui_basics/buttons/juce_Button.h

+ 26
- 21
modules/juce_gui_basics/buttons/juce_Button.cpp View File

@@ -47,7 +47,7 @@ struct Button::CallbackHelper : public Timer,
void valueChanged (Value& value) override void valueChanged (Value& value) override
{ {
if (value.refersToSameSourceAs (button.isOn)) if (value.refersToSameSourceAs (button.isOn))
button.setToggleState (button.isOn.getValue(), dontSendNotification);
button.setToggleState (button.isOn.getValue(), dontSendNotification, sendNotification);
} }
bool keyPressed (const KeyPress&, Component*) override bool keyPressed (const KeyPress&, Component*) override
@@ -132,7 +132,7 @@ void Button::updateAutomaticTooltip (const ApplicationCommandInfo& info)
} }
} }
void Button::setConnectedEdges (const int newFlags)
void Button::setConnectedEdges (int newFlags)
{ {
if (connectedEdgeFlags != newFlags) if (connectedEdgeFlags != newFlags)
{ {
@@ -142,7 +142,12 @@ void Button::setConnectedEdges (const int newFlags)
} }
//============================================================================== //==============================================================================
void Button::setToggleState (const bool shouldBeOn, const NotificationType notification)
void Button::setToggleState (bool shouldBeOn, NotificationType notification)
{
setToggleState (shouldBeOn, notification, notification);
}
void Button::setToggleState (bool shouldBeOn, NotificationType clickNotification, NotificationType stateNotification)
{ {
if (shouldBeOn != lastToggleState) if (shouldBeOn != lastToggleState)
{ {
@@ -150,7 +155,7 @@ void Button::setToggleState (const bool shouldBeOn, const NotificationType notif
if (shouldBeOn) if (shouldBeOn)
{ {
turnOffOtherButtonsInGroup (notification);
turnOffOtherButtonsInGroup (clickNotification, stateNotification);
if (deletionWatcher == nullptr) if (deletionWatcher == nullptr)
return; return;
@@ -169,10 +174,10 @@ void Button::setToggleState (const bool shouldBeOn, const NotificationType notif
lastToggleState = shouldBeOn; lastToggleState = shouldBeOn;
repaint(); repaint();
if (notification != dontSendNotification)
if (clickNotification != dontSendNotification)
{ {
// async callbacks aren't possible here // async callbacks aren't possible here
jassert (notification != sendNotificationAsync);
jassert (clickNotification != sendNotificationAsync);
sendClickMessage (ModifierKeys::getCurrentModifiers()); sendClickMessage (ModifierKeys::getCurrentModifiers());
@@ -180,19 +185,19 @@ void Button::setToggleState (const bool shouldBeOn, const NotificationType notif
return; return;
} }
if (notification != dontSendNotification)
if (stateNotification != dontSendNotification)
sendStateMessage(); sendStateMessage();
else else
buttonStateChanged(); buttonStateChanged();
} }
} }
void Button::setToggleState (const bool shouldBeOn, bool sendChange)
void Button::setToggleState (bool shouldBeOn, bool sendChange)
{ {
setToggleState (shouldBeOn, sendChange ? sendNotification : dontSendNotification); setToggleState (shouldBeOn, sendChange ? sendNotification : dontSendNotification);
} }
void Button::setClickingTogglesState (const bool shouldToggle) noexcept
void Button::setClickingTogglesState (bool shouldToggle) noexcept
{ {
clickTogglesState = shouldToggle; clickTogglesState = shouldToggle;
@@ -208,18 +213,18 @@ bool Button::getClickingTogglesState() const noexcept
return clickTogglesState; return clickTogglesState;
} }
void Button::setRadioGroupId (const int newGroupId, NotificationType notification)
void Button::setRadioGroupId (int newGroupId, NotificationType notification)
{ {
if (radioGroupId != newGroupId) if (radioGroupId != newGroupId)
{ {
radioGroupId = newGroupId; radioGroupId = newGroupId;
if (lastToggleState) if (lastToggleState)
turnOffOtherButtonsInGroup (notification);
turnOffOtherButtonsInGroup (notification, notification);
} }
} }
void Button::turnOffOtherButtonsInGroup (const NotificationType notification)
void Button::turnOffOtherButtonsInGroup (NotificationType clickNotification, NotificationType stateNotification)
{ {
if (auto* p = getParentComponent()) if (auto* p = getParentComponent())
{ {
@@ -235,7 +240,7 @@ void Button::turnOffOtherButtonsInGroup (const NotificationType notification)
{ {
if (b->getRadioGroupId() == radioGroupId) if (b->getRadioGroupId() == radioGroupId)
{ {
b->setToggleState (false, notification);
b->setToggleState (false, clickNotification, stateNotification);
if (deletionWatcher == nullptr) if (deletionWatcher == nullptr)
return; return;
@@ -259,7 +264,7 @@ Button::ButtonState Button::updateState()
return updateState (isMouseOver (true), isMouseButtonDown()); return updateState (isMouseOver (true), isMouseButtonDown());
} }
Button::ButtonState Button::updateState (const bool over, const bool down)
Button::ButtonState Button::updateState (bool over, bool down)
{ {
ButtonState newState = buttonNormal; ButtonState newState = buttonNormal;
@@ -275,7 +280,7 @@ Button::ButtonState Button::updateState (const bool over, const bool down)
return newState; return newState;
} }
void Button::setState (const ButtonState newState)
void Button::setState (ButtonState newState)
{ {
if (buttonState != newState) if (buttonState != newState)
{ {
@@ -303,7 +308,7 @@ uint32 Button::getMillisecondsSinceButtonDown() const noexcept
return now > buttonPressTime ? now - buttonPressTime : 0; return now > buttonPressTime ? now - buttonPressTime : 0;
} }
void Button::setTriggeredOnMouseDown (const bool isTriggeredOnMouseDown) noexcept
void Button::setTriggeredOnMouseDown (bool isTriggeredOnMouseDown) noexcept
{ {
triggerOnMouseDown = isTriggeredOnMouseDown; triggerOnMouseDown = isTriggeredOnMouseDown;
} }
@@ -519,8 +524,8 @@ void Button::parentHierarchyChanged()
} }
//============================================================================== //==============================================================================
void Button::setCommandToTrigger (ApplicationCommandManager* const newCommandManager,
const CommandID newCommandID, const bool generateTip)
void Button::setCommandToTrigger (ApplicationCommandManager* newCommandManager,
CommandID newCommandID, bool generateTip)
{ {
commandID = newCommandID; commandID = newCommandID;
generateTooltip = generateTip; generateTooltip = generateTip;
@@ -640,9 +645,9 @@ bool Button::keyPressed (const KeyPress& key)
} }
//============================================================================== //==============================================================================
void Button::setRepeatSpeed (const int initialDelayMillisecs,
const int repeatMillisecs,
const int minimumDelayInMillisecs) noexcept
void Button::setRepeatSpeed (int initialDelayMillisecs,
int repeatMillisecs,
int minimumDelayInMillisecs) noexcept
{ {
autoRepeatDelay = initialDelayMillisecs; autoRepeatDelay = initialDelayMillisecs;
autoRepeatSpeed = repeatMillisecs; autoRepeatSpeed = repeatMillisecs;


+ 2
- 1
modules/juce_gui_basics/buttons/juce_Button.h View File

@@ -509,11 +509,12 @@ private:
ButtonState updateState(); ButtonState updateState();
ButtonState updateState (bool isOver, bool isDown); ButtonState updateState (bool isOver, bool isDown);
bool isShortcutPressed() const; bool isShortcutPressed() const;
void turnOffOtherButtonsInGroup (NotificationType);
void turnOffOtherButtonsInGroup (NotificationType click, NotificationType state);
void flashButtonState(); void flashButtonState();
void sendClickMessage (const ModifierKeys&); void sendClickMessage (const ModifierKeys&);
void sendStateMessage(); void sendStateMessage();
void setToggleState (bool shouldBeOn, NotificationType click, NotificationType state);
bool isMouseOrTouchOver (const MouseEvent& e); bool isMouseOrTouchOver (const MouseEvent& e);


Loading…
Cancel
Save