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

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