home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / ToolTipManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  8.9 KB  |  434 lines

  1. package javax.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.Window;
  11. import java.awt.event.FocusListener;
  12. import java.awt.event.MouseAdapter;
  13. import java.awt.event.MouseEvent;
  14. import java.awt.event.MouseMotionListener;
  15. import java.util.EventObject;
  16.  
  17. public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
  18.    Timer enterTimer = new Timer(750, new insideTimerAction(this));
  19.    Timer exitTimer;
  20.    Timer insideTimer;
  21.    String toolTipText;
  22.    Point preferredLocation;
  23.    JComponent insideComponent;
  24.    MouseEvent mouseEvent;
  25.    boolean showImmediately;
  26.    static final ToolTipManager sharedInstance = new ToolTipManager();
  27.    Popup tipWindow;
  28.    JToolTip tip;
  29.    private PopupFactory popupFactory = new DefaultPopupFactory();
  30.    private Rectangle popupRect = null;
  31.    private Rectangle popupFrameRect = null;
  32.    boolean enabled = true;
  33.    boolean mouseAboveToolTip = false;
  34.    private boolean tipShowing = false;
  35.    private long timerEnter = 0L;
  36.    private KeyStroke postTip;
  37.    private KeyStroke hideTip;
  38.    private Action postTipAction;
  39.    private Action hideTipAction;
  40.    private FocusListener focusChangeListener = null;
  41.    protected boolean lightWeightPopupEnabled = true;
  42.    protected boolean heavyWeightPopupEnabled = false;
  43.  
  44.    ToolTipManager() {
  45.       this.enterTimer.setRepeats(false);
  46.       this.exitTimer = new Timer(500, new outsideTimerAction(this));
  47.       this.exitTimer.setRepeats(false);
  48.       this.insideTimer = new Timer(4000, new stillInsideTimerAction(this));
  49.       this.insideTimer.setRepeats(false);
  50.       this.postTip = KeyStroke.getKeyStroke(112, 2);
  51.       this.postTipAction = new 1(this);
  52.       this.hideTip = KeyStroke.getKeyStroke(27, 0);
  53.       this.hideTipAction = new 2(this);
  54.    }
  55.  
  56.    public void setEnabled(boolean var1) {
  57.       this.enabled = var1;
  58.       if (!var1) {
  59.          this.hideTipWindow();
  60.       }
  61.  
  62.    }
  63.  
  64.    public boolean isEnabled() {
  65.       return this.enabled;
  66.    }
  67.  
  68.    public void setLightWeightPopupEnabled(boolean var1) {
  69.       this.popupFactory.setLightWeightPopupEnabled(var1);
  70.    }
  71.  
  72.    public boolean isLightWeightPopupEnabled() {
  73.       return this.popupFactory.isLightWeightPopupEnabled();
  74.    }
  75.  
  76.    public void setInitialDelay(int var1) {
  77.       this.enterTimer.setInitialDelay(var1);
  78.    }
  79.  
  80.    public int getInitialDelay() {
  81.       return this.enterTimer.getInitialDelay();
  82.    }
  83.  
  84.    public void setDismissDelay(int var1) {
  85.       this.insideTimer.setInitialDelay(var1);
  86.    }
  87.  
  88.    public int getDismissDelay() {
  89.       return this.insideTimer.getInitialDelay();
  90.    }
  91.  
  92.    public void setReshowDelay(int var1) {
  93.       this.exitTimer.setInitialDelay(var1);
  94.    }
  95.  
  96.    public int getReshowDelay() {
  97.       return this.exitTimer.getInitialDelay();
  98.    }
  99.  
  100.    void showTipWindow() {
  101.       if (this.insideComponent != null && this.insideComponent.isShowing()) {
  102.          if (this.enabled) {
  103.             Point var2 = this.insideComponent.getLocationOnScreen();
  104.             Dimension var3 = Toolkit.getDefaultToolkit().getScreenSize();
  105.             Point var4 = new Point();
  106.             boolean var5 = SwingUtilities.isLeftToRight(this.insideComponent);
  107.             this.hideTipWindow();
  108.             this.tip = this.insideComponent.createToolTip();
  109.             this.tip.setTipText(this.toolTipText);
  110.             Dimension var1 = this.tip.getPreferredSize();
  111.             if (this.preferredLocation != null) {
  112.                var4.x = var2.x + this.preferredLocation.x;
  113.                var4.y = var2.y + this.preferredLocation.y;
  114.                if (!var5) {
  115.                   var4.x -= var1.width;
  116.                }
  117.             } else {
  118.                var4.x = var2.x + this.mouseEvent.getX();
  119.                var4.y = var2.y + this.mouseEvent.getY() + 20;
  120.                if (!var5 && var4.x - var1.width >= 0) {
  121.                   var4.x -= var1.width;
  122.                }
  123.  
  124.                if (var4.x + var1.width > var3.width) {
  125.                   var4.x -= var1.width;
  126.                }
  127.  
  128.                if (var4.y + var1.height > var3.height) {
  129.                   var4.y -= var1.height + 20;
  130.                }
  131.             }
  132.  
  133.             if (!this.heavyWeightPopupEnabled) {
  134.                if (this.popupRect == null) {
  135.                   this.popupRect = new Rectangle();
  136.                }
  137.  
  138.                this.popupRect.setBounds(var4.x, var4.y, var1.width, var1.height);
  139.                int var6 = this.getPopupFitHeight(this.popupRect, this.insideComponent);
  140.                int var7 = this.getPopupFitWidth(this.popupRect, this.insideComponent);
  141.                if (var6 > 0) {
  142.                   var4.y -= var6;
  143.                }
  144.  
  145.                if (var7 > 0) {
  146.                   var4.x -= var7;
  147.                }
  148.             }
  149.  
  150.             this.tipWindow = this.popupFactory.getPopup(this.tip, this.insideComponent, var4.x, var4.y);
  151.             if (this.tipWindow instanceof Window) {
  152.                ((Window)this.tipWindow).addMouseListener(this);
  153.             }
  154.  
  155.             this.tipWindow.show(this.insideComponent);
  156.             this.insideTimer.start();
  157.             this.timerEnter = System.currentTimeMillis();
  158.             this.tipShowing = true;
  159.          }
  160.  
  161.       }
  162.    }
  163.  
  164.    void hideTipWindow() {
  165.       if (this.tipWindow != null) {
  166.          if (this.tipWindow instanceof Window) {
  167.             ((Window)this.tipWindow).removeMouseListener(this);
  168.          }
  169.  
  170.          this.tipWindow.hide();
  171.          this.tipWindow = null;
  172.          this.tipShowing = false;
  173.          this.timerEnter = 0L;
  174.          this.tip.getUI().uninstallUI(this.tip);
  175.          this.tip = null;
  176.          this.insideTimer.stop();
  177.       }
  178.  
  179.    }
  180.  
  181.    public static ToolTipManager sharedInstance() {
  182.       return sharedInstance;
  183.    }
  184.  
  185.    public void registerComponent(JComponent var1) {
  186.       ((Component)var1).removeMouseListener(this);
  187.       ((Component)var1).addMouseListener(this);
  188.       if (this.shouldRegisterBindings(var1)) {
  189.          InputMap var2 = var1.getInputMap(0);
  190.          ActionMap var3 = var1.getActionMap();
  191.          if (var2 != null && var3 != null) {
  192.             var2.put(this.postTip, "postTip");
  193.             var2.put(this.hideTip, "hideTip");
  194.             var3.put("postTip", this.postTipAction);
  195.             var3.put("hideTip", this.hideTipAction);
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    public void unregisterComponent(JComponent var1) {
  202.       ((Component)var1).removeMouseListener(this);
  203.       if (this.shouldRegisterBindings(var1)) {
  204.          InputMap var2 = var1.getInputMap(0);
  205.          ActionMap var3 = var1.getActionMap();
  206.          if (var2 != null && var3 != null) {
  207.             var2.remove(this.postTip);
  208.             var2.remove(this.hideTip);
  209.             var3.remove("postTip");
  210.             var3.remove("hideTip");
  211.          }
  212.       }
  213.  
  214.    }
  215.  
  216.    private boolean shouldRegisterBindings(JComponent var1) {
  217.       InputMap var2;
  218.       for(var2 = var1.getInputMap(0, false); var2 != null && var2.size() == 0; var2 = var2.getParent()) {
  219.       }
  220.  
  221.       return var2 != null;
  222.    }
  223.  
  224.    public void mouseEntered(MouseEvent var1) {
  225.       if (!this.tipShowing || this.lightWeightPopupEnabled || System.currentTimeMillis() - this.timerEnter >= 200L) {
  226.          if (((EventObject)var1).getSource() != this.tipWindow) {
  227.             JComponent var2 = (JComponent)((EventObject)var1).getSource();
  228.             this.toolTipText = var2.getToolTipText(var1);
  229.             this.preferredLocation = var2.getToolTipLocation(var1);
  230.             this.exitTimer.stop();
  231.             Point var3 = var1.getPoint();
  232.             if (var3.x >= 0 && var3.x < var2.getWidth() && var3.y >= 0 && var3.y < var2.getHeight()) {
  233.                if (this.insideComponent != null) {
  234.                   this.enterTimer.stop();
  235.                   this.insideComponent = null;
  236.                }
  237.  
  238.                ((Component)var2).addMouseMotionListener(this);
  239.                this.insideComponent = var2;
  240.                if (this.tipWindow != null) {
  241.                   if (this.heavyWeightPopupEnabled) {
  242.                      return;
  243.                   }
  244.  
  245.                   this.mouseEvent = var1;
  246.                   if (this.showImmediately) {
  247.                      this.showTipWindow();
  248.                   } else {
  249.                      this.enterTimer.start();
  250.                   }
  251.                }
  252.  
  253.             }
  254.          }
  255.       }
  256.    }
  257.  
  258.    public void mouseExited(MouseEvent var1) {
  259.       if (!this.tipShowing || this.lightWeightPopupEnabled || System.currentTimeMillis() - this.timerEnter >= 200L) {
  260.          boolean var2 = true;
  261.          if (this.insideComponent == null) {
  262.          }
  263.  
  264.          if (((EventObject)var1).getSource() == this.tipWindow) {
  265.             Container var3 = this.insideComponent.getTopLevelAncestor();
  266.             Rectangle var4 = this.tipWindow.getBoundsOnScreen();
  267.             Point var5 = var1.getPoint();
  268.             var5.x += var4.x;
  269.             var5.y += var4.y;
  270.             var4 = ((Component)var3).getBounds();
  271.             var5.x -= var4.x;
  272.             var5.y -= var4.y;
  273.             var5 = SwingUtilities.convertPoint((Component)null, var5, this.insideComponent);
  274.             if (var5.x >= 0 && var5.x < this.insideComponent.getWidth() && var5.y >= 0 && var5.y < this.insideComponent.getHeight()) {
  275.                var2 = false;
  276.             } else {
  277.                var2 = true;
  278.             }
  279.          } else if (((EventObject)var1).getSource() == this.insideComponent && this.tipWindow != null) {
  280.             Point var6 = SwingUtilities.convertPoint(this.insideComponent, var1.getPoint(), (Component)null);
  281.             Rectangle var8 = this.insideComponent.getTopLevelAncestor().getBounds();
  282.             var6.x += var8.x;
  283.             var6.y += var8.y;
  284.             var8 = this.tipWindow.getBoundsOnScreen();
  285.             if (var6.x >= var8.x && var6.x < var8.x + var8.width && var6.y >= var8.y && var6.y < var8.y + var8.height) {
  286.                var2 = false;
  287.             } else {
  288.                var2 = true;
  289.             }
  290.          }
  291.  
  292.          if (var2) {
  293.             this.enterTimer.stop();
  294.             if (this.insideComponent != null) {
  295.                this.insideComponent.removeMouseMotionListener(this);
  296.             }
  297.  
  298.             this.insideComponent = null;
  299.             this.toolTipText = null;
  300.             this.mouseEvent = null;
  301.             this.hideTipWindow();
  302.             this.exitTimer.start();
  303.          }
  304.  
  305.       }
  306.    }
  307.  
  308.    public void mousePressed(MouseEvent var1) {
  309.       this.hideTipWindow();
  310.       this.enterTimer.stop();
  311.       this.showImmediately = false;
  312.    }
  313.  
  314.    public void mouseDragged(MouseEvent var1) {
  315.    }
  316.  
  317.    public void mouseMoved(MouseEvent var1) {
  318.       JComponent var2 = (JComponent)((EventObject)var1).getSource();
  319.       String var3 = var2.getToolTipText(var1);
  320.       Point var4 = var2.getToolTipLocation(var1);
  321.       if (var3 == null && var4 == null) {
  322.          this.toolTipText = null;
  323.          this.preferredLocation = null;
  324.          this.mouseEvent = null;
  325.          this.hideTipWindow();
  326.          this.enterTimer.stop();
  327.          this.exitTimer.start();
  328.       } else {
  329.          this.mouseEvent = var1;
  330.          if ((var3 != null && var3.equals(this.toolTipText) || var3 == null) && (var4 != null && var4.equals(this.preferredLocation) || var4 == null)) {
  331.             if (this.tipWindow != null) {
  332.                this.insideTimer.restart();
  333.             } else {
  334.                this.enterTimer.restart();
  335.             }
  336.          } else {
  337.             this.toolTipText = var3;
  338.             this.preferredLocation = var4;
  339.             if (this.showImmediately) {
  340.                this.hideTipWindow();
  341.                this.showTipWindow();
  342.             } else {
  343.                this.enterTimer.restart();
  344.             }
  345.          }
  346.       }
  347.  
  348.    }
  349.  
  350.    static Frame frameForComponent(Component var0) {
  351.       while(!(var0 instanceof Frame)) {
  352.          var0 = ((Component)var0).getParent();
  353.       }
  354.  
  355.       return (Frame)var0;
  356.    }
  357.  
  358.    private FocusListener createFocusChangeListener() {
  359.       return new 3(this);
  360.    }
  361.  
  362.    private int getPopupFitWidth(Rectangle var1, Component var2) {
  363.       if (var2 != null) {
  364.          for(Container var3 = var2.getParent(); var3 != null; var3 = ((Component)var3).getParent()) {
  365.             if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
  366.                return this.getWidthAdjust(((Component)var3).getBounds(), var1);
  367.             }
  368.  
  369.             if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
  370.                if (this.popupFrameRect == null) {
  371.                   this.popupFrameRect = new Rectangle();
  372.                }
  373.  
  374.                Point var4 = ((Component)var3).getLocationOnScreen();
  375.                this.popupFrameRect.setBounds(var4.x, var4.y, ((Component)var3).getBounds().width, ((Component)var3).getBounds().height);
  376.                return this.getWidthAdjust(this.popupFrameRect, var1);
  377.             }
  378.          }
  379.       }
  380.  
  381.       return 0;
  382.    }
  383.  
  384.    private int getPopupFitHeight(Rectangle var1, Component var2) {
  385.       if (var2 != null) {
  386.          for(Container var3 = var2.getParent(); var3 != null; var3 = ((Component)var3).getParent()) {
  387.             if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
  388.                return this.getHeightAdjust(((Component)var3).getBounds(), var1);
  389.             }
  390.  
  391.             if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
  392.                if (this.popupFrameRect == null) {
  393.                   this.popupFrameRect = new Rectangle();
  394.                }
  395.  
  396.                Point var4 = ((Component)var3).getLocationOnScreen();
  397.                this.popupFrameRect.setBounds(var4.x, var4.y, ((Component)var3).getBounds().width, ((Component)var3).getBounds().height);
  398.                return this.getHeightAdjust(this.popupFrameRect, var1);
  399.             }
  400.          }
  401.       }
  402.  
  403.       return 0;
  404.    }
  405.  
  406.    private int getHeightAdjust(Rectangle var1, Rectangle var2) {
  407.       return var2.y >= var1.y && var2.y + var2.height <= var1.y + var1.height ? 0 : var2.y + var2.height - (var1.y + var1.height) + 5;
  408.    }
  409.  
  410.    private int getWidthAdjust(Rectangle var1, Rectangle var2) {
  411.       return var2.x >= var1.x && var2.x + var2.width <= var1.x + var1.width ? 0 : var2.x + var2.width - (var1.x + var1.width) + 5;
  412.    }
  413.  
  414.    // $FF: synthetic method
  415.    static FocusListener access$000(ToolTipManager var0) {
  416.       return var0.focusChangeListener;
  417.    }
  418.  
  419.    // $FF: synthetic method
  420.    static FocusListener access$002(ToolTipManager var0, FocusListener var1) {
  421.       return var0.focusChangeListener = var1;
  422.    }
  423.  
  424.    // $FF: synthetic method
  425.    static FocusListener access$100(ToolTipManager var0) {
  426.       return var0.createFocusChangeListener();
  427.    }
  428.  
  429.    // $FF: synthetic method
  430.    static boolean access$200(ToolTipManager var0) {
  431.       return var0.tipShowing;
  432.    }
  433. }
  434.