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 / text / html / HTMLEditorKit$LinkController.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.0 KB  |  199 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Cursor;
  5. import java.awt.Point;
  6. import java.awt.Rectangle;
  7. import java.awt.event.MouseAdapter;
  8. import java.awt.event.MouseEvent;
  9. import java.awt.event.MouseMotionListener;
  10. import java.io.Serializable;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.EventObject;
  14. import javax.swing.JEditorPane;
  15. import javax.swing.event.HyperlinkEvent;
  16. import javax.swing.event.HyperlinkEvent.EventType;
  17. import javax.swing.text.AttributeSet;
  18. import javax.swing.text.BadLocationException;
  19. import javax.swing.text.DefaultStyledDocument;
  20. import javax.swing.text.Document;
  21. import javax.swing.text.Element;
  22. import javax.swing.text.JTextComponent;
  23. import javax.swing.text.Position;
  24. import javax.swing.text.Position.Bias;
  25. import javax.swing.text.html.HTML.Attribute;
  26. import javax.swing.text.html.HTML.Tag;
  27.  
  28. public class HTMLEditorKit$LinkController extends MouseAdapter implements MouseMotionListener, Serializable {
  29.    private Element curElem = null;
  30.    private String href = null;
  31.    private Position.Bias[] bias = new Position.Bias[1];
  32.  
  33.    public void mouseClicked(MouseEvent var1) {
  34.       JEditorPane var2 = (JEditorPane)((EventObject)var1).getSource();
  35.       if (!((JTextComponent)var2).isEditable()) {
  36.          Point var3 = new Point(var1.getX(), var1.getY());
  37.          int var4 = ((JTextComponent)var2).viewToModel(var3);
  38.          if (var4 >= 0) {
  39.             this.activateLink(var4, var2, var1.getX(), var1.getY());
  40.          }
  41.       }
  42.  
  43.    }
  44.  
  45.    public void mouseDragged(MouseEvent var1) {
  46.    }
  47.  
  48.    public void mouseMoved(MouseEvent var1) {
  49.       JEditorPane var2 = (JEditorPane)((EventObject)var1).getSource();
  50.       HTMLEditorKit var3 = (HTMLEditorKit)var2.getEditorKit();
  51.       boolean var4 = true;
  52.       Cursor var5 = var3.getDefaultCursor();
  53.       if (!((JTextComponent)var2).isEditable()) {
  54.          Point var6 = new Point(var1.getX(), var1.getY());
  55.          int var7 = ((JTextComponent)var2).getUI().viewToModel(var2, var6, this.bias);
  56.          if (this.bias[0] == Bias.Backward && var7 > 0) {
  57.             --var7;
  58.          }
  59.  
  60.          if (var7 >= 0) {
  61.             Document var8 = ((JTextComponent)var2).getDocument();
  62.             if (var8 instanceof HTMLDocument) {
  63.                HTMLDocument var9 = (HTMLDocument)var8;
  64.                Element var10 = ((DefaultStyledDocument)var9).getCharacterElement(var7);
  65.                if (this.curElem != var10) {
  66.                   this.curElem = var10;
  67.                   AttributeSet var11 = var10.getAttributes();
  68.                   AttributeSet var12 = (AttributeSet)var11.getAttribute(Tag.A);
  69.                   String var13 = var12 != null ? (String)var12.getAttribute(Attribute.HREF) : null;
  70.                   if (var13 != this.href) {
  71.                      this.fireEvents(var2, var9, var13);
  72.                      this.href = var13;
  73.                      if (var13 != null) {
  74.                         var5 = var3.getLinkCursor();
  75.                      }
  76.                   }
  77.                } else {
  78.                   var4 = false;
  79.                }
  80.             }
  81.          }
  82.       }
  83.  
  84.       if (var4 && ((Component)var2).getCursor() != var5) {
  85.          ((Component)var2).setCursor(var5);
  86.       }
  87.  
  88.    }
  89.  
  90.    protected void activateLink(int var1, JEditorPane var2) {
  91.       this.activateLink(var1, var2, -1, -1);
  92.    }
  93.  
  94.    void activateLink(int var1, JEditorPane var2, int var3, int var4) {
  95.       Document var5 = ((JTextComponent)var2).getDocument();
  96.       if (var5 instanceof HTMLDocument) {
  97.          HTMLDocument var6 = (HTMLDocument)var5;
  98.          Element var7 = ((DefaultStyledDocument)var6).getCharacterElement(var1);
  99.          AttributeSet var8 = var7.getAttributes();
  100.          AttributeSet var9 = (AttributeSet)var8.getAttribute(Tag.A);
  101.          String var10 = var9 != null ? (String)var9.getAttribute(Attribute.HREF) : null;
  102.          HyperlinkEvent var11 = null;
  103.          if (var10 != null) {
  104.             var11 = this.createHyperlinkEvent(var2, var6, var10, var9);
  105.          } else if (var3 >= 0 && var4 >= 0) {
  106.             Object var12 = var8.getAttribute(Attribute.USEMAP);
  107.             if (var12 != null && var12 instanceof String) {
  108.                Map var13 = var6.getMap((String)var12);
  109.                if (var13 != null) {
  110.                   Rectangle var14;
  111.                   try {
  112.                      var14 = ((JTextComponent)var2).modelToView(var1);
  113.                      Rectangle var15 = ((JTextComponent)var2).modelToView(var1 + 1);
  114.                      if (var14 != null && var15 != null) {
  115.                         var14.union(var15);
  116.                      }
  117.                   } catch (BadLocationException var16) {
  118.                      var14 = null;
  119.                   }
  120.  
  121.                   if (var14 != null) {
  122.                      AttributeSet var18 = var13.getArea(var3 - var14.x, var4 - var14.y, var14.width, var14.height);
  123.                      if (var18 != null) {
  124.                         var10 = (String)var18.getAttribute(Attribute.HREF);
  125.                         if (var10 != null) {
  126.                            var11 = this.createHyperlinkEvent(var2, var6, var10, var9);
  127.                         }
  128.                      }
  129.                   }
  130.                }
  131.             }
  132.          }
  133.  
  134.          if (var11 != null) {
  135.             var2.fireHyperlinkUpdate(var11);
  136.          }
  137.       }
  138.  
  139.    }
  140.  
  141.    HyperlinkEvent createHyperlinkEvent(JEditorPane var1, HTMLDocument var2, String var3, AttributeSet var4) {
  142.       URL var5;
  143.       try {
  144.          URL var6 = var2.getBase();
  145.          var5 = new URL(var6, var3);
  146.          if (var3 != null && "file".equals(var5.getProtocol()) && var3.startsWith("#")) {
  147.             String var7 = var6.getFile();
  148.             String var8 = var5.getFile();
  149.             if (var7 != null && var8 != null && !var8.startsWith(var7)) {
  150.                var5 = new URL(var6, var7 + var3);
  151.             }
  152.          }
  153.       } catch (MalformedURLException var9) {
  154.          var5 = null;
  155.       }
  156.  
  157.       Object var10 = null;
  158.       if (!var2.isFrameDocument()) {
  159.          var10 = new HyperlinkEvent(var1, EventType.ACTIVATED, var5, var3);
  160.       } else {
  161.          String var12 = var4 != null ? (String)var4.getAttribute(Attribute.TARGET) : null;
  162.          if (var12 == null || var12.equals("")) {
  163.             var12 = "_self";
  164.          }
  165.  
  166.          var10 = new HTMLFrameHyperlinkEvent(var1, EventType.ACTIVATED, var5, var3, var12);
  167.       }
  168.  
  169.       return (HyperlinkEvent)var10;
  170.    }
  171.  
  172.    void fireEvents(JEditorPane var1, HTMLDocument var2, String var3) {
  173.       if (this.href != null) {
  174.          URL var4;
  175.          try {
  176.             var4 = new URL(var2.getBase(), this.href);
  177.          } catch (MalformedURLException var7) {
  178.             var4 = null;
  179.          }
  180.  
  181.          HyperlinkEvent var5 = new HyperlinkEvent(var1, EventType.EXITED, var4, this.href);
  182.          var1.fireHyperlinkUpdate(var5);
  183.       }
  184.  
  185.       if (var3 != null) {
  186.          URL var8;
  187.          try {
  188.             var8 = new URL(var2.getBase(), var3);
  189.          } catch (MalformedURLException var6) {
  190.             var8 = null;
  191.          }
  192.  
  193.          HyperlinkEvent var9 = new HyperlinkEvent(var1, EventType.ENTERED, var8, var3);
  194.          var1.fireHyperlinkUpdate(var9);
  195.       }
  196.  
  197.    }
  198. }
  199.