home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Polygon;
- import java.awt.Rectangle;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class IMap extends Applet {
- Image mapImage;
- Color pgColor;
- Color fgColor;
- Color bgColor;
- int bdSize;
- Color bdColor;
- String fontName;
- int fontStyle;
- int fontSize;
- int hrznMargin;
- int vertMargin;
- boolean olFlag;
- Color olColor;
- URL defaultUrl;
- String target;
- String status;
- Vector areas;
- IMapArea area;
- int activeArea;
- Font font;
- int xAdvance;
- int yAscent;
- int yHeight;
- Dimension offDimension;
- Image offImage;
- Graphics offGraphics;
-
- public String getAppletInfo() {
- return "IMap version 1.4\n\nCopyright 1997 by Mike Hall";
- }
-
- public void init() {
- System.out.println("IMap version 1.4, Copyright 1997 by Mike Hall.");
-
- try {
- String var1 = ((Applet)this).getParameter("mapimage");
- if (var1 != null) {
- StringTokenizer var4 = new StringTokenizer(var1, ",");
- this.mapImage = ((Applet)this).getImage(new URL(((Applet)this).getDocumentBase(), var4.nextToken()));
- ((Component)this).prepareImage(this.mapImage, this);
- if (var4.hasMoreTokens()) {
- this.pgColor = this.getColorParm(var4.nextToken());
- }
- }
- } catch (Exception var24) {
- }
-
- try {
- String var26 = ((Applet)this).getParameter("fgcolor");
- if (var26 != null) {
- this.fgColor = this.getColorParm(var26);
- }
- } catch (Exception var23) {
- }
-
- this.bdColor = this.fgColor;
-
- try {
- String var27 = ((Applet)this).getParameter("bgcolor");
- if (var27 != null) {
- this.bgColor = this.getColorParm(var27);
- }
- } catch (Exception var22) {
- }
-
- try {
- String var28 = ((Applet)this).getParameter("border");
- if (var28 != null) {
- StringTokenizer var45 = new StringTokenizer(var28, ",");
- int var10;
- if ((var10 = Integer.parseInt(var45.nextToken())) > 0) {
- this.bdSize = var10;
- }
-
- if (var45.hasMoreTokens()) {
- this.bdColor = this.getColorParm(var45.nextToken());
- }
- }
- } catch (Exception var21) {
- }
-
- try {
- String var29 = ((Applet)this).getParameter("font");
- StringTokenizer var46 = new StringTokenizer(var29, ",");
- String var2 = var46.nextToken();
- if (var2.equalsIgnoreCase("Courier")) {
- this.fontName = "Courier";
- } else if (var2.equalsIgnoreCase("Dialog")) {
- this.fontName = "Dialog";
- } else if (var2.equalsIgnoreCase("Helvetica")) {
- this.fontName = "Helvetica";
- } else if (var2.equalsIgnoreCase("Symbol")) {
- this.fontName = "Symbol";
- } else if (var2.equalsIgnoreCase("TimesRoman")) {
- this.fontName = "TimesRoman";
- }
-
- var2 = var46.nextToken();
- if (var2.equalsIgnoreCase("plain")) {
- this.fontStyle = 0;
- } else if (var2.equalsIgnoreCase("bold")) {
- this.fontStyle = 1;
- } else if (var2.equalsIgnoreCase("italic")) {
- this.fontStyle = 2;
- } else if (var2.equalsIgnoreCase("boldItalic")) {
- this.fontStyle = 3;
- }
-
- var2 = var46.nextToken();
- int var54;
- if ((var54 = Integer.parseInt(var2)) > 0) {
- this.fontSize = var54;
- }
- } catch (Exception var20) {
- }
-
- try {
- String var30 = ((Applet)this).getParameter("margins");
- if (var30 != null) {
- StringTokenizer var47 = new StringTokenizer(var30, ",");
- int var55;
- if ((var55 = Integer.parseInt(var47.nextToken())) > 0) {
- this.hrznMargin = var55;
- }
-
- if ((var55 = Integer.parseInt(var47.nextToken())) > 0) {
- this.vertMargin = var55;
- }
- }
- } catch (Exception var19) {
- }
-
- try {
- String var31 = ((Applet)this).getParameter("outline");
- if (var31 != null) {
- this.olColor = this.getColorParm(var31);
- this.olFlag = true;
- }
- } catch (Exception var18) {
- }
-
- try {
- String var32 = ((Applet)this).getParameter("default");
- StringTokenizer var48 = new StringTokenizer(var32, ",");
- String var38 = var48.nextToken();
-
- try {
- URL var5 = new URL(((Applet)this).getDocumentBase(), var38);
- if (var48.hasMoreTokens()) {
- var38 = var48.nextToken();
- this.target = var38;
- }
-
- this.defaultUrl = var5;
- } catch (MalformedURLException var16) {
- }
- } catch (Exception var17) {
- }
-
- try {
- String var33 = ((Applet)this).getParameter("status");
- if (var33 != null) {
- this.status = var33;
- }
- } catch (Exception var15) {
- }
-
- String var34 = null;
- int var6 = 1;
-
- do {
- try {
- var34 = ((Applet)this).getParameter("shape-" + var6);
- if (var34 != null) {
- this.getShape(var34);
-
- try {
- String var40 = ((Applet)this).getParameter("url-" + var6);
- StringTokenizer var49 = new StringTokenizer(var40, ",");
- String var3 = var49.nextToken();
-
- try {
- URL var51 = new URL(((Applet)this).getDocumentBase(), var3);
- if (var49.hasMoreTokens()) {
- var3 = var49.nextToken();
- this.area.setURL(var51, var3);
- } else {
- this.area.setURL(var51);
- }
- } catch (MalformedURLException var13) {
- }
- } catch (Exception var14) {
- }
-
- try {
- String var41 = ((Applet)this).getParameter("status-" + var6);
- if (var41 != null) {
- this.area.setStatusMsg(var41);
- }
- } catch (Exception var12) {
- }
-
- String var42 = null;
- int var7 = 1;
-
- do {
- try {
- var42 = ((Applet)this).getParameter("text-" + var6 + "-" + var7);
- if (var42 != null) {
- StringTokenizer var50 = new StringTokenizer(var42, "|");
- String var44;
- int var57;
- if (var50.countTokens() > 1) {
- var57 = Integer.parseInt(var50.nextToken());
- var44 = var50.nextToken();
- } else {
- var57 = 0;
- var44 = var42;
- }
-
- this.area.addText(var57, var44);
- }
- } catch (Exception var11) {
- }
-
- ++var7;
- } while(var42 != null);
-
- this.areas.addElement(this.area);
- }
- } catch (Exception var25) {
- }
-
- ++var6;
- } while(var34 != null);
-
- this.areas.trimToSize();
- Graphics var8 = ((Component)this).getGraphics();
- this.font = var8.getFont();
- var8.setFont(this.font = new Font(this.fontName, this.fontStyle, this.fontSize));
- FontMetrics var9 = var8.getFontMetrics();
- this.xAdvance = var9.getMaxAdvance();
- this.yAscent = var9.getMaxAscent();
- this.yHeight = var9.getHeight();
-
- for(int var52 = 0; var52 < this.areas.size(); ++var52) {
- this.area = (IMapArea)this.areas.elementAt(var52);
-
- for(int var53 = 0; var53 < this.area.getCount(); ++var53) {
- var34 = this.area.getText(var53);
- int var58 = this.area.getIndent(var53) * this.xAdvance + var9.stringWidth(var34);
- if (var58 > this.area.width) {
- this.area.width = var58;
- }
- }
-
- IMapArea var10000 = this.area;
- var10000.width += 2 * this.hrznMargin;
- this.area.height = this.area.getCount() * this.yHeight + 2 * this.vertMargin;
- }
-
- }
-
- private Color getColorParm(String var1) {
- if (var1.equalsIgnoreCase("black")) {
- return Color.black;
- } else if (var1.equalsIgnoreCase("blue")) {
- return Color.blue;
- } else if (var1.equalsIgnoreCase("cyan")) {
- return Color.cyan;
- } else if (var1.equalsIgnoreCase("darkGray")) {
- return Color.darkGray;
- } else if (var1.equalsIgnoreCase("gray")) {
- return Color.gray;
- } else if (var1.equalsIgnoreCase("green")) {
- return Color.green;
- } else if (var1.equalsIgnoreCase("lightGray")) {
- return Color.lightGray;
- } else if (var1.equalsIgnoreCase("magenta")) {
- return Color.magenta;
- } else if (var1.equalsIgnoreCase("orange")) {
- return Color.orange;
- } else if (var1.equalsIgnoreCase("pink")) {
- return Color.pink;
- } else if (var1.equalsIgnoreCase("red")) {
- return Color.red;
- } else if (var1.equalsIgnoreCase("white")) {
- return Color.white;
- } else if (var1.equalsIgnoreCase("yellow")) {
- return Color.yellow;
- } else if (var1.length() == 7 && var1.charAt(0) == '#') {
- int var2 = Integer.parseInt(var1.substring(1, 3), 16);
- int var3 = Integer.parseInt(var1.substring(3, 5), 16);
- int var4 = Integer.parseInt(var1.substring(5, 7), 16);
- return new Color(var2, var3, var4);
- } else {
- return Color.black;
- }
- }
-
- private void getShape(String var1) {
- StringTokenizer var2 = new StringTokenizer(var1, ",");
- String var3 = var2.nextToken();
- if (var3.equalsIgnoreCase("rect")) {
- int var4 = Integer.parseInt(var2.nextToken());
- int var5 = Integer.parseInt(var2.nextToken());
- int var6 = Integer.parseInt(var2.nextToken());
- int var7 = Integer.parseInt(var2.nextToken());
- this.area = new IMapArea(new Rectangle(var4, var5, var6 - var4, var7 - var5));
- } else if (var3.equalsIgnoreCase("circle")) {
- int var14 = Integer.parseInt(var2.nextToken());
- int var16 = Integer.parseInt(var2.nextToken());
- int var17 = Integer.parseInt(var2.nextToken());
- this.area = new IMapArea(var14, var16, var17, var17);
- } else if (var3.equalsIgnoreCase("ellipse")) {
- int var13 = Integer.parseInt(var2.nextToken());
- int var15 = Integer.parseInt(var2.nextToken());
- int var10 = Integer.parseInt(var2.nextToken());
- int var11 = Integer.parseInt(var2.nextToken());
- this.area = new IMapArea(var13, var15, var10, var11);
- } else {
- if (var3.equalsIgnoreCase("poly")) {
- Polygon var12 = new Polygon();
-
- while(var2.hasMoreTokens()) {
- int var8 = Integer.parseInt(var2.nextToken());
- int var9 = Integer.parseInt(var2.nextToken());
- var12.addPoint(var8, var9);
- }
-
- this.area = new IMapArea(var12);
- }
-
- }
- }
-
- public boolean mouseExit(Event var1, int var2, int var3) {
- this.activeArea = -1;
- ((Applet)this).getAppletContext().showStatus("");
- ((Component)this).repaint();
- return true;
- }
-
- public boolean mouseMove(Event var1, int var2, int var3) {
- int var4 = this.activeArea;
- this.activeArea = -1;
-
- for(int var5 = this.areas.size() - 1; var5 >= 0; --var5) {
- this.area = (IMapArea)this.areas.elementAt(var5);
- if (this.area.inside(var2, var3)) {
- this.activeArea = var5;
- }
- }
-
- if (this.activeArea != var4) {
- if (this.activeArea >= 0) {
- this.area = (IMapArea)this.areas.elementAt(this.activeArea);
- if (this.area.status != null) {
- ((Applet)this).getAppletContext().showStatus(this.area.status);
- } else if (this.area.url != null) {
- ((Applet)this).getAppletContext().showStatus(this.area.url.toString());
- } else {
- ((Applet)this).getAppletContext().showStatus("");
- }
- }
-
- ((Component)this).repaint();
- }
-
- if (this.activeArea < 0) {
- if (this.status != null) {
- ((Applet)this).getAppletContext().showStatus(this.status);
- } else if (this.defaultUrl != null) {
- ((Applet)this).getAppletContext().showStatus(this.defaultUrl.toString());
- } else {
- ((Applet)this).getAppletContext().showStatus("");
- }
- }
-
- return true;
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- if (this.activeArea >= 0) {
- this.area = (IMapArea)this.areas.elementAt(this.activeArea);
- if (this.area.url != null) {
- if (this.area.target != null) {
- ((Applet)this).getAppletContext().showDocument(this.area.url, this.area.target);
- } else {
- ((Applet)this).getAppletContext().showDocument(this.area.url);
- }
- }
- } else if (this.defaultUrl != null) {
- if (this.target != null) {
- ((Applet)this).getAppletContext().showDocument(this.defaultUrl, this.target);
- } else {
- ((Applet)this).getAppletContext().showDocument(this.defaultUrl);
- }
- }
-
- return true;
- }
-
- public void paint(Graphics var1) {
- this.update(var1);
- }
-
- public void update(Graphics var1) {
- Dimension var2 = ((Component)this).size();
- if (this.offGraphics == null || var2.width != this.offDimension.width || var2.height != this.offDimension.height) {
- this.offDimension = var2;
- this.offImage = ((Component)this).createImage(var2.width, var2.height);
- this.offGraphics = this.offImage.getGraphics();
- }
-
- if ((((Component)this).checkImage(this.mapImage, this) & 32) != 32) {
- this.offGraphics.setColor(this.bgColor);
- this.offGraphics.fillRect(0, 0, var2.width, var2.height);
- this.offGraphics.setFont(this.font);
- this.offGraphics.setColor(this.fgColor);
- this.offGraphics.drawString("Loading image...", this.xAdvance, this.yHeight + this.yAscent);
- var1.drawImage(this.offImage, 0, 0, this);
- } else {
- this.offGraphics.setColor(this.pgColor);
- this.offGraphics.fillRect(0, 0, var2.width, var2.height);
- this.offGraphics.drawImage(this.mapImage, 0, 0, this);
- if (this.activeArea >= 0) {
- this.area = (IMapArea)this.areas.elementAt(this.activeArea);
- Rectangle var9 = this.area.getBoundingBox();
- if (this.olFlag) {
- this.offGraphics.setColor(this.olColor);
- if (this.area.isRect()) {
- var9 = this.area.getRect();
- this.offGraphics.drawRect(var9.x, var9.y, var9.width, var9.height);
- } else if (this.area.isEllipse()) {
- var9 = this.area.getEllipse();
- this.offGraphics.drawOval(var9.x, var9.y, var9.width, var9.height);
- } else if (this.area.isPoly()) {
- Polygon var10 = this.area.getPoly();
- this.offGraphics.drawPolygon(var10);
- int var7 = var10.npoints - 1;
- this.offGraphics.drawLine(var10.xpoints[var7], var10.ypoints[var7], var10.xpoints[0], var10.ypoints[0]);
- }
- }
-
- if (this.area.getCount() > 0) {
- int var3 = 0;
- int var4 = 0;
- if ((var9.x + var9.width) / 2 < var2.width / 2) {
- var3 = var9.x + var9.width + this.xAdvance;
- } else {
- var3 = Math.max(0, var9.x - this.area.width - this.xAdvance);
- }
-
- if (var3 + this.area.width > var2.width) {
- var3 = Math.max(0, var2.width - this.area.width - this.xAdvance);
- }
-
- if (var9.intersects(new Rectangle(var3, var9.y, this.area.width, var9.height))) {
- if (var2.height - (var9.y + var9.height + this.yHeight) >= this.area.height) {
- var4 = var9.y + var9.height + this.yHeight;
- } else {
- var4 = var9.y - this.area.height - this.yHeight;
- }
- } else if (var9.y + var9.height / 2 < var2.height / 2) {
- var4 = var9.y + var9.height / 2;
- } else {
- var4 = Math.max(0, var9.y + var9.height / 2 - this.area.height);
- }
-
- if (var4 + this.area.height > var2.height) {
- var4 = Math.max(0, var2.height - this.area.height - this.yHeight);
- }
-
- this.offGraphics.setColor(this.bdColor);
- this.offGraphics.fillRect(var3, var4, this.area.width, this.area.height);
- this.offGraphics.setColor(this.bgColor);
- this.offGraphics.fillRect(var3 + this.bdSize, var4 + this.bdSize, this.area.width - 2 * this.bdSize, this.area.height - 2 * this.bdSize);
- this.offGraphics.setFont(this.font);
- this.offGraphics.setColor(this.fgColor);
-
- for(int var5 = 0; var5 < this.area.getCount(); ++var5) {
- boolean var6 = false;
- String var8 = this.area.getText(var5);
- int var13 = this.area.getIndent(var5);
- this.offGraphics.drawString(var8, var3 + this.hrznMargin + this.xAdvance * var13, var4 + this.vertMargin + var5 * this.yHeight + this.yAscent);
- }
- }
- }
-
- var1.drawImage(this.offImage, 0, 0, this);
- }
- }
-
- public IMap() {
- this.pgColor = Color.white;
- this.fgColor = Color.black;
- this.bgColor = Color.white;
- this.fontName = "Dialog";
- this.fontSize = 12;
- this.hrznMargin = 10;
- this.vertMargin = 10;
- this.olFlag = false;
- this.olColor = Color.black;
- this.areas = new Vector(10, 5);
- this.activeArea = -1;
- }
- }
-