home *** CD-ROM | disk | FTP | other *** search
/ MACD 7 / MACD7.iso / www / weirdscience / classes / treebrowse.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-14  |  13.0 KB  |  660 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.image.ImageObserver;
  11. import java.io.BufferedInputStream;
  12. import java.io.InputStream;
  13. import java.io.StreamTokenizer;
  14. import java.net.MalformedURLException;
  15. import java.net.URL;
  16. import java.util.StringTokenizer;
  17. import java.util.Vector;
  18.  
  19. public class TreeBrowse extends Applet {
  20.    static final String sVersion = "TreeBrowse 1.3";
  21.    static final String sError = "TreeBrowse error: ";
  22.    static final int NODE = 1;
  23.    static final int ITEM = 2;
  24.    TreeColorInfo color = new TreeColorInfo();
  25.    Image offscreen;
  26.    Graphics offgraphics;
  27.    Font font;
  28.    Dimension dim;
  29.    Dimension imageDim;
  30.    Dimension nodeDim;
  31.    Dimension wallDim;
  32.    int num;
  33.    int maxLevel;
  34.    TreeDisplay display;
  35.    Image rootImage;
  36.    Image itemImage;
  37.    Image nodeImage;
  38.    Image wall;
  39.    int fontOff;
  40.    int fontHeight;
  41.    // $FF: renamed from: x int
  42.    int field_0;
  43.    // $FF: renamed from: y int
  44.    int field_1;
  45.    // $FF: renamed from: hx int
  46.    int field_2;
  47.    // $FF: renamed from: hy int
  48.    int field_3;
  49.    // $FF: renamed from: dx int
  50.    int field_4;
  51.    // $FF: renamed from: dy int
  52.    int field_5;
  53.    String target;
  54.    Tree tree = new Tree();
  55.    TreeNode open;
  56.    TreeControl control;
  57.    TreeComm comm;
  58.    // $FF: renamed from: id int
  59.    int field_6;
  60.    URL imageSource;
  61.    int lastLine = -1;
  62.    int lastType = -1;
  63.    // $FF: renamed from: cx int
  64.    int field_7;
  65.    // $FF: renamed from: cy int
  66.    int field_8;
  67.    int lcx;
  68.    int lcy;
  69.  
  70.    public void init() {
  71.       String var1;
  72.       if ((var1 = ((Applet)this).getParameter("id")) != null) {
  73.          this.field_6 = Integer.parseInt(var1);
  74.       }
  75.  
  76.       TreeComm.setTreeBrowse(this, this.field_6);
  77.       int var2;
  78.       if ((var1 = ((Applet)this).getParameter("fontSize")) != null) {
  79.          var2 = Integer.parseInt(var1);
  80.       } else {
  81.          var2 = 16;
  82.       }
  83.  
  84.       String var3;
  85.       if ((var1 = ((Applet)this).getParameter("fontName")) != null) {
  86.          var3 = var1;
  87.       } else {
  88.          var3 = "TimesRoman";
  89.       }
  90.  
  91.       int var4 = 0;
  92.       if ((var1 = ((Applet)this).getParameter("fontStyle")) != null) {
  93.          StringTokenizer var5 = new StringTokenizer(var1, "|");
  94.  
  95.          while(var5.hasMoreTokens()) {
  96.             String var6 = var5.nextToken();
  97.             if (var6.equals("PLAIN")) {
  98.                var4 += 0;
  99.             } else if (var6.equals("BOLD")) {
  100.                ++var4;
  101.             } else if (var6.equals("ITALIC")) {
  102.                var4 += 2;
  103.             }
  104.          }
  105.       } else {
  106.          var4 = 0;
  107.       }
  108.  
  109.       this.font = new Font(var3, var4, var2);
  110.       if ((var1 = ((Applet)this).getParameter("target")) != null) {
  111.          this.target = var1;
  112.       }
  113.  
  114.       if ((var1 = ((Applet)this).getParameter("baseColor")) != null) {
  115.          this.color.base = TreeColorInfo.getColor(var1);
  116.       } else {
  117.          this.color.base = Color.lightGray;
  118.       }
  119.  
  120.       if ((var1 = ((Applet)this).getParameter("lineColor")) != null) {
  121.          this.color.line = TreeColorInfo.getColor(var1);
  122.       } else {
  123.          this.color.line = new Color(0, 20, 50);
  124.       }
  125.  
  126.       if ((var1 = ((Applet)this).getParameter("closeTextColor")) != null) {
  127.          this.color.closeText = TreeColorInfo.getColor(var1);
  128.       } else {
  129.          this.color.closeText = new Color(0, 0, 50);
  130.       }
  131.  
  132.       if ((var1 = ((Applet)this).getParameter("openTextColor")) != null) {
  133.          this.color.openText = TreeColorInfo.getColor(var1);
  134.       } else {
  135.          this.color.openText = new Color(0, 50, 180);
  136.       }
  137.  
  138.       if ((var1 = ((Applet)this).getParameter("highLightColor")) != null) {
  139.          this.color.highLight = TreeColorInfo.getColor(var1);
  140.       } else {
  141.          this.color.highLight = new Color(180, 40, 40);
  142.       }
  143.  
  144.       try {
  145.          if ((var1 = ((Applet)this).getParameter("imageSource")) != null) {
  146.             this.imageSource = new URL(((Applet)this).getDocumentBase(), var1 + "/");
  147.          } else {
  148.             this.imageSource = ((Applet)this).getDocumentBase();
  149.          }
  150.  
  151.          if ((var1 = ((Applet)this).getParameter("itemImage")) == null) {
  152.             var1 = "item.gif";
  153.          }
  154.  
  155.          ((Component)this).prepareImage(this.itemImage = ((Applet)this).getImage(new URL(this.imageSource, var1)), (ImageObserver)null);
  156.          if ((var1 = ((Applet)this).getParameter("nodeImage")) == null) {
  157.             var1 = "node.gif";
  158.          }
  159.  
  160.          ((Component)this).prepareImage(this.nodeImage = ((Applet)this).getImage(new URL(this.imageSource, var1)), (ImageObserver)null);
  161.          if ((var1 = ((Applet)this).getParameter("wallPaper")) != null) {
  162.             this.wall = ((Applet)this).getImage(new URL(this.imageSource, var1));
  163.          }
  164.       } catch (Exception var8) {
  165.          this.showError(var8);
  166.       }
  167.  
  168.       int var25;
  169.       if ((var1 = ((Applet)this).getParameter("open")) != null) {
  170.          var25 = Integer.parseInt(var1);
  171.       } else {
  172.          var25 = -1;
  173.       }
  174.  
  175.       if ((var1 = ((Applet)this).getParameter("data")) == null) {
  176.          var1 = "tree.dat";
  177.       }
  178.  
  179.       try {
  180.          InputStream var26 = (new URL(((Applet)this).getDocumentBase(), var1)).openStream();
  181.          this.buildTree(var26, var25);
  182.          this.dim = ((Component)this).size();
  183.          this.imageDim = this.getImageDimensions(this.itemImage);
  184.          Dimension var10000 = this.imageDim;
  185.          var10000.width /= 2;
  186.          this.nodeDim = this.getImageDimensions(this.nodeImage);
  187.          var10000 = this.nodeDim;
  188.          var10000.width /= 2;
  189.          if (this.wall != null) {
  190.             this.wallDim = this.getImageDimensions(this.wall);
  191.          }
  192.       } catch (Exception var7) {
  193.          this.showError(var7);
  194.       }
  195.  
  196.       if ((var1 = ((Applet)this).getParameter("control")) != null && var1.equals("true")) {
  197.          this.control();
  198.       }
  199.  
  200.       this.display = new TreeDisplay(this.num);
  201.       this.display.updateDisplay(this.tree);
  202.       this.tree.updateNodes((TreeNode)null, this.open);
  203.       this.newTreeInit();
  204.    }
  205.  
  206.    public void newTreeInit() {
  207.       FontMetrics var1 = ((Component)this).getFontMetrics(this.font);
  208.       this.fontOff = (var1.getMaxAscent() + var1.getMaxDescent()) / 2 - var1.getMaxDescent();
  209.       this.fontHeight = var1.getHeight();
  210.       this.field_2 = this.imageDim.width >> 1;
  211.       this.field_3 = this.imageDim.height >> 1;
  212.       this.field_4 = this.field_2 + 4;
  213.       this.field_5 = Math.max(Math.max(this.imageDim.height, var1.getHeight()), this.nodeDim.height) + 4;
  214.       this.field_0 = Math.max(this.field_4, (this.nodeDim.width >> 1) + 4);
  215.       this.field_1 = this.field_5 >> 1;
  216.    }
  217.  
  218.    public void buildTree(InputStream var1, int var2) throws Exception {
  219.       FontMetrics var3 = ((Component)this).getFontMetrics(this.font);
  220.       int var4 = 0;
  221.       Vector var6 = new Vector(4, 4);
  222.       var6.addElement(this.tree.getRoot());
  223.       StreamTokenizer var9 = new StreamTokenizer(new BufferedInputStream(var1, 4000));
  224.       var9.eolIsSignificant(true);
  225.       var9.commentChar(35);
  226.       var9.nextToken();
  227.  
  228.       while(var9.ttype != -1) {
  229.          TreeNodeData var5 = new TreeNodeData();
  230.          var5.level = (int)var9.nval;
  231.          if (var9.nextToken() != 10) {
  232.             var5.name = var9.sval;
  233.          }
  234.  
  235.          String var7;
  236.          if (var9.nextToken() != 10 && !(var7 = var9.sval).equals("")) {
  237.             var5.url = var7;
  238.          }
  239.  
  240.          if (var9.nextToken() == -2) {
  241.             var5.open = (int)var9.nval > 0;
  242.          }
  243.  
  244.          if (var9.nextToken() != 10 && var9.ttype != -1) {
  245.             if (!var9.sval.equals("")) {
  246.                var5.sImage = var9.sval;
  247.                var5.image = ((Applet)this).getImage(new URL(this.imageSource, var9.sval));
  248.             } else {
  249.                var5.image = this.itemImage;
  250.             }
  251.          } else {
  252.             var5.image = this.itemImage;
  253.          }
  254.  
  255.          var5.sWidth = var3.stringWidth(var5.name);
  256.          TreeNode var8;
  257.          if (var5.level > var4) {
  258.             var8 = ((TreeNode)var6.elementAt(var5.level - 1)).setSubNode(var5);
  259.          } else {
  260.             var8 = ((TreeNode)var6.elementAt(var5.level)).setNextNode(var5);
  261.          }
  262.  
  263.          if (var6.size() <= var5.level) {
  264.             var6.addElement(var8);
  265.          } else {
  266.             var6.setElementAt(var8, var5.level);
  267.          }
  268.  
  269.          if (this.num == var2) {
  270.             this.open = var8;
  271.          }
  272.  
  273.          var4 = var5.level;
  274.          this.maxLevel = var4 > this.maxLevel ? var4 : this.maxLevel;
  275.  
  276.          while(var9.ttype != 10 && var9.ttype != -1) {
  277.             var9.nextToken();
  278.          }
  279.  
  280.          while(var9.ttype == 10) {
  281.             var9.nextToken();
  282.          }
  283.  
  284.          ++this.num;
  285.       }
  286.  
  287.       var1.close();
  288.    }
  289.  
  290.    public synchronized boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) {
  291.       if ((var2 & 64) != 0) {
  292.          this.showError("Load image error");
  293.       } else if ((var2 & 32) == 32) {
  294.          ((Component)this).repaint();
  295.       }
  296.  
  297.       this.notifyAll();
  298.       return true;
  299.    }
  300.  
  301.    synchronized Dimension getImageDimensions(Image var1) {
  302.       int var2;
  303.       while((var2 = var1.getWidth(this)) < 0) {
  304.          try {
  305.             this.wait();
  306.          } catch (InterruptedException var5) {
  307.          }
  308.       }
  309.  
  310.       int var3;
  311.       while((var3 = var1.getHeight(this)) < 0) {
  312.          try {
  313.             this.wait();
  314.          } catch (InterruptedException var4) {
  315.          }
  316.       }
  317.  
  318.       return new Dimension(var2, var3);
  319.    }
  320.  
  321.    private synchronized void fillWall(Graphics var1) {
  322.       if (this.wall == null) {
  323.          var1.setColor(this.color.base);
  324.          var1.fillRect(0, 0, this.dim.width, this.dim.height);
  325.       } else {
  326.          for(int var2 = 0; var2 < this.dim.width / this.wallDim.width + 1; ++var2) {
  327.             for(int var3 = 0; var3 < this.dim.height / this.wallDim.height + 1; ++var3) {
  328.                var1.drawImage(this.wall, var2 * this.wallDim.width, var3 * this.wallDim.height, this);
  329.             }
  330.          }
  331.  
  332.       }
  333.    }
  334.  
  335.    public void myDrawRect(Graphics var1, int var2, int var3, int var4, int var5) {
  336.       int var6 = var2 + var4 - 1;
  337.       int var7 = var3 + var5 - 1;
  338.       var1.drawLine(var2, var3, var6 - 1, var3);
  339.       var1.drawLine(var6, var3, var6, var7 - 1);
  340.       var1.drawLine(var6, var7, var2 + 1, var7);
  341.       var1.drawLine(var2, var7, var2, var3 + 1);
  342.    }
  343.  
  344.    private void drawNodeMark(Graphics var1, int var2, int var3) {
  345.       var1.setXORMode(this.color.base);
  346.       var1.setColor(this.color.highLight);
  347.       this.myDrawRect(var1, var2 - 1, var3 - 1, this.nodeDim.width + 2, this.nodeDim.height + 2);
  348.       var1.setPaintMode();
  349.    }
  350.  
  351.    public void update(Graphics var1) {
  352.       boolean[] var5 = new boolean[this.maxLevel];
  353.       int var6 = this.field_1;
  354.       int var7 = 0;
  355.       this.fillWall(this.offgraphics);
  356.       this.offgraphics.setColor(this.color.line);
  357.       if (this.tree.rootItem()) {
  358.          this.offgraphics.translate(this.field_0, var6);
  359.          TreeNode var4 = this.display.getLine(0);
  360.          if (var4.subNode != null) {
  361.             this.offgraphics.drawLine(0, 0, 0, this.field_5);
  362.             var5[0] = true;
  363.          }
  364.  
  365.          Graphics var2 = this.offgraphics.create();
  366.          var2.clipRect(-this.field_2, -this.field_3, this.imageDim.width, this.imageDim.height);
  367.          Color var3;
  368.          if (this.open == var4) {
  369.             var2.drawImage(var4.data.image, -this.field_2 - this.imageDim.width, -this.field_3, this);
  370.             var3 = this.color.openText;
  371.          } else {
  372.             var2.drawImage(var4.data.image, -this.field_2, -this.field_3, this);
  373.             var3 = this.color.closeText;
  374.          }
  375.  
  376.          this.offgraphics.setColor(var3);
  377.          this.offgraphics.drawString(var4.data.name, this.field_4, this.fontOff);
  378.          this.offgraphics.setColor(this.color.line);
  379.          this.offgraphics.translate(-this.field_0, -var6);
  380.          var6 += this.field_5;
  381.          var7 = 1;
  382.       } else {
  383.          var7 = 0;
  384.       }
  385.  
  386.       TreeNode var15;
  387.       while(var7 < this.num && (var15 = this.display.getLine(var7)) != null) {
  388.          int var8 = this.field_0;
  389.          this.offgraphics.translate(0, var6);
  390.  
  391.          for(int var9 = 0; var9 < var15.data.level - 1; ++var9) {
  392.             if (var5[var9]) {
  393.                this.offgraphics.drawLine(var8, 0, var8, this.field_5);
  394.             }
  395.  
  396.             var8 += this.field_4 + this.field_2;
  397.          }
  398.  
  399.          this.offgraphics.translate(var8, 0);
  400.          if (var15.nextNode != null) {
  401.             var5[var15.data.level - 1] = true;
  402.             this.offgraphics.drawLine(0, 0, 0, this.field_5);
  403.          } else {
  404.             var5[var15.data.level - 1] = false;
  405.          }
  406.  
  407.          this.offgraphics.drawLine(0, 0, this.field_4 + this.field_2, 0);
  408.          if (var15.subNode != null) {
  409.             int var10 = -(this.nodeDim.width >> 1);
  410.             int var11 = -(this.nodeDim.height >> 1);
  411.             Graphics var12 = this.offgraphics.create();
  412.             var12.clipRect(var10, var11, this.nodeDim.width, this.nodeDim.height);
  413.             if (var15.data.open) {
  414.                var12.drawImage(this.nodeImage, var10, var11, this);
  415.                this.offgraphics.drawLine(this.field_4 + this.field_2, 0, this.field_4 + this.field_2, this.field_5);
  416.             } else {
  417.                var12.drawImage(this.nodeImage, var10 - this.nodeDim.width, var11, this);
  418.                if (var15.data.mark) {
  419.                   this.offgraphics.setColor(this.color.highLight);
  420.                   this.myDrawRect(this.offgraphics, var10 - 2, var11 - 2, this.nodeDim.width + 4, this.nodeDim.height + 4);
  421.                }
  422.             }
  423.          }
  424.  
  425.          var8 += this.field_4 + this.field_2;
  426.          this.offgraphics.translate(this.field_4 + this.field_2, 0);
  427.          Graphics var13 = this.offgraphics.create();
  428.          var13.clipRect(-this.field_2, -this.field_3, this.imageDim.width, this.imageDim.height);
  429.          Color var14;
  430.          if (this.open == var15) {
  431.             var13.drawImage(var15.data.image, -this.field_2 - this.imageDim.width, -this.field_3, this);
  432.             var14 = this.color.openText;
  433.          } else {
  434.             var13.drawImage(var15.data.image, -this.field_2, -this.field_3, this);
  435.             var14 = this.color.closeText;
  436.          }
  437.  
  438.          this.offgraphics.setColor(var14);
  439.          this.offgraphics.drawString(var15.data.name, this.field_4, this.fontOff);
  440.          this.offgraphics.setColor(this.color.line);
  441.          this.offgraphics.translate(-var8, -var6);
  442.          var6 += this.field_5;
  443.          ++var7;
  444.       }
  445.  
  446.       var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  447.       if (this.lastType == 1) {
  448.          this.drawNodeMark(var1, this.lcx, this.lcy);
  449.       }
  450.  
  451.       ((Applet)this).showStatus("TreeBrowse 1.3");
  452.    }
  453.  
  454.    public void paint(Graphics var1) {
  455.       if (this.offscreen == null) {
  456.          this.offscreen = ((Component)this).createImage(this.dim.width, this.dim.height);
  457.          this.offgraphics = this.offscreen.getGraphics();
  458.          this.offgraphics.setFont(this.font);
  459.          this.update(var1);
  460.       } else {
  461.          var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  462.       }
  463.    }
  464.  
  465.    private void highLight(int var1, int var2, boolean var3) {
  466.       if (var1 != this.lastLine || var2 != this.lastType) {
  467.          Graphics var4 = ((Component)this).getGraphics();
  468.          if (this.lastType == 1) {
  469.             this.drawNodeMark(var4, this.lcx, this.lcy);
  470.          } else if (this.lastType == 2) {
  471.             TreeNode var5 = this.display.getLine(this.lastLine);
  472.             var4.setFont(this.font);
  473.             var4.setColor(this.color.base);
  474.             var4.drawString(var5.data.name, this.lcx, this.lcy + (this.fontOff << 1));
  475.             var4.setColor(this.open == var5 ? this.color.openText : this.color.closeText);
  476.             var4.drawString(var5.data.name, this.lcx, this.lcy + (this.fontOff << 1));
  477.          }
  478.  
  479.          if (var3) {
  480.             if (var2 == 1) {
  481.                this.drawNodeMark(var4, this.field_7, this.field_8);
  482.             } else if (var2 == 2) {
  483.                var4.setFont(this.font);
  484.                var4.setColor(this.color.base);
  485.                var4.drawString(this.display.getLine(var1).data.name, this.field_7, this.field_8 + (this.fontOff << 1));
  486.                var4.setColor(this.color.highLight);
  487.                var4.drawString(this.display.getLine(var1).data.name, this.field_7, this.field_8 + (this.fontOff << 1));
  488.             }
  489.          }
  490.  
  491.          this.lastLine = var1;
  492.          this.lastType = var2;
  493.          this.lcx = this.field_7;
  494.          this.lcy = this.field_8;
  495.       }
  496.  
  497.    }
  498.  
  499.    public boolean mouseMove(Event var1, int var2, int var3) {
  500.       ((Applet)this).showStatus("");
  501.       int var4 = (var3 - 4) / this.field_5;
  502.       TreeNode var5 = this.display.getLine(var4);
  503.       if (var5 == null) {
  504.          this.highLight(-1, -1, false);
  505.          return true;
  506.       } else {
  507.          int var6 = this.field_0 + (var5.data.level - 1) * (this.field_4 + this.field_2);
  508.          int var7 = this.field_1 + var4 * this.field_5;
  509.          boolean var8 = false;
  510.          if (var5.subNode != null) {
  511.             this.field_7 = var6 - (this.nodeDim.width >> 1);
  512.             this.field_8 = var7 - (this.nodeDim.height >> 1);
  513.             if (this.inside(var2, var3, this.field_7, this.field_8, this.nodeDim)) {
  514.                ((Applet)this).showStatus("Click to open or close node");
  515.                var8 = true;
  516.                this.highLight(var4, 1, true);
  517.             }
  518.          }
  519.  
  520.          if (var5.data.url != null) {
  521.             Dimension var9 = new Dimension();
  522.             var9.width = var5.data.sWidth + 4;
  523.             var9.height = this.fontHeight;
  524.             this.field_7 = var6 + (this.field_4 << 1) + this.field_2;
  525.             this.field_8 = var7 - this.fontOff;
  526.             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)) {
  527.                ((Applet)this).showStatus(var5.data.url.toString());
  528.                var8 = true;
  529.                this.highLight(var4, 2, true);
  530.             }
  531.          }
  532.  
  533.          if (!var8) {
  534.             this.highLight(-1, -1, false);
  535.          }
  536.  
  537.          return true;
  538.       }
  539.    }
  540.  
  541.    public boolean mouseDown(Event var1, int var2, int var3) {
  542.       if (this.lastType == 1) {
  543.          TreeNode var4 = this.display.getLine(this.lastLine);
  544.          var4.data.open = !var4.data.open;
  545.          this.display.updateDisplay(this.tree);
  546.          ((Component)this).repaint(0, this.lastLine * this.field_5, this.dim.width, this.dim.height);
  547.       } else if (this.lastType == 2) {
  548.          TreeNode var5 = this.open;
  549.          this.updateURL(this.display.getLine(this.lastLine));
  550.          if (this.control != null && var5 != this.open) {
  551.             this.control.addItem(this.open);
  552.          }
  553.       } else if (this.control != null) {
  554.          this.control();
  555.       }
  556.  
  557.       ((Applet)this).showStatus("TreeBrowse 1.3");
  558.       return true;
  559.    }
  560.  
  561.    public boolean mouseExit(Event var1, int var2, int var3) {
  562.       this.highLight(-1, -1, false);
  563.       ((Applet)this).showStatus("");
  564.       return true;
  565.    }
  566.  
  567.    public void updateURL(TreeNode var1) {
  568.       this.tree.updateNodes(this.open, var1);
  569.       this.open = var1;
  570.       String var2 = var1.data.url;
  571.  
  572.       URL var3;
  573.       try {
  574.          if (var2.indexOf(":") > 0) {
  575.             var3 = new URL(var2);
  576.          } else {
  577.             var3 = new URL(((Applet)this).getDocumentBase(), var2);
  578.          }
  579.       } catch (MalformedURLException var4) {
  580.          this.showError("URL invalid, can not open document.");
  581.          return;
  582.       }
  583.  
  584.       if (this.target != null) {
  585.          ((Applet)this).getAppletContext().showDocument(var3, this.target);
  586.       } else {
  587.          ((Applet)this).getAppletContext().showDocument(var3);
  588.       }
  589.  
  590.       ((Component)this).repaint();
  591.    }
  592.  
  593.    public void openItem(int var1) {
  594.       if (var1 >= 0 && var1 < this.num) {
  595.          TreeNode var2 = this.tree.findItem(var1);
  596.          if (var2 != this.open) {
  597.             this.tree.updateNodes(this.open, var2);
  598.             this.open = var2;
  599.             ((Component)this).repaint();
  600.             this.control.addItem(var2);
  601.          }
  602.  
  603.       }
  604.    }
  605.  
  606.    private boolean inside(int var1, int var2, int var3, int var4, Dimension var5) {
  607.       return var1 >= var3 && var1 < var3 + var5.width && var2 >= var4 && var2 < var4 + var5.height;
  608.    }
  609.  
  610.    public void start() {
  611.       if (this.control != null) {
  612.          this.control();
  613.       }
  614.  
  615.    }
  616.  
  617.    public void stop() {
  618.       if (this.control != null) {
  619.          this.control.hide();
  620.       }
  621.  
  622.    }
  623.  
  624.    public void control() {
  625.       if (this.control != null && this.control.isValid()) {
  626.          this.control.show();
  627.          this.control.toFront();
  628.       } else {
  629.          this.control = new TreeControl(this);
  630.          this.control.setTitle("TreeBrowse 1.3");
  631.          this.control.pack();
  632.          if (this.open != null) {
  633.             this.control.addItem(this.open);
  634.          }
  635.  
  636.       }
  637.    }
  638.  
  639.    void error(String var1) {
  640.       ((Applet)this).showStatus(var1);
  641.       System.err.println(var1);
  642.       System.err.println("Applet terminate");
  643.       System.exit(1);
  644.    }
  645.  
  646.    void showError(Exception var1) {
  647.       String var2 = "TreeBrowse error: " + var1;
  648.       this.error(var2);
  649.    }
  650.  
  651.    void showError(String var1) {
  652.       String var2 = "TreeBrowse error: " + var1;
  653.       this.error(var2);
  654.    }
  655.  
  656.    public String getAppletInfo() {
  657.       return "TreeBrowse 1.3 by Stanley Poon - 13 May 1996";
  658.    }
  659. }
  660.