diff options
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java')
-rw-r--r-- | platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java index aa3ca82725b0..e2c16bfbc355 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UIUtil.java @@ -15,17 +15,14 @@ import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.*; import com.intellij.structuralsearch.*; import com.intellij.structuralsearch.plugin.StructuralReplaceAction; import com.intellij.structuralsearch.plugin.StructuralSearchAction; import com.intellij.structuralsearch.plugin.replace.ui.ReplaceConfiguration; -import com.intellij.structuralsearch.plugin.util.SmartPsiPointer; +import com.intellij.ui.HintHint; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -41,6 +38,7 @@ import java.awt.*; public class UIUtil { static Key<SubstitutionShortInfoHandler> LISTENER_KEY = Key.create("sslistener.key"); private static final String MODIFY_EDITOR_CONTENT = SSRBundle.message("modify.editor.content.command.name"); + private static final TooltipGroup SS_INFO_TOOLTIP_GROUP = new TooltipGroup("SS_INFO_TOOLTIP_GROUP", 0); @NonNls private static final String SS_GROUP = "structuralsearchgroup"; @NotNull @@ -191,18 +189,6 @@ public class UIUtil { buf.append(str); } - public static void navigate(PsiElement result) { - FileEditorManager.getInstance(result.getProject()).openTextEditor( - new OpenFileDescriptor(result.getProject(), result.getContainingFile().getVirtualFile(), result.getTextOffset()), true); - } - - public static void navigate(MatchResult result) { - final SmartPsiPointer ref = result.getMatchRef(); - - FileEditorManager.getInstance(ref.getProject()) - .openTextEditor(new OpenFileDescriptor(ref.getProject(), ref.getFile(), ref.getOffset()), true); - } - public static void invokeAction(Configuration config, SearchContext context) { if (config instanceof SearchConfiguration) { StructuralSearchAction.triggerAction(config, context); @@ -212,22 +198,27 @@ public class UIUtil { } } - static void showTooltip(@NotNull Editor editor, final int start, int end, @NotNull String text, @NotNull TooltipGroup group) { - Rectangle visibleArea = editor.getScrollingModel().getVisibleArea(); - Point top = editor.logicalPositionToXY(editor.offsetToLogicalPosition(start)); + static void showTooltip(@NotNull Editor editor, final int start, int end, @NotNull String text) { + final Rectangle visibleArea = editor.getScrollingModel().getVisibleArea(); + final Point left = editor.logicalPositionToXY(editor.offsetToLogicalPosition(start)); final int documentLength = editor.getDocument().getTextLength(); if (end >= documentLength) end = documentLength; - Point bottom = editor.logicalPositionToXY(editor.offsetToLogicalPosition(end)); + final Point right = editor.logicalPositionToXY(editor.offsetToLogicalPosition(end)); - Point bestPoint = new Point(top.x, bottom.y + editor.getLineHeight()); + final Point bestPoint = new Point(left.x + (right.x - left.x) / 2, right.y + editor.getLineHeight() / 2); - if (!visibleArea.contains(bestPoint)) { - int defaultOffset = editor.logicalPositionToOffset(editor.xyToLogicalPosition(new Point(0, 0))); - bestPoint = editor.logicalPositionToXY(editor.offsetToLogicalPosition(defaultOffset)); + if (visibleArea.x > bestPoint.x) { + bestPoint.x = visibleArea.x; + } + else if (visibleArea.x + visibleArea.width < bestPoint.x) { + bestPoint.x = visibleArea.x + visibleArea.width - 5; } - Point p = SwingUtilities.convertPoint(editor.getContentComponent(), bestPoint, editor.getComponent().getRootPane().getLayeredPane()); - TooltipController.getInstance().showTooltip(editor, p, text, false, group); + final Point p = SwingUtilities.convertPoint(editor.getContentComponent(), bestPoint, + editor.getComponent().getRootPane().getLayeredPane()); + final HintHint hint = new HintHint(editor, bestPoint).setAwtTooltip(true).setHighlighterType(true) + .setCalloutShift(editor.getLineHeight() / 2 - 1); + TooltipController.getInstance().showTooltip(editor, p, text, visibleArea.width, false, SS_INFO_TOOLTIP_GROUP, hint); } public static void updateHighlighter(Editor editor, StructuralSearchProfile profile) { |