home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing;
-
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Frame;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Toolkit;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionListener;
- import java.util.EventObject;
-
- public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
- Timer enterTimer = new Timer(750, new insideTimerAction(this));
- Timer exitTimer;
- Timer insideTimer;
- String toolTipText;
- Point preferredLocation;
- JComponent insideComponent;
- MouseEvent mouseEvent;
- boolean showImmediately;
- static final ToolTipManager sharedInstance = new ToolTipManager();
- Popup tipWindow;
- JToolTip tip;
- boolean enabled = true;
- boolean mouseAboveToolTip = false;
- private static final int INIT_POPUP = 0;
- private static final int MEDIUM_POPUP = 1;
- private static final int HEAVY_POPUP = 2;
- private int tipType = 0;
-
- ToolTipManager() {
- this.enterTimer.setRepeats(false);
- this.exitTimer = new Timer(500, new outsideTimerAction(this));
- this.exitTimer.setRepeats(false);
- this.insideTimer = new Timer(4000, new stillInsideTimerAction(this));
- this.insideTimer.setRepeats(false);
- }
-
- public void setEnabled(boolean var1) {
- this.enabled = var1;
- if (!var1) {
- this.hideTipWindow();
- }
-
- }
-
- public boolean isEnabled() {
- return this.enabled;
- }
-
- public void setInitialDelay(int var1) {
- this.enterTimer.setInitialDelay(var1);
- }
-
- public int getInitialDelay() {
- return this.enterTimer.getInitialDelay();
- }
-
- public void setDismissDelay(int var1) {
- this.insideTimer.setDelay(var1);
- }
-
- public int getDismissDelay() {
- return this.insideTimer.getDelay();
- }
-
- public void setReshowDelay(int var1) {
- this.exitTimer.setDelay(var1);
- }
-
- public int getReshowDelay() {
- return this.exitTimer.getDelay();
- }
-
- void showTipWindow() {
- if (this.insideComponent != null && this.insideComponent.isShowing()) {
- if (this.enabled) {
- Point var2 = this.insideComponent.getLocationOnScreen();
- Dimension var3 = Toolkit.getDefaultToolkit().getScreenSize();
- Point var4 = new Point();
- this.hideTipWindow();
- this.tip = this.insideComponent.createToolTip();
- this.tip.setTipText(this.toolTipText);
- Dimension var1 = this.tip.getPreferredSize();
- switch (this.tipType) {
- case 0:
- Container var5 = this.insideComponent.getParent();
-
- for(; var5 != null; var5 = ((Component)var5).getParent()) {
- if (var5 instanceof JApplet) {
- this.tipType = 1;
- this.tipWindow = new PanelPopup(this, this.tip, var1);
- }
- }
-
- if (this.tipType == 0) {
- this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
- this.tipType = 2;
- }
- break;
- case 1:
- this.tipWindow = new PanelPopup(this, this.tip, var1);
- break;
- case 2:
- this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
- break;
- default:
- this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
- }
-
- this.tipWindow.addMouseListener(this);
- if (this.preferredLocation != null) {
- var4.x = var2.x + this.preferredLocation.x;
- var4.y = var2.y + this.preferredLocation.y;
- } else {
- var4.x = var2.x + this.mouseEvent.getX();
- var4.y = var2.y + this.mouseEvent.getY() + 20;
- if (var4.x + var1.width > var3.width) {
- var4.x -= var1.width;
- }
-
- if (var4.y + var1.height > var3.height) {
- var4.y -= var1.height + 20;
- }
- }
-
- this.tipWindow.show(this.insideComponent, var4.x, var4.y);
- this.insideTimer.start();
- }
-
- }
- }
-
- void hideTipWindow() {
- if (this.tipWindow != null) {
- this.tipWindow.removeMouseListener(this);
- this.tipWindow.hide();
- this.tipWindow = null;
- this.tip.getUI().uninstallUI(this.tip);
- this.tip = null;
- this.insideTimer.stop();
- }
-
- }
-
- public static ToolTipManager sharedInstance() {
- return sharedInstance;
- }
-
- public void registerComponent(JComponent var1) {
- ((Component)var1).removeMouseListener(this);
- ((Component)var1).addMouseListener(this);
- }
-
- public void unregisterComponent(JComponent var1) {
- ((Component)var1).removeMouseListener(this);
- }
-
- public void mouseEntered(MouseEvent var1) {
- if (((EventObject)var1).getSource() != this.tipWindow) {
- JComponent var2 = (JComponent)((EventObject)var1).getSource();
- this.toolTipText = var2.getToolTipText(var1);
- this.preferredLocation = var2.getToolTipLocation(var1);
- this.exitTimer.stop();
- Point var3 = var1.getPoint();
- if (var3.x >= 0 && var3.x < var2.getWidth() && var3.y >= 0 && var3.y < var2.getHeight()) {
- if (this.insideComponent != null) {
- this.enterTimer.stop();
- this.insideComponent = null;
- }
-
- ((Component)var2).addMouseMotionListener(this);
- this.insideComponent = var2;
- if (this.toolTipText != null) {
- this.mouseEvent = var1;
- if (this.showImmediately) {
- this.showTipWindow();
- return;
- }
-
- this.enterTimer.start();
- }
-
- }
- }
- }
-
- public void mouseExited(MouseEvent var1) {
- boolean var2 = true;
- if (((EventObject)var1).getSource() == this.tipWindow) {
- Container var3 = this.insideComponent.getTopLevelAncestor();
- Rectangle var4 = this.tipWindow.getBounds();
- Point var5 = var1.getPoint();
- var5.x += var4.x;
- var5.y += var4.y;
- var4 = ((Component)var3).getBounds();
- var5.x -= var4.x;
- var5.y -= var4.y;
- var5 = SwingUtilities.convertPoint((Component)null, var5, this.insideComponent);
- if (var5.x >= 0 && var5.x < this.insideComponent.getWidth() && var5.y >= 0 && var5.y < this.insideComponent.getHeight()) {
- var2 = false;
- } else {
- var2 = true;
- }
- } else if (((EventObject)var1).getSource() == this.insideComponent && this.tipWindow != null) {
- Point var6 = SwingUtilities.convertPoint(this.insideComponent, var1.getPoint(), (Component)null);
- Rectangle var8 = this.insideComponent.getTopLevelAncestor().getBounds();
- var6.x += var8.x;
- var6.y += var8.y;
- var8 = this.tipWindow.getBounds();
- if (var6.x >= var8.x && var6.x < var8.x + var8.width && var6.y >= var8.y && var6.y < var8.y + var8.height) {
- var2 = false;
- } else {
- var2 = true;
- }
- }
-
- if (var2) {
- this.enterTimer.stop();
- if (this.insideComponent != null) {
- this.insideComponent.removeMouseMotionListener(this);
- }
-
- this.insideComponent = null;
- this.toolTipText = null;
- this.mouseEvent = null;
- this.hideTipWindow();
- this.exitTimer.start();
- }
-
- }
-
- public void mousePressed(MouseEvent var1) {
- this.hideTipWindow();
- this.enterTimer.stop();
- this.showImmediately = false;
- }
-
- public void mouseDragged(MouseEvent var1) {
- }
-
- public void mouseMoved(MouseEvent var1) {
- JComponent var2 = (JComponent)((EventObject)var1).getSource();
- String var3 = var2.getToolTipText(var1);
- Point var4 = var2.getToolTipLocation(var1);
- if (var3 == null && var4 == null) {
- this.toolTipText = null;
- this.preferredLocation = null;
- this.mouseEvent = null;
- this.hideTipWindow();
- this.enterTimer.stop();
- this.exitTimer.start();
- } else {
- this.mouseEvent = var1;
- if ((var3 == null || !var3.equals(this.toolTipText)) && var3 != null || (var4 == null || !var4.equals(this.preferredLocation)) && var4 != null) {
- this.toolTipText = var3;
- this.preferredLocation = var4;
- if (this.showImmediately) {
- this.hideTipWindow();
- this.showTipWindow();
- } else {
- this.enterTimer.restart();
- }
- } else if (this.tipWindow != null) {
- this.insideTimer.restart();
- } else {
- this.enterTimer.restart();
- }
- }
- }
-
- static Frame frameForComponent(Component var0) {
- while(!(var0 instanceof Frame)) {
- var0 = ((Component)var0).getParent();
- }
-
- return (Frame)var0;
- }
- }
-