home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / ToolTipManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  7.1 KB  |  283 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.Frame;
  7. import java.awt.Point;
  8. import java.awt.Rectangle;
  9. import java.awt.Toolkit;
  10. import java.awt.event.MouseAdapter;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.event.MouseMotionListener;
  13. import java.util.EventObject;
  14.  
  15. public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
  16.    Timer enterTimer = new Timer(750, new insideTimerAction(this));
  17.    Timer exitTimer;
  18.    Timer insideTimer;
  19.    String toolTipText;
  20.    Point preferredLocation;
  21.    JComponent insideComponent;
  22.    MouseEvent mouseEvent;
  23.    boolean showImmediately;
  24.    static final ToolTipManager sharedInstance = new ToolTipManager();
  25.    Popup tipWindow;
  26.    JToolTip tip;
  27.    boolean enabled = true;
  28.    boolean mouseAboveToolTip = false;
  29.    private static final int INIT_POPUP = 0;
  30.    private static final int MEDIUM_POPUP = 1;
  31.    private static final int HEAVY_POPUP = 2;
  32.    private int tipType = 0;
  33.  
  34.    ToolTipManager() {
  35.       this.enterTimer.setRepeats(false);
  36.       this.exitTimer = new Timer(500, new outsideTimerAction(this));
  37.       this.exitTimer.setRepeats(false);
  38.       this.insideTimer = new Timer(4000, new stillInsideTimerAction(this));
  39.       this.insideTimer.setRepeats(false);
  40.    }
  41.  
  42.    public void setEnabled(boolean var1) {
  43.       this.enabled = var1;
  44.       if (!var1) {
  45.          this.hideTipWindow();
  46.       }
  47.  
  48.    }
  49.  
  50.    public boolean isEnabled() {
  51.       return this.enabled;
  52.    }
  53.  
  54.    public void setInitialDelay(int var1) {
  55.       this.enterTimer.setInitialDelay(var1);
  56.    }
  57.  
  58.    public int getInitialDelay() {
  59.       return this.enterTimer.getInitialDelay();
  60.    }
  61.  
  62.    public void setDismissDelay(int var1) {
  63.       this.insideTimer.setDelay(var1);
  64.    }
  65.  
  66.    public int getDismissDelay() {
  67.       return this.insideTimer.getDelay();
  68.    }
  69.  
  70.    public void setReshowDelay(int var1) {
  71.       this.exitTimer.setDelay(var1);
  72.    }
  73.  
  74.    public int getReshowDelay() {
  75.       return this.exitTimer.getDelay();
  76.    }
  77.  
  78.    void showTipWindow() {
  79.       if (this.insideComponent != null && this.insideComponent.isShowing()) {
  80.          if (this.enabled) {
  81.             Point var2 = this.insideComponent.getLocationOnScreen();
  82.             Dimension var3 = Toolkit.getDefaultToolkit().getScreenSize();
  83.             Point var4 = new Point();
  84.             this.hideTipWindow();
  85.             this.tip = this.insideComponent.createToolTip();
  86.             this.tip.setTipText(this.toolTipText);
  87.             Dimension var1 = this.tip.getPreferredSize();
  88.             switch (this.tipType) {
  89.                case 0:
  90.                   Container var5 = this.insideComponent.getParent();
  91.  
  92.                   for(; var5 != null; var5 = ((Component)var5).getParent()) {
  93.                      if (var5 instanceof JApplet) {
  94.                         this.tipType = 1;
  95.                         this.tipWindow = new PanelPopup(this, this.tip, var1);
  96.                      }
  97.                   }
  98.  
  99.                   if (this.tipType == 0) {
  100.                      this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
  101.                      this.tipType = 2;
  102.                   }
  103.                   break;
  104.                case 1:
  105.                   this.tipWindow = new PanelPopup(this, this.tip, var1);
  106.                   break;
  107.                case 2:
  108.                   this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
  109.                   break;
  110.                default:
  111.                   this.tipWindow = new WindowPopup(this, frameForComponent(this.insideComponent), this.tip, var1);
  112.             }
  113.  
  114.             this.tipWindow.addMouseListener(this);
  115.             if (this.preferredLocation != null) {
  116.                var4.x = var2.x + this.preferredLocation.x;
  117.                var4.y = var2.y + this.preferredLocation.y;
  118.             } else {
  119.                var4.x = var2.x + this.mouseEvent.getX();
  120.                var4.y = var2.y + this.mouseEvent.getY() + 20;
  121.                if (var4.x + var1.width > var3.width) {
  122.                   var4.x -= var1.width;
  123.                }
  124.  
  125.                if (var4.y + var1.height > var3.height) {
  126.                   var4.y -= var1.height + 20;
  127.                }
  128.             }
  129.  
  130.             this.tipWindow.show(this.insideComponent, var4.x, var4.y);
  131.             this.insideTimer.start();
  132.          }
  133.  
  134.       }
  135.    }
  136.  
  137.    void hideTipWindow() {
  138.       if (this.tipWindow != null) {
  139.          this.tipWindow.removeMouseListener(this);
  140.          this.tipWindow.hide();
  141.          this.tipWindow = null;
  142.          this.tip.getUI().uninstallUI(this.tip);
  143.          this.tip = null;
  144.          this.insideTimer.stop();
  145.       }
  146.  
  147.    }
  148.  
  149.    public static ToolTipManager sharedInstance() {
  150.       return sharedInstance;
  151.    }
  152.  
  153.    public void registerComponent(JComponent var1) {
  154.       ((Component)var1).removeMouseListener(this);
  155.       ((Component)var1).addMouseListener(this);
  156.    }
  157.  
  158.    public void unregisterComponent(JComponent var1) {
  159.       ((Component)var1).removeMouseListener(this);
  160.    }
  161.  
  162.    public void mouseEntered(MouseEvent var1) {
  163.       if (((EventObject)var1).getSource() != this.tipWindow) {
  164.          JComponent var2 = (JComponent)((EventObject)var1).getSource();
  165.          this.toolTipText = var2.getToolTipText(var1);
  166.          this.preferredLocation = var2.getToolTipLocation(var1);
  167.          this.exitTimer.stop();
  168.          Point var3 = var1.getPoint();
  169.          if (var3.x >= 0 && var3.x < var2.getWidth() && var3.y >= 0 && var3.y < var2.getHeight()) {
  170.             if (this.insideComponent != null) {
  171.                this.enterTimer.stop();
  172.                this.insideComponent = null;
  173.             }
  174.  
  175.             ((Component)var2).addMouseMotionListener(this);
  176.             this.insideComponent = var2;
  177.             if (this.toolTipText != null) {
  178.                this.mouseEvent = var1;
  179.                if (this.showImmediately) {
  180.                   this.showTipWindow();
  181.                   return;
  182.                }
  183.  
  184.                this.enterTimer.start();
  185.             }
  186.  
  187.          }
  188.       }
  189.    }
  190.  
  191.    public void mouseExited(MouseEvent var1) {
  192.       boolean var2 = true;
  193.       if (((EventObject)var1).getSource() == this.tipWindow) {
  194.          Container var3 = this.insideComponent.getTopLevelAncestor();
  195.          Rectangle var4 = this.tipWindow.getBounds();
  196.          Point var5 = var1.getPoint();
  197.          var5.x += var4.x;
  198.          var5.y += var4.y;
  199.          var4 = ((Component)var3).getBounds();
  200.          var5.x -= var4.x;
  201.          var5.y -= var4.y;
  202.          var5 = SwingUtilities.convertPoint((Component)null, var5, this.insideComponent);
  203.          if (var5.x >= 0 && var5.x < this.insideComponent.getWidth() && var5.y >= 0 && var5.y < this.insideComponent.getHeight()) {
  204.             var2 = false;
  205.          } else {
  206.             var2 = true;
  207.          }
  208.       } else if (((EventObject)var1).getSource() == this.insideComponent && this.tipWindow != null) {
  209.          Point var6 = SwingUtilities.convertPoint(this.insideComponent, var1.getPoint(), (Component)null);
  210.          Rectangle var8 = this.insideComponent.getTopLevelAncestor().getBounds();
  211.          var6.x += var8.x;
  212.          var6.y += var8.y;
  213.          var8 = this.tipWindow.getBounds();
  214.          if (var6.x >= var8.x && var6.x < var8.x + var8.width && var6.y >= var8.y && var6.y < var8.y + var8.height) {
  215.             var2 = false;
  216.          } else {
  217.             var2 = true;
  218.          }
  219.       }
  220.  
  221.       if (var2) {
  222.          this.enterTimer.stop();
  223.          if (this.insideComponent != null) {
  224.             this.insideComponent.removeMouseMotionListener(this);
  225.          }
  226.  
  227.          this.insideComponent = null;
  228.          this.toolTipText = null;
  229.          this.mouseEvent = null;
  230.          this.hideTipWindow();
  231.          this.exitTimer.start();
  232.       }
  233.  
  234.    }
  235.  
  236.    public void mousePressed(MouseEvent var1) {
  237.       this.hideTipWindow();
  238.       this.enterTimer.stop();
  239.       this.showImmediately = false;
  240.    }
  241.  
  242.    public void mouseDragged(MouseEvent var1) {
  243.    }
  244.  
  245.    public void mouseMoved(MouseEvent var1) {
  246.       JComponent var2 = (JComponent)((EventObject)var1).getSource();
  247.       String var3 = var2.getToolTipText(var1);
  248.       Point var4 = var2.getToolTipLocation(var1);
  249.       if (var3 == null && var4 == null) {
  250.          this.toolTipText = null;
  251.          this.preferredLocation = null;
  252.          this.mouseEvent = null;
  253.          this.hideTipWindow();
  254.          this.enterTimer.stop();
  255.          this.exitTimer.start();
  256.       } else {
  257.          this.mouseEvent = var1;
  258.          if ((var3 == null || !var3.equals(this.toolTipText)) && var3 != null || (var4 == null || !var4.equals(this.preferredLocation)) && var4 != null) {
  259.             this.toolTipText = var3;
  260.             this.preferredLocation = var4;
  261.             if (this.showImmediately) {
  262.                this.hideTipWindow();
  263.                this.showTipWindow();
  264.             } else {
  265.                this.enterTimer.restart();
  266.             }
  267.          } else if (this.tipWindow != null) {
  268.             this.insideTimer.restart();
  269.          } else {
  270.             this.enterTimer.restart();
  271.          }
  272.       }
  273.    }
  274.  
  275.    static Frame frameForComponent(Component var0) {
  276.       while(!(var0 instanceof Frame)) {
  277.          var0 = ((Component)var0).getParent();
  278.       }
  279.  
  280.       return (Frame)var0;
  281.    }
  282. }
  283.