/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.codeInsight.highlighting; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.Collection; /** * Allows to highlight areas of text and occurrences of PSI elements in the editor, and to remove the highlighting automatically * by some condition. * * @author max */ public abstract class HighlightManager { public static HighlightManager getInstance(Project project) { return project.getComponent(HighlightManager.class); } /** * Specifies that a highlighter added with {@link #addOccurrenceHighlight} should be removed when the user presses Esc. */ public static final int HIDE_BY_ESCAPE = 0x01; /** * Specifies that a highlighter added with {@link #addOccurrenceHighlight} should be removed when the user presses any key. */ public static final int HIDE_BY_ANY_KEY = 0x02; /** * Specifies that a highlighter added with {@link #addOccurrenceHighlight} should be removed when the editor text is changed. */ public static final int HIDE_BY_TEXT_CHANGE = 0x04; @MagicConstant(flags = {HIDE_BY_ESCAPE, HIDE_BY_ANY_KEY, HIDE_BY_TEXT_CHANGE}) public @interface HideFlags {} /** * Highlights a specified range of text in an editor. The highlighting is removed when the user presses the Esc key, and optionally * when the editor text is changed. If the highlighter added by this method needs to be removed * manually, {@link #removeSegmentHighlighter} must be used for that. * * @param editor the editor in which the highlighting is performed. * @param startOffset the start offset of the text range to highlight. * @param endOffset the end offset of the text range to highlight. * @param attributes the attributes to highlight the text with. * @param hideByTextChange if true, the highlighting is removed automatically if the editor text is changed. * @param outHighlighters if not null, the created {@link RangeHighlighter} object is added to this collection. */ public abstract void addRangeHighlight(@NotNull Editor editor, int startOffset, int endOffset, @NotNull TextAttributes attributes, boolean hideByTextChange, @Nullable Collection<RangeHighlighter> outHighlighters); /** * Highlights a specified range of text in an editor. The highlighting is removed when the user presses the Esc key or (optionally) * any other key, and optionally when the editor text is changed. If the highlighter added by this method needs to be removed * manually, {@link #removeSegmentHighlighter} must be used for that. * * @param editor the editor in which the highlighting is performed. * @param startOffset the start offset of the text range to highlight. * @param endOffset the end offset of the text range to highlight. * @param attributes the attributes to highlight the text with. * @param hideByTextChange if true, the highlighting is removed automatically if the editor text is changed. * @param hideByAnyKey if true, the highlighting is removed automatically when the user presses any key. * @param highlighters if not null, the created {@link RangeHighlighter} object is added to this collection. */ public abstract void addRangeHighlight(@NotNull Editor editor, int startOffset, int endOffset, @NotNull TextAttributes attributes, boolean hideByTextChange, boolean hideByAnyKey, @Nullable Collection<RangeHighlighter> highlighters); /** * Removes a range highlighter added by {@link #addRangeHighlight} or another method in this class. * * @param editor the editor in which the highlighter should be removed. * @param highlighter the highlighter to remove. * @return true if the remove was successful, false if the highlighter was not found in the editor. */ public abstract boolean removeSegmentHighlighter(@NotNull Editor editor, @NotNull RangeHighlighter highlighter); /** * Highlights the text ranges of the specified references in the specified editor. The highlighting is removed when the user presses * the Esc key, and optionally when the editor text is changed. * * @param editor the editor in which the highlighting is performed. * @param occurrences the references to highlight. * @param attributes the attributes to highlight the text with. * @param hideByTextChange if true, the highlighting is removed automatically if the editor text is changed. * @param outHighlighters if not null, the created {@link RangeHighlighter} objects are added to this collection. */ public abstract void addOccurrenceHighlights(@NotNull Editor editor, @NotNull PsiReference[] occurrences, @NotNull TextAttributes attributes, boolean hideByTextChange, @Nullable Collection<RangeHighlighter> outHighlighters); /** * Highlights the text ranges of the specified elements in the specified editor. The highlighting is removed when the user presses * the Esc key, and optionally when the editor text is changed. * * @param editor the editor in which the highlighting is performed. * @param elements the elements to highlight. * @param attributes the attributes to highlight the text with. * @param hideByTextChange if true, the highlighting is removed automatically if the editor text is changed. * @param outHighlighters if not null, the created {@link RangeHighlighter} objects are added to this collection. */ public abstract void addOccurrenceHighlights(@NotNull Editor editor, @NotNull PsiElement[] elements, @NotNull TextAttributes attributes, boolean hideByTextChange, @Nullable Collection<RangeHighlighter> outHighlighters); /** * Highlights a specified range of text in an editor and optionally adds a mark on the gutter. The highlighting is optionally removed * when the user presses the Esc key or any key, or when the editor text is changed. If the highlighter added by this method needs * to be removed manually, {@link #removeSegmentHighlighter} must be used for that. * * @param editor the editor in which the highlighting is performed. * @param start the start offset of the text range to highlight. * @param end the end offset of the text range to highlight. * @param attributes the attributes to highlight the text with. * @param flags the flags specifying when the highlighting is removed (a combination of * {@link #HIDE_BY_ESCAPE}, {@link #HIDE_BY_ANY_KEY} and {@link #HIDE_BY_TEXT_CHANGE}). * @param outHighlighters if not null, the created {@link RangeHighlighter} object is added to this collection. * @param scrollmarkColor if not null, a gutter mark with the specified color is added in addition to the editor highlight. */ public abstract void addOccurrenceHighlight(@NotNull Editor editor, int start, int end, TextAttributes attributes, @HideFlags int flags, @Nullable Collection<RangeHighlighter> outHighlighters, @Nullable Color scrollmarkColor); /** * @deprecated Use {@link #addOccurrenceHighlights(com.intellij.openapi.editor.Editor, com.intellij.psi.PsiElement[], com.intellij.openapi.editor.markup.TextAttributes, boolean, java.util.Collection)} instead (it does the same thing). */ public abstract void addElementsOccurrenceHighlights(@NotNull Editor editor, @NotNull PsiElement[] elements, @NotNull TextAttributes attributes, boolean hideByTextChange, @Nullable Collection<RangeHighlighter> outHighlighters); }