mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-145230 give an accessibility name to items of the list in the SearchEverywhere action popup
This commit is contained in:
@@ -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) {
|
||||
|
||||
+22
-1
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user