From 4e8756970c6d944c9df1cdd59e8fc87ba8bdac6d Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 29 Oct 2014 19:33:15 +0300 Subject: [PATCH] highlight element on breadcrumb hover #WEB-427 fixed --- .../breadcrumbs/BreadcrumbsXmlWrapper.java | 33 ++++++++++++++++--- .../xml/breadcrumbs/BreadcrumbsComponent.java | 3 ++ .../breadcrumbs/BreadcrumbsItemListener.java | 4 +-- .../XmlTagTreeHighlightingUtil.java | 4 +-- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java index bbee880bfde1..0ae4b53b8694 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java @@ -16,6 +16,8 @@ package com.intellij.xml.breadcrumbs; import com.intellij.application.options.editor.WebEditorOptions; +import com.intellij.codeInsight.daemon.impl.tagTreeHighlighting.XmlTagTreeHighlightingUtil; +import com.intellij.codeInsight.highlighting.HighlightManager; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.UISettingsListener; import com.intellij.lang.Language; @@ -25,10 +27,14 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.ScrollType; +import com.intellij.openapi.editor.colors.EditorColors; +import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorFontType; import com.intellij.openapi.editor.event.CaretAdapter; import com.intellij.openapi.editor.event.CaretEvent; import com.intellij.openapi.editor.event.CaretListener; +import com.intellij.openapi.editor.markup.RangeHighlighter; +import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -52,10 +58,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; -import java.util.Collection; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.PriorityQueue; +import java.util.*; /** * @author spleaner @@ -64,6 +67,7 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener myComponent; private final Project myProject; private Editor myEditor; + private Collection myHighlighed; private final VirtualFile myFile; private boolean myUserCaretChange; private final MergingUpdateQueue myQueue; @@ -383,6 +387,27 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener(1); + HighlightManager.getInstance(myProject).addRangeHighlight(myEditor, range.getStartOffset(), range.getEndOffset(), + attributes, true, true, myHighlighed); + } + } + @Nullable public static BreadcrumbsXmlWrapper getBreadcrumbsComponent(@NotNull Editor editor) { return editor.getUserData(BREADCRUMBS_COMPONENT_KEY); diff --git a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsComponent.java b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsComponent.java index 9cb570842442..a70254639ba7 100644 --- a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsComponent.java +++ b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsComponent.java @@ -121,6 +121,9 @@ public class BreadcrumbsComponent extends JComponent } myHovered = crumb; + for (BreadcrumbsItemListener listener : myListeners) { + listener.itemHovered(myHovered != null ? myHovered.myItem : null); + } repaint(); } diff --git a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsItemListener.java b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsItemListener.java index 0b74d342de56..e85b4d876113 100644 --- a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsItemListener.java +++ b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsItemListener.java @@ -16,12 +16,12 @@ package com.intellij.xml.breadcrumbs; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author spleaner */ public interface BreadcrumbsItemListener { - void itemSelected(@NotNull final T item, final int modifiers); - + void itemHovered(@Nullable final T item); } diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingUtil.java b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingUtil.java index bddbcd7bc4ef..289ae5e58507 100644 --- a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingUtil.java +++ b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingUtil.java @@ -33,7 +33,7 @@ import java.util.Set; /** * @author Eugene.Kudelevsky */ -class XmlTagTreeHighlightingUtil { +public class XmlTagTreeHighlightingUtil { private XmlTagTreeHighlightingUtil() { } @@ -76,7 +76,7 @@ class XmlTagTreeHighlightingUtil { return false; } - static Color makeTransparent(@NotNull Color color, @NotNull Color backgroundColor, double transparency) { + public static Color makeTransparent(@NotNull Color color, @NotNull Color backgroundColor, double transparency) { int r = makeTransparent(transparency, color.getRed(), backgroundColor.getRed()); int g = makeTransparent(transparency, color.getGreen(), backgroundColor.getGreen()); int b = makeTransparent(transparency, color.getBlue(), backgroundColor.getBlue());