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.image.ImageObserver;
- import java.io.BufferedInputStream;
- import java.io.InputStream;
- import java.io.StreamTokenizer;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class TreeBrowse extends Applet {
- static final String sVersion = "TreeBrowse 1.3";
- static final String sError = "TreeBrowse error: ";
- static final int NODE = 1;
- static final int ITEM = 2;
- TreeColorInfo color = new TreeColorInfo();
- Image offscreen;
- Graphics offgraphics;
- Font font;
- Dimension dim;
- Dimension imageDim;
- Dimension nodeDim;
- Dimension wallDim;
- int num;
- int maxLevel;
- TreeDisplay display;
- Image rootImage;
- Image itemImage;
- Image nodeImage;
- Image wall;
- int fontOff;
- int fontHeight;
- // $FF: renamed from: x int
- int field_0;
- // $FF: renamed from: y int
- int field_1;
- // $FF: renamed from: hx int
- int field_2;
- // $FF: renamed from: hy int
- int field_3;
- // $FF: renamed from: dx int
- int field_4;
- // $FF: renamed from: dy int
- int field_5;
- String target;
- Tree tree = new Tree();
- TreeNode open;
- TreeControl control;
- TreeComm comm;
- // $FF: renamed from: id int
- int field_6;
- URL imageSource;
- int lastLine = -1;
- int lastType = -1;
- // $FF: renamed from: cx int
- int field_7;
- // $FF: renamed from: cy int
- int field_8;
- int lcx;
- int lcy;
-
- public void init() {
- String var1;
- if ((var1 = ((Applet)this).getParameter("id")) != null) {
- this.field_6 = Integer.parseInt(var1);
- }
-
- TreeComm.setTreeBrowse(this, this.field_6);
- int var2;
- if ((var1 = ((Applet)this).getParameter("fontSize")) != null) {
- var2 = Integer.parseInt(var1);
- } else {
- var2 = 16;
- }
-
- String var3;
- if ((var1 = ((Applet)this).getParameter("fontName")) != null) {
- var3 = var1;
- } else {
- var3 = "TimesRoman";
- }
-
- int var4 = 0;
- if ((var1 = ((Applet)this).getParameter("fontStyle")) != null) {
- StringTokenizer var5 = new StringTokenizer(var1, "|");
-
- while(var5.hasMoreTokens()) {
- String var6 = var5.nextToken();
- if (var6.equals("PLAIN")) {
- var4 += 0;
- } else if (var6.equals("BOLD")) {
- ++var4;
- } else if (var6.equals("ITALIC")) {
- var4 += 2;
- }
- }
- } else {
- var4 = 0;
- }
-
- this.font = new Font(var3, var4, var2);
- if ((var1 = ((Applet)this).getParameter("target")) != null) {
- this.target = var1;
- }
-
- if ((var1 = ((Applet)this).getParameter("baseColor")) != null) {
- this.color.base = TreeColorInfo.getColor(var1);
- } else {
- this.color.base = Color.lightGray;
- }
-
- if ((var1 = ((Applet)this).getParameter("lineColor")) != null) {
- this.color.line = TreeColorInfo.getColor(var1);
- } else {
- this.color.line = new Color(0, 20, 50);
- }
-
- if ((var1 = ((Applet)this).getParameter("closeTextColor")) != null) {
- this.color.closeText = TreeColorInfo.getColor(var1);
- } else {
- this.color.closeText = new Color(0, 0, 50);
- }
-
- if ((var1 = ((Applet)this).getParameter("openTextColor")) != null) {
- this.color.openText = TreeColorInfo.getColor(var1);
- } else {
- this.color.openText = new Color(0, 50, 180);
- }
-
- if ((var1 = ((Applet)this).getParameter("highLightColor")) != null) {
- this.color.highLight = TreeColorInfo.getColor(var1);
- } else {
- this.color.highLight = new Color(180, 40, 40);
- }
-
- try {
- if ((var1 = ((Applet)this).getParameter("imageSource")) != null) {
- this.imageSource = new URL(((Applet)this).getDocumentBase(), var1 + "/");
- } else {
- this.imageSource = ((Applet)this).getDocumentBase();
- }
-
- if ((var1 = ((Applet)this).getParameter("itemImage")) == null) {
- var1 = "item.gif";
- }
-
- ((Component)this).prepareImage(this.itemImage = ((Applet)this).getImage(new URL(this.imageSource, var1)), (ImageObserver)null);
- if ((var1 = ((Applet)this).getParameter("nodeImage")) == null) {
- var1 = "node.gif";
- }
-
- ((Component)this).prepareImage(this.nodeImage = ((Applet)this).getImage(new URL(this.imageSource, var1)), (ImageObserver)null);
- if ((var1 = ((Applet)this).getParameter("wallPaper")) != null) {
- this.wall = ((Applet)this).getImage(new URL(this.imageSource, var1));
- }
- } catch (Exception var8) {
- this.showError(var8);
- }
-
- int var25;
- if ((var1 = ((Applet)this).getParameter("open")) != null) {
- var25 = Integer.parseInt(var1);
- } else {
- var25 = -1;
- }
-
- if ((var1 = ((Applet)this).getParameter("data")) == null) {
- var1 = "tree.dat";
- }
-
- try {
- InputStream var26 = (new URL(((Applet)this).getDocumentBase(), var1)).openStream();
- this.buildTree(var26, var25);
- this.dim = ((Component)this).size();
- this.imageDim = this.getImageDimensions(this.itemImage);
- Dimension var10000 = this.imageDim;
- var10000.width /= 2;
- this.nodeDim = this.getImageDimensions(this.nodeImage);
- var10000 = this.nodeDim;
- var10000.width /= 2;
- if (this.wall != null) {
- this.wallDim = this.getImageDimensions(this.wall);
- }
- } catch (Exception var7) {
- this.showError(var7);
- }
-
- if ((var1 = ((Applet)this).getParameter("control")) != null && var1.equals("true")) {
- this.control();
- }
-
- this.display = new TreeDisplay(this.num);
- this.display.updateDisplay(this.tree);
- this.tree.updateNodes((TreeNode)null, this.open);
- this.newTreeInit();
- }
-
- public void newTreeInit() {
- FontMetrics var1 = ((Component)this).getFontMetrics(this.font);
- this.fontOff = (var1.getMaxAscent() + var1.getMaxDescent()) / 2 - var1.getMaxDescent();
- this.fontHeight = var1.getHeight();
- this.field_2 = this.imageDim.width >> 1;
- this.field_3 = this.imageDim.height >> 1;
- this.field_4 = this.field_2 + 4;
- this.field_5 = Math.max(Math.max(this.imageDim.height, var1.getHeight()), this.nodeDim.height) + 4;
- this.field_0 = Math.max(this.field_4, (this.nodeDim.width >> 1) + 4);
- this.field_1 = this.field_5 >> 1;
- }
-
- public void buildTree(InputStream var1, int var2) throws Exception {
- FontMetrics var3 = ((Component)this).getFontMetrics(this.font);
- int var4 = 0;
- Vector var6 = new Vector(4, 4);
- var6.addElement(this.tree.getRoot());
- StreamTokenizer var9 = new StreamTokenizer(new BufferedInputStream(var1, 4000));
- var9.eolIsSignificant(true);
- var9.commentChar(35);
- var9.nextToken();
-
- while(var9.ttype != -1) {
- TreeNodeData var5 = new TreeNodeData();
- var5.level = (int)var9.nval;
- if (var9.nextToken() != 10) {
- var5.name = var9.sval;
- }
-
- String var7;
- if (var9.nextToken() != 10 && !(var7 = var9.sval).equals("")) {
- var5.url = var7;
- }
-
- if (var9.nextToken() == -2) {
- var5.open = (int)var9.nval > 0;
- }
-
- if (var9.nextToken() != 10 && var9.ttype != -1) {
- if (!var9.sval.equals("")) {
- var5.sImage = var9.sval;
- var5.image = ((Applet)this).getImage(new URL(this.imageSource, var9.sval));
- } else {
- var5.image = this.itemImage;
- }
- } else {
- var5.image = this.itemImage;
- }
-
- var5.sWidth = var3.stringWidth(var5.name);
- TreeNode var8;
- if (var5.level > var4) {
- var8 = ((TreeNode)var6.elementAt(var5.level - 1)).setSubNode(var5);
- } else {
- var8 = ((TreeNode)var6.elementAt(var5.level)).setNextNode(var5);
- }
-
- if (var6.size() <= var5.level) {
- var6.addElement(var8);
- } else {
- var6.setElementAt(var8, var5.level);
- }
-
- if (this.num == var2) {
- this.open = var8;
- }
-
- var4 = var5.level;
- this.maxLevel = var4 > this.maxLevel ? var4 : this.maxLevel;
-
- while(var9.ttype != 10 && var9.ttype != -1) {
- var9.nextToken();
- }
-
- while(var9.ttype == 10) {
- var9.nextToken();
- }
-
- ++this.num;
- }
-
- var1.close();
- }
-
- public synchronized boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
- if ((var2 & 64) != 0) {
- this.showError("Load image error");
- } else if ((var2 & 32) == 32) {
- ((Component)this).repaint();
- }
-
- this.notifyAll();
- return true;
- }
-
- synchronized Dimension getImageDimensions(Image var1) {
- int var2;
- while((var2 = var1.getWidth(this)) < 0) {
- try {
- this.wait();
- } catch (InterruptedException var5) {
- }
- }
-
- int var3;
- while((var3 = var1.getHeight(this)) < 0) {
- try {
- this.wait();
- } catch (InterruptedException var4) {
- }
- }
-
- return new Dimension(var2, var3);
- }
-
- private synchronized void fillWall(Graphics var1) {
- if (this.wall == null) {
- var1.setColor(this.color.base);
- var1.fillRect(0, 0, this.dim.width, this.dim.height);
- } else {
- for(int var2 = 0; var2 < this.dim.width / this.wallDim.width + 1; ++var2) {
- for(int var3 = 0; var3 < this.dim.height / this.wallDim.height + 1; ++var3) {
- var1.drawImage(this.wall, var2 * this.wallDim.width, var3 * this.wallDim.height, this);
- }
- }
-
- }
- }
-
- public void myDrawRect(Graphics var1, int var2, int var3, int var4, int var5) {
- int var6 = var2 + var4 - 1;
- int var7 = var3 + var5 - 1;
- var1.drawLine(var2, var3, var6 - 1, var3);
- var1.drawLine(var6, var3, var6, var7 - 1);
- var1.drawLine(var6, var7, var2 + 1, var7);
- var1.drawLine(var2, var7, var2, var3 + 1);
- }
-
- private void drawNodeMark(Graphics var1, int var2, int var3) {
- var1.setXORMode(this.color.base);
- var1.setColor(this.color.highLight);
- this.myDrawRect(var1, var2 - 1, var3 - 1, this.nodeDim.width + 2, this.nodeDim.height + 2);
- var1.setPaintMode();
- }
-
- public void update(Graphics var1) {
- boolean[] var5 = new boolean[this.maxLevel];
- int var6 = this.field_1;
- int var7 = 0;
- this.fillWall(this.offgraphics);
- this.offgraphics.setColor(this.color.line);
- if (this.tree.rootItem()) {
- this.offgraphics.translate(this.field_0, var6);
- TreeNode var4 = this.display.getLine(0);
- if (var4.subNode != null) {
- this.offgraphics.drawLine(0, 0, 0, this.field_5);
- var5[0] = true;
- }
-
- Graphics var2 = this.offgraphics.create();
- var2.clipRect(-this.field_2, -this.field_3, this.imageDim.width, this.imageDim.height);
- Color var3;
- if (this.open == var4) {
- var2.drawImage(var4.data.image, -this.field_2 - this.imageDim.width, -this.field_3, this);
- var3 = this.color.openText;
- } else {
- var2.drawImage(var4.data.image, -this.field_2, -this.field_3, this);
- var3 = this.color.closeText;
- }
-
- this.offgraphics.setColor(var3);
- this.offgraphics.drawString(var4.data.name, this.field_4, this.fontOff);
- this.offgraphics.setColor(this.color.line);
- this.offgraphics.translate(-this.field_0, -var6);
- var6 += this.field_5;
- var7 = 1;
- } else {
- var7 = 0;
- }
-
- TreeNode var15;
- while(var7 < this.num && (var15 = this.display.getLine(var7)) != null) {
- int var8 = this.field_0;
- this.offgraphics.translate(0, var6);
-
- for(int var9 = 0; var9 < var15.data.level - 1; ++var9) {
- if (var5[var9]) {
- this.offgraphics.drawLine(var8, 0, var8, this.field_5);
- }
-
- var8 += this.field_4 + this.field_2;
- }
-
- this.offgraphics.translate(var8, 0);
- if (var15.nextNode != null) {
- var5[var15.data.level - 1] = true;
- this.offgraphics.drawLine(0, 0, 0, this.field_5);
- } else {
- var5[var15.data.level - 1] = false;
- }
-
- this.offgraphics.drawLine(0, 0, this.field_4 + this.field_2, 0);
- if (var15.subNode != null) {
- int var10 = -(this.nodeDim.width >> 1);
- int var11 = -(this.nodeDim.height >> 1);
- Graphics var12 = this.offgraphics.create();
- var12.clipRect(var10, var11, this.nodeDim.width, this.nodeDim.height);
- if (var15.data.open) {
- var12.drawImage(this.nodeImage, var10, var11, this);
- this.offgraphics.drawLine(this.field_4 + this.field_2, 0, this.field_4 + this.field_2, this.field_5);
- } else {
- var12.drawImage(this.nodeImage, var10 - this.nodeDim.width, var11, this);
- if (var15.data.mark) {
- this.offgraphics.setColor(this.color.highLight);
- this.myDrawRect(this.offgraphics, var10 - 2, var11 - 2, this.nodeDim.width + 4, this.nodeDim.height + 4);
- }
- }
- }
-
- var8 += this.field_4 + this.field_2;
- this.offgraphics.translate(this.field_4 + this.field_2, 0);
- Graphics var13 = this.offgraphics.create();
- var13.clipRect(-this.field_2, -this.field_3, this.imageDim.width, this.imageDim.height);
- Color var14;
- if (this.open == var15) {
- var13.drawImage(var15.data.image, -this.field_2 - this.imageDim.width, -this.field_3, this);
- var14 = this.color.openText;
- } else {
- var13.drawImage(var15.data.image, -this.field_2, -this.field_3, this);
- var14 = this.color.closeText;
- }
-
- this.offgraphics.setColor(var14);
- this.offgraphics.drawString(var15.data.name, this.field_4, this.fontOff);
- this.offgraphics.setColor(this.color.line);
- this.offgraphics.translate(-var8, -var6);
- var6 += this.field_5;
- ++var7;
- }
-
- var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
- if (this.lastType == 1) {
- this.drawNodeMark(var1, this.lcx, this.lcy);
- }
-
- ((Applet)this).showStatus("TreeBrowse 1.3");
- }
-
- public void paint(Graphics var1) {
- if (this.offscreen == null) {
- this.offscreen = ((Component)this).createImage(this.dim.width, this.dim.height);
- this.offgraphics = this.offscreen.getGraphics();
- this.offgraphics.setFont(this.font);
- this.update(var1);
- } else {
- var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
- }
- }
-
- private void highLight(int var1, int var2, boolean var3) {
- if (var1 != this.lastLine || var2 != this.lastType) {
- Graphics var4 = ((Component)this).getGraphics();
- if (this.lastType == 1) {
- this.drawNodeMark(var4, this.lcx, this.lcy);
- } else if (this.lastType == 2) {
- TreeNode var5 = this.display.getLine(this.lastLine);
- var4.setFont(this.font);
- var4.setColor(this.color.base);
- var4.drawString(var5.data.name, this.lcx, this.lcy + (this.fontOff << 1));
- var4.setColor(this.open == var5 ? this.color.openText : this.color.closeText);
- var4.drawString(var5.data.name, this.lcx, this.lcy + (this.fontOff << 1));
- }
-
- if (var3) {
- if (var2 == 1) {
- this.drawNodeMark(var4, this.field_7, this.field_8);
- } else if (var2 == 2) {
- var4.setFont(this.font);
- var4.setColor(this.color.base);
- var4.drawString(this.display.getLine(var1).data.name, this.field_7, this.field_8 + (this.fontOff << 1));
- var4.setColor(this.color.highLight);
- var4.drawString(this.display.getLine(var1).data.name, this.field_7, this.field_8 + (this.fontOff << 1));
- }
- }
-
- this.lastLine = var1;
- this.lastType = var2;
- this.lcx = this.field_7;
- this.lcy = this.field_8;
- }
-
- }
-
- public boolean mouseMove(Event var1, int var2, int var3) {
- ((Applet)this).showStatus("");
- int var4 = (var3 - 4) / this.field_5;
- TreeNode var5 = this.display.getLine(var4);
- if (var5 == null) {
- this.highLight(-1, -1, false);
- return true;
- } else {
- int var6 = this.field_0 + (var5.data.level - 1) * (this.field_4 + this.field_2);
- int var7 = this.field_1 + var4 * this.field_5;
- boolean var8 = false;
- if (var5.subNode != null) {
- this.field_7 = var6 - (this.nodeDim.width >> 1);
- this.field_8 = var7 - (this.nodeDim.height >> 1);
- if (this.inside(var2, var3, this.field_7, this.field_8, this.nodeDim)) {
- ((Applet)this).showStatus("Click to open or close node");
- var8 = true;
- this.highLight(var4, 1, true);
- }
- }
-
- if (var5.data.url != null) {
- Dimension var9 = new Dimension();
- var9.width = var5.data.sWidth + 4;
- var9.height = this.fontHeight;
- this.field_7 = var6 + (this.field_4 << 1) + this.field_2;
- this.field_8 = var7 - this.fontOff;
- if (this.inside(var2, var3, var6 + this.field_4, var7 - this.field_3, this.imageDim) || this.inside(var2, var3, this.field_7 - 4, this.field_8, var9)) {
- ((Applet)this).showStatus(var5.data.url.toString());
- var8 = true;
- this.highLight(var4, 2, true);
- }
- }
-
- if (!var8) {
- this.highLight(-1, -1, false);
- }
-
- return true;
- }
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- if (this.lastType == 1) {
- TreeNode var4 = this.display.getLine(this.lastLine);
- var4.data.open = !var4.data.open;
- this.display.updateDisplay(this.tree);
- ((Component)this).repaint(0, this.lastLine * this.field_5, this.dim.width, this.dim.height);
- } else if (this.lastType == 2) {
- TreeNode var5 = this.open;
- this.updateURL(this.display.getLine(this.lastLine));
- if (this.control != null && var5 != this.open) {
- this.control.addItem(this.open);
- }
- } else if (this.control != null) {
- this.control();
- }
-
- ((Applet)this).showStatus("TreeBrowse 1.3");
- return true;
- }
-
- public boolean mouseExit(Event var1, int var2, int var3) {
- this.highLight(-1, -1, false);
- ((Applet)this).showStatus("");
- return true;
- }
-
- public void updateURL(TreeNode var1) {
- this.tree.updateNodes(this.open, var1);
- this.open = var1;
- String var2 = var1.data.url;
-
- URL var3;
- try {
- if (var2.indexOf(":") > 0) {
- var3 = new URL(var2);
- } else {
- var3 = new URL(((Applet)this).getDocumentBase(), var2);
- }
- } catch (MalformedURLException var4) {
- this.showError("URL invalid, can not open document.");
- return;
- }
-
- if (this.target != null) {
- ((Applet)this).getAppletContext().showDocument(var3, this.target);
- } else {
- ((Applet)this).getAppletContext().showDocument(var3);
- }
-
- ((Component)this).repaint();
- }
-
- public void openItem(int var1) {
- if (var1 >= 0 && var1 < this.num) {
- TreeNode var2 = this.tree.findItem(var1);
- if (var2 != this.open) {
- this.tree.updateNodes(this.open, var2);
- this.open = var2;
- ((Component)this).repaint();
- this.control.addItem(var2);
- }
-
- }
- }
-
- private boolean inside(int var1, int var2, int var3, int var4, Dimension var5) {
- return var1 >= var3 && var1 < var3 + var5.width && var2 >= var4 && var2 < var4 + var5.height;
- }
-
- public void start() {
- if (this.control != null) {
- this.control();
- }
-
- }
-
- public void stop() {
- if (this.control != null) {
- this.control.hide();
- }
-
- }
-
- public void control() {
- if (this.control != null && this.control.isValid()) {
- this.control.show();
- this.control.toFront();
- } else {
- this.control = new TreeControl(this);
- this.control.setTitle("TreeBrowse 1.3");
- this.control.pack();
- if (this.open != null) {
- this.control.addItem(this.open);
- }
-
- }
- }
-
- void error(String var1) {
- ((Applet)this).showStatus(var1);
- System.err.println(var1);
- System.err.println("Applet terminate");
- System.exit(1);
- }
-
- void showError(Exception var1) {
- String var2 = "TreeBrowse error: " + var1;
- this.error(var2);
- }
-
- void showError(String var1) {
- String var2 = "TreeBrowse error: " + var1;
- this.error(var2);
- }
-
- public String getAppletInfo() {
- return "TreeBrowse 1.3 by Stanley Poon - 13 May 1996";
- }
- }
-