mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
traffic lights popup - undead
This commit is contained in:
+2
-2
@@ -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 {
|
||||
|
||||
+4
-7
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -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);
|
||||
}
|
||||
+4
-5
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user