mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
psi viewer: use orange box instead of green selection;
hacks with selection intersection are removed
This commit is contained in:
@@ -101,7 +101,7 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disposable {
|
||||
private static final String REFS_CACHE = "References Resolve Cache";
|
||||
private static final Color SELECTION_BG_COLOR = new JBColor(new Color(0x009999), new Color(0, 80, 80));
|
||||
private static final Color BOX_COLOR = new JBColor(new Color(0xFC6C00), new Color(0xDE6C01));
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.internal.psiView.PsiViewerDialog");
|
||||
private final Project myProject;
|
||||
|
||||
@@ -133,7 +133,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
@Nullable
|
||||
private BlockTreeBuilder myBlockTreeBuilder;
|
||||
private RangeHighlighter myHighlighter;
|
||||
private RangeHighlighter myIntersectHighlighter;
|
||||
private HashMap<PsiElement, BlockTreeNode> myPsiToBlockMap;
|
||||
|
||||
private final Set<SourceWrapper> mySourceWrappers = ContainerUtil.newTreeSet();
|
||||
@@ -163,7 +162,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(String o1, String o2) {
|
||||
public int compare(@NotNull String o1, @NotNull String o2) {
|
||||
if (o1.equals(myOnTop)) return -1;
|
||||
if (o2.equals(myOnTop)) return 1;
|
||||
return o1.compareToIgnoreCase(o2);
|
||||
@@ -194,8 +193,8 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final SourceWrapper o) {
|
||||
return o == null ? -1 : getText().compareToIgnoreCase(o.getText());
|
||||
public int compareTo(@NotNull final SourceWrapper o) {
|
||||
return getText().compareToIgnoreCase(o.getText());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,7 +241,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
final TreeCellRenderer renderer = myPsiTree.getCellRenderer();
|
||||
myPsiTree.setCellRenderer(new TreeCellRenderer() {
|
||||
@Override
|
||||
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
|
||||
public Component getTreeCellRendererComponent(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
|
||||
final Component c = renderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
|
||||
if (value instanceof DefaultMutableTreeNode) {
|
||||
final Object userObject = ((DefaultMutableTreeNode)value).getUserObject();
|
||||
@@ -251,7 +250,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
if (c instanceof NodeRenderer) {
|
||||
((NodeRenderer)c).setToolTipText(element == null ? null : element.getClass().getName());
|
||||
}
|
||||
if ((element instanceof PsiElement && FileContextUtil.getFileContext(((PsiElement)element).getContainingFile()) != null) ||
|
||||
if (element instanceof PsiElement && FileContextUtil.getFileContext(((PsiElement)element).getContainingFile()) != null ||
|
||||
element instanceof ViewerTreeStructure.Inject) {
|
||||
final TextAttributes attr = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.INJECTED_LANGUAGE_FRAGMENT);
|
||||
c.setBackground(attr.getBackgroundColor());
|
||||
@@ -271,7 +270,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
myRefs.getSelectionModel().addListSelectionListener(listener);
|
||||
myRefs.setCellRenderer(new DefaultListCellRenderer() {
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
public Component getListCellRendererComponent(@NotNull JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
final Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
if (resolve(index) == null) {
|
||||
comp.setForeground(JBColor.RED);
|
||||
@@ -289,7 +288,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
getPeer().getWindow().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
|
||||
@Override
|
||||
public Component getInitialComponent(Window window) {
|
||||
public Component getInitialComponent(@NotNull Window window) {
|
||||
return myEditor.getComponent();
|
||||
}
|
||||
});
|
||||
@@ -324,7 +323,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
mySourceWrappers.add(wrapper);
|
||||
if (lastUsed == null && wrapper.getText().equals(type)) lastUsed = wrapper;
|
||||
if (myCurrentFile != null && wrapper.myFileType instanceof LanguageFileType &&
|
||||
((LanguageFileType)wrapper.myFileType).equals(curLanguage.getAssociatedFileType())) {
|
||||
wrapper.myFileType.equals(curLanguage.getAssociatedFileType())) {
|
||||
lastUsed = wrapper;
|
||||
}
|
||||
}
|
||||
@@ -347,7 +346,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
};
|
||||
myFileTypeComboBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
updateDialectsCombo(null);
|
||||
updateExtensionsCombo();
|
||||
updateEditor();
|
||||
@@ -355,7 +354,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
});
|
||||
myDialectComboBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
updateEditor();
|
||||
}
|
||||
});
|
||||
@@ -382,14 +381,14 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
final ViewerTreeStructure psiTreeStructure = (ViewerTreeStructure)myPsiTreeBuilder.getTreeStructure();
|
||||
myShowWhiteSpacesBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
psiTreeStructure.setShowWhiteSpaces(myShowWhiteSpacesBox.isSelected());
|
||||
myPsiTreeBuilder.queueUpdate();
|
||||
}
|
||||
});
|
||||
myShowTreeNodesCheckBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
psiTreeStructure.setShowTreeNodes(myShowTreeNodesCheckBox.isSelected());
|
||||
myPsiTreeBuilder.queueUpdate();
|
||||
}
|
||||
@@ -402,7 +401,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
myBlockStructurePanel.setVisible(settings.showBlocks);
|
||||
myShowBlocksCheckBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
if (!myShowBlocksCheckBox.isSelected()) {
|
||||
settings.blockRefDividerLocation = myBlockRefSplitPane.getDividerLocation();
|
||||
}
|
||||
@@ -473,14 +472,14 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
registerKeyboardAction(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
focusEditor();
|
||||
}
|
||||
}, KeyStroke.getKeyStroke(KeyEvent.VK_T, mask));
|
||||
|
||||
registerKeyboardAction(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
focusTree();
|
||||
}
|
||||
}, KeyStroke.getKeyStroke(KeyEvent.VK_S, mask));
|
||||
@@ -488,21 +487,21 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
registerKeyboardAction(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
focusBlockTree();
|
||||
}
|
||||
}, KeyStroke.getKeyStroke(KeyEvent.VK_K, mask));
|
||||
|
||||
registerKeyboardAction(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
focusRefs();
|
||||
}
|
||||
}, KeyStroke.getKeyStroke(KeyEvent.VK_R, mask));
|
||||
|
||||
registerKeyboardAction(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
if (myRefs.isFocusOwner()) {
|
||||
focusBlockTree();
|
||||
}
|
||||
@@ -548,26 +547,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
myBlockTreeSeparator.setLabelFor(myBlockTree);
|
||||
}
|
||||
|
||||
private void updateIntersectHighlighter(int highlightStart, int highlightEnd) {
|
||||
if (myIntersectHighlighter != null) {
|
||||
myEditor.getMarkupModel().removeHighlighter(myIntersectHighlighter);
|
||||
myIntersectHighlighter.dispose();
|
||||
}
|
||||
if (myEditor.getSelectionModel().hasSelection()) {
|
||||
int selectionStart = myEditor.getSelectionModel().getSelectionStart();
|
||||
int selectionEnd = myEditor.getSelectionModel().getSelectionEnd();
|
||||
TextRange resRange = new TextRange(highlightStart, highlightEnd).intersection(new TextRange(selectionStart, selectionEnd));
|
||||
if (resRange != null) {
|
||||
TextAttributes attributes = new TextAttributes();
|
||||
attributes.setBackgroundColor(Color.LIGHT_GRAY);
|
||||
attributes.setForegroundColor(Color.white);
|
||||
myIntersectHighlighter = myEditor.getMarkupModel()
|
||||
.addRangeHighlighter(resRange.getStartOffset(), resRange.getEndOffset(), HighlighterLayer.LAST + 1, attributes,
|
||||
HighlighterTargetArea.EXACT_RANGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiElement getPsiElement() {
|
||||
final TreePath path = myPsiTree.getSelectionPath();
|
||||
@@ -676,7 +655,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
protected Action[] createActions() {
|
||||
AbstractAction copyPsi = new AbstractAction("Cop&y PSI") {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
PsiElement element = parseText(myEditor.getDocument().getText());
|
||||
List<PsiElement> allToParse = new ArrayList<PsiElement>();
|
||||
if (element instanceof PsiFile) {
|
||||
@@ -735,7 +714,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
myPsiToBlockMap = new HashMap<PsiElement, BlockTreeNode>();
|
||||
final PsiElement psiFile = ((ViewerTreeStructure)myPsiTreeBuilder.getTreeStructure()).getRootPsiElement();
|
||||
initMap(rootNode, psiFile);
|
||||
PsiElement rootPsi = (rootNode.getBlock() instanceof ASTBlock) ?
|
||||
PsiElement rootPsi = rootNode.getBlock() instanceof ASTBlock ?
|
||||
((ASTBlock)rootNode.getBlock()).getNode().getPsi() : rootElement;
|
||||
BlockTreeNode blockNode = myPsiToBlockMap.get(rootPsi);
|
||||
|
||||
@@ -856,12 +835,12 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
public MyPsiTreeSelectionListener() {
|
||||
myAttributes = new TextAttributes();
|
||||
myAttributes.setBackgroundColor(SELECTION_BG_COLOR);
|
||||
myAttributes.setForegroundColor(Color.white);
|
||||
myAttributes.setEffectColor(BOX_COLOR);
|
||||
myAttributes.setEffectType(EffectType.ROUNDED_BOX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
public void valueChanged(@NotNull TreeSelectionEvent e) {
|
||||
if (!myEditor.getDocument().getText().equals(myLastParsedText) || myBlockTree.hasFocus()) return;
|
||||
TreePath path = myPsiTree.getSelectionPath();
|
||||
clearSelection();
|
||||
@@ -887,8 +866,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
final int textLength = myEditor.getDocument().getTextLength();
|
||||
if (end <= textLength) {
|
||||
myHighlighter = myEditor.getMarkupModel().addRangeHighlighter(start, end, HighlighterLayer.LAST, myAttributes, HighlighterTargetArea.EXACT_RANGE);
|
||||
updateIntersectHighlighter(start, end);
|
||||
|
||||
if (myPsiTree.hasFocus()) {
|
||||
myEditor.getCaretModel().moveToOffset(start);
|
||||
myEditor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
|
||||
@@ -946,12 +923,12 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
public MyBlockTreeSelectionListener() {
|
||||
myAttributes = new TextAttributes();
|
||||
myAttributes.setBackgroundColor(SELECTION_BG_COLOR);
|
||||
myAttributes.setForegroundColor(Color.white);
|
||||
myAttributes.setEffectColor(BOX_COLOR);
|
||||
myAttributes.setEffectType(EffectType.ROUNDED_BOX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
public void valueChanged(@NotNull TreeSelectionEvent e) {
|
||||
if (myIgnoreBlockTreeSelectionMarker > 0 || myBlockTreeBuilder == null) {
|
||||
return;
|
||||
}
|
||||
@@ -988,7 +965,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
if (end <= textLength) {
|
||||
myHighlighter = myEditor.getMarkupModel()
|
||||
.addRangeHighlighter(start, end, HighlighterLayer.LAST, myAttributes, HighlighterTargetArea.EXACT_RANGE);
|
||||
updateIntersectHighlighter(start, end);
|
||||
|
||||
myEditor.getCaretModel().moveToOffset(start);
|
||||
myEditor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
|
||||
@@ -1112,7 +1088,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
private class GoToListener implements KeyListener, MouseListener, ListSelectionListener {
|
||||
private RangeHighlighter myListenerHighlighter;
|
||||
private final TextAttributes myAttributes =
|
||||
new TextAttributes(Color.white, SELECTION_BG_COLOR, JBColor.RED, EffectType.BOXED, Font.PLAIN);
|
||||
new TextAttributes(JBColor.RED, null, null, null, Font.PLAIN);
|
||||
|
||||
private void navigate() {
|
||||
final Object value = myRefs.getSelectedValue();
|
||||
@@ -1124,21 +1100,21 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
public void keyPressed(@NotNull KeyEvent e) {
|
||||
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
navigate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
public void mouseClicked(@NotNull MouseEvent e) {
|
||||
if (e.getClickCount() > 1) {
|
||||
navigate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
public void valueChanged(@NotNull ListSelectionEvent e) {
|
||||
clearSelection();
|
||||
updateDialectsCombo(null);
|
||||
updateExtensionsCombo();
|
||||
@@ -1176,17 +1152,17 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e) {}
|
||||
public void keyTyped(@NotNull KeyEvent e) {}
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
public void mousePressed(@NotNull MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
public void mouseReleased(@NotNull MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
public void mouseEntered(@NotNull MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
public void mouseExited(@NotNull MouseEvent e) {}
|
||||
}
|
||||
|
||||
private void updateEditor() {
|
||||
@@ -1247,7 +1223,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
if (myEditor.getContentComponent().hasFocus()) {
|
||||
TextRange rangeInHostFile = InjectedLanguageManager.getInstance(myProject).injectedToHost(element, element.getTextRange());
|
||||
selectBlockNode(findBlockNode(rangeInHostFile, true));
|
||||
updateIntersectHighlighter(myHighlighter.getStartOffset(), myHighlighter.getEndOffset());
|
||||
}
|
||||
}
|
||||
myPsiTreeBuilder.select(element);
|
||||
@@ -1270,13 +1245,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
return myLastParsedTextHashCode == myNewDocumentHashCode && myEditor.getContentComponent().hasFocus();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiFile getPsiFile() {
|
||||
ViewerTreeStructure treeStructure = (ViewerTreeStructure)myPsiTreeBuilder.getTreeStructure();
|
||||
final PsiElement root = treeStructure != null ? treeStructure.getRootPsiElement() : null;
|
||||
return root instanceof PsiFile ? (PsiFile)root : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeDocumentChange(DocumentEvent event) {
|
||||
|
||||
@@ -1297,7 +1265,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusGained(final FocusEvent e) {
|
||||
public void focusGained(@NotNull final FocusEvent e) {
|
||||
final Component from = e.getOppositeComponent();
|
||||
if (!e.isTemporary() && from != null && !myComboBox.isPopupVisible() && isUnder(from, myParent)) {
|
||||
myComboBox.setPopupVisible(true);
|
||||
|
||||
Reference in New Issue
Block a user