1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Accessibility: Override Accessibility::getHelp() for JUCE widgets that support tooltips

This commit is contained in:
ed 2021-07-02 11:40:37 +01:00
parent 422c8f8114
commit c559d31e90
9 changed files with 99 additions and 23 deletions

View file

@ -662,6 +662,7 @@ public:
}
String getTitle() const override { return comboBox.getText(); }
String getHelp() const override { return comboBox.getTooltip(); }
private:
static AccessibilityActions getAccessibilityActions (ComboBox& comboBox)

View file

@ -83,7 +83,25 @@ void ImageComponent::paint (Graphics& g)
//==============================================================================
std::unique_ptr<AccessibilityHandler> ImageComponent::createAccessibilityHandler()
{
return std::make_unique<AccessibilityHandler> (*this, AccessibilityRole::image);
class ImageComponentAccessibilityHandler : public AccessibilityHandler
{
public:
explicit ImageComponentAccessibilityHandler (ImageComponent& imageComponentToWrap)
: AccessibilityHandler (imageComponentToWrap, AccessibilityRole::image),
imageComponent (imageComponentToWrap)
{
}
String getHelp() const override { return imageComponent.getTooltip(); }
private:
ImageComponent& imageComponent;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ImageComponentAccessibilityHandler)
};
return std::make_unique<ImageComponentAccessibilityHandler> (*this);
}
} // namespace juce

View file

@ -529,10 +529,8 @@ public:
{
}
String getTitle() const override
{
return label.getText();
}
String getTitle() const override { return label.getText(); }
String getHelp() const override { return label.getTooltip(); }
AccessibleState getCurrentState() const override
{
@ -557,6 +555,9 @@ private:
private:
Label& label;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LabelValueInterface)
};
static AccessibilityActions getAccessibilityActions (Label& label)

View file

@ -210,6 +210,8 @@ public:
return {};
}
String getHelp() const override { return rowComponent.getTooltip(); }
AccessibleState getCurrentState() const override
{
if (auto* m = rowComponent.owner.getModel())

View file

@ -120,29 +120,48 @@ void ProgressBar::timerCallback()
//==============================================================================
std::unique_ptr<AccessibilityHandler> ProgressBar::createAccessibilityHandler()
{
class ValueInterface : public AccessibilityRangedNumericValueInterface
class ProgressBarAccessibilityHandler : public AccessibilityHandler
{
public:
explicit ValueInterface (ProgressBar& progressBarToWrap)
: progressBar (progressBarToWrap)
explicit ProgressBarAccessibilityHandler (ProgressBar& progressBarToWrap)
: AccessibilityHandler (progressBarToWrap,
AccessibilityRole::progressBar,
AccessibilityActions{},
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (progressBarToWrap) }),
progressBar (progressBarToWrap)
{
}
bool isReadOnly() const override { return true; }
void setValue (double) override { jassertfalse; }
double getCurrentValue() const override { return progressBar.progress; }
AccessibleValueRange getRange() const override { return { { 0.0, 1.0 }, 0.001 }; }
String getHelp() const override { return progressBar.getTooltip(); }
private:
class ValueInterface : public AccessibilityRangedNumericValueInterface
{
public:
explicit ValueInterface (ProgressBar& progressBarToWrap)
: progressBar (progressBarToWrap)
{
}
bool isReadOnly() const override { return true; }
void setValue (double) override { jassertfalse; }
double getCurrentValue() const override { return progressBar.progress; }
AccessibleValueRange getRange() const override { return { { 0.0, 1.0 }, 0.001 }; }
private:
ProgressBar& progressBar;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueInterface)
};
ProgressBar& progressBar;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueInterface)
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProgressBarAccessibilityHandler)
};
return std::make_unique<AccessibilityHandler> (*this,
AccessibilityRole::progressBar,
AccessibilityActions{},
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (*this) });
return std::make_unique<ProgressBarAccessibilityHandler> (*this);
}
} // namespace juce

View file

@ -1678,8 +1678,22 @@ void Slider::mouseWheelMove (const MouseEvent& e, const MouseWheelDetails& wheel
Component::mouseWheelMove (e, wheel);
}
std::unique_ptr<AccessibilityHandler> Slider::createAccessibilityHandler()
//==============================================================================
class SliderAccessibilityHandler : public AccessibilityHandler
{
public:
explicit SliderAccessibilityHandler (Slider& sliderToWrap)
: AccessibilityHandler (sliderToWrap,
AccessibilityRole::slider,
AccessibilityActions{},
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (sliderToWrap) }),
slider (sliderToWrap)
{
}
String getHelp() const override { return slider.getTooltip(); }
private:
class ValueInterface : public AccessibilityValueInterface
{
public:
@ -1715,13 +1729,19 @@ std::unique_ptr<AccessibilityHandler> Slider::createAccessibilityHandler()
Slider& slider;
Value valueToControl;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueInterface)
};
return std::make_unique<AccessibilityHandler> (*this,
AccessibilityRole::slider,
AccessibilityActions{},
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (*this) });
Slider& slider;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SliderAccessibilityHandler)
};
std::unique_ptr<AccessibilityHandler> Slider::createAccessibilityHandler()
{
return std::make_unique<SliderAccessibilityHandler> (*this);
}
} // namespace juce

View file

@ -249,6 +249,8 @@ public:
return {};
}
String getHelp() const override { return rowComponent.getTooltip(); }
AccessibleState getCurrentState() const override
{
if (auto* m = rowComponent.owner.getModel())

View file

@ -2700,10 +2700,13 @@ public:
: AccessibilityHandler (textEditorToWrap,
textEditorToWrap.isReadOnly() ? AccessibilityRole::staticText : AccessibilityRole::editableText,
{},
{ std::make_unique<TextEditorTextInterface> (textEditorToWrap) })
{ std::make_unique<TextEditorTextInterface> (textEditorToWrap) }),
textEditor (textEditorToWrap)
{
}
String getHelp() const override { return textEditor.getTooltip(); }
private:
class TextEditorTextInterface : public AccessibilityTextInterface
{
@ -2762,8 +2765,13 @@ private:
private:
TextEditor& textEditor;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TextEditorTextInterface)
};
TextEditor& textEditor;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TextEditorAccessibilityHandler)
};

View file

@ -97,6 +97,11 @@ private:
return itemComponent.getRepresentedItem().getAccessibilityName();
}
String getHelp() const override
{
return itemComponent.getRepresentedItem().getTooltip();
}
AccessibleState getCurrentState() const override
{
auto& treeItem = itemComponent.getRepresentedItem();