home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2002 June / INTERNET92.ISO / pc / software / windows / building / visual_dhtml / visualdhtmlwin2000.exe / stmenu.___ (.txt) < prev    next >
Encoding:
Java Class File  |  2001-10-19  |  22.1 KB  |  1,848 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.Event;
  7. import java.awt.Font;
  8. import java.awt.FontMetrics;
  9. import java.awt.Graphics;
  10. import java.awt.Image;
  11. import java.awt.LayoutManager;
  12. import java.awt.MediaTracker;
  13. import java.net.MalformedURLException;
  14. import java.net.URL;
  15.  
  16. public class stmenu extends OCAviewerExtend implements Runnable {
  17.    Thread trun = null;
  18.    private FontMetrics subfm;
  19.    private FontMetrics mainfm;
  20.    // $FF: renamed from: d java.awt.Dimension
  21.    private Dimension field_0;
  22.    private Image[] arErase;
  23.    private Graphics g_arErase;
  24.    boolean mouseIn = false;
  25.    boolean animating = false;
  26.    boolean init_sb = false;
  27.    boolean syncarrow = false;
  28.    int bottom_height = 0;
  29.    int er_id = -1;
  30.    boolean go_expand = false;
  31.    boolean go_retract = false;
  32.    int sbx = 0;
  33.    int rmainWidth;
  34.    int rsubWidth;
  35.    boolean bar_removed = false;
  36.    boolean first_force = false;
  37.    boolean tag = false;
  38.    int subHL = -1;
  39.    int num_main;
  40.    int max_subs;
  41.    int total_subs;
  42.    int[] num_mainsubs;
  43.    boolean[] m_sub_expanded;
  44.    int[] sub_id;
  45.    private int[] sub_starty;
  46.    private int[] sub_offy;
  47.    int[] main_starty;
  48.    int[] sub_start_index;
  49.    int bitHeight;
  50.    int[] main_icon_id;
  51.    int[] sub_icon_id;
  52.    private int curMain = 0;
  53.    private int offHeight = 0;
  54.    private boolean inputHeightFixed = false;
  55.    private int curSub = -1;
  56.    Image bitoff;
  57.    Graphics g_bitoff;
  58.    Image bitorig;
  59.    Graphics g_bitorig;
  60.    Image bitsub;
  61.    Graphics g_bitsub;
  62.    Image endcap;
  63.    private boolean m_tile_bg_insb = true;
  64.    private int m_startopen_index = -1;
  65.    private boolean m_hide_sb = false;
  66.    private boolean m_tilebgin_margins = false;
  67.    private boolean m_unmaintext = false;
  68.    private boolean m_unsubtext = false;
  69.    private boolean m_clip_main_bg = false;
  70.    private String[] m_main_url;
  71.    private String m_loadwhere = "_self";
  72.    private String[] m_sub_url;
  73.    private Color m_main_texthlcolor;
  74.    private Color m_main_textcolor;
  75.    private Color m_arrow_activecolor;
  76.    private Color m_arrowhlcolor;
  77.    private Color m_arrowcolor;
  78.    private Color m_main_outcolor;
  79.    private Color m_main_hloutcolor;
  80.    private Color m_main_boxcolor;
  81.    private Color m_sub_boxcolor;
  82.    private Color m_sub_outcolor;
  83.    private Color m_sub_hloutcolor;
  84.    private Color m_sub_textcolor;
  85.    private Color m_sub_hltextcolor;
  86.    private String m_onsbtext;
  87.    private String m_offsbtext;
  88.    private Color m_bgcolor;
  89.    private Font m_main_font;
  90.    private Font m_sub_font;
  91.    private String[] m_sub_desc;
  92.    private String[] m_main_desc;
  93.    private int m_main_lmargin;
  94.    private int m_main_rmargin;
  95.    private int m_main_icon_voffset;
  96.    private int m_sub_icon_voffset;
  97.    private int m_main_icon_indent;
  98.    private int m_main_text_indent;
  99.    private boolean m_animate_arrows;
  100.    private int m_sub_lmargin;
  101.    private int m_sub_rmargin;
  102.    private int m_sub_text_indent;
  103.    private int m_sub_icon_indent;
  104.    private int m_arrowxoffset;
  105.    private int m_arrowyoffset;
  106.    private int m_jump_size;
  107.    private int m_delay;
  108.    private int m_item_height;
  109.    private int m_additional_clip_height;
  110.    private String m_endcap_image;
  111.    private int m_maintext_yoffset;
  112.    private String m_load_msg;
  113.    private Color m_load_msgcolor;
  114.    private Font m_load_font;
  115.    private int m_sbwidth;
  116.    private int m_lineinc;
  117.    private int m_si;
  118.    private Color m_bc;
  119.    private Color m_ac;
  120.    private Color m_hc;
  121.    private Color m_bgc;
  122.    private Color m_sc;
  123.    private Color m_oc;
  124.    private Color m_mac;
  125.    private Color m_unact;
  126.    private Color m_machl;
  127.    private boolean m_sbflat;
  128.    private boolean m_indent_bubble;
  129.    private String[] m_icon_file;
  130.    private String[] m_icon_switchfile;
  131.    private boolean m_tile_mainbg;
  132.    private boolean m_tile_subbg;
  133.    private String m_sub_bgfile;
  134.    private String m_main_bgfile;
  135.    private int maxExpandHeight;
  136.    private int curExpandHeight;
  137.    private int cur_mainHL;
  138.    // $FF: renamed from: my int
  139.    private int field_1;
  140.    // $FF: renamed from: mx int
  141.    private int field_2;
  142.    // $FF: renamed from: sb stsb
  143.    private stsb field_3;
  144.    private int scroll_y;
  145.    private int old_scrolly;
  146.    // $FF: renamed from: ts java.awt.Image
  147.    private Image field_4;
  148.    private Graphics g_ts;
  149.    private Image main;
  150.    private Graphics g_main;
  151.    boolean first_run;
  152.    boolean mouse_in;
  153.    Image[] i_pic;
  154.    Image[] s_pic;
  155.    Image mainBG;
  156.    Image subBG;
  157.    Dimension[] icon_d;
  158.    int i_pic_break;
  159.    int s_pic_break;
  160.    int num_icons;
  161.    Image sb_bg;
  162.  
  163.    private void hlSubText(int var1) {
  164.       this.g_bitoff.drawImage(this.main, 0, -this.sub_starty[var1], this);
  165.       this.g_bitoff.setFont(this.m_sub_font);
  166.       this.g_bitsub.drawImage(this.bitoff, 0, 0, this);
  167.       int var2 = this.m_sub_lmargin + this.m_sub_text_indent;
  168.       if (this.sub_icon_id[var1] > -1 && this.s_pic[this.sub_icon_id[var1]] != null) {
  169.          this.g_bitoff.drawImage(this.s_pic[this.sub_icon_id[var1]], this.m_sub_lmargin + this.m_sub_icon_indent, this.m_sub_icon_voffset + this.m_item_height / 2 - this.icon_d[this.sub_icon_id[var1]].height / 2, this);
  170.          var2 = var2 + this.icon_d[this.sub_icon_id[var1]].width + this.m_sub_icon_indent;
  171.       }
  172.  
  173.       if (this.m_sub_hloutcolor != null) {
  174.          this.g_bitoff.setColor(this.m_sub_hloutcolor);
  175.          this.g_bitoff.drawRect(this.m_sub_lmargin, 0, this.field_0.width - this.m_sub_rmargin - this.m_sub_lmargin - 1, this.m_item_height - 1);
  176.       }
  177.  
  178.       this.g_bitoff.setColor(this.m_sub_hltextcolor);
  179.       int var3 = this.m_item_height - this.subfm.getDescent() - (this.m_item_height - this.subfm.getHeight()) / 2;
  180.       this.g_bitoff.drawString(this.m_sub_desc[var1], var2, var3);
  181.       if (this.m_unsubtext) {
  182.          this.g_bitoff.drawLine(var2 + 1, var3 + 1, var2 + this.subfm.stringWidth(this.m_sub_desc[var1]) - 1, var3 + 1);
  183.       }
  184.  
  185.       this.g_main.drawImage(this.bitoff, 0, this.sub_starty[var1], this);
  186.    }
  187.  
  188.    public boolean mouseEnter(Event var1, int var2, int var3) {
  189.       this.mouseIn = true;
  190.       if (this.first_run && this.tag) {
  191.          ((OCAviewerExtend)this).showStatus(this.m_load_msg);
  192.       } else {
  193.          ((OCAviewerExtend)this).showStatus(this.m_onsbtext);
  194.       }
  195.  
  196.       return true;
  197.    }
  198.  
  199.    public boolean mouseMove(Event var1, int var2, int var3) {
  200.       this.field_1 = var3;
  201.       this.field_2 = var2;
  202.       if (this.animating) {
  203.          return true;
  204.       } else {
  205.          this.mouseMove(var2, var3);
  206.          return true;
  207.       }
  208.    }
  209.  
  210.    private void initSB() {
  211.       this.field_3 = new stsb();
  212.       this.field_3.setBarStyle(this.m_si, this.m_bc, this.m_ac, this.m_hc, this.m_bgc, this.m_sc, this.m_oc, this.m_mac, this.m_machl, this.m_unact, this.m_sbflat, this.m_indent_bubble);
  213.       if (this.sb_bg != null && this.m_tile_bg_insb) {
  214.          this.field_3.setBarBgImage(this.sb_bg);
  215.       }
  216.  
  217.       this.field_3.setBackground(this.m_bgc);
  218.       ((Container)this).setLayout((LayoutManager)null);
  219.       this.field_3.reshape(this.sbx, 0, this.m_sbwidth, this.field_0.height);
  220.       ((Container)this).add(this.field_3);
  221.       this.init_sb = true;
  222.    }
  223.  
  224.    public void stop() {
  225.       if (this.trun != null) {
  226.          this.trun.stop();
  227.          this.trun = null;
  228.       }
  229.  
  230.    }
  231.  
  232.    private void hlMainText(int var1) {
  233.       this.g_bitoff.drawImage(this.main, 0, -this.main_starty[var1], this);
  234.       this.g_bitoff.setFont(this.m_main_font);
  235.       this.g_bitorig.drawImage(this.bitoff, 0, 0, this);
  236.       int var2 = this.m_main_lmargin + this.m_main_text_indent;
  237.       if (this.main_icon_id[var1] > -1 && this.s_pic[this.main_icon_id[var1]] != null) {
  238.          this.g_bitoff.drawImage(this.s_pic[this.main_icon_id[var1]], this.m_main_lmargin + this.m_main_icon_indent, this.m_main_icon_voffset + this.m_item_height / 2 - this.icon_d[this.main_icon_id[var1]].height / 2, this);
  239.          var2 = var2 + this.icon_d[this.main_icon_id[var1]].width + this.m_main_icon_indent;
  240.       }
  241.  
  242.       if (this.m_main_hloutcolor != null) {
  243.          this.g_bitoff.setColor(this.m_main_hloutcolor);
  244.          this.g_bitoff.drawRect(this.m_main_lmargin, 0, this.field_0.width - this.m_main_lmargin - this.m_main_rmargin - 1, this.m_item_height - 1);
  245.       }
  246.  
  247.       this.g_bitoff.setColor(this.m_main_texthlcolor);
  248.       int var3 = this.m_item_height - this.mainfm.getDescent() - (this.m_item_height - this.mainfm.getHeight()) / 2 + this.m_maintext_yoffset;
  249.       this.g_bitoff.drawString(this.m_main_desc[var1], var2, var3);
  250.       if (this.m_unmaintext) {
  251.          this.g_bitoff.drawLine(var2 + 1, var3 + 1, var2 + this.mainfm.stringWidth(this.m_main_desc[var1]) - 1, var3 + 1);
  252.       }
  253.  
  254.       if (this.subHL != -1) {
  255.          this.undohlSubText(this.subHL);
  256.          this.subHL = -1;
  257.       }
  258.  
  259.       this.g_main.drawImage(this.bitoff, 0, this.main_starty[var1], this);
  260.    }
  261.  
  262.    private void undohlMainText(int var1) {
  263.       this.g_bitorig.clipRect(this.m_arrowxoffset, this.m_arrowyoffset, 11, 8);
  264.       this.g_bitorig.drawImage(this.main, 0, -this.main_starty[var1], this);
  265.       this.g_main.drawImage(this.bitorig, 0, this.main_starty[var1], this);
  266.       this.g_bitorig = this.bitorig.getGraphics();
  267.    }
  268.  
  269.    private void activateSubURL(int var1, int var2) {
  270.       if (var1 < this.field_0.width - this.m_sub_rmargin && var1 > this.m_sub_lmargin) {
  271.          for(int var3 = 0; var3 < this.m_sub_desc.length; ++var3) {
  272.             if (this.m_sub_expanded[this.sub_id[var3]] && var2 > this.sub_starty[var3] + this.scroll_y && var2 < this.sub_starty[var3] + this.m_item_height + this.scroll_y && var3 == this.subHL) {
  273.                this.loadURL(this.m_sub_url[var3]);
  274.             }
  275.          }
  276.       }
  277.  
  278.    }
  279.  
  280.    private int checkSubPosition(int var1) {
  281.       for(int var2 = 0; var2 < this.sub_id.length; ++var2) {
  282.          if (this.m_sub_expanded[this.sub_id[var2]] && var1 > this.sub_starty[var2] + this.scroll_y && var1 < this.sub_starty[var2] + this.m_item_height + this.scroll_y) {
  283.             return var2;
  284.          }
  285.       }
  286.  
  287.       return -1;
  288.    }
  289.  
  290.    private void loadURL(String var1) {
  291.       if (!var1.equals("-1")) {
  292.          String var2 = "-1";
  293.          Object var3 = null;
  294.          int var4 = var1.indexOf("|");
  295.          String var8;
  296.          if (var4 > 0) {
  297.             if (var4 < var1.length() - 1) {
  298.                var8 = var1.substring(0, var4);
  299.                var2 = var1.substring(var4 + 1);
  300.             } else {
  301.                var2 = var1;
  302.                var8 = this.m_loadwhere;
  303.             }
  304.          } else {
  305.             var2 = var1;
  306.             var8 = this.m_loadwhere;
  307.          }
  308.  
  309.          if (!var2.equals("-1")) {
  310.             try {
  311.                URL var5 = new URL(((OCAviewerExtend)this).getDocumentBase(), var2);
  312.                ((Applet)this).getAppletContext().showDocument(var5, var8);
  313.                return;
  314.             } catch (MalformedURLException var6) {
  315.             }
  316.          }
  317.  
  318.       }
  319.    }
  320.  
  321.    private void drawMainBG() {
  322.       if (this.mainBG != null) {
  323.          int var1 = 0;
  324.          int var2 = this.rmainWidth;
  325.          byte var3 = 0;
  326.          int var4 = this.field_0.height * 2;
  327.          if (!this.m_tilebgin_margins) {
  328.             var1 = this.m_main_lmargin;
  329.             var2 = this.field_0.width - this.m_main_lmargin - this.m_main_rmargin;
  330.          }
  331.  
  332.          if (this.m_clip_main_bg) {
  333.             var4 = this.m_main_desc.length * this.bitHeight + this.m_additional_clip_height;
  334.          }
  335.  
  336.          if (this.m_main_desc.length * this.bitHeight > var4) {
  337.             var4 = this.m_main_desc.length * this.bitHeight;
  338.          }
  339.  
  340.          this.g_main.clipRect(var1, var3, var2, var4);
  341.          if (!this.m_tile_mainbg) {
  342.             this.g_main.drawImage(this.mainBG, 0, 0, this);
  343.          } else {
  344.             int var5 = 0;
  345.             int var6 = 0;
  346.             int var7 = this.mainBG.getWidth(this);
  347.             int var8 = this.mainBG.getHeight(this);
  348.             int var9 = this.field_0.height * 2;
  349.  
  350.             while(true) {
  351.                this.g_main.drawImage(this.mainBG, var5, var6, this);
  352.                var5 += var7;
  353.                if (var5 > this.rmainWidth) {
  354.                   var5 = 0;
  355.                   var6 += var8;
  356.                   if (this.m_clip_main_bg) {
  357.                      if (var6 > this.m_main_desc.length * this.bitHeight + this.m_additional_clip_height) {
  358.                         break;
  359.                      }
  360.                   } else if (var6 > var9) {
  361.                      break;
  362.                   }
  363.                }
  364.             }
  365.          }
  366.  
  367.          this.g_main = this.main.getGraphics();
  368.          this.g_main.setFont(this.m_main_font);
  369.          if (this.endcap != null) {
  370.             this.g_main.drawImage(this.endcap, 0, this.m_main_desc.length * this.bitHeight, this);
  371.          }
  372.  
  373.          this.sb_bg = ((Component)this).createImage(this.m_sbwidth, this.field_0.height);
  374.          Graphics var10 = this.sb_bg.getGraphics();
  375.          var10.drawImage(this.main, -this.field_0.width, 0, this);
  376.       }
  377.  
  378.    }
  379.  
  380.    private synchronized void drawAnimatedArrows(int var1, int var2) {
  381.       this.g_main.drawImage(this.arErase[var1], this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this);
  382.       if (this.m_animate_arrows) {
  383.          this.g_main.setColor(this.m_arrow_activecolor);
  384.       } else if (this.cur_mainHL == var1) {
  385.          this.g_main.setColor(this.m_arrowhlcolor);
  386.       } else {
  387.          this.g_main.setColor(this.m_arrowcolor);
  388.       }
  389.  
  390.       int var3 = (8 - var2) / 2;
  391.       if (this.m_sub_expanded[var1]) {
  392.          if (var2 > 0) {
  393.             int var4 = var3 + this.m_arrowxoffset;
  394.             int var5 = 4 + this.main_starty[var1] + this.m_arrowyoffset;
  395.  
  396.             for(int var6 = var2; var6 >= 0; var6 -= 2) {
  397.                this.g_main.drawLine(var4, var5, var4 + var6, var5);
  398.                --var5;
  399.                ++var4;
  400.             }
  401.  
  402.             return;
  403.          }
  404.       } else if (var2 > 0) {
  405.          int var7 = var3 + this.m_arrowxoffset;
  406.          int var8 = this.main_starty[var1] + this.m_arrowyoffset;
  407.  
  408.          for(int var9 = var2; var9 >= 0; var9 -= 2) {
  409.             this.g_main.drawLine(var7, var8, var7 + var9, var8);
  410.             ++var8;
  411.             ++var7;
  412.          }
  413.       }
  414.  
  415.    }
  416.  
  417.    private void DrawMenu() {
  418.       int var1 = 0;
  419.       this.drawSubBG();
  420.  
  421.       for(int var2 = 0; var2 < this.m_sub_desc.length; ++var2) {
  422.          this.sub_starty[var2] = var1;
  423.          this.sub_offy[var2] = var1;
  424.          if (this.m_sub_boxcolor != null) {
  425.             this.g_ts.setColor(this.m_sub_boxcolor);
  426.             this.g_ts.fillRect(this.m_sub_lmargin, this.sub_starty[var2], this.field_0.width - this.m_sub_rmargin - this.m_sub_lmargin, this.m_item_height);
  427.          }
  428.  
  429.          if (this.m_sub_outcolor != null) {
  430.             this.g_ts.setColor(this.m_sub_outcolor);
  431.             this.g_ts.drawRect(this.m_sub_lmargin, this.sub_starty[var2], this.field_0.width - this.m_sub_rmargin - this.m_sub_lmargin - 1, this.m_item_height - 1);
  432.          }
  433.  
  434.          int var3 = this.m_sub_lmargin + this.m_sub_text_indent;
  435.          if (this.sub_icon_id[var2] > -1 && this.i_pic[this.sub_icon_id[var2]] != null) {
  436.             this.g_ts.drawImage(this.i_pic[this.sub_icon_id[var2]], this.m_sub_lmargin + this.m_sub_icon_indent, this.sub_starty[var2] + this.m_sub_icon_voffset + this.m_item_height / 2 - this.icon_d[this.sub_icon_id[var2]].height / 2, this);
  437.             var3 = var3 + this.icon_d[this.sub_icon_id[var2]].width + this.m_sub_icon_indent;
  438.          }
  439.  
  440.          this.g_ts.setColor(this.m_sub_textcolor);
  441.          int var4 = var1 + this.m_item_height - this.subfm.getDescent() - (this.m_item_height - this.subfm.getHeight()) / 2;
  442.          this.g_ts.drawString(this.m_sub_desc[var2], var3, var4);
  443.          if (this.m_unsubtext) {
  444.             this.g_ts.drawLine(var3 + 1, var4 + 1, var3 + this.subfm.stringWidth(this.m_sub_desc[var2]) - 1, var4 + 1);
  445.          }
  446.  
  447.          var1 += this.bitHeight;
  448.       }
  449.  
  450.       var1 = 0;
  451.       this.m_arrowxoffset += this.field_0.width - this.m_main_rmargin - 20;
  452.       this.m_arrowyoffset += this.m_item_height / 2 - 3;
  453.       this.g_main.setFont(this.m_main_font);
  454.       this.drawMainBG();
  455.  
  456.       for(int var9 = 0; var9 < this.m_main_desc.length; ++var9) {
  457.          this.main_starty[var9] = var1;
  458.          if (this.m_main_boxcolor != null) {
  459.             this.g_main.setColor(this.m_main_boxcolor);
  460.             this.g_main.fillRect(this.m_main_lmargin, this.main_starty[var9], this.field_0.width - this.m_main_lmargin - this.m_main_rmargin, this.m_item_height);
  461.          }
  462.  
  463.          if (this.m_main_outcolor != null) {
  464.             this.g_main.setColor(this.m_main_outcolor);
  465.             this.g_main.drawRect(this.m_main_lmargin, this.main_starty[var9], this.field_0.width - this.m_main_lmargin - this.m_main_rmargin - 1, this.m_item_height - 1);
  466.          }
  467.  
  468.          int var10 = this.m_main_lmargin + this.m_main_text_indent;
  469.          if (this.main_icon_id[var9] > -1 && this.i_pic[this.main_icon_id[var9]] != null) {
  470.             this.g_main.drawImage(this.i_pic[this.main_icon_id[var9]], this.m_main_lmargin + this.m_main_icon_indent, this.main_starty[var9] + this.m_main_icon_voffset + this.m_item_height / 2 - this.icon_d[this.main_icon_id[var9]].height / 2, this);
  471.             var10 = var10 + this.icon_d[this.main_icon_id[var9]].width + this.m_main_icon_indent;
  472.          }
  473.  
  474.          this.g_main.setColor(this.m_main_textcolor);
  475.          int var11 = this.main_starty[var9] + this.m_item_height - this.mainfm.getDescent() - (this.m_item_height - this.mainfm.getHeight()) / 2 + this.m_maintext_yoffset;
  476.          this.g_main.drawString(this.m_main_desc[var9], var10, var11);
  477.          if (this.m_unmaintext) {
  478.             this.g_main.drawLine(var10 + 1, var11 + 1, var10 + this.mainfm.stringWidth(this.m_main_desc[var9]) - 1, var11 + 1);
  479.          }
  480.  
  481.          this.arErase[var9] = ((Component)this).createImage(9, 5);
  482.          this.g_arErase = this.arErase[var9].getGraphics();
  483.          int var5 = this.main_starty[var9] + this.m_arrowyoffset;
  484.          this.g_arErase.drawImage(this.main, -this.m_arrowxoffset, -var5, this);
  485.          this.drawArrow(1, this.m_arrowxoffset, this.main_starty[var9] + this.m_arrowyoffset, this.m_arrowcolor);
  486.          var1 += this.bitHeight;
  487.          int var6 = 0;
  488.  
  489.          for(int var7 = this.sub_start_index[var9]; var7 < this.sub_start_index[var9] + this.num_mainsubs[var9]; ++var7) {
  490.             this.sub_starty[var7] = var6 + (this.sub_id[var7] + 1) * this.bitHeight;
  491.             var6 += this.bitHeight;
  492.          }
  493.       }
  494.  
  495.    }
  496.  
  497.    public void start() {
  498.       if (this.tag) {
  499.          if (this.trun == null) {
  500.             this.trun = new Thread(this);
  501.             this.trun.start();
  502.          }
  503.  
  504.       }
  505.    }
  506.  
  507.    private void loadImages() {
  508.       for(int var1 = this.i_pic_break; var1 < this.num_icons; this.i_pic_break = var1++) {
  509.          if ((this.i_pic[var1] = this.trackReturn(this.m_icon_file[var1])) != null) {
  510.             this.icon_d[var1] = new Dimension(this.i_pic[var1].getWidth(this), this.i_pic[var1].getHeight(this));
  511.          }
  512.       }
  513.  
  514.       for(int var2 = this.s_pic_break; var2 < this.num_icons; this.s_pic_break = var2++) {
  515.          if ((this.s_pic[var2] = this.trackReturn(this.m_icon_switchfile[var2])) == null) {
  516.             this.s_pic[var2] = this.i_pic[var2];
  517.          }
  518.       }
  519.  
  520.       this.mainBG = this.trackReturn(this.m_main_bgfile);
  521.       if (this.mainBG != null) {
  522.          this.m_main_boxcolor = null;
  523.       }
  524.  
  525.       this.subBG = this.trackReturn(this.m_sub_bgfile);
  526.       if (this.subBG != null) {
  527.          this.m_sub_boxcolor = null;
  528.       }
  529.  
  530.       if ((this.endcap = this.trackReturn(this.m_endcap_image)) != null) {
  531.          if (this.mainBG != null) {
  532.             this.m_clip_main_bg = true;
  533.          }
  534.  
  535.          this.m_additional_clip_height = this.endcap.getHeight(this);
  536.       }
  537.  
  538.    }
  539.  
  540.    private int checkYExpandMouse(int var1, int var2) {
  541.       for(int var3 = 0; var3 < this.main_starty.length; ++var3) {
  542.          if (var1 >= this.main_starty[var3] + var2 && var1 <= this.main_starty[var3] + this.m_item_height + var2) {
  543.             return var3;
  544.          }
  545.       }
  546.  
  547.       return -1;
  548.    }
  549.  
  550.    private void checkHL(int var1, int var2) {
  551.       if (var1 < 0 && var2 < 0) {
  552.          this.undoHL();
  553.          this.paintIt();
  554.       } else {
  555.          int var3 = this.checkYExpandMouse(var2, this.scroll_y);
  556.          if (var3 != -1) {
  557.             if (!this.first_run && this.cur_mainHL != var3) {
  558.                if (this.cur_mainHL > -1) {
  559.                   if (this.m_animate_arrows && this.curMain == this.cur_mainHL) {
  560.                      this.undohlMainText(this.cur_mainHL);
  561.                   } else {
  562.                      this.undohlMainText(this.cur_mainHL);
  563.                      this.undoArrowHL(this.cur_mainHL);
  564.                   }
  565.                }
  566.  
  567.                if (var3 != this.curMain) {
  568.                   this.hlMainArrows(var3, false);
  569.                   this.hlMainText(var3);
  570.                } else if (!this.m_animate_arrows) {
  571.                   this.hlMainArrows(var3, false);
  572.                   this.hlMainText(var3);
  573.                } else {
  574.                   this.hlMainText(var3);
  575.                }
  576.  
  577.                this.cur_mainHL = var3;
  578.             }
  579.          } else {
  580.             if ((this.cur_mainHL == -1 || this.curMain == this.cur_mainHL) && (this.m_animate_arrows || this.cur_mainHL == -1)) {
  581.                if (this.cur_mainHL > -1) {
  582.                   this.undohlMainText(this.cur_mainHL);
  583.                   this.cur_mainHL = -1;
  584.                }
  585.             } else {
  586.                this.undohlMainText(this.cur_mainHL);
  587.                this.undoArrowHL(this.cur_mainHL);
  588.                this.cur_mainHL = -1;
  589.             }
  590.  
  591.             if (var1 < this.field_0.width - this.m_sub_rmargin && var1 > this.m_sub_lmargin) {
  592.                int var4 = this.checkSubPosition(var2);
  593.                if (var4 != -1) {
  594.                   if (this.subHL != -1 && this.subHL != var4) {
  595.                      this.undohlSubText(this.subHL);
  596.                   }
  597.  
  598.                   if (this.subHL != var4) {
  599.                      this.hlSubText(var4);
  600.                      this.subHL = var4;
  601.                   }
  602.                }
  603.             } else if (this.subHL != -1) {
  604.                this.undohlSubText(this.subHL);
  605.                this.subHL = -1;
  606.             }
  607.          }
  608.  
  609.          this.paintIt();
  610.       }
  611.    }
  612.  
  613.    private void undoHL() {
  614.       if (this.cur_mainHL == -1) {
  615.          if (this.subHL != -1) {
  616.             this.undohlSubText(this.subHL);
  617.             this.subHL = -1;
  618.          }
  619.  
  620.       } else {
  621.          if (this.curMain == this.cur_mainHL && this.m_animate_arrows) {
  622.             this.undohlMainText(this.cur_mainHL);
  623.          } else {
  624.             this.undohlMainText(this.cur_mainHL);
  625.             this.undoArrowHL(this.cur_mainHL);
  626.             this.paintIt();
  627.          }
  628.  
  629.          this.cur_mainHL = -1;
  630.       }
  631.    }
  632.  
  633.    private void drawSubBG() {
  634.       if (this.subBG != null) {
  635.          if (!this.m_tilebgin_margins) {
  636.             this.g_ts.clipRect(this.m_sub_lmargin, 0, this.field_0.width - this.m_sub_rmargin - this.m_sub_lmargin, this.field_4.getHeight(this));
  637.          }
  638.  
  639.          if (!this.m_tile_subbg) {
  640.             this.g_ts.drawImage(this.subBG, 0, 0, this);
  641.          } else {
  642.             int var1 = 0;
  643.             int var2 = 0;
  644.             int var3 = this.subBG.getWidth(this);
  645.             int var4 = this.subBG.getHeight(this);
  646.             int var5 = this.rsubWidth;
  647.             int var6 = this.field_4.getHeight(this);
  648.  
  649.             while(true) {
  650.                this.g_ts.drawImage(this.subBG, var1, var2, this);
  651.                var1 += var3;
  652.                if (var1 > var5) {
  653.                   var1 = 0;
  654.                   var2 += var4;
  655.                   if (var2 > var6) {
  656.                      break;
  657.                   }
  658.                }
  659.             }
  660.          }
  661.  
  662.          if (!this.m_tilebgin_margins) {
  663.             this.g_ts = this.field_4.getGraphics();
  664.             this.g_ts.setFont(this.m_sub_font);
  665.          }
  666.       }
  667.  
  668.    }
  669.  
  670.    public String[] getIdandText(String var1) {
  671.       Object var2 = null;
  672.       Object var3 = null;
  673.       int var4 = var1.indexOf("|");
  674.       String var6;
  675.       String var7;
  676.       if (var4 > 0) {
  677.          if (var4 < var1.length()) {
  678.             var7 = var1.substring(0, var4);
  679.             var6 = var1.substring(var4 + 1);
  680.          } else {
  681.             var6 = var1;
  682.             var7 = "-1";
  683.          }
  684.       } else {
  685.          var6 = var1;
  686.          var7 = "-1";
  687.       }
  688.  
  689.       String[] var5 = new String[]{var7, var6};
  690.       return var5;
  691.    }
  692.  
  693.    public boolean mouseExit(Event var1, int var2, int var3) {
  694.       this.field_1 = -1;
  695.       this.field_2 = -1;
  696.       if (this.animating) {
  697.          return true;
  698.       } else {
  699.          this.undoHL();
  700.          this.paintIt();
  701.          this.mouseIn = false;
  702.          ((OCAviewerExtend)this).showStatus(this.m_offsbtext);
  703.          return true;
  704.       }
  705.    }
  706.  
  707.    public void paint(Graphics var1) {
  708.       this.paintIt();
  709.    }
  710.  
  711.    private void startExpand(int var1) {
  712.       if (this.curMain > -1) {
  713.          this.stop();
  714.          if (this.curMain != var1) {
  715.             this.undoArrowHL(this.curMain);
  716.          }
  717.  
  718.          if (this.m_animate_arrows) {
  719.             this.drawArrow(1, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrow_activecolor);
  720.             this.paintIt();
  721.          }
  722.  
  723.          this.curMain = -1;
  724.       }
  725.  
  726.       this.er_id = var1;
  727.       this.animating = true;
  728.       this.go_expand = true;
  729.       this.start();
  730.    }
  731.  
  732.    public Image trackReturn(String var1) {
  733.       if (var1 == null) {
  734.          return null;
  735.       } else {
  736.          ocgifix var2 = new ocgifix();
  737.          Object var3 = null;
  738.          MediaTracker var4 = new MediaTracker(this);
  739.          if (!var1.equals("-1")) {
  740.             Image var6 = ((Applet)this).getImage(((OCAviewerExtend)this).getDocumentBase(), var1);
  741.             var4.addImage(var6, 0);
  742.  
  743.             try {
  744.                var4.waitForID(0);
  745.             } catch (InterruptedException var5) {
  746.                return null;
  747.             }
  748.  
  749.             if (var4.isErrorID(0)) {
  750.                System.out.println("Error Loading Image File:" + var1);
  751.                return null;
  752.             } else {
  753.                var6 = var2.gifix(var6, var1);
  754.                return var6;
  755.             }
  756.          } else {
  757.             return null;
  758.          }
  759.       }
  760.    }
  761.  
  762.    public boolean mouseUp(Event var1, int var2, int var3) {
  763.       if (this.animating) {
  764.          return true;
  765.       } else if (var2 < this.field_0.width - this.m_main_rmargin && var2 > this.m_main_lmargin) {
  766.          int var4 = this.checkYExpandMouse(var3, this.scroll_y);
  767.          if (var4 != -1 && var4 == this.cur_mainHL) {
  768.             if (this.m_sub_expanded[var4]) {
  769.                this.startRetract(var4);
  770.             } else if (this.num_mainsubs[var4] > 0) {
  771.                this.startExpand(var4);
  772.             }
  773.  
  774.             this.loadURL(this.m_main_url[var4]);
  775.             return true;
  776.          } else {
  777.             this.activateSubURL(var2, var3);
  778.             return true;
  779.          }
  780.       } else {
  781.          this.mouseMove(var2, var3);
  782.          return true;
  783.       }
  784.    }
  785.  
  786.    public stmenu() {
  787.       this.m_main_texthlcolor = Color.red;
  788.       this.m_main_textcolor = Color.white;
  789.       this.m_arrow_activecolor = Color.yellow;
  790.       this.m_arrowhlcolor = Color.yellow;
  791.       this.m_arrowcolor = Color.lightGray;
  792.       this.m_main_outcolor = null;
  793.       this.m_main_hloutcolor = null;
  794.       this.m_main_boxcolor = null;
  795.       this.m_sub_boxcolor = null;
  796.       this.m_sub_outcolor = null;
  797.       this.m_sub_hloutcolor = null;
  798.       this.m_sub_textcolor = Color.black;
  799.       this.m_sub_hltextcolor = Color.green;
  800.       this.m_onsbtext = "OpenCube - SmartTree Menu";
  801.       this.m_offsbtext = "Java by OpenCube";
  802.       this.m_bgcolor = Color.black;
  803.       this.m_main_font = new Font("Helvetica", 1, 10);
  804.       this.m_sub_font = new Font("Helvetica", 0, 11);
  805.       this.m_main_lmargin = 5;
  806.       this.m_main_rmargin = 5;
  807.       this.m_main_icon_voffset = 0;
  808.       this.m_sub_icon_voffset = 0;
  809.       this.m_main_icon_indent = 4;
  810.       this.m_main_text_indent = 4;
  811.       this.m_animate_arrows = true;
  812.       this.m_sub_lmargin = 10;
  813.       this.m_sub_rmargin = 7;
  814.       this.m_sub_text_indent = 5;
  815.       this.m_sub_icon_indent = 4;
  816.       this.m_arrowxoffset = 0;
  817.       this.m_arrowyoffset = 0;
  818.       this.m_jump_size = 2;
  819.       this.m_delay = 10;
  820.       this.m_item_height = 15;
  821.       this.m_additional_clip_height = 0;
  822.       this.m_endcap_image = "-1";
  823.       this.m_maintext_yoffset = 0;
  824.       this.m_load_msg = "Loading Images...";
  825.       this.m_load_msgcolor = Color.white;
  826.       this.m_load_font = new Font("Helvetica", 0, 12);
  827.       this.m_sbwidth = 12;
  828.       this.m_si = 2;
  829.       this.m_bc = null;
  830.       this.m_ac = Color.black;
  831.       this.m_hc = Color.yellow;
  832.       this.m_bgc = Color.white;
  833.       this.m_sc = null;
  834.       this.m_oc = null;
  835.       this.m_mac = Color.lightGray;
  836.       this.m_unact = Color.gray;
  837.       this.m_machl = Color.yellow;
  838.       this.m_sbflat = true;
  839.       this.m_indent_bubble = false;
  840.       this.m_tile_mainbg = true;
  841.       this.m_tile_subbg = true;
  842.       this.m_sub_bgfile = "-1";
  843.       this.m_main_bgfile = "-1";
  844.       this.maxExpandHeight = 0;
  845.       this.curExpandHeight = 0;
  846.       this.cur_mainHL = -1;
  847.       this.field_1 = 0;
  848.       this.field_2 = 0;
  849.       this.first_run = true;
  850.       this.mouse_in = false;
  851.    }
  852.  
  853.    private synchronized void paintIt() {
  854.       Graphics var1 = ((Component)this).getGraphics();
  855.       if (!this.tag) {
  856.          var1.setColor(Color.yellow);
  857.          var1.drawString(this.m_onsbtext, 2, 20);
  858.       } else if (!this.first_run) {
  859.          var1.drawImage(this.main, 0, this.scroll_y, this);
  860.       } else {
  861.          var1.drawImage(this.field_4, 0, 0, this);
  862.       }
  863.    }
  864.  
  865.    public void scrollIt(int var1, boolean var2) {
  866.       if (var1 == 602 || var1 == 601 || var1 == 605 || var1 == 604 || var1 == 603) {
  867.          this.scroll_y = -this.field_3.getValue();
  868.          this.paintIt();
  869.       }
  870.  
  871.    }
  872.  
  873.    public void destroy() {
  874.       if (this.trun != null) {
  875.          this.trun.stop();
  876.          this.trun = null;
  877.       }
  878.  
  879.    }
  880.  
  881.    private void drawArrow(int var1, int var2, int var3, Color var4) {
  882.       if (var1 == 1) {
  883.          this.g_main.setColor(var4);
  884.          int var5 = var2;
  885.          int var6 = var3;
  886.          int var7 = 8;
  887.  
  888.          do {
  889.             this.g_main.drawLine(var5, var6, var5 + var7, var6);
  890.             ++var6;
  891.             ++var5;
  892.             var7 -= 2;
  893.          } while(var7 >= 0);
  894.       }
  895.  
  896.       if (var1 == 2) {
  897.          this.g_main.setColor(var4);
  898.          int var8 = var2;
  899.          int var9 = var3 + 4;
  900.          int var10 = 8;
  901.  
  902.          do {
  903.             this.g_main.drawLine(var8, var9, var8 + var10, var9);
  904.             --var9;
  905.             ++var8;
  906.             var10 -= 2;
  907.          } while(var10 >= 0);
  908.       }
  909.  
  910.    }
  911.  
  912.    private void firstRun() {
  913.       ((Component)this).setBackground(this.m_bgcolor);
  914.       this.field_4 = ((Component)this).createImage(this.field_0.width + this.m_sbwidth, this.field_0.height);
  915.       this.g_ts = this.field_4.getGraphics();
  916.       this.g_ts.setColor(this.m_bgcolor);
  917.       this.g_ts.fillRect(0, 0, this.field_0.width + this.m_sbwidth, this.field_0.height);
  918.       this.g_ts.setFont(this.m_load_font);
  919.       FontMetrics var1 = this.g_ts.getFontMetrics(this.m_load_font);
  920.       this.g_ts.setColor(this.m_load_msgcolor);
  921.       this.g_ts.drawString(this.m_load_msg, (this.field_0.width + this.m_sbwidth) / 2 - var1.stringWidth(this.m_load_msg) / 2, this.field_0.height / 2 + var1.getHeight() / 2);
  922.       ((Component)this).getGraphics().drawImage(this.field_4, 0, 0, this);
  923.       ((OCAviewerExtend)this).showStatus(this.m_load_msg);
  924.       this.loadImages();
  925.       this.subfm = ((Component)this).getFontMetrics(this.m_sub_font);
  926.       this.mainfm = ((Component)this).getFontMetrics(this.m_main_font);
  927.       if (!this.inputHeightFixed) {
  928.          int var2 = this.subfm.getHeight();
  929.          int var3 = this.mainfm.getHeight();
  930.          if (var2 > var3) {
  931.             this.m_item_height = var2;
  932.          } else {
  933.             this.m_item_height = var3;
  934.          }
  935.       }
  936.  
  937.       this.bitHeight = this.m_item_height;
  938.       this.m_lineinc = this.bitHeight;
  939.       System.out.println("Item Height = " + this.bitHeight);
  940.       this.offHeight = this.bitHeight * this.m_sub_desc.length;
  941.       System.out.println("Total Sub Menu Hiehgt = " + this.offHeight);
  942.       this.bitoff = ((Component)this).createImage(this.field_0.width, this.bitHeight);
  943.       this.g_bitoff = this.bitoff.getGraphics();
  944.       this.bitorig = ((Component)this).createImage(this.field_0.width, this.bitHeight);
  945.       this.g_bitorig = this.bitorig.getGraphics();
  946.       this.bitsub = ((Component)this).createImage(this.field_0.width, this.bitHeight);
  947.       this.g_bitsub = this.bitsub.getGraphics();
  948.       this.rsubWidth = this.field_0.width;
  949.       if (this.m_tilebgin_margins) {
  950.          this.rsubWidth += this.m_sbwidth;
  951.       }
  952.  
  953.       if (this.offHeight < 1) {
  954.          this.offHeight = 1;
  955.       }
  956.  
  957.       this.field_4 = ((Component)this).createImage(this.rsubWidth, this.offHeight);
  958.       this.g_ts = this.field_4.getGraphics();
  959.       this.g_ts.setFont(this.m_sub_font);
  960.       this.g_ts.setColor(this.m_bgcolor);
  961.       this.g_ts.fillRect(0, 0, this.rsubWidth, this.offHeight);
  962.       this.bottom_height = this.field_0.height - this.bitHeight;
  963.       this.curExpandHeight = this.bitHeight * this.m_main_desc.length;
  964.       this.maxExpandHeight = this.offHeight + this.curExpandHeight + this.bottom_height;
  965.       this.rmainWidth = this.field_0.width;
  966.       if (this.m_tilebgin_margins) {
  967.          this.rmainWidth += this.m_sbwidth;
  968.       }
  969.  
  970.       this.main = ((Component)this).createImage(this.rmainWidth, this.maxExpandHeight);
  971.       this.g_main = this.main.getGraphics();
  972.       this.g_main.setFont(this.m_main_font);
  973.       this.g_main.setColor(this.m_bgcolor);
  974.       this.g_main.fillRect(0, 0, this.rmainWidth, this.maxExpandHeight);
  975.       this.DrawMenu();
  976.       this.initSB();
  977.       if (this.m_startopen_index > -1) {
  978.          this.first_force = true;
  979.          this.first_run = false;
  980.          this.paintIt();
  981.          this.curMain = -1;
  982.          this.expandItem(this.m_startopen_index);
  983.       } else {
  984.          this.setScrollBar();
  985.       }
  986.    }
  987.  
  988.    private void retractItem(int var1) {
  989.       boolean var2 = false;
  990.       int var3 = this.num_mainsubs[var1] * this.bitHeight;
  991.       int var4 = this.main_starty[var1] + this.bitHeight;
  992.       if (this.main_starty[var1] + this.bitHeight * 2 > Math.abs(this.scroll_y - this.field_0.height)) {
  993.          int var5 = -(this.main_starty[var1] + this.bitHeight * 2) + this.field_0.height;
  994.          if (var5 < this.scroll_y) {
  995.             for(int var17 = this.scroll_y; var17 > var5; var17 -= this.m_jump_size) {
  996.                this.scroll_y = var17;
  997.                this.paintIt();
  998.  
  999.                try {
  1000.                   Thread.sleep((long)this.m_delay);
  1001.                } catch (InterruptedException var16) {
  1002.                }
  1003.             }
  1004.          }
  1005.       }
  1006.  
  1007.       Graphics var22 = ((Component)this).getGraphics();
  1008.       var22.clipRect(0, this.main_starty[var1] + this.bitHeight + this.scroll_y, this.rsubWidth, this.field_0.height);
  1009.       Image var6 = ((Component)this).createImage(this.rsubWidth, this.maxExpandHeight - var4);
  1010.       Graphics var7 = var6.getGraphics();
  1011.       int var10000 = this.sub_offy[this.sub_start_index[var1]];
  1012.       var7.drawImage(this.main, 0, -var4, this);
  1013.       int var8 = this.main_starty[var1] + this.bitHeight;
  1014.  
  1015.       for(int var18 = 0; var18 > -var3; var18 -= this.m_jump_size) {
  1016.          var22.drawImage(var6, 0, var18 + var8 + this.scroll_y, this);
  1017.  
  1018.          try {
  1019.             Thread.sleep((long)this.m_delay);
  1020.          } catch (InterruptedException var15) {
  1021.          }
  1022.       }
  1023.  
  1024.       int var9 = -var3 + var8;
  1025.       this.g_main.clipRect(0, var8, this.rsubWidth, this.main.getHeight(this) - var8);
  1026.       this.g_main.drawImage(var6, 0, var9, this);
  1027.       this.paintIt();
  1028.  
  1029.       for(int var10 = var1 + 1; var10 < this.main_starty.length; ++var10) {
  1030.          this.main_starty[var10] -= var3;
  1031.  
  1032.          for(int var11 = this.sub_start_index[var10]; var11 < this.sub_start_index[var10] + this.num_mainsubs[var10]; ++var11) {
  1033.             this.sub_starty[var11] -= var3;
  1034.          }
  1035.       }
  1036.  
  1037.       this.g_main = this.main.getGraphics();
  1038.       this.g_main.setColor(this.m_bgcolor);
  1039.       int var23 = this.main_starty[this.main_starty.length - 1] + this.bitHeight;
  1040.       if (this.m_sub_expanded[this.main_starty.length - 1] && this.main_starty.length - 1 != var1) {
  1041.          var23 += this.num_mainsubs[this.main_starty.length - 1] * this.bitHeight;
  1042.       }
  1043.  
  1044.       if ((this.mainBG == null || !this.m_clip_main_bg) && this.endcap == null) {
  1045.          if (this.mainBG == null) {
  1046.             this.g_main.fillRect(0, var23, this.field_0.width, var3);
  1047.          }
  1048.       } else {
  1049.          this.g_main.fillRect(0, var23 + this.m_additional_clip_height, this.field_0.width, var3);
  1050.       }
  1051.  
  1052.       if (this.curExpandHeight - var3 >= this.field_0.height) {
  1053.          int var24 = -this.main_starty[var1];
  1054.          if (var24 < -(this.curExpandHeight - var3) + this.field_0.height) {
  1055.             var24 = -(this.curExpandHeight - var3) + this.field_0.height;
  1056.          }
  1057.  
  1058.          if (var24 < this.scroll_y) {
  1059.             for(int var20 = this.scroll_y; var20 > var24; var20 -= 2) {
  1060.                this.scroll_y = var20;
  1061.                this.paintIt();
  1062.  
  1063.                try {
  1064.                   Thread.sleep((long)this.m_delay);
  1065.                } catch (InterruptedException var14) {
  1066.                }
  1067.             }
  1068.          } else {
  1069.             for(int var19 = this.scroll_y; var19 < var24; var19 += this.m_jump_size) {
  1070.                this.scroll_y = var19;
  1071.                this.paintIt();
  1072.  
  1073.                try {
  1074.                   Thread.sleep((long)this.m_delay);
  1075.                } catch (InterruptedException var13) {
  1076.                }
  1077.             }
  1078.          }
  1079.  
  1080.          this.scroll_y = var24;
  1081.          this.paintIt();
  1082.       } else {
  1083.          byte var25 = 0;
  1084.  
  1085.          for(int var21 = this.scroll_y; var21 < var25; var21 += this.m_jump_size) {
  1086.             this.scroll_y = var21;
  1087.             this.paintIt();
  1088.  
  1089.             try {
  1090.                Thread.sleep((long)this.m_delay);
  1091.             } catch (InterruptedException var12) {
  1092.             }
  1093.          }
  1094.  
  1095.          this.scroll_y = var25;
  1096.          this.paintIt();
  1097.       }
  1098.  
  1099.       this.m_sub_expanded[var1] = false;
  1100.       this.curExpandHeight -= var3;
  1101.       this.hlMainArrows(var1, true);
  1102.       this.checkHL(this.field_2, this.field_1);
  1103.       this.paintIt();
  1104.       this.setScrollBar();
  1105.       this.curMain = var1;
  1106.    }
  1107.  
  1108.    private void expandItem(int var1) {
  1109.       System.gc();
  1110.       boolean var2 = false;
  1111.       int var3 = this.num_mainsubs[var1] * this.bitHeight;
  1112.       int var4 = this.main_starty[var1] + this.bitHeight;
  1113.       if (this.curExpandHeight + var3 >= this.field_0.height) {
  1114.          int var5 = -this.main_starty[var1];
  1115.          if (var5 < -(this.curExpandHeight + var3) + this.field_0.height) {
  1116.             var5 = -(this.curExpandHeight + var3) + this.field_0.height;
  1117.          }
  1118.  
  1119.          if (var5 < this.scroll_y) {
  1120.             for(int var16 = this.scroll_y; var16 > var5; var16 -= this.m_jump_size) {
  1121.                this.scroll_y = var16;
  1122.                this.paintIt();
  1123.  
  1124.                try {
  1125.                   Thread.sleep((long)this.m_delay);
  1126.                } catch (InterruptedException var14) {
  1127.                }
  1128.             }
  1129.          } else {
  1130.             for(int var15 = this.scroll_y; var15 < var5; var15 += this.m_jump_size) {
  1131.                this.scroll_y = var15;
  1132.                this.paintIt();
  1133.  
  1134.                try {
  1135.                   Thread.sleep((long)this.m_delay);
  1136.                } catch (InterruptedException var13) {
  1137.                }
  1138.             }
  1139.          }
  1140.  
  1141.          this.scroll_y = var5;
  1142.          this.paintIt();
  1143.       }
  1144.  
  1145.       Image var18 = ((Component)this).createImage(this.rsubWidth, this.maxExpandHeight - var4);
  1146.       Graphics var6 = var18.getGraphics();
  1147.       int var7 = -this.sub_offy[this.sub_start_index[var1]];
  1148.       int var8 = this.main_starty[var1] + this.bitHeight;
  1149.       Graphics var9 = ((Component)this).getGraphics();
  1150.       var9.clipRect(0, this.main_starty[var1] + this.bitHeight + this.scroll_y, this.rsubWidth, this.field_0.height);
  1151.       var6.drawImage(this.field_4, 0, var7, this);
  1152.       var6.clipRect(0, var3, this.rsubWidth, var18.getHeight(this) - var3);
  1153.       var6.drawImage(this.main, 0, var3 - var8, this);
  1154.  
  1155.       for(int var17 = -var3; var17 <= 0; var17 += this.m_jump_size) {
  1156.          var9.drawImage(var18, 0, var17 + var8 + this.scroll_y, this);
  1157.  
  1158.          try {
  1159.             Thread.sleep((long)this.m_delay);
  1160.          } catch (InterruptedException var12) {
  1161.          }
  1162.       }
  1163.  
  1164.       this.g_main.clipRect(0, var8 - 1, this.rsubWidth, this.main.getHeight(this) - var8 + 1);
  1165.       this.g_main.drawImage(var18, 0, var8, this);
  1166.       this.g_main = this.main.getGraphics();
  1167.       this.paintIt();
  1168.  
  1169.       for(int var10 = var1 + 1; var10 < this.main_starty.length; ++var10) {
  1170.          this.main_starty[var10] += var3;
  1171.  
  1172.          for(int var11 = this.sub_start_index[var10]; var11 < this.sub_start_index[var10] + this.num_mainsubs[var10]; ++var11) {
  1173.             this.sub_starty[var11] += var3;
  1174.          }
  1175.       }
  1176.  
  1177.       this.m_sub_expanded[var1] = true;
  1178.       this.curExpandHeight += var3;
  1179.       this.hlMainArrows(var1, true);
  1180.       if (!this.first_force) {
  1181.          this.checkHL(this.field_2, this.field_1);
  1182.       } else {
  1183.          this.first_force = false;
  1184.       }
  1185.  
  1186.       this.paintIt();
  1187.       this.setScrollBar();
  1188.       this.curMain = var1;
  1189.    }
  1190.  
  1191.    private void setScrollBar() {
  1192.       if (this.m_hide_sb && this.curExpandHeight <= this.field_0.height) {
  1193.          if (!this.bar_removed) {
  1194.             ((Container)this).remove(this.field_3);
  1195.             this.bar_removed = true;
  1196.             return;
  1197.          }
  1198.       } else {
  1199.          if (this.bar_removed) {
  1200.             ((Container)this).add(this.field_3);
  1201.             this.bar_removed = false;
  1202.          }
  1203.  
  1204.          this.field_3.setValues(this.m_lineinc, this.field_0.height, this.curExpandHeight, Math.abs(this.scroll_y));
  1205.       }
  1206.  
  1207.    }
  1208.  
  1209.    private void startRetract(int var1) {
  1210.       if (this.curMain > -1) {
  1211.          this.stop();
  1212.          if (this.curMain != var1) {
  1213.             this.undoArrowHL(this.curMain);
  1214.          }
  1215.  
  1216.          if (this.m_animate_arrows) {
  1217.             this.drawArrow(2, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrow_activecolor);
  1218.             this.paintIt();
  1219.          }
  1220.  
  1221.          this.curMain = -1;
  1222.       }
  1223.  
  1224.       this.er_id = var1;
  1225.       this.animating = true;
  1226.       this.go_retract = true;
  1227.       this.start();
  1228.    }
  1229.  
  1230.    public void run() {
  1231.       if (this.first_run) {
  1232.          this.firstRun();
  1233.          this.first_run = false;
  1234.          if (this.mouseIn) {
  1235.             ((OCAviewerExtend)this).showStatus(this.m_onsbtext);
  1236.          } else {
  1237.             ((OCAviewerExtend)this).showStatus(this.m_offsbtext);
  1238.          }
  1239.  
  1240.          this.paintIt();
  1241.       }
  1242.  
  1243.       if (this.er_id > -1) {
  1244.          if (this.go_expand) {
  1245.             this.expandItem(this.er_id);
  1246.          } else if (this.go_retract) {
  1247.             this.retractItem(this.er_id);
  1248.          }
  1249.  
  1250.          this.er_id = -1;
  1251.          this.animating = false;
  1252.          this.go_expand = false;
  1253.          this.go_retract = false;
  1254.       }
  1255.  
  1256.       while(true) {
  1257.          while(!this.m_animate_arrows) {
  1258.             this.stop();
  1259.          }
  1260.  
  1261.          if (this.curMain > -1) {
  1262.             this.hlMainArrows(this.curMain, true);
  1263.             this.paintIt();
  1264.  
  1265.             try {
  1266.                Thread.sleep(750L);
  1267.             } catch (InterruptedException var2) {
  1268.             }
  1269.          }
  1270.  
  1271.          while(this.curMain > -1) {
  1272.             int var1 = 6;
  1273.  
  1274.             do {
  1275.                this.drawAnimatedArrows(this.curMain, var1);
  1276.                this.paintIt();
  1277.  
  1278.                try {
  1279.                   Thread.sleep(25L);
  1280.                } catch (InterruptedException var7) {
  1281.                }
  1282.  
  1283.                var1 -= 2;
  1284.             } while(var1 > 0);
  1285.  
  1286.             this.drawAnimatedArrows(this.curMain, 0);
  1287.             this.paintIt();
  1288.  
  1289.             try {
  1290.                Thread.sleep(500L);
  1291.             } catch (InterruptedException var6) {
  1292.             }
  1293.  
  1294.             var1 = 2;
  1295.  
  1296.             do {
  1297.                this.drawAnimatedArrows(this.curMain, var1);
  1298.                this.paintIt();
  1299.  
  1300.                try {
  1301.                   Thread.sleep(25L);
  1302.                } catch (InterruptedException var5) {
  1303.                }
  1304.  
  1305.                var1 += 2;
  1306.             } while(var1 < 8);
  1307.  
  1308.             this.hlMainArrows(this.curMain, true);
  1309.             this.paintIt();
  1310.  
  1311.             try {
  1312.                Thread.sleep(400L);
  1313.             } catch (InterruptedException var4) {
  1314.             }
  1315.          }
  1316.  
  1317.          try {
  1318.             Thread.sleep(100L);
  1319.          } catch (InterruptedException var3) {
  1320.          }
  1321.  
  1322.          this.stop();
  1323.       }
  1324.    }
  1325.  
  1326.    public void init() {
  1327.       String var1 = "SmartTree Menu, Copyright (c) 1999, OpenCube Inc.";
  1328.       this.field_0 = ((Component)this).size();
  1329.       int var3 = 0;
  1330.       int var4 = 0;
  1331.       String var2 = ((OCAviewerExtend)this).getParameter("Notice");
  1332.       if (var2 == null) {
  1333.          this.m_onsbtext = "Missing 'Notice' Tag";
  1334.       } else {
  1335.          String var5 = compkey.getKey(var2, ((OCAviewerExtend)this).getDocumentBase());
  1336.          if (!var5.equals(var1)) {
  1337.             if (var5.equals("-1")) {
  1338.                this.m_onsbtext = "Incorrect Base URL Registration";
  1339.             } else {
  1340.                this.m_onsbtext = "Incorrect Copyright Notice in 'Notice' tag";
  1341.             }
  1342.          } else {
  1343.             this.tag = true;
  1344.             var2 = ((OCAviewerExtend)this).getParameter("onsbtext");
  1345.             if (var2 != null) {
  1346.                this.m_onsbtext = var2;
  1347.             }
  1348.  
  1349.             var2 = ((OCAviewerExtend)this).getParameter("offsbtext");
  1350.             if (var2 != null) {
  1351.                this.m_offsbtext = var2;
  1352.             }
  1353.  
  1354.             var2 = ((OCAviewerExtend)this).getParameter("loadmsgcolor");
  1355.             if (var2 != null) {
  1356.                this.m_load_msgcolor = occcolor.ConvertColor(var2);
  1357.             }
  1358.  
  1359.             var2 = ((OCAviewerExtend)this).getParameter("loadmsg");
  1360.             if (var2 != null) {
  1361.                this.m_load_msg = var2;
  1362.             }
  1363.  
  1364.             var2 = ((OCAviewerExtend)this).getParameter("maintextyoffset");
  1365.             if (var2 != null) {
  1366.                this.m_maintext_yoffset = Integer.parseInt(var2);
  1367.             }
  1368.  
  1369.             var2 = ((OCAviewerExtend)this).getParameter("loadfont");
  1370.             if (var2 != null) {
  1371.                this.m_load_font = ocfontc.getFontSD(var2, ",");
  1372.             } else {
  1373.                this.m_load_font = new Font("Helvetica", 0, 12);
  1374.             }
  1375.  
  1376.             var2 = ((OCAviewerExtend)this).getParameter("loadwhere");
  1377.             if (var2 != null) {
  1378.                this.m_loadwhere = var2;
  1379.             }
  1380.  
  1381.             var2 = ((OCAviewerExtend)this).getParameter("animatearrows");
  1382.             if (var2 != null) {
  1383.                this.m_animate_arrows = Boolean.valueOf(var2);
  1384.             }
  1385.  
  1386.             var2 = ((OCAviewerExtend)this).getParameter("tilebginmargins");
  1387.             if (var2 != null) {
  1388.                this.m_tilebgin_margins = Boolean.valueOf(var2);
  1389.             }
  1390.  
  1391.             var2 = ((OCAviewerExtend)this).getParameter("underlinemaintext");
  1392.             if (var2 != null) {
  1393.                this.m_unmaintext = Boolean.valueOf(var2);
  1394.             }
  1395.  
  1396.             var2 = ((OCAviewerExtend)this).getParameter("hidebar");
  1397.             if (var2 != null) {
  1398.                this.m_hide_sb = Boolean.valueOf(var2);
  1399.             }
  1400.  
  1401.             var2 = ((OCAviewerExtend)this).getParameter("underlinesubtext");
  1402.             if (var2 != null) {
  1403.                this.m_unsubtext = Boolean.valueOf(var2);
  1404.             }
  1405.  
  1406.             var2 = ((OCAviewerExtend)this).getParameter("clipmainbg");
  1407.             if (var2 != null) {
  1408.                this.m_clip_main_bg = Boolean.valueOf(var2);
  1409.             }
  1410.  
  1411.             var2 = ((OCAviewerExtend)this).getParameter("clipadditionheight");
  1412.             if (var2 != null) {
  1413.                this.m_additional_clip_height = Integer.parseInt(var2);
  1414.             }
  1415.  
  1416.             var2 = ((OCAviewerExtend)this).getParameter("tilemainbg");
  1417.             if (var2 != null) {
  1418.                this.m_tile_mainbg = Boolean.valueOf(var2);
  1419.             }
  1420.  
  1421.             var2 = ((OCAviewerExtend)this).getParameter("tilesubbg");
  1422.             if (var2 != null) {
  1423.                this.m_tile_subbg = Boolean.valueOf(var2);
  1424.             }
  1425.  
  1426.             var2 = ((OCAviewerExtend)this).getParameter("bgcolor");
  1427.             if (var2 != null) {
  1428.                this.m_bgcolor = occcolor.ConvertColor(var2);
  1429.             }
  1430.  
  1431.             var2 = ((OCAviewerExtend)this).getParameter("mainboxcolor");
  1432.             if (var2 != null) {
  1433.                this.m_main_boxcolor = occcolor.ConvertColor(var2);
  1434.             }
  1435.  
  1436.             var2 = ((OCAviewerExtend)this).getParameter("maintextcolor");
  1437.             if (var2 != null) {
  1438.                this.m_main_textcolor = occcolor.ConvertColor(var2);
  1439.             }
  1440.  
  1441.             var2 = ((OCAviewerExtend)this).getParameter("maintexthlcolor");
  1442.             if (var2 != null) {
  1443.                this.m_main_texthlcolor = occcolor.ConvertColor(var2);
  1444.             }
  1445.  
  1446.             var2 = ((OCAviewerExtend)this).getParameter("mainoutcolor");
  1447.             if (var2 != null) {
  1448.                this.m_main_outcolor = occcolor.ConvertColor(var2);
  1449.             }
  1450.  
  1451.             var2 = ((OCAviewerExtend)this).getParameter("mainhloutcolor");
  1452.             if (var2 != null) {
  1453.                this.m_main_hloutcolor = occcolor.ConvertColor(var2);
  1454.             }
  1455.  
  1456.             var2 = ((OCAviewerExtend)this).getParameter("subboxcolor");
  1457.             if (var2 != null) {
  1458.                this.m_sub_boxcolor = occcolor.ConvertColor(var2);
  1459.             }
  1460.  
  1461.             var2 = ((OCAviewerExtend)this).getParameter("suboutcolor");
  1462.             if (var2 != null) {
  1463.                this.m_sub_outcolor = occcolor.ConvertColor(var2);
  1464.             }
  1465.  
  1466.             var2 = ((OCAviewerExtend)this).getParameter("subhloutcolor");
  1467.             if (var2 != null) {
  1468.                this.m_sub_hloutcolor = occcolor.ConvertColor(var2);
  1469.             }
  1470.  
  1471.             var2 = ((OCAviewerExtend)this).getParameter("subtextcolor");
  1472.             if (var2 != null) {
  1473.                this.m_sub_textcolor = occcolor.ConvertColor(var2);
  1474.             }
  1475.  
  1476.             var2 = ((OCAviewerExtend)this).getParameter("subhltextcolor");
  1477.             if (var2 != null) {
  1478.                this.m_sub_hltextcolor = occcolor.ConvertColor(var2);
  1479.             }
  1480.  
  1481.             var2 = ((OCAviewerExtend)this).getParameter("arrowcolor");
  1482.             if (var2 != null) {
  1483.                this.m_arrowcolor = occcolor.ConvertColor(var2);
  1484.             }
  1485.  
  1486.             var2 = ((OCAviewerExtend)this).getParameter("arrowhlcolor");
  1487.             if (var2 != null) {
  1488.                this.m_arrowhlcolor = occcolor.ConvertColor(var2);
  1489.             }
  1490.  
  1491.             var2 = ((OCAviewerExtend)this).getParameter("arrowactivecolor");
  1492.             if (var2 != null) {
  1493.                this.m_arrow_activecolor = occcolor.ConvertColor(var2);
  1494.             }
  1495.  
  1496.             var2 = ((OCAviewerExtend)this).getParameter("mainbgimage");
  1497.             if (var2 != null) {
  1498.                this.m_main_bgfile = var2;
  1499.             }
  1500.  
  1501.             var2 = ((OCAviewerExtend)this).getParameter("subbgimage");
  1502.             if (var2 != null) {
  1503.                this.m_sub_bgfile = var2;
  1504.             }
  1505.  
  1506.             var2 = ((OCAviewerExtend)this).getParameter("jumpsize");
  1507.             if (var2 != null) {
  1508.                this.m_jump_size = Integer.parseInt(var2);
  1509.             }
  1510.  
  1511.             var2 = ((OCAviewerExtend)this).getParameter("startopenindex");
  1512.             if (var2 != null) {
  1513.                this.m_startopen_index = Integer.parseInt(var2);
  1514.             }
  1515.  
  1516.             var2 = ((OCAviewerExtend)this).getParameter("jumpdelay");
  1517.             if (var2 != null) {
  1518.                this.m_delay = Integer.parseInt(var2);
  1519.             }
  1520.  
  1521.             var2 = ((OCAviewerExtend)this).getParameter("mainlmargin");
  1522.             if (var2 != null) {
  1523.                this.m_main_lmargin = Integer.parseInt(var2);
  1524.             }
  1525.  
  1526.             var2 = ((OCAviewerExtend)this).getParameter("mainrmargin");
  1527.             if (var2 != null) {
  1528.                this.m_main_rmargin = Integer.parseInt(var2);
  1529.             }
  1530.  
  1531.             var2 = ((OCAviewerExtend)this).getParameter("sublmargin");
  1532.             if (var2 != null) {
  1533.                this.m_sub_lmargin = Integer.parseInt(var2);
  1534.             }
  1535.  
  1536.             var2 = ((OCAviewerExtend)this).getParameter("subrmargin");
  1537.             if (var2 != null) {
  1538.                this.m_sub_rmargin = Integer.parseInt(var2);
  1539.             }
  1540.  
  1541.             this.m_sub_lmargin += this.m_main_lmargin;
  1542.             this.m_sub_rmargin += this.m_main_rmargin;
  1543.             var2 = ((OCAviewerExtend)this).getParameter("maintextindent");
  1544.             if (var2 != null) {
  1545.                this.m_main_text_indent = Integer.parseInt(var2);
  1546.             }
  1547.  
  1548.             var2 = ((OCAviewerExtend)this).getParameter("mainiconindent");
  1549.             if (var2 != null) {
  1550.                this.m_main_icon_indent = Integer.parseInt(var2);
  1551.             }
  1552.  
  1553.             var2 = ((OCAviewerExtend)this).getParameter("subiconindent");
  1554.             if (var2 != null) {
  1555.                this.m_sub_icon_indent = Integer.parseInt(var2);
  1556.             }
  1557.  
  1558.             var2 = ((OCAviewerExtend)this).getParameter("mainicontopoffset");
  1559.             if (var2 != null) {
  1560.                this.m_main_icon_voffset = Integer.parseInt(var2);
  1561.             }
  1562.  
  1563.             var2 = ((OCAviewerExtend)this).getParameter("subicontopoffset");
  1564.             if (var2 != null) {
  1565.                this.m_sub_icon_voffset = Integer.parseInt(var2);
  1566.             }
  1567.  
  1568.             var2 = ((OCAviewerExtend)this).getParameter("subtextindent");
  1569.             if (var2 != null) {
  1570.                this.m_sub_text_indent = Integer.parseInt(var2);
  1571.             }
  1572.  
  1573.             var2 = ((OCAviewerExtend)this).getParameter("arrowyoffset");
  1574.             if (var2 != null) {
  1575.                this.m_arrowyoffset = Integer.parseInt(var2);
  1576.             }
  1577.  
  1578.             var2 = ((OCAviewerExtend)this).getParameter("arrowxoffset");
  1579.             if (var2 != null) {
  1580.                this.m_arrowxoffset = Integer.parseInt(var2);
  1581.             }
  1582.  
  1583.             var2 = ((OCAviewerExtend)this).getParameter("itemheight");
  1584.             if (var2 != null) {
  1585.                this.m_item_height = Integer.parseInt(var2);
  1586.                if (this.m_item_height > 0) {
  1587.                   this.inputHeightFixed = true;
  1588.                }
  1589.             }
  1590.  
  1591.             var2 = ((OCAviewerExtend)this).getParameter("mainfont");
  1592.             if (var2 != null) {
  1593.                this.m_main_font = ocfontc.getFontSD(var2, ",");
  1594.             } else {
  1595.                this.m_main_font = new Font("Helvetica", 0, 12);
  1596.             }
  1597.  
  1598.             var2 = ((OCAviewerExtend)this).getParameter("subfont");
  1599.             if (var2 != null) {
  1600.                this.m_sub_font = ocfontc.getFontSD(var2, ",");
  1601.             } else {
  1602.                this.m_sub_font = new Font("Helvetica", 0, 12);
  1603.             }
  1604.  
  1605.             var2 = ((OCAviewerExtend)this).getParameter("endcapimage");
  1606.             if (var2 != null) {
  1607.                this.m_endcap_image = var2;
  1608.             }
  1609.  
  1610.             var2 = ((OCAviewerExtend)this).getParameter("barwidth");
  1611.             if (var2 != null) {
  1612.                this.m_sbwidth = Integer.parseInt(var2);
  1613.             }
  1614.  
  1615.             var2 = ((OCAviewerExtend)this).getParameter("barbuttoncolor");
  1616.             if (var2 != null) {
  1617.                this.m_bc = occcolor.ConvertColor(var2);
  1618.             }
  1619.  
  1620.             var2 = ((OCAviewerExtend)this).getParameter("bararrowcolor");
  1621.             if (var2 != null) {
  1622.                this.m_ac = occcolor.ConvertColor(var2);
  1623.             }
  1624.  
  1625.             var2 = ((OCAviewerExtend)this).getParameter("bararrowhlcolor");
  1626.             if (var2 != null) {
  1627.                this.m_hc = occcolor.ConvertColor(var2);
  1628.             }
  1629.  
  1630.             var2 = ((OCAviewerExtend)this).getParameter("barbgcolor");
  1631.             if (var2 != null) {
  1632.                this.m_bgc = occcolor.ConvertColor(var2);
  1633.             }
  1634.  
  1635.             var2 = ((OCAviewerExtend)this).getParameter("barslidecolor");
  1636.             if (var2 != null) {
  1637.                this.m_sc = occcolor.ConvertColor(var2);
  1638.             }
  1639.  
  1640.             var2 = ((OCAviewerExtend)this).getParameter("baroutlinecolor");
  1641.             if (var2 != null) {
  1642.                this.m_oc = occcolor.ConvertColor(var2);
  1643.             }
  1644.  
  1645.             var2 = ((OCAviewerExtend)this).getParameter("barbarrowcolor");
  1646.             if (var2 != null) {
  1647.                this.m_mac = occcolor.ConvertColor(var2);
  1648.             } else {
  1649.                this.m_mac = this.m_bc;
  1650.             }
  1651.  
  1652.             var2 = ((OCAviewerExtend)this).getParameter("barbarrowhlcolor");
  1653.             if (var2 != null) {
  1654.                this.m_machl = occcolor.ConvertColor(var2);
  1655.             } else {
  1656.                this.m_machl = this.m_mac;
  1657.             }
  1658.  
  1659.             var2 = ((OCAviewerExtend)this).getParameter("barinactivecolor");
  1660.             if (var2 != null) {
  1661.                this.m_unact = occcolor.ConvertColor(var2);
  1662.             }
  1663.  
  1664.             var2 = ((OCAviewerExtend)this).getParameter("barslideinset");
  1665.             if (var2 != null) {
  1666.                this.m_si = Integer.parseInt(var2);
  1667.             }
  1668.  
  1669.             var2 = ((OCAviewerExtend)this).getParameter("barflat");
  1670.             if (var2 != null) {
  1671.                this.m_sbflat = Boolean.valueOf(var2);
  1672.             }
  1673.  
  1674.             var2 = ((OCAviewerExtend)this).getParameter("barindentbubble");
  1675.             if (var2 != null) {
  1676.                this.m_indent_bubble = Boolean.valueOf(var2);
  1677.             }
  1678.  
  1679.             var2 = ((OCAviewerExtend)this).getParameter("tilebginbar");
  1680.             if (var2 != null) {
  1681.                this.m_tile_bg_insb = Boolean.valueOf(var2);
  1682.             }
  1683.  
  1684.             this.sbx = this.field_0.width - this.m_sbwidth;
  1685.             this.field_0 = new Dimension(this.field_0.width - this.m_sbwidth, this.field_0.height);
  1686.  
  1687.             int var6;
  1688.             for(var6 = 0; ((OCAviewerExtend)this).getParameter("maindesc" + var3) != null; ++this.num_main) {
  1689.                while(((OCAviewerExtend)this).getParameter("subdesc" + var3 + "-" + var4) != null) {
  1690.                   ++var4;
  1691.                   ++var6;
  1692.                   if (var4 > this.max_subs) {
  1693.                      this.max_subs = var4;
  1694.                   }
  1695.                }
  1696.  
  1697.                var4 = 0;
  1698.                ++var3;
  1699.             }
  1700.  
  1701.             this.total_subs = var6;
  1702.             this.sub_id = new int[this.total_subs];
  1703.             this.m_sub_desc = new String[this.total_subs];
  1704.             this.sub_icon_id = new int[this.total_subs];
  1705.             this.sub_starty = new int[this.total_subs];
  1706.             this.sub_offy = new int[this.total_subs];
  1707.             this.m_sub_url = new String[this.total_subs];
  1708.             this.m_main_url = new String[this.num_main];
  1709.             this.num_mainsubs = new int[this.num_main];
  1710.             this.m_main_desc = new String[this.num_main];
  1711.             this.main_icon_id = new int[this.num_main];
  1712.             this.m_sub_expanded = new boolean[this.num_main];
  1713.             this.main_starty = new int[this.num_main];
  1714.             this.sub_start_index = new int[this.num_main];
  1715.             this.arErase = new Image[this.num_main];
  1716.             var6 = 0;
  1717.  
  1718.             for(int var79 = 0; var79 < this.num_main; ++var79) {
  1719.                for(int var82 = 0; ((OCAviewerExtend)this).getParameter("subdesc" + var79 + "-" + var82) != null; ++var82) {
  1720.                   int var10002 = this.num_mainsubs[var79]++;
  1721.                }
  1722.  
  1723.                for(int var83 = 0; var83 < this.num_mainsubs[var79]; ++var83) {
  1724.                   this.sub_id[var6] = var79;
  1725.                   var2 = ((OCAviewerExtend)this).getParameter("subdesc" + var79 + "-" + var83);
  1726.                   if (var2 != null) {
  1727.                      this.m_sub_desc[var6] = var2;
  1728.                      String[] var7 = this.getIdandText(this.m_sub_desc[var6]);
  1729.                      this.sub_icon_id[var6] = Integer.parseInt(var7[0]);
  1730.                      this.m_sub_desc[var6] = var7[1];
  1731.                   } else {
  1732.                      this.m_sub_desc[var6] = "";
  1733.                      this.sub_icon_id[var79] = -1;
  1734.                   }
  1735.  
  1736.                   var2 = ((OCAviewerExtend)this).getParameter("suburl" + var79 + "-" + var83);
  1737.                   if (var2 != null) {
  1738.                      this.m_sub_url[var6] = var2;
  1739.                   } else {
  1740.                      this.m_sub_url[var6] = "-1";
  1741.                   }
  1742.  
  1743.                   ++var6;
  1744.                }
  1745.  
  1746.                var2 = ((OCAviewerExtend)this).getParameter("maindesc" + var79);
  1747.                if (var2 != null) {
  1748.                   this.m_main_desc[var79] = new String(var2);
  1749.                   String[] var85 = this.getIdandText(this.m_main_desc[var79]);
  1750.                   this.main_icon_id[var79] = Integer.parseInt(var85[0]);
  1751.                   this.m_main_desc[var79] = var85[1];
  1752.                } else {
  1753.                   this.m_main_desc[var79] = "";
  1754.                   this.main_icon_id[var79] = -1;
  1755.                }
  1756.  
  1757.                var2 = ((OCAviewerExtend)this).getParameter("mainurl" + var79);
  1758.                if (var2 != null) {
  1759.                   this.m_main_url[var79] = new String(var2);
  1760.                } else {
  1761.                   this.m_main_url[var79] = "-1";
  1762.                }
  1763.             }
  1764.  
  1765.             int var86 = 0;
  1766.  
  1767.             for(int var80 = 0; var80 < this.num_mainsubs.length; ++var80) {
  1768.                this.sub_start_index[var80] = var86;
  1769.                var86 += this.num_mainsubs[var80];
  1770.             }
  1771.  
  1772.             while(((OCAviewerExtend)this).getParameter("iconfile" + this.num_icons) != null) {
  1773.                ++this.num_icons;
  1774.             }
  1775.  
  1776.             this.m_icon_file = new String[this.num_icons];
  1777.             this.m_icon_switchfile = new String[this.num_icons];
  1778.             this.i_pic = new Image[this.num_icons];
  1779.             this.s_pic = new Image[this.num_icons];
  1780.             this.icon_d = new Dimension[this.num_icons];
  1781.  
  1782.             for(int var81 = 0; var81 < this.num_icons; ++var81) {
  1783.                var2 = ((OCAviewerExtend)this).getParameter("iconfile" + var81);
  1784.                if (var2 != null) {
  1785.                   this.m_icon_file[var81] = new String(var2);
  1786.                } else {
  1787.                   this.m_icon_file[var81] = new String(" ");
  1788.                }
  1789.  
  1790.                var2 = ((OCAviewerExtend)this).getParameter("iconswitchfile" + var81);
  1791.                if (var2 != null) {
  1792.                   this.m_icon_switchfile[var81] = new String(var2);
  1793.                } else {
  1794.                   this.m_icon_switchfile[var81] = this.m_icon_file[var81];
  1795.                }
  1796.             }
  1797.  
  1798.          }
  1799.       }
  1800.    }
  1801.  
  1802.    public boolean handleEvent(Event var1) {
  1803.       if (var1.target == this.field_3) {
  1804.          this.scrollIt(var1.id, true);
  1805.       }
  1806.  
  1807.       return super.handleEvent(var1);
  1808.    }
  1809.  
  1810.    public boolean mouseDrag(Event var1, int var2, int var3) {
  1811.       this.field_1 = var3;
  1812.       this.field_2 = var2;
  1813.       return true;
  1814.    }
  1815.  
  1816.    private void undoArrowHL(int var1) {
  1817.       if (this.m_sub_expanded[var1]) {
  1818.          this.drawArrow(2, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrowcolor);
  1819.       } else {
  1820.          this.drawArrow(1, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrowcolor);
  1821.       }
  1822.    }
  1823.  
  1824.    private void hlMainArrows(int var1, boolean var2) {
  1825.       if (var2) {
  1826.          this.drawAnimatedArrows(var1, 8);
  1827.       } else if (this.m_sub_expanded[var1]) {
  1828.          this.drawArrow(2, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrowhlcolor);
  1829.       } else {
  1830.          this.drawArrow(1, this.m_arrowxoffset, this.main_starty[var1] + this.m_arrowyoffset, this.m_arrowhlcolor);
  1831.       }
  1832.    }
  1833.  
  1834.    private void undohlSubText(int var1) {
  1835.       this.g_main.drawImage(this.bitsub, 0, this.sub_starty[var1], this);
  1836.    }
  1837.  
  1838.    private void mouseMove(int var1, int var2) {
  1839.       if (var1 < this.field_0.width - this.m_main_rmargin && var1 > this.m_main_lmargin) {
  1840.          this.checkHL(var1, var2);
  1841.       } else {
  1842.          this.field_1 = -1;
  1843.          this.field_2 = -1;
  1844.          this.undoHL();
  1845.       }
  1846.    }
  1847. }
  1848.