home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / ToolTipManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  10.5 KB  |  531 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.GraphicsConfiguration;
  8. import java.awt.Insets;
  9. import java.awt.KeyboardFocusManager;
  10. import java.awt.Point;
  11. import java.awt.Rectangle;
  12. import java.awt.Toolkit;
  13. import java.awt.Window;
  14. import java.awt.event.FocusListener;
  15. import java.awt.event.MouseAdapter;
  16. import java.awt.event.MouseEvent;
  17. import java.awt.event.MouseMotionListener;
  18.  
  19. public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
  20.    Timer enterTimer = new Timer(750, new insideTimerAction(this));
  21.    Timer exitTimer;
  22.    Timer insideTimer;
  23.    String toolTipText;
  24.    Point preferredLocation;
  25.    JComponent insideComponent;
  26.    MouseEvent mouseEvent;
  27.    boolean showImmediately;
  28.    static final ToolTipManager sharedInstance = new ToolTipManager();
  29.    transient Popup tipWindow;
  30.    private Window window;
  31.    JToolTip tip;
  32.    private Rectangle popupRect = null;
  33.    private Rectangle popupFrameRect = null;
  34.    boolean enabled = true;
  35.    private boolean tipShowing = false;
  36.    private KeyStroke postTip;
  37.    private KeyStroke hideTip;
  38.    private Action postTipAction;
  39.    private Action hideTipAction;
  40.    private FocusListener focusChangeListener = null;
  41.    private MouseMotionListener moveBeforeEnterListener = null;
  42.    protected boolean lightWeightPopupEnabled = true;
  43.    protected boolean heavyWeightPopupEnabled = false;
  44.  
  45.    ToolTipManager() {
  46.       this.enterTimer.setRepeats(false);
  47.       this.exitTimer = new Timer(500, new outsideTimerAction(this));
  48.       this.exitTimer.setRepeats(false);
  49.       this.insideTimer = new Timer(4000, new stillInsideTimerAction(this));
  50.       this.insideTimer.setRepeats(false);
  51.       this.postTip = KeyStroke.getKeyStroke(112, 2);
  52.       this.postTipAction = new Actions(javax.swing.ToolTipManager.Actions.access$000());
  53.       this.hideTip = KeyStroke.getKeyStroke(27, 0);
  54.       this.hideTipAction = new Actions(javax.swing.ToolTipManager.Actions.access$100());
  55.       this.moveBeforeEnterListener = new MoveBeforeEnterListener(this, (1)null);
  56.    }
  57.  
  58.    public void setEnabled(boolean var1) {
  59.       this.enabled = var1;
  60.       if (!var1) {
  61.          this.hideTipWindow();
  62.       }
  63.  
  64.    }
  65.  
  66.    public boolean isEnabled() {
  67.       return this.enabled;
  68.    }
  69.  
  70.    public void setLightWeightPopupEnabled(boolean var1) {
  71.       this.lightWeightPopupEnabled = var1;
  72.    }
  73.  
  74.    public boolean isLightWeightPopupEnabled() {
  75.       return this.lightWeightPopupEnabled;
  76.    }
  77.  
  78.    public void setInitialDelay(int var1) {
  79.       this.enterTimer.setInitialDelay(var1);
  80.    }
  81.  
  82.    public int getInitialDelay() {
  83.       return this.enterTimer.getInitialDelay();
  84.    }
  85.  
  86.    public void setDismissDelay(int var1) {
  87.       this.insideTimer.setInitialDelay(var1);
  88.    }
  89.  
  90.    public int getDismissDelay() {
  91.       return this.insideTimer.getInitialDelay();
  92.    }
  93.  
  94.    public void setReshowDelay(int var1) {
  95.       this.exitTimer.setInitialDelay(var1);
  96.    }
  97.  
  98.    public int getReshowDelay() {
  99.       return this.exitTimer.getInitialDelay();
  100.    }
  101.  
  102.    void showTipWindow() {
  103.       if (this.insideComponent != null && this.insideComponent.isShowing()) {
  104.          String var1 = UIManager.getString("ToolTipManager.enableToolTipMode");
  105.          if ("activeApplication".equals(var1)) {
  106.             KeyboardFocusManager var2 = KeyboardFocusManager.getCurrentKeyboardFocusManager();
  107.             if (var2.getFocusedWindow() == null) {
  108.                return;
  109.             }
  110.          }
  111.  
  112.          if (this.enabled) {
  113.             Point var3 = this.insideComponent.getLocationOnScreen();
  114.             Point var4 = new Point();
  115.             GraphicsConfiguration var5 = this.insideComponent.getGraphicsConfiguration();
  116.             Rectangle var6 = var5.getBounds();
  117.             Insets var7 = Toolkit.getDefaultToolkit().getScreenInsets(var5);
  118.             var6.x += var7.left;
  119.             var6.y += var7.top;
  120.             var6.width -= var7.left + var7.right;
  121.             var6.height -= var7.top + var7.bottom;
  122.             boolean var8 = SwingUtilities.isLeftToRight(this.insideComponent);
  123.             this.hideTipWindow();
  124.             this.tip = this.insideComponent.createToolTip();
  125.             this.tip.setTipText(this.toolTipText);
  126.             Dimension var12 = this.tip.getPreferredSize();
  127.             if (this.preferredLocation != null) {
  128.                var4.x = var3.x + this.preferredLocation.x;
  129.                var4.y = var3.y + this.preferredLocation.y;
  130.                if (!var8) {
  131.                   var4.x -= var12.width;
  132.                }
  133.             } else {
  134.                var4.x = var3.x + this.mouseEvent.getX();
  135.                var4.y = var3.y + this.mouseEvent.getY() + 20;
  136.                if (!var8 && var4.x - var12.width >= 0) {
  137.                   var4.x -= var12.width;
  138.                }
  139.             }
  140.  
  141.             if (this.popupRect == null) {
  142.                this.popupRect = new Rectangle();
  143.             }
  144.  
  145.             this.popupRect.setBounds(var4.x, var4.y, var12.width, var12.height);
  146.             if (var4.x < var6.x) {
  147.                var4.x = var6.x;
  148.             } else if (var4.x - var6.x + var12.width > var6.width) {
  149.                var4.x = var6.x + Math.max(0, var6.width - var12.width);
  150.             }
  151.  
  152.             if (var4.y < var6.y) {
  153.                var4.y = var6.y;
  154.             } else if (var4.y - var6.y + var12.height > var6.height) {
  155.                var4.y = var6.y + Math.max(0, var6.height - var12.height);
  156.             }
  157.  
  158.             PopupFactory var9 = PopupFactory.getSharedInstance();
  159.             if (this.lightWeightPopupEnabled) {
  160.                int var10 = this.getPopupFitHeight(this.popupRect, this.insideComponent);
  161.                int var11 = this.getPopupFitWidth(this.popupRect, this.insideComponent);
  162.                if (var11 <= 0 && var10 <= 0) {
  163.                   var9.setPopupType(0);
  164.                } else {
  165.                   var9.setPopupType(1);
  166.                }
  167.             } else {
  168.                var9.setPopupType(1);
  169.             }
  170.  
  171.             this.tipWindow = var9.getPopup(this.insideComponent, this.tip, var4.x, var4.y);
  172.             var9.setPopupType(0);
  173.             this.tipWindow.show();
  174.             Window var13 = SwingUtilities.windowForComponent(this.insideComponent);
  175.             this.window = SwingUtilities.windowForComponent(this.tip);
  176.             if (this.window != null && this.window != var13) {
  177.                this.window.addMouseListener(this);
  178.             } else {
  179.                this.window = null;
  180.             }
  181.  
  182.             this.insideTimer.start();
  183.             this.tipShowing = true;
  184.          }
  185.  
  186.       }
  187.    }
  188.  
  189.    void hideTipWindow() {
  190.       if (this.tipWindow != null) {
  191.          if (this.window != null) {
  192.             this.window.removeMouseListener(this);
  193.             this.window = null;
  194.          }
  195.  
  196.          this.tipWindow.hide();
  197.          this.tipWindow = null;
  198.          this.tipShowing = false;
  199.          this.tip = null;
  200.          this.insideTimer.stop();
  201.       }
  202.  
  203.    }
  204.  
  205.    public static ToolTipManager sharedInstance() {
  206.       return sharedInstance;
  207.    }
  208.  
  209.    public void registerComponent(JComponent var1) {
  210.       var1.removeMouseListener(this);
  211.       var1.addMouseListener(this);
  212.       var1.removeMouseMotionListener(this.moveBeforeEnterListener);
  213.       var1.addMouseMotionListener(this.moveBeforeEnterListener);
  214.       if (this.shouldRegisterBindings(var1)) {
  215.          InputMap var2 = var1.getInputMap(0);
  216.          ActionMap var3 = var1.getActionMap();
  217.          if (var2 != null && var3 != null) {
  218.             var2.put(this.postTip, "postTip");
  219.             var2.put(this.hideTip, "hideTip");
  220.             var3.put("postTip", this.postTipAction);
  221.             var3.put("hideTip", this.hideTipAction);
  222.          }
  223.       }
  224.  
  225.    }
  226.  
  227.    public void unregisterComponent(JComponent var1) {
  228.       var1.removeMouseListener(this);
  229.       var1.removeMouseMotionListener(this.moveBeforeEnterListener);
  230.       if (this.shouldRegisterBindings(var1)) {
  231.          InputMap var2 = var1.getInputMap(0);
  232.          ActionMap var3 = var1.getActionMap();
  233.          if (var2 != null && var3 != null) {
  234.             var2.remove(this.postTip);
  235.             var2.remove(this.hideTip);
  236.             var3.remove("postTip");
  237.             var3.remove("hideTip");
  238.          }
  239.       }
  240.  
  241.    }
  242.  
  243.    private boolean shouldRegisterBindings(JComponent var1) {
  244.       InputMap var2;
  245.       for(var2 = var1.getInputMap(0, false); var2 != null && var2.size() == 0; var2 = var2.getParent()) {
  246.       }
  247.  
  248.       return var2 != null;
  249.    }
  250.  
  251.    public void mouseEntered(MouseEvent var1) {
  252.       this.initiateToolTip(var1);
  253.    }
  254.  
  255.    private void initiateToolTip(MouseEvent var1) {
  256.       if (var1.getSource() != this.window) {
  257.          JComponent var2 = (JComponent)var1.getSource();
  258.          var2.removeMouseMotionListener(this.moveBeforeEnterListener);
  259.          this.exitTimer.stop();
  260.          Point var3 = var1.getPoint();
  261.          if (var3.x >= 0 && var3.x < var2.getWidth() && var3.y >= 0 && var3.y < var2.getHeight()) {
  262.             if (this.insideComponent != null) {
  263.                this.enterTimer.stop();
  264.             }
  265.  
  266.             var2.removeMouseMotionListener(this);
  267.             var2.addMouseMotionListener(this);
  268.             boolean var4 = this.insideComponent == var2;
  269.             this.insideComponent = var2;
  270.             if (this.tipWindow != null) {
  271.                this.mouseEvent = var1;
  272.                if (this.showImmediately) {
  273.                   String var5 = var2.getToolTipText(var1);
  274.                   Point var6 = var2.getToolTipLocation(var1);
  275.                   boolean var7 = this.preferredLocation != null ? this.preferredLocation.equals(var6) : var6 == null;
  276.                   if (!var4 || !this.toolTipText.equals(var5) || !var7) {
  277.                      this.toolTipText = var5;
  278.                      this.preferredLocation = var6;
  279.                      this.showTipWindow();
  280.                   }
  281.                } else {
  282.                   this.enterTimer.start();
  283.                }
  284.             }
  285.  
  286.          }
  287.       }
  288.    }
  289.  
  290.    public void mouseExited(MouseEvent var1) {
  291.       boolean var2 = true;
  292.       if (this.insideComponent == null) {
  293.       }
  294.  
  295.       if (this.window != null && var1.getSource() == this.window) {
  296.          Container var7 = this.insideComponent.getTopLevelAncestor();
  297.          Point var8 = var1.getPoint();
  298.          SwingUtilities.convertPointToScreen(var8, this.window);
  299.          var8.x -= var7.getX();
  300.          var8.y -= var7.getY();
  301.          var8 = SwingUtilities.convertPoint((Component)null, var8, this.insideComponent);
  302.          if (var8.x >= 0 && var8.x < this.insideComponent.getWidth() && var8.y >= 0 && var8.y < this.insideComponent.getHeight()) {
  303.             var2 = false;
  304.          } else {
  305.             var2 = true;
  306.          }
  307.       } else if (var1.getSource() == this.insideComponent && this.tipWindow != null) {
  308.          Window var3 = SwingUtilities.getWindowAncestor(this.insideComponent);
  309.          if (var3 != null) {
  310.             Point var4 = SwingUtilities.convertPoint(this.insideComponent, var1.getPoint(), var3);
  311.             Rectangle var5 = this.insideComponent.getTopLevelAncestor().getBounds();
  312.             var4.x += var5.x;
  313.             var4.y += var5.y;
  314.             Point var6 = new Point(0, 0);
  315.             SwingUtilities.convertPointToScreen(var6, this.tip);
  316.             var5.x = var6.x;
  317.             var5.y = var6.y;
  318.             var5.width = this.tip.getWidth();
  319.             var5.height = this.tip.getHeight();
  320.             if (var4.x >= var5.x && var4.x < var5.x + var5.width && var4.y >= var5.y && var4.y < var5.y + var5.height) {
  321.                var2 = false;
  322.             } else {
  323.                var2 = true;
  324.             }
  325.          }
  326.       }
  327.  
  328.       if (var2) {
  329.          this.enterTimer.stop();
  330.          if (this.insideComponent != null) {
  331.             this.insideComponent.removeMouseMotionListener(this);
  332.          }
  333.  
  334.          this.insideComponent = null;
  335.          this.toolTipText = null;
  336.          this.mouseEvent = null;
  337.          this.hideTipWindow();
  338.          this.exitTimer.restart();
  339.       }
  340.  
  341.    }
  342.  
  343.    public void mousePressed(MouseEvent var1) {
  344.       this.hideTipWindow();
  345.       this.enterTimer.stop();
  346.       this.showImmediately = false;
  347.       this.insideComponent = null;
  348.       this.mouseEvent = null;
  349.    }
  350.  
  351.    public void mouseDragged(MouseEvent var1) {
  352.    }
  353.  
  354.    public void mouseMoved(MouseEvent var1) {
  355.       if (this.tipShowing) {
  356.          this.checkForTipChange(var1);
  357.       } else if (this.showImmediately) {
  358.          JComponent var2 = (JComponent)var1.getSource();
  359.          this.toolTipText = var2.getToolTipText(var1);
  360.          if (this.toolTipText != null) {
  361.             this.preferredLocation = var2.getToolTipLocation(var1);
  362.             this.mouseEvent = var1;
  363.             this.insideComponent = var2;
  364.             this.exitTimer.stop();
  365.             this.showTipWindow();
  366.          }
  367.       } else {
  368.          this.insideComponent = (JComponent)var1.getSource();
  369.          this.mouseEvent = var1;
  370.          this.toolTipText = null;
  371.          this.enterTimer.restart();
  372.       }
  373.  
  374.    }
  375.  
  376.    private void checkForTipChange(MouseEvent var1) {
  377.       JComponent var2 = (JComponent)var1.getSource();
  378.       String var3 = var2.getToolTipText(var1);
  379.       Point var4 = var2.getToolTipLocation(var1);
  380.       if (var3 == null && var4 == null) {
  381.          this.toolTipText = null;
  382.          this.preferredLocation = null;
  383.          this.mouseEvent = null;
  384.          this.insideComponent = null;
  385.          this.hideTipWindow();
  386.          this.enterTimer.stop();
  387.          this.exitTimer.restart();
  388.       } else {
  389.          this.mouseEvent = var1;
  390.          if ((var3 != null && var3.equals(this.toolTipText) || var3 == null) && (var4 != null && var4.equals(this.preferredLocation) || var4 == null)) {
  391.             if (this.tipWindow != null) {
  392.                this.insideTimer.restart();
  393.             } else {
  394.                this.enterTimer.restart();
  395.             }
  396.          } else {
  397.             this.toolTipText = var3;
  398.             this.preferredLocation = var4;
  399.             if (this.showImmediately) {
  400.                this.hideTipWindow();
  401.                this.showTipWindow();
  402.                this.exitTimer.stop();
  403.             } else {
  404.                this.enterTimer.restart();
  405.             }
  406.          }
  407.       }
  408.  
  409.    }
  410.  
  411.    static Frame frameForComponent(Component var0) {
  412.       while(!(var0 instanceof Frame)) {
  413.          var0 = ((Component)var0).getParent();
  414.       }
  415.  
  416.       return (Frame)var0;
  417.    }
  418.  
  419.    private FocusListener createFocusChangeListener() {
  420.       return new 1(this);
  421.    }
  422.  
  423.    private int getPopupFitWidth(Rectangle var1, Component var2) {
  424.       if (var2 != null) {
  425.          for(Container var3 = var2.getParent(); var3 != null; var3 = var3.getParent()) {
  426.             if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
  427.                return this.getWidthAdjust(var3.getBounds(), var1);
  428.             }
  429.  
  430.             if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
  431.                if (this.popupFrameRect == null) {
  432.                   this.popupFrameRect = new Rectangle();
  433.                }
  434.  
  435.                Point var4 = var3.getLocationOnScreen();
  436.                this.popupFrameRect.setBounds(var4.x, var4.y, var3.getBounds().width, var3.getBounds().height);
  437.                return this.getWidthAdjust(this.popupFrameRect, var1);
  438.             }
  439.          }
  440.       }
  441.  
  442.       return 0;
  443.    }
  444.  
  445.    private int getPopupFitHeight(Rectangle var1, Component var2) {
  446.       if (var2 != null) {
  447.          for(Container var3 = var2.getParent(); var3 != null; var3 = var3.getParent()) {
  448.             if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
  449.                return this.getHeightAdjust(var3.getBounds(), var1);
  450.             }
  451.  
  452.             if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
  453.                if (this.popupFrameRect == null) {
  454.                   this.popupFrameRect = new Rectangle();
  455.                }
  456.  
  457.                Point var4 = var3.getLocationOnScreen();
  458.                this.popupFrameRect.setBounds(var4.x, var4.y, var3.getBounds().width, var3.getBounds().height);
  459.                return this.getHeightAdjust(this.popupFrameRect, var1);
  460.             }
  461.          }
  462.       }
  463.  
  464.       return 0;
  465.    }
  466.  
  467.    private int getHeightAdjust(Rectangle var1, Rectangle var2) {
  468.       return var2.y >= var1.y && var2.y + var2.height <= var1.y + var1.height ? 0 : var2.y + var2.height - (var1.y + var1.height) + 5;
  469.    }
  470.  
  471.    private int getWidthAdjust(Rectangle var1, Rectangle var2) {
  472.       return var2.x >= var1.x && var2.x + var2.width <= var1.x + var1.width ? 0 : var2.x + var2.width - (var1.x + var1.width) + 5;
  473.    }
  474.  
  475.    private void show(JComponent var1) {
  476.       if (this.tipWindow != null) {
  477.          this.hideTipWindow();
  478.          this.insideComponent = null;
  479.       } else {
  480.          this.hideTipWindow();
  481.          this.enterTimer.stop();
  482.          this.exitTimer.stop();
  483.          this.insideTimer.stop();
  484.          this.insideComponent = var1;
  485.          if (this.insideComponent != null) {
  486.             this.toolTipText = this.insideComponent.getToolTipText();
  487.             this.preferredLocation = new Point(10, this.insideComponent.getHeight() + 10);
  488.             this.showTipWindow();
  489.             if (this.focusChangeListener == null) {
  490.                this.focusChangeListener = this.createFocusChangeListener();
  491.             }
  492.  
  493.             this.insideComponent.addFocusListener(this.focusChangeListener);
  494.          }
  495.       }
  496.  
  497.    }
  498.  
  499.    private void hide(JComponent var1) {
  500.       this.hideTipWindow();
  501.       var1.removeFocusListener(this.focusChangeListener);
  502.       this.preferredLocation = null;
  503.       this.insideComponent = null;
  504.    }
  505.  
  506.    // $FF: synthetic method
  507.    static void access$300(ToolTipManager var0, MouseEvent var1) {
  508.       var0.initiateToolTip(var1);
  509.    }
  510.  
  511.    // $FF: synthetic method
  512.    static FocusListener access$400(ToolTipManager var0) {
  513.       return var0.focusChangeListener;
  514.    }
  515.  
  516.    // $FF: synthetic method
  517.    static void access$500(ToolTipManager var0, JComponent var1) {
  518.       var0.show(var1);
  519.    }
  520.  
  521.    // $FF: synthetic method
  522.    static void access$600(ToolTipManager var0, JComponent var1) {
  523.       var0.hide(var1);
  524.    }
  525.  
  526.    // $FF: synthetic method
  527.    static boolean access$700(ToolTipManager var0) {
  528.       return var0.tipShowing;
  529.    }
  530. }
  531.