IDEA-145230 give an accessibility name to items of the list in the SearchEverywhere action popup

This commit is contained in:
Anton Tarasov
2015-09-17 11:31:24 +03:00
parent 502d8f3eab
commit 1d51157598
5 changed files with 68 additions and 6 deletions
@@ -113,6 +113,8 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import java.awt.*;
@@ -1058,9 +1060,23 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA
private String myLocationString;
private Icon myLocationIcon;
private Project myProject;
private JPanel myMainPanel = new JPanel(new BorderLayout());
private MyAccessibleComponent myMainPanel = new MyAccessibleComponent(new BorderLayout());
private JLabel myTitle = new JLabel();
private class MyAccessibleComponent extends JPanel {
private Accessible myAccessible;
public MyAccessibleComponent(LayoutManager layout) {
super(layout);
}
void setAccessible(Accessible comp) {
myAccessible = comp;
}
@Override
public AccessibleContext getAccessibleContext() {
return myAccessible != null ? myAccessible.getAccessibleContext() : super.getAccessibleContext();
}
}
@Override
public void clear() {
super.clear();
@@ -1130,6 +1146,9 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA
myMainPanel.add(createTitle(" " + title), BorderLayout.NORTH);
}
myMainPanel.add(cmp, BorderLayout.CENTER);
if (cmp instanceof Accessible) {
myMainPanel.setAccessible((Accessible)cmp);
}
final int width = myMainPanel.getPreferredSize().width;
if (width > myPopupActualWidth) {
myPopupActualWidth = width;
@@ -43,12 +43,16 @@ import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.swing.*;
import java.awt.*;
import java.util.Comparator;
public abstract class PsiElementListCellRenderer<T extends PsiElement> extends JPanel implements ListCellRenderer, MatcherHolder {
private static final String LEFT = BorderLayout.WEST;
private Matcher myMatcher;
private boolean myFocusBorderEnabled = true;
protected int myRightComponentWidth;
@@ -57,6 +61,25 @@ public abstract class PsiElementListCellRenderer<T extends PsiElement> extends J
super(new BorderLayout());
}
private class MyAccessibleContext extends JPanel.AccessibleJPanel {
@Override
public String getAccessibleName() {
LayoutManager lm = PsiElementListCellRenderer.this.getLayout();
assert lm instanceof BorderLayout;
Component leftCellRendererComp = ((BorderLayout)lm).getLayoutComponent(LEFT);
return leftCellRendererComp instanceof Accessible ?
leftCellRendererComp.getAccessibleContext().getAccessibleName() : super.getAccessibleName();
}
}
@Override
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new MyAccessibleContext();
}
return accessibleContext;
}
@Override
public void setPatternMatcher(final Matcher matcher) {
myMatcher = matcher;
@@ -153,7 +176,6 @@ public abstract class PsiElementListCellRenderer<T extends PsiElement> extends J
}
setBackground(selected ? UIUtil.getListSelectionBackground() : bgColor);
}
}
@Nullable
@@ -191,7 +213,7 @@ public abstract class PsiElementListCellRenderer<T extends PsiElement> extends J
ListCellRenderer leftRenderer = new LeftRenderer(null, myMatcher);
final Component leftCellRendererComponent = leftRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
add(leftCellRendererComponent, BorderLayout.WEST);
add(leftCellRendererComponent, LEFT);
final Color bg = isSelected ? UIUtil.getListSelectionBackground() : leftCellRendererComponent.getBackground();
setBackground(bg);
if (rightCellRendererComponent != null) {
@@ -36,7 +36,7 @@ public class ExpandedItemListCellRendererWrapper implements ListCellRenderer {
Component result = myWrappee.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (!myHandler.getExpandedItems().contains(index)) return result;
Rectangle bounds = result.getBounds();
ExpandedItemRendererComponentWrapper wrapper = new ExpandedItemRendererComponentWrapper(result);
ExpandedItemRendererComponentWrapper wrapper = ExpandedItemRendererComponentWrapper.wrap(result);
if (UIUtil.getClientProperty(list, ExpandableItemsHandler.EXPANDED_RENDERER) == Boolean.TRUE) {
JComponent res = ObjectUtils.tryCast(result, JComponent.class);
if (res != null && UIUtil.getClientProperty(res, ExpandableItemsHandler.USE_RENDERER_BOUNDS) == Boolean.TRUE) {
@@ -18,12 +18,14 @@ package com.intellij.ui;
import com.intellij.util.ui.AbstractLayoutManager;
import org.jetbrains.annotations.NotNull;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
public class ExpandedItemRendererComponentWrapper extends JComponent {
public ExpandedItemRendererComponentWrapper(@NotNull final Component rendererComponent) {
private ExpandedItemRendererComponentWrapper(@NotNull final Component rendererComponent) {
add(rendererComponent);
setOpaque(false);
setLayout(new AbstractLayoutManager() {
@@ -41,6 +43,25 @@ public class ExpandedItemRendererComponentWrapper extends JComponent {
}
});
}
private ExpandedItemRendererComponentWrapper() {}
public static ExpandedItemRendererComponentWrapper wrap(@NotNull Component rendererComponent) {
if (rendererComponent instanceof Accessible) {
return new MyAccessibleComponent((Accessible)rendererComponent);
}
return new ExpandedItemRendererComponentWrapper(rendererComponent);
}
private static class MyAccessibleComponent extends ExpandedItemRendererComponentWrapper implements Accessible {
private Accessible myAccessible;
MyAccessibleComponent(Accessible comp) {
myAccessible = comp;
}
@Override
public AccessibleContext getAccessibleContext() {
return myAccessible.getAccessibleContext();
}
}
@Override
public void setBorder(Border border) {
@@ -498,7 +498,7 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component
}
if (myExpandableItemsHandler.getExpandedItems().contains(new TableCell(row, column))) {
result = new ExpandedItemRendererComponentWrapper(result);
result = ExpandedItemRendererComponentWrapper.wrap(result);
}
return result;
}