traffic lights popup - undead

This commit is contained in:
Kirill Kalishev
2010-10-08 15:21:20 +04:00
parent 758c7d264a
commit becb3b9bc7
9 changed files with 52 additions and 23 deletions
@@ -111,8 +111,8 @@ public class DaemonTooltipRendererProvider implements ErrorStripTooltipRendererP
}
@Override
public TrafficTooltipRenderer createTrafficTooltipRenderer(Runnable onHide) {
return new TrafficTooltipRendererImpl(onHide);
public TrafficTooltipRenderer createTrafficTooltipRenderer(Runnable onHide, Editor editor) {
return new TrafficTooltipRendererImpl(onHide, editor);
}
private static class MyRenderer extends LineTooltipRenderer {
@@ -24,18 +24,20 @@ import com.intellij.openapi.editor.impl.EditorMarkupModelImpl;
import com.intellij.openapi.editor.impl.TrafficTooltipRenderer;
import com.intellij.ui.HintHint;
import com.intellij.ui.LightweightHint;
import com.intellij.util.ui.update.ComparableObject;
import java.awt.*;
/**
* User: cdr
*/
public class TrafficTooltipRendererImpl implements TrafficTooltipRenderer {
public class TrafficTooltipRendererImpl extends ComparableObject.Impl implements TrafficTooltipRenderer {
private TrafficProgressPanel myPanel;
private final Runnable onHide;
private TrafficLightRenderer myTrafficLightRenderer;
public TrafficTooltipRendererImpl(Runnable onHide) {
public TrafficTooltipRendererImpl(Runnable onHide, Editor editor) {
super(editor);
this.onHide = onHide;
}
@@ -69,9 +71,4 @@ public class TrafficTooltipRendererImpl implements TrafficTooltipRenderer {
repaintTooltipWindow();
return hint;
}
@Override
public boolean equals(Object obj) {
return obj.getClass() == getClass() && myTrafficLightRenderer == ((TrafficTooltipRendererImpl)obj).myTrafficLightRenderer;
}
}
@@ -26,7 +26,6 @@ import com.intellij.ui.LightweightHint;
import com.intellij.ui.awt.RelativePoint;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
@@ -57,7 +56,13 @@ public class TooltipController {
final boolean alignToRight,
@NotNull final TooltipGroup group, final HintHint hintHint) {
if (myCurrentTooltip == null || !myCurrentTooltip.isVisible()) {
myCurrentTooltipObject = null;
if (myCurrentTooltip != null) {
if (!IdeTooltipManager.getInstance().isQueuedToShow(myCurrentTooltip.getCurrentIdeTooltip())) {
myCurrentTooltipObject = null;
}
} else {
myCurrentTooltipObject = null;
}
}
if (Comparing.equal(tooltipObject, myCurrentTooltipObject)) {
@@ -17,11 +17,12 @@ package com.intellij.ide;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.util.ui.update.ComparableObject;
import javax.swing.*;
import java.awt.*;
public class IdeTooltip {
public class IdeTooltip extends ComparableObject.Impl {
private Component myComponent;
private Point myPoint;
@@ -34,7 +35,8 @@ public class IdeTooltip {
private boolean myToCenterIfSmall = true;
private boolean myHighlighter;
public IdeTooltip(Component component, Point point, JComponent tipComponent) {
public IdeTooltip(Component component, Point point, JComponent tipComponent, Object... identity) {
super(identity);
myComponent = component;
myPoint = point;
myTipComponent = tipComponent;
@@ -20,6 +20,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.ui.popup.BalloonBuilder;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
@@ -31,7 +32,9 @@ import com.intellij.ui.HintHint;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.util.Alarm;
import com.intellij.util.IJSwingUtilities;
import com.intellij.util.containers.ComparatorUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.update.ComparableObjectCheck;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -72,7 +75,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
private IdeTooltip myCurrentTooltip;
private Runnable myShowRequest;
private IdeTooltip myQueuedTooltip;
public IdeTooltipManager(JBPopupFactory popupFactory) {
@@ -151,7 +154,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
}
private void queueShow(final JComponent c, final MouseEvent me, final boolean toCenter) {
final IdeTooltip tooltip = new IdeTooltip(c, me.getPoint(), null) {
final IdeTooltip tooltip = new IdeTooltip(c, me.getPoint(), null, new Object()) {
@Override
protected boolean beforeShow() {
myCurrentEvent = me;
@@ -179,6 +182,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
hideCurrent(null);
myQueuedComponent = tooltip.getComponent();
myQueuedTooltip = tooltip;
myShowRequest = new Runnable() {
@Override
@@ -265,6 +269,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
myCurrentTooltip = tooltip;
myShowRequest = null;
myQueuedComponent = null;
myQueuedTooltip = null;
myCurrentTipUi.show(new RelativePoint(tooltip.getComponent(), effectivePoint), tooltip.getPreferredPosition());
myAlarm.addRequest(new Runnable() {
@@ -328,6 +333,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
private boolean hideCurrent(@Nullable MouseEvent me) {
myShowRequest = null;
myQueuedComponent = null;
myQueuedTooltip = null;
if (myCurrentTooltip == null) return true;
@@ -378,6 +384,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
myCurrentTipUi = null;
myCurrentComponent = null;
myQueuedComponent = null;
myQueuedTooltip = null;
myCurrentEvent = null;
myCurrentTipIsCentered = false;
myX = -1;
@@ -538,4 +545,8 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener
public String getComponentName() {
return "IDE Tooltip Manager";
}
public boolean isQueuedToShow(IdeTooltip tooltip) {
return Comparing.equal(myQueuedTooltip, tooltip);
}
}
@@ -20,6 +20,7 @@
package com.intellij.openapi.editor.ex;
import com.intellij.codeInsight.hint.TooltipRenderer;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.impl.TrafficTooltipRenderer;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import org.jetbrains.annotations.NotNull;
@@ -33,5 +34,5 @@ public interface ErrorStripTooltipRendererProvider {
TooltipRenderer calcTooltipRenderer(@NotNull String text);
TooltipRenderer calcTooltipRenderer(@NotNull String text, int width);
TrafficTooltipRenderer createTrafficTooltipRenderer(Runnable onHide);
TrafficTooltipRenderer createTrafficTooltipRenderer(Runnable onHide, Editor editor);
}
@@ -608,17 +608,15 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark
private TrafficTooltipRenderer myTrafficTooltipRenderer;
private void showTrafficLightTooltip(MouseEvent e) {
//final String tooltipMessage = myErrorStripeRenderer.getTooltipMessage();
//if (tooltipMessage == null) return;
if (myTrafficTooltipRenderer == null) {
myTrafficTooltipRenderer = myTooltipRendererProvider.createTrafficTooltipRenderer(new Runnable() {
@Override
public void run() {
myTrafficTooltipRenderer = null;
}
});
}, myEditor);
}
showTooltip(e, myTrafficTooltipRenderer, new HintHint(e).setAwtTooltip(true).setPreferredPosition(Balloon.Position.atLeft));
showTooltip(e, myTrafficTooltipRenderer, new HintHint(e).setAwtTooltip(true).setMayCenterPosition(true).setContentActive(false).setPreferredPosition(Balloon.Position.atLeft));
}
private void repaintTrafficTooltip() {
@@ -655,6 +653,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark
scrollbar.addMouseListener(handler);
myErrorStripeButton.addMouseListener(myHandler);
}
}
private void showTooltip(MouseEvent e, final TooltipRenderer tooltipObject, HintHint hintHint) {
@@ -737,7 +736,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark
}
@Override
public TrafficTooltipRenderer createTrafficTooltipRenderer(final Runnable onHide) {
public TrafficTooltipRenderer createTrafficTooltipRenderer(final Runnable onHide, Editor editor) {
return new TrafficTooltipRenderer() {
@Override
public void repaintTooltipWindow() {
@@ -36,6 +36,7 @@ public class HintHint {
private boolean myContentActive = true;
private boolean myQuickHint = false;
private boolean myMayCenterTooltip = false;
public HintHint(MouseEvent e) {
this(e.getComponent(), e.getPoint());
@@ -55,6 +56,15 @@ public class HintHint {
return this;
}
public HintHint setMayCenterPosition(boolean mayCenter) {
myMayCenterTooltip = mayCenter;
return this;
}
public boolean isMayCenterTooltip() {
return myMayCenterTooltip;
}
public HintHint setPreferredPosition(Balloon.Position position) {
myPreferredPosition = position;
return this;
@@ -127,7 +127,7 @@ public class LightweightHint extends UserDataHolderBase implements Hint {
if (hintHint.isAwtTooltip()) {
IdeTooltip tooltip = new IdeTooltip(hintHint.getOriginalComponent(), hintHint.getOriginalPoint(), myComponent) {
IdeTooltip tooltip = new IdeTooltip(hintHint.getOriginalComponent(), hintHint.getOriginalPoint(), myComponent, hintHint, myComponent) {
@Override
protected boolean canAutohideOn(TooltipEvent event) {
if (event.getInputEvent() instanceof MouseEvent) {
@@ -147,7 +147,7 @@ public class LightweightHint extends UserDataHolderBase implements Hint {
public boolean canBeDismissedOnTimeout() {
return false;
}
}.setToCenterIfSmall(false).setPreferredPosition(hintHint.getPreferredPosition()).setHighlighterType(hintHint.isHightlighterType());
}.setToCenterIfSmall(hintHint.isMayCenterTooltip()).setPreferredPosition(hintHint.getPreferredPosition()).setHighlighterType(hintHint.isHightlighterType());
myComponent.validate();
myCurrentIdeTooltip = IdeTooltipManager.getInstance().show(tooltip, false);
@@ -352,4 +352,8 @@ public class LightweightHint extends UserDataHolderBase implements Hint {
public boolean canControlAutoHide() {
return myCurrentIdeTooltip != null && myCurrentIdeTooltip.getTipComponent().isShowing() ;
}
public IdeTooltip getCurrentIdeTooltip() {
return myCurrentIdeTooltip;
}
}