From 0441a534abf3512856aa6529fba5b581840eed92 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 6 Feb 2014 13:35:06 +0100 Subject: [PATCH] showInBestPositionFor editor --- .../impl/evaluate/quick/XValueHint.java | 2 +- .../xdebugger/impl/ui/DebuggerUIUtil.java | 20 ++++++++++--------- .../impl/ui/tree/nodes/XValueNodeImpl.java | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java index 09456d56580f..415742b6a700 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java @@ -108,7 +108,7 @@ public class XValueHint extends AbstractValueHint { component.append(myFullValueEvaluator.getLinkText(), XDebuggerTreeNodeHyperlink.TEXT_ATTRIBUTES, new Consumer() { @Override public void consume(MouseEvent event) { - DebuggerUIUtil.showValuePopup(myFullValueEvaluator, event, getProject()); + DebuggerUIUtil.showValuePopup(myFullValueEvaluator, event, getProject(), getEditor()); } }); LinkMouseListenerBase.installSingleTagOn(component); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java index 80c9504b0d06..abce43b858ec 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java @@ -20,10 +20,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.Balloon; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.ui.popup.JBPopupListener; -import com.intellij.openapi.ui.popup.LightweightWindowEvent; +import com.intellij.openapi.ui.popup.*; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.DimensionService; import com.intellij.openapi.util.Ref; @@ -99,12 +96,12 @@ public class DebuggerUIUtil { return new RelativePoint(editor.getContentComponent(), p); } - public static void showValuePopup(@NotNull XFullValueEvaluator text, @NotNull MouseEvent event, @NotNull Project project) { + public static void showValuePopup(@NotNull XFullValueEvaluator evaluator, @NotNull MouseEvent event, @NotNull Project project, @Nullable Editor editor) { EditorTextField textArea = new TextViewer("Evaluating...", project); textArea.setBackground(HintUtil.INFORMATION_COLOR); final FullValueEvaluationCallbackImpl callback = new FullValueEvaluationCallbackImpl(textArea); - text.startEvaluation(callback); + evaluator.startEvaluation(callback); Dimension size = DimensionService.getInstance().getSize(FULL_VALUE_POPUP_DIMENSION_KEY, project); if (size == null) { @@ -114,7 +111,7 @@ public class DebuggerUIUtil { textArea.setPreferredSize(size); - JBPopupFactory.getInstance().createComponentPopupBuilder(textArea, null) + JBPopup popup = JBPopupFactory.getInstance().createComponentPopupBuilder(textArea, null) .setResizable(true) .setMovable(true) .setDimensionServiceKey(project, FULL_VALUE_POPUP_DIMENSION_KEY, false) @@ -125,8 +122,13 @@ public class DebuggerUIUtil { callback.setObsolete(); return true; } - }) - .createPopup().show(new RelativePoint(event.getComponent(), new Point(event.getX() - size.width, event.getY() - size.height))); + }).createPopup(); + if (editor == null) { + popup.show(new RelativePoint(event.getComponent(), new Point(event.getX() - size.width, event.getY() - size.height))); + } + else { + popup.showInBestPositionFor(editor); + } } public static void showXBreakpointEditorBalloon(final Project project, diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java index ea1a2fdd2332..8b679f120739 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java @@ -183,7 +183,7 @@ public class XValueNodeImpl extends XValueContainerNode implements XValu return new XDebuggerTreeNodeHyperlink(myFullValueEvaluator.getLinkText()) { @Override public void onClick(MouseEvent event) { - DebuggerUIUtil.showValuePopup(myFullValueEvaluator, event, myTree.getProject()); + DebuggerUIUtil.showValuePopup(myFullValueEvaluator, event, myTree.getProject(), null); } }; }