home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / WIN95 / IMAP.EXE / IMap.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-09-02  |  10.2 KB  |  526 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.Polygon;
  11. import java.awt.Rectangle;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14. import java.util.StringTokenizer;
  15. import java.util.Vector;
  16.  
  17. public class IMap extends Applet {
  18.    Image mapImage;
  19.    Color pgColor;
  20.    Color fgColor;
  21.    Color bgColor;
  22.    int bdSize;
  23.    Color bdColor;
  24.    String fontName;
  25.    int fontStyle;
  26.    int fontSize;
  27.    int hrznMargin;
  28.    int vertMargin;
  29.    boolean olFlag;
  30.    Color olColor;
  31.    URL defaultUrl;
  32.    String target;
  33.    String status;
  34.    Vector areas;
  35.    IMapArea area;
  36.    int activeArea;
  37.    Font font;
  38.    int xAdvance;
  39.    int yAscent;
  40.    int yHeight;
  41.    Dimension offDimension;
  42.    Image offImage;
  43.    Graphics offGraphics;
  44.  
  45.    public String getAppletInfo() {
  46.       return "IMap version 1.4\n\nCopyright 1997 by Mike Hall";
  47.    }
  48.  
  49.    public void init() {
  50.       System.out.println("IMap version 1.4, Copyright 1997 by Mike Hall.");
  51.  
  52.       try {
  53.          String var1 = ((Applet)this).getParameter("mapimage");
  54.          if (var1 != null) {
  55.             StringTokenizer var4 = new StringTokenizer(var1, ",");
  56.             this.mapImage = ((Applet)this).getImage(new URL(((Applet)this).getDocumentBase(), var4.nextToken()));
  57.             ((Component)this).prepareImage(this.mapImage, this);
  58.             if (var4.hasMoreTokens()) {
  59.                this.pgColor = this.getColorParm(var4.nextToken());
  60.             }
  61.          }
  62.       } catch (Exception var24) {
  63.       }
  64.  
  65.       try {
  66.          String var26 = ((Applet)this).getParameter("fgcolor");
  67.          if (var26 != null) {
  68.             this.fgColor = this.getColorParm(var26);
  69.          }
  70.       } catch (Exception var23) {
  71.       }
  72.  
  73.       this.bdColor = this.fgColor;
  74.  
  75.       try {
  76.          String var27 = ((Applet)this).getParameter("bgcolor");
  77.          if (var27 != null) {
  78.             this.bgColor = this.getColorParm(var27);
  79.          }
  80.       } catch (Exception var22) {
  81.       }
  82.  
  83.       try {
  84.          String var28 = ((Applet)this).getParameter("border");
  85.          if (var28 != null) {
  86.             StringTokenizer var45 = new StringTokenizer(var28, ",");
  87.             int var10;
  88.             if ((var10 = Integer.parseInt(var45.nextToken())) > 0) {
  89.                this.bdSize = var10;
  90.             }
  91.  
  92.             if (var45.hasMoreTokens()) {
  93.                this.bdColor = this.getColorParm(var45.nextToken());
  94.             }
  95.          }
  96.       } catch (Exception var21) {
  97.       }
  98.  
  99.       try {
  100.          String var29 = ((Applet)this).getParameter("font");
  101.          StringTokenizer var46 = new StringTokenizer(var29, ",");
  102.          String var2 = var46.nextToken();
  103.          if (var2.equalsIgnoreCase("Courier")) {
  104.             this.fontName = "Courier";
  105.          } else if (var2.equalsIgnoreCase("Dialog")) {
  106.             this.fontName = "Dialog";
  107.          } else if (var2.equalsIgnoreCase("Helvetica")) {
  108.             this.fontName = "Helvetica";
  109.          } else if (var2.equalsIgnoreCase("Symbol")) {
  110.             this.fontName = "Symbol";
  111.          } else if (var2.equalsIgnoreCase("TimesRoman")) {
  112.             this.fontName = "TimesRoman";
  113.          }
  114.  
  115.          var2 = var46.nextToken();
  116.          if (var2.equalsIgnoreCase("plain")) {
  117.             this.fontStyle = 0;
  118.          } else if (var2.equalsIgnoreCase("bold")) {
  119.             this.fontStyle = 1;
  120.          } else if (var2.equalsIgnoreCase("italic")) {
  121.             this.fontStyle = 2;
  122.          } else if (var2.equalsIgnoreCase("boldItalic")) {
  123.             this.fontStyle = 3;
  124.          }
  125.  
  126.          var2 = var46.nextToken();
  127.          int var54;
  128.          if ((var54 = Integer.parseInt(var2)) > 0) {
  129.             this.fontSize = var54;
  130.          }
  131.       } catch (Exception var20) {
  132.       }
  133.  
  134.       try {
  135.          String var30 = ((Applet)this).getParameter("margins");
  136.          if (var30 != null) {
  137.             StringTokenizer var47 = new StringTokenizer(var30, ",");
  138.             int var55;
  139.             if ((var55 = Integer.parseInt(var47.nextToken())) > 0) {
  140.                this.hrznMargin = var55;
  141.             }
  142.  
  143.             if ((var55 = Integer.parseInt(var47.nextToken())) > 0) {
  144.                this.vertMargin = var55;
  145.             }
  146.          }
  147.       } catch (Exception var19) {
  148.       }
  149.  
  150.       try {
  151.          String var31 = ((Applet)this).getParameter("outline");
  152.          if (var31 != null) {
  153.             this.olColor = this.getColorParm(var31);
  154.             this.olFlag = true;
  155.          }
  156.       } catch (Exception var18) {
  157.       }
  158.  
  159.       try {
  160.          String var32 = ((Applet)this).getParameter("default");
  161.          StringTokenizer var48 = new StringTokenizer(var32, ",");
  162.          String var38 = var48.nextToken();
  163.  
  164.          try {
  165.             URL var5 = new URL(((Applet)this).getDocumentBase(), var38);
  166.             if (var48.hasMoreTokens()) {
  167.                var38 = var48.nextToken();
  168.                this.target = var38;
  169.             }
  170.  
  171.             this.defaultUrl = var5;
  172.          } catch (MalformedURLException var16) {
  173.          }
  174.       } catch (Exception var17) {
  175.       }
  176.  
  177.       try {
  178.          String var33 = ((Applet)this).getParameter("status");
  179.          if (var33 != null) {
  180.             this.status = var33;
  181.          }
  182.       } catch (Exception var15) {
  183.       }
  184.  
  185.       String var34 = null;
  186.       int var6 = 1;
  187.  
  188.       do {
  189.          try {
  190.             var34 = ((Applet)this).getParameter("shape-" + var6);
  191.             if (var34 != null) {
  192.                this.getShape(var34);
  193.  
  194.                try {
  195.                   String var40 = ((Applet)this).getParameter("url-" + var6);
  196.                   StringTokenizer var49 = new StringTokenizer(var40, ",");
  197.                   String var3 = var49.nextToken();
  198.  
  199.                   try {
  200.                      URL var51 = new URL(((Applet)this).getDocumentBase(), var3);
  201.                      if (var49.hasMoreTokens()) {
  202.                         var3 = var49.nextToken();
  203.                         this.area.setURL(var51, var3);
  204.                      } else {
  205.                         this.area.setURL(var51);
  206.                      }
  207.                   } catch (MalformedURLException var13) {
  208.                   }
  209.                } catch (Exception var14) {
  210.                }
  211.  
  212.                try {
  213.                   String var41 = ((Applet)this).getParameter("status-" + var6);
  214.                   if (var41 != null) {
  215.                      this.area.setStatusMsg(var41);
  216.                   }
  217.                } catch (Exception var12) {
  218.                }
  219.  
  220.                String var42 = null;
  221.                int var7 = 1;
  222.  
  223.                do {
  224.                   try {
  225.                      var42 = ((Applet)this).getParameter("text-" + var6 + "-" + var7);
  226.                      if (var42 != null) {
  227.                         StringTokenizer var50 = new StringTokenizer(var42, "|");
  228.                         String var44;
  229.                         int var57;
  230.                         if (var50.countTokens() > 1) {
  231.                            var57 = Integer.parseInt(var50.nextToken());
  232.                            var44 = var50.nextToken();
  233.                         } else {
  234.                            var57 = 0;
  235.                            var44 = var42;
  236.                         }
  237.  
  238.                         this.area.addText(var57, var44);
  239.                      }
  240.                   } catch (Exception var11) {
  241.                   }
  242.  
  243.                   ++var7;
  244.                } while(var42 != null);
  245.  
  246.                this.areas.addElement(this.area);
  247.             }
  248.          } catch (Exception var25) {
  249.          }
  250.  
  251.          ++var6;
  252.       } while(var34 != null);
  253.  
  254.       this.areas.trimToSize();
  255.       Graphics var8 = ((Component)this).getGraphics();
  256.       this.font = var8.getFont();
  257.       var8.setFont(this.font = new Font(this.fontName, this.fontStyle, this.fontSize));
  258.       FontMetrics var9 = var8.getFontMetrics();
  259.       this.xAdvance = var9.getMaxAdvance();
  260.       this.yAscent = var9.getMaxAscent();
  261.       this.yHeight = var9.getHeight();
  262.  
  263.       for(int var52 = 0; var52 < this.areas.size(); ++var52) {
  264.          this.area = (IMapArea)this.areas.elementAt(var52);
  265.  
  266.          for(int var53 = 0; var53 < this.area.getCount(); ++var53) {
  267.             var34 = this.area.getText(var53);
  268.             int var58 = this.area.getIndent(var53) * this.xAdvance + var9.stringWidth(var34);
  269.             if (var58 > this.area.width) {
  270.                this.area.width = var58;
  271.             }
  272.          }
  273.  
  274.          IMapArea var10000 = this.area;
  275.          var10000.width += 2 * this.hrznMargin;
  276.          this.area.height = this.area.getCount() * this.yHeight + 2 * this.vertMargin;
  277.       }
  278.  
  279.    }
  280.  
  281.    private Color getColorParm(String var1) {
  282.       if (var1.equalsIgnoreCase("black")) {
  283.          return Color.black;
  284.       } else if (var1.equalsIgnoreCase("blue")) {
  285.          return Color.blue;
  286.       } else if (var1.equalsIgnoreCase("cyan")) {
  287.          return Color.cyan;
  288.       } else if (var1.equalsIgnoreCase("darkGray")) {
  289.          return Color.darkGray;
  290.       } else if (var1.equalsIgnoreCase("gray")) {
  291.          return Color.gray;
  292.       } else if (var1.equalsIgnoreCase("green")) {
  293.          return Color.green;
  294.       } else if (var1.equalsIgnoreCase("lightGray")) {
  295.          return Color.lightGray;
  296.       } else if (var1.equalsIgnoreCase("magenta")) {
  297.          return Color.magenta;
  298.       } else if (var1.equalsIgnoreCase("orange")) {
  299.          return Color.orange;
  300.       } else if (var1.equalsIgnoreCase("pink")) {
  301.          return Color.pink;
  302.       } else if (var1.equalsIgnoreCase("red")) {
  303.          return Color.red;
  304.       } else if (var1.equalsIgnoreCase("white")) {
  305.          return Color.white;
  306.       } else if (var1.equalsIgnoreCase("yellow")) {
  307.          return Color.yellow;
  308.       } else if (var1.length() == 7 && var1.charAt(0) == '#') {
  309.          int var2 = Integer.parseInt(var1.substring(1, 3), 16);
  310.          int var3 = Integer.parseInt(var1.substring(3, 5), 16);
  311.          int var4 = Integer.parseInt(var1.substring(5, 7), 16);
  312.          return new Color(var2, var3, var4);
  313.       } else {
  314.          return Color.black;
  315.       }
  316.    }
  317.  
  318.    private void getShape(String var1) {
  319.       StringTokenizer var2 = new StringTokenizer(var1, ",");
  320.       String var3 = var2.nextToken();
  321.       if (var3.equalsIgnoreCase("rect")) {
  322.          int var4 = Integer.parseInt(var2.nextToken());
  323.          int var5 = Integer.parseInt(var2.nextToken());
  324.          int var6 = Integer.parseInt(var2.nextToken());
  325.          int var7 = Integer.parseInt(var2.nextToken());
  326.          this.area = new IMapArea(new Rectangle(var4, var5, var6 - var4, var7 - var5));
  327.       } else if (var3.equalsIgnoreCase("circle")) {
  328.          int var14 = Integer.parseInt(var2.nextToken());
  329.          int var16 = Integer.parseInt(var2.nextToken());
  330.          int var17 = Integer.parseInt(var2.nextToken());
  331.          this.area = new IMapArea(var14, var16, var17, var17);
  332.       } else if (var3.equalsIgnoreCase("ellipse")) {
  333.          int var13 = Integer.parseInt(var2.nextToken());
  334.          int var15 = Integer.parseInt(var2.nextToken());
  335.          int var10 = Integer.parseInt(var2.nextToken());
  336.          int var11 = Integer.parseInt(var2.nextToken());
  337.          this.area = new IMapArea(var13, var15, var10, var11);
  338.       } else {
  339.          if (var3.equalsIgnoreCase("poly")) {
  340.             Polygon var12 = new Polygon();
  341.  
  342.             while(var2.hasMoreTokens()) {
  343.                int var8 = Integer.parseInt(var2.nextToken());
  344.                int var9 = Integer.parseInt(var2.nextToken());
  345.                var12.addPoint(var8, var9);
  346.             }
  347.  
  348.             this.area = new IMapArea(var12);
  349.          }
  350.  
  351.       }
  352.    }
  353.  
  354.    public boolean mouseExit(Event var1, int var2, int var3) {
  355.       this.activeArea = -1;
  356.       ((Applet)this).getAppletContext().showStatus("");
  357.       ((Component)this).repaint();
  358.       return true;
  359.    }
  360.  
  361.    public boolean mouseMove(Event var1, int var2, int var3) {
  362.       int var4 = this.activeArea;
  363.       this.activeArea = -1;
  364.  
  365.       for(int var5 = this.areas.size() - 1; var5 >= 0; --var5) {
  366.          this.area = (IMapArea)this.areas.elementAt(var5);
  367.          if (this.area.inside(var2, var3)) {
  368.             this.activeArea = var5;
  369.          }
  370.       }
  371.  
  372.       if (this.activeArea != var4) {
  373.          if (this.activeArea >= 0) {
  374.             this.area = (IMapArea)this.areas.elementAt(this.activeArea);
  375.             if (this.area.status != null) {
  376.                ((Applet)this).getAppletContext().showStatus(this.area.status);
  377.             } else if (this.area.url != null) {
  378.                ((Applet)this).getAppletContext().showStatus(this.area.url.toString());
  379.             } else {
  380.                ((Applet)this).getAppletContext().showStatus("");
  381.             }
  382.          }
  383.  
  384.          ((Component)this).repaint();
  385.       }
  386.  
  387.       if (this.activeArea < 0) {
  388.          if (this.status != null) {
  389.             ((Applet)this).getAppletContext().showStatus(this.status);
  390.          } else if (this.defaultUrl != null) {
  391.             ((Applet)this).getAppletContext().showStatus(this.defaultUrl.toString());
  392.          } else {
  393.             ((Applet)this).getAppletContext().showStatus("");
  394.          }
  395.       }
  396.  
  397.       return true;
  398.    }
  399.  
  400.    public boolean mouseDown(Event var1, int var2, int var3) {
  401.       if (this.activeArea >= 0) {
  402.          this.area = (IMapArea)this.areas.elementAt(this.activeArea);
  403.          if (this.area.url != null) {
  404.             if (this.area.target != null) {
  405.                ((Applet)this).getAppletContext().showDocument(this.area.url, this.area.target);
  406.             } else {
  407.                ((Applet)this).getAppletContext().showDocument(this.area.url);
  408.             }
  409.          }
  410.       } else if (this.defaultUrl != null) {
  411.          if (this.target != null) {
  412.             ((Applet)this).getAppletContext().showDocument(this.defaultUrl, this.target);
  413.          } else {
  414.             ((Applet)this).getAppletContext().showDocument(this.defaultUrl);
  415.          }
  416.       }
  417.  
  418.       return true;
  419.    }
  420.  
  421.    public void paint(Graphics var1) {
  422.       this.update(var1);
  423.    }
  424.  
  425.    public void update(Graphics var1) {
  426.       Dimension var2 = ((Component)this).size();
  427.       if (this.offGraphics == null || var2.width != this.offDimension.width || var2.height != this.offDimension.height) {
  428.          this.offDimension = var2;
  429.          this.offImage = ((Component)this).createImage(var2.width, var2.height);
  430.          this.offGraphics = this.offImage.getGraphics();
  431.       }
  432.  
  433.       if ((((Component)this).checkImage(this.mapImage, this) & 32) != 32) {
  434.          this.offGraphics.setColor(this.bgColor);
  435.          this.offGraphics.fillRect(0, 0, var2.width, var2.height);
  436.          this.offGraphics.setFont(this.font);
  437.          this.offGraphics.setColor(this.fgColor);
  438.          this.offGraphics.drawString("Loading image...", this.xAdvance, this.yHeight + this.yAscent);
  439.          var1.drawImage(this.offImage, 0, 0, this);
  440.       } else {
  441.          this.offGraphics.setColor(this.pgColor);
  442.          this.offGraphics.fillRect(0, 0, var2.width, var2.height);
  443.          this.offGraphics.drawImage(this.mapImage, 0, 0, this);
  444.          if (this.activeArea >= 0) {
  445.             this.area = (IMapArea)this.areas.elementAt(this.activeArea);
  446.             Rectangle var9 = this.area.getBoundingBox();
  447.             if (this.olFlag) {
  448.                this.offGraphics.setColor(this.olColor);
  449.                if (this.area.isRect()) {
  450.                   var9 = this.area.getRect();
  451.                   this.offGraphics.drawRect(var9.x, var9.y, var9.width, var9.height);
  452.                } else if (this.area.isEllipse()) {
  453.                   var9 = this.area.getEllipse();
  454.                   this.offGraphics.drawOval(var9.x, var9.y, var9.width, var9.height);
  455.                } else if (this.area.isPoly()) {
  456.                   Polygon var10 = this.area.getPoly();
  457.                   this.offGraphics.drawPolygon(var10);
  458.                   int var7 = var10.npoints - 1;
  459.                   this.offGraphics.drawLine(var10.xpoints[var7], var10.ypoints[var7], var10.xpoints[0], var10.ypoints[0]);
  460.                }
  461.             }
  462.  
  463.             if (this.area.getCount() > 0) {
  464.                int var3 = 0;
  465.                int var4 = 0;
  466.                if ((var9.x + var9.width) / 2 < var2.width / 2) {
  467.                   var3 = var9.x + var9.width + this.xAdvance;
  468.                } else {
  469.                   var3 = Math.max(0, var9.x - this.area.width - this.xAdvance);
  470.                }
  471.  
  472.                if (var3 + this.area.width > var2.width) {
  473.                   var3 = Math.max(0, var2.width - this.area.width - this.xAdvance);
  474.                }
  475.  
  476.                if (var9.intersects(new Rectangle(var3, var9.y, this.area.width, var9.height))) {
  477.                   if (var2.height - (var9.y + var9.height + this.yHeight) >= this.area.height) {
  478.                      var4 = var9.y + var9.height + this.yHeight;
  479.                   } else {
  480.                      var4 = var9.y - this.area.height - this.yHeight;
  481.                   }
  482.                } else if (var9.y + var9.height / 2 < var2.height / 2) {
  483.                   var4 = var9.y + var9.height / 2;
  484.                } else {
  485.                   var4 = Math.max(0, var9.y + var9.height / 2 - this.area.height);
  486.                }
  487.  
  488.                if (var4 + this.area.height > var2.height) {
  489.                   var4 = Math.max(0, var2.height - this.area.height - this.yHeight);
  490.                }
  491.  
  492.                this.offGraphics.setColor(this.bdColor);
  493.                this.offGraphics.fillRect(var3, var4, this.area.width, this.area.height);
  494.                this.offGraphics.setColor(this.bgColor);
  495.                this.offGraphics.fillRect(var3 + this.bdSize, var4 + this.bdSize, this.area.width - 2 * this.bdSize, this.area.height - 2 * this.bdSize);
  496.                this.offGraphics.setFont(this.font);
  497.                this.offGraphics.setColor(this.fgColor);
  498.  
  499.                for(int var5 = 0; var5 < this.area.getCount(); ++var5) {
  500.                   boolean var6 = false;
  501.                   String var8 = this.area.getText(var5);
  502.                   int var13 = this.area.getIndent(var5);
  503.                   this.offGraphics.drawString(var8, var3 + this.hrznMargin + this.xAdvance * var13, var4 + this.vertMargin + var5 * this.yHeight + this.yAscent);
  504.                }
  505.             }
  506.          }
  507.  
  508.          var1.drawImage(this.offImage, 0, 0, this);
  509.       }
  510.    }
  511.  
  512.    public IMap() {
  513.       this.pgColor = Color.white;
  514.       this.fgColor = Color.black;
  515.       this.bgColor = Color.white;
  516.       this.fontName = "Dialog";
  517.       this.fontSize = 12;
  518.       this.hrznMargin = 10;
  519.       this.vertMargin = 10;
  520.       this.olFlag = false;
  521.       this.olColor = Color.black;
  522.       this.areas = new Vector(10, 5);
  523.       this.activeArea = -1;
  524.    }
  525. }
  526.