From 0000771751dd4757f4e364953fff7bc52072777b Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 7 Oct 2021 16:36:10 +0100 Subject: [PATCH] Accessibility: Report Button on/off state via AccessibilityValueInterface --- .../juce_gui_basics/buttons/juce_Button.cpp | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/buttons/juce_Button.cpp b/modules/juce_gui_basics/buttons/juce_Button.cpp index 99c044026e..8a518737b3 100644 --- a/modules/juce_gui_basics/buttons/juce_Button.cpp +++ b/modules/juce_gui_basics/buttons/juce_Button.cpp @@ -722,7 +722,8 @@ public: explicit ButtonAccessibilityHandler (Button& buttonToWrap, AccessibilityRole roleIn) : AccessibilityHandler (buttonToWrap, isRadioButton (buttonToWrap) ? AccessibilityRole::radioButton : roleIn, - getAccessibilityActions (buttonToWrap)), + getAccessibilityActions (buttonToWrap), + getAccessibilityInterfaces (buttonToWrap)), button (buttonToWrap) { } @@ -755,6 +756,25 @@ public: String getHelp() const override { return button.getTooltip(); } private: + class ButtonValueInterface : public AccessibilityTextValueInterface + { + public: + explicit ButtonValueInterface (Button& buttonToWrap) + : button (buttonToWrap) + { + } + + bool isReadOnly() const override { return true; } + String getCurrentValueAsString() const override { return button.getToggleState() ? "On" : "Off"; } + void setValueAsString (const String&) override {} + + private: + Button& button; + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ButtonValueInterface) + }; + static bool isRadioButton (const Button& button) noexcept { return button.getRadioGroupId() != 0; @@ -772,6 +792,14 @@ private: return actions; } + static Interfaces getAccessibilityInterfaces (Button& button) + { + if (button.isToggleable()) + return { std::make_unique (button) }; + + return {}; + } + Button& button; //==============================================================================