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

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.MediaTracker;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.Stack;
  14. import java.util.Vector;
  15.  
  16. public class iim extends OCAviewerExtend implements Runnable {
  17.    Thread trun = null;
  18.    boolean mouse_in;
  19.    boolean bg_stat;
  20.    int break_stand;
  21.    int break_hl;
  22.    int alignment;
  23.    int maxiconwidth;
  24.    int itadjust;
  25.    int bitcenter = 0;
  26.    String cur_img_link = "-1";
  27.    URL goURL;
  28.    // $FF: renamed from: d java.awt.Dimension
  29.    Dimension field_0;
  30.    Font font;
  31.    // $FF: renamed from: fm java.awt.FontMetrics
  32.    FontMetrics field_1;
  33.    Image[] suboff;
  34.    Graphics[] g_suboff;
  35.    // $FF: renamed from: ts java.awt.Image
  36.    Image field_2;
  37.    Graphics g_ts;
  38.    // $FF: renamed from: bg java.awt.Image
  39.    Image field_3;
  40.    Image[] subsave;
  41.    int level_max;
  42.    int menux;
  43.    int menuy;
  44.    int menuwidth;
  45.    int menuheight;
  46.    int bitheight;
  47.    int on_sub_num = 0;
  48.    int break_picload = 0;
  49.    int break_pictype = 0;
  50.    int break_bgload;
  51.    int last_sub;
  52.    int[] cur_itadjust;
  53.    int[] cur_alignment;
  54.    int[] cur_menuwidth;
  55.    int[] def_menuloc;
  56.    int lasticoid = -1;
  57.    private String m_load_msg = "Loading Images...";
  58.    private Color m_load_msgcolor;
  59.    Image bitoff;
  60.    Graphics g_bitoff;
  61.    private String m_italign;
  62.    boolean sub_highlighted;
  63.    boolean in_sub;
  64.    boolean tag;
  65.    boolean first_run;
  66.    boolean rendering_images;
  67.    Image[] i_pic;
  68.    Image[] s_pic;
  69.    int num_icons;
  70.    private String[] m_icon_file;
  71.    private String[] m_icon_switch_file;
  72.    private String[] mc_sub_bgfile;
  73.    private boolean[] mc_bgfile_stat;
  74.    private Image[] mc_subbg;
  75.    private Image m_subbg;
  76.    private String m_sub_bgfile;
  77.    private boolean m_bgfile_stat;
  78.    private int m_it_space;
  79.    private int m_forced_height;
  80.    boolean[] gif_tile;
  81.    private String[] m_cur_image_desturl;
  82.    private String m_loadwhere;
  83.    private Color m_page_bgcolor;
  84.    private String m_bgimage_file;
  85.    private Color m_outline_color;
  86.    private Color m_menu_color;
  87.    private Color m_menu_textcolor;
  88.    private Color m_menu_hloutcolor;
  89.    private Color m_menu_hltextcolor;
  90.    private Color m_menu_bocolor;
  91.    private Color[] m_cur_outline_color;
  92.    private Color[] m_cur_menu_color;
  93.    private Color[] m_cur_menu_textcolor;
  94.    private Color[] m_cur_menu_hloutcolor;
  95.    private Color[] m_cur_menu_hltextcolor;
  96.    private Color[] m_cur_menu_bocolor;
  97.    private int m_lrmargin;
  98.    private String m_onsbtext;
  99.    private String m_offsbtext;
  100.    private String[] m_imagefile;
  101.    private String[] m_switchfile;
  102.    private int[] m_pic_xcord;
  103.    private int[] m_pic_ycord;
  104.    private int[] m_menu_xcord;
  105.    private int[] m_menu_ycord;
  106.    private int m_bgimage_x;
  107.    private int m_bgimage_y;
  108.    int m_max_subs;
  109.    int draw_spec_hl;
  110.    boolean[] no_subs;
  111.    int last_drawn;
  112.    int num_images;
  113.    int[] pic_width;
  114.    int[] pic_height;
  115.    int[] max_string_width;
  116.    boolean[] image_loaded;
  117.    String[] subs;
  118.    String[] p_subs;
  119.    int[] ItoM;
  120.    int actual_level;
  121.    Image[] s_picture;
  122.    Image[] h_picture;
  123.    MediaTracker m_media_track;
  124.    int cur_sub_point;
  125.    int cur_num_subs;
  126.    int cur_level;
  127.    int max_levels;
  128.    boolean[] simg_status;
  129.    boolean[] hlimg_status;
  130.    int[] menu_coords;
  131.    String[] cur_link;
  132.  
  133.    public boolean mouseEnter(Event var1, int var2, int var3) {
  134.       this.mouse_in = true;
  135.       if (this.rendering_images) {
  136.          ((OCAviewerExtend)this).showStatus("Loading Menu Images...");
  137.       } else {
  138.          ((OCAviewerExtend)this).showStatus(this.m_onsbtext);
  139.       }
  140.  
  141.       return true;
  142.    }
  143.  
  144.    public void UndoSubHighlight(Graphics var1, int var2) {
  145.       this.sub_highlighted = false;
  146.       this.last_sub = -1;
  147.       if (this.m_cur_menu_hloutcolor[this.cur_level] != null) {
  148.          this.g_suboff[this.cur_level].setColor(this.m_cur_menu_color[this.cur_level]);
  149.          this.g_suboff[this.cur_level].drawRect(0, 0, this.suboff[this.cur_level].getWidth(this), this.suboff[this.cur_level].getHeight(this));
  150.          this.g_suboff[this.cur_level].drawImage(this.subsave[this.cur_level], 0, 0, this);
  151.       }
  152.  
  153.       this.highlightText(this.m_cur_menu_textcolor[this.cur_level], var2, false);
  154.    }
  155.  
  156.    public boolean mouseExit(Event var1, int var2, int var3) {
  157.       this.mouse_in = false;
  158.       if (this.last_drawn != -1) {
  159.          if (this.cur_level > 0) {
  160.             this.UndoSpecifics(0, this.cur_level, false);
  161.             ((Component)this).getGraphics().drawImage(this.field_2, 0, 0, this);
  162.          } else {
  163.             this.UndoHP(0);
  164.          }
  165.  
  166.          this.last_drawn = -1;
  167.       }
  168.  
  169.       if (this.cur_level > -1) {
  170.          this.cur_link[this.cur_level] = "-1";
  171.       }
  172.  
  173.       this.cur_level = -1;
  174.       this.sub_highlighted = false;
  175.       this.last_sub = -1;
  176.       if (this.rendering_images) {
  177.          ((OCAviewerExtend)this).showStatus("Loading Menu Images...");
  178.       } else {
  179.          ((OCAviewerExtend)this).showStatus(this.m_offsbtext);
  180.       }
  181.  
  182.       return true;
  183.    }
  184.  
  185.    public void paint(Graphics var1) {
  186.       this.paintIt();
  187.    }
  188.  
  189.    public Image trackReturn(String var1) {
  190.       ocgifix var2 = new ocgifix();
  191.       Object var3 = null;
  192.       MediaTracker var4 = new MediaTracker(this);
  193.       if (!var1.equals("-1")) {
  194.          Image var6 = ((Applet)this).getImage(((OCAviewerExtend)this).getDocumentBase(), var1);
  195.          var4.addImage(var6, 0);
  196.  
  197.          try {
  198.             var4.waitForID(0);
  199.          } catch (InterruptedException var5) {
  200.             return null;
  201.          }
  202.  
  203.          if (var4.isErrorID(0)) {
  204.             System.out.println("Error Loading Image File:" + var1);
  205.             return null;
  206.          } else {
  207.             var6 = var2.gifix(var6, var1);
  208.             return var6;
  209.          }
  210.       } else {
  211.          return null;
  212.       }
  213.    }
  214.  
  215.    public iim() {
  216.       this.m_load_msgcolor = Color.black;
  217.       this.m_italign = "0";
  218.       this.sub_highlighted = false;
  219.       this.in_sub = false;
  220.       this.tag = false;
  221.       this.first_run = true;
  222.       this.rendering_images = false;
  223.       this.num_icons = 0;
  224.       this.m_sub_bgfile = "-1";
  225.       this.m_it_space = 1;
  226.       this.m_forced_height = -1;
  227.       this.m_loadwhere = "_self";
  228.       this.m_page_bgcolor = Color.black;
  229.       this.m_bgimage_file = "-1";
  230.       this.m_outline_color = null;
  231.       this.m_menu_color = Color.yellow;
  232.       this.m_menu_textcolor = Color.black;
  233.       this.m_menu_hloutcolor = null;
  234.       this.m_menu_hltextcolor = Color.blue;
  235.       this.m_menu_bocolor = null;
  236.       this.m_lrmargin = 4;
  237.       this.m_onsbtext = "OpenCube - Infinite Icon Menus";
  238.       this.m_offsbtext = "Java by OpenCube";
  239.       this.m_bgimage_x = 0;
  240.       this.m_bgimage_y = 0;
  241.       this.draw_spec_hl = -1;
  242.       this.last_drawn = -1;
  243.       this.num_images = 0;
  244.       this.actual_level = 0;
  245.       this.m_media_track = new MediaTracker(this);
  246.       this.cur_sub_point = -1;
  247.       this.cur_num_subs = 0;
  248.       this.cur_level = -1;
  249.       this.max_levels = 0;
  250.    }
  251.  
  252.    public boolean mouseUp(Event var1, int var2, int var3) {
  253.       String var4 = "-1";
  254.       int var5 = 0;
  255.       if (this.actual_level != -1) {
  256.          var5 = this.actual_level;
  257.       } else {
  258.          var5 = this.cur_level;
  259.       }
  260.  
  261.       if (var5 > -1) {
  262.          var4 = this.cur_link[var5];
  263.       } else {
  264.          var4 = this.cur_img_link;
  265.       }
  266.  
  267.       if (var4.equals("-1")) {
  268.          return true;
  269.       } else {
  270.          String var6 = "-1";
  271.          String var7 = "_self";
  272.          int var8 = var4.indexOf("|");
  273.          if (var8 > 0) {
  274.             if (var8 < var4.length() - 1) {
  275.                var6 = var4.substring(0, var8);
  276.                var7 = var4.substring(var8 + 1);
  277.             } else {
  278.                var6 = var4;
  279.                var7 = this.m_loadwhere;
  280.             }
  281.          } else {
  282.             var6 = var4;
  283.             var7 = this.m_loadwhere;
  284.          }
  285.  
  286.          try {
  287.             this.goURL = new URL(((OCAviewerExtend)this).getDocumentBase(), var6);
  288.          } catch (MalformedURLException var9) {
  289.             return true;
  290.          }
  291.  
  292.          ((Applet)this).getAppletContext().showDocument(this.goURL, var7);
  293.          return true;
  294.       }
  295.    }
  296.  
  297.    public void destroy() {
  298.       if (this.trun != null) {
  299.          this.trun.stop();
  300.          this.trun = null;
  301.       }
  302.  
  303.    }
  304.  
  305.    public void paintIt() {
  306.       Graphics var1 = ((Component)this).getGraphics();
  307.       if (!this.tag) {
  308.          var1.setColor(Color.black);
  309.          var1.drawString(this.m_onsbtext, 5, 30);
  310.       } else {
  311.          var1.drawImage(this.field_2, 0, 0, this);
  312.       }
  313.    }
  314.  
  315.    public void highlightText(Color var1, int var2, boolean var3) {
  316.       int var4 = var2 * this.bitheight;
  317.       this.bitoff = ((Component)this).createImage(this.cur_menuwidth[this.cur_level], this.bitheight + 1);
  318.       this.g_bitoff = this.bitoff.getGraphics();
  319.       this.g_bitoff.setFont(this.font);
  320.       this.g_bitoff.drawImage(this.suboff[this.cur_level], 0, -var4, this);
  321.       if (var3 && this.m_cur_menu_hloutcolor[this.cur_level] != null) {
  322.          this.g_bitoff.setColor(this.m_cur_menu_hloutcolor[this.cur_level]);
  323.          this.g_bitoff.drawRect(0, 0, this.cur_menuwidth[this.cur_level] - 1, this.bitheight);
  324.       }
  325.  
  326.       this.g_bitoff.setColor(var1);
  327.       this.alignment = this.cur_alignment[this.cur_level];
  328.       if (this.alignment == 0) {
  329.          this.g_bitoff.drawString(this.subs[this.cur_sub_point + var2 * 4 + 1], this.m_lrmargin + this.cur_itadjust[this.cur_level], this.bitcenter);
  330.       } else if (this.alignment == 1) {
  331.          this.g_bitoff.drawString(this.subs[this.cur_sub_point + var2 * 4 + 1], this.cur_menuwidth[this.cur_level] - (this.field_1.stringWidth(this.subs[this.cur_sub_point + var2 * 4 + 1]) + this.m_lrmargin), this.bitcenter);
  332.       } else if (this.alignment == 2) {
  333.          this.g_bitoff.drawString(this.subs[this.cur_sub_point + var2 * 4 + 1], this.m_lrmargin, this.bitcenter);
  334.       } else if (this.alignment == 3) {
  335.          this.g_bitoff.drawString(this.subs[this.cur_sub_point + var2 * 4 + 1], this.cur_menuwidth[this.cur_level] - (this.field_1.stringWidth(this.subs[this.cur_sub_point + var2 * 4 + 1]) + this.cur_itadjust[this.cur_level] + this.m_lrmargin), this.bitcenter);
  336.       }
  337.  
  338.       int var5 = this.m_lrmargin;
  339.       int var6 = Integer.parseInt(this.subs[this.cur_sub_point + var2 * 4 + 2]);
  340.       this.lasticoid = var6;
  341.       if (var3) {
  342.          if (var6 > -1 && this.s_pic[var6] != null) {
  343.             int var7 = this.s_pic[var6].getWidth(this);
  344.             if (this.alignment == 2 || this.alignment == 3) {
  345.                var5 = this.cur_menuwidth[this.cur_level] - this.m_lrmargin - var7;
  346.             }
  347.  
  348.             this.g_bitoff.drawImage(this.s_pic[var6], var5, this.bitheight / 2 - this.s_pic[var6].getHeight(this) / 2, this);
  349.          }
  350.       } else if (var6 > -1 && this.i_pic[var6] != null) {
  351.          int var8 = this.i_pic[var6].getWidth(this);
  352.          if (this.alignment == 2 || this.alignment == 3) {
  353.             var5 = this.cur_menuwidth[this.cur_level] - this.m_lrmargin - var8;
  354.          }
  355.  
  356.          this.g_bitoff.drawImage(this.i_pic[var6], var5, this.bitheight / 2 - this.i_pic[var6].getHeight(this) / 2, this);
  357.       }
  358.  
  359.       this.g_ts.drawImage(this.bitoff, this.menu_coords[this.cur_level * 7], this.menu_coords[this.cur_level * 7 + 1] + var4, this);
  360.       this.g_suboff[this.cur_level].drawImage(this.bitoff, 0, var4, this);
  361.    }
  362.  
  363.    public void UndoHP(int var1) {
  364.       ((Component)this).getGraphics();
  365.       this.g_ts.fillRect(0, 0, this.field_0.width, this.field_0.height);
  366.       if (this.bg_stat) {
  367.          this.g_ts.drawImage(this.field_3, this.m_bgimage_x, this.m_bgimage_y, this);
  368.       }
  369.  
  370.       for(int var2 = 0; var2 < this.num_images; ++var2) {
  371.          if (this.simg_status[var2]) {
  372.             this.g_ts.drawImage(this.s_picture[var2], this.m_pic_xcord[var2], this.m_pic_ycord[var2], this);
  373.          }
  374.       }
  375.  
  376.       this.paintIt();
  377.    }
  378.  
  379.    public void HighlightPic(int var1) {
  380.       int var2 = 0;
  381.       int var3 = 0;
  382.       if (this.no_subs[var1]) {
  383.          if (this.hlimg_status[var1]) {
  384.             this.draw_spec_hl = -1;
  385.             this.g_ts.drawImage(this.h_picture[var1], this.m_pic_xcord[var1], this.m_pic_ycord[var1], this);
  386.          } else {
  387.             this.draw_spec_hl = var1;
  388.          }
  389.  
  390.          this.paintIt();
  391.       } else {
  392.          int var4 = new Integer(this.p_subs[this.ItoM[var1] + 3]) - new Integer(this.p_subs[this.ItoM[var1] + 2]) + 1;
  393.          int var5 = new Integer(this.p_subs[this.ItoM[var1] + 2]) * 4;
  394.          this.alignment = new Integer(this.p_subs[this.ItoM[var1] + 1]);
  395.          this.cur_alignment[0] = this.alignment;
  396.          this.cur_sub_point = var5;
  397.          this.cur_num_subs = var4;
  398.          int[] var6 = occcord.getIntValues(this.p_subs[this.ItoM[var1]], ",", 2);
  399.          if (var6 != null) {
  400.             var2 = var6[0];
  401.             var3 = var6[1];
  402.          }
  403.  
  404.          this.menuwidth = new Integer(this.p_subs[this.ItoM[var1] + 4]);
  405.          this.menuheight = var4 * this.bitheight + 1;
  406.          this.maxiconwidth = 0;
  407.  
  408.          for(int var7 = 0; var7 < var4; ++var7) {
  409.             int var8 = Integer.parseInt(this.subs[var5 + var7 * 4 + 2]);
  410.             if (var8 > -1 && this.i_pic[var8] != null) {
  411.                int var9 = this.i_pic[var8].getWidth(this);
  412.                if (var9 > this.maxiconwidth) {
  413.                   this.maxiconwidth = var9;
  414.                }
  415.             }
  416.          }
  417.  
  418.          this.menuwidth = this.menuwidth + this.maxiconwidth + this.m_it_space + 1;
  419.          this.cur_menuwidth[0] = this.menuwidth;
  420.          if (var2 == -1 && var3 == -2) {
  421.             int var11 = this.field_0.width - (this.m_pic_xcord[var1] + this.s_picture[var1].getWidth(this) / 2 + this.menuwidth);
  422.             if (var11 < 0) {
  423.                this.menux = this.m_pic_xcord[var1] + this.s_picture[var1].getWidth(this) / 2 + (var11 - 1);
  424.             } else {
  425.                this.menux = this.m_pic_xcord[var1] + this.s_picture[var1].getWidth(this) / 2;
  426.             }
  427.  
  428.             this.menuy = this.m_pic_ycord[var1] + (this.s_picture[var1].getHeight(this) - 2);
  429.          } else {
  430.             this.menux = this.m_pic_xcord[var1] + var2;
  431.             this.menuy = this.m_pic_ycord[var1] + var3;
  432.          }
  433.  
  434.          this.menu_coords[0] = this.menux;
  435.          this.menu_coords[1] = this.menuy;
  436.          this.menu_coords[2] = this.menuwidth;
  437.          this.menu_coords[3] = this.menuheight;
  438.          this.menu_coords[4] = var4;
  439.          this.menu_coords[5] = var1;
  440.          this.menu_coords[6] = this.cur_sub_point;
  441.          if (this.hlimg_status[var1]) {
  442.             this.g_ts.drawImage(this.h_picture[var1], this.m_pic_xcord[var1], this.m_pic_ycord[var1], this);
  443.          }
  444.  
  445.          this.suboff[0] = ((Component)this).createImage(this.menuwidth, this.menuheight);
  446.          this.g_suboff[0] = this.suboff[0].getGraphics();
  447.          this.g_suboff[0].setFont(this.font);
  448.          this.g_suboff[0].setColor(this.m_cur_menu_color[0]);
  449.          this.g_suboff[0].fillRect(0, 0, this.menuwidth, this.menuheight);
  450.          if (this.mc_bgfile_stat[0]) {
  451.             int var12 = 0;
  452.             int var14 = 0;
  453.             int var18 = this.mc_subbg[0].getWidth(this);
  454.             int var10 = this.mc_subbg[0].getHeight(this);
  455.             if (this.gif_tile[0]) {
  456.                var14 = -1;
  457.             }
  458.  
  459.             while(true) {
  460.                this.g_suboff[0].drawImage(this.mc_subbg[0], var12, var14, this);
  461.                var12 += var18;
  462.                if (var12 > this.menuwidth + 1) {
  463.                   var12 = 0;
  464.                   var14 += var10;
  465.                   if (this.gif_tile[0]) {
  466.                      --var14;
  467.                   }
  468.  
  469.                   if (var14 > this.menuheight + 1) {
  470.                      break;
  471.                   }
  472.                }
  473.             }
  474.          }
  475.  
  476.          if (this.m_cur_menu_bocolor[0] != null) {
  477.             this.g_suboff[0].setColor(this.m_cur_menu_bocolor[0]);
  478.             this.g_suboff[0].drawRect(0, 0, this.menuwidth - 1, this.menuheight - 1);
  479.          }
  480.  
  481.          int var13 = this.m_lrmargin;
  482.  
  483.          for(int var15 = 0; var15 < var4; ++var15) {
  484.             int var19 = Integer.parseInt(this.subs[var5 + var15 * 4 + 2]);
  485.             if (var19 > -1 && this.i_pic[var19] != null) {
  486.                int var20 = this.i_pic[var19].getWidth(this);
  487.                if (this.alignment == 2 || this.alignment == 3) {
  488.                   var13 = this.menuwidth - this.m_lrmargin - var20;
  489.                }
  490.  
  491.                this.g_suboff[0].drawImage(this.i_pic[var19], var13, this.bitheight * var15 + this.bitheight / 2 - this.i_pic[var19].getHeight(this) / 2, this);
  492.             }
  493.          }
  494.  
  495.          this.def_menuloc[0] = var13;
  496.          this.itadjust = 0;
  497.          if (this.maxiconwidth > 0) {
  498.             this.itadjust = this.maxiconwidth + this.m_it_space;
  499.          }
  500.  
  501.          this.cur_itadjust[0] = this.itadjust;
  502.  
  503.          for(int var16 = 0; var16 < var4; ++var16) {
  504.             if (this.m_cur_outline_color[0] != null) {
  505.                this.g_suboff[0].setColor(this.m_cur_outline_color[0]);
  506.                this.g_suboff[0].drawRect(0, this.bitheight * var16, this.menuwidth, this.bitheight);
  507.             }
  508.  
  509.             this.g_suboff[0].setColor(this.m_cur_menu_textcolor[0]);
  510.             if (this.alignment == 0) {
  511.                this.g_suboff[0].drawString(this.subs[var5 + var16 * 4 + 1], this.m_lrmargin + this.itadjust, this.bitheight * var16 + this.bitcenter);
  512.             } else if (this.alignment == 1) {
  513.                this.g_suboff[0].drawString(this.subs[var5 + var16 * 4 + 1], this.menuwidth - (this.field_1.stringWidth(this.subs[var5 + var16 * 4 + 1]) + this.m_lrmargin), this.bitheight * var16 + this.bitcenter);
  514.             } else if (this.alignment == 2) {
  515.                this.g_suboff[0].drawString(this.subs[var5 + var16 * 4 + 1], this.m_lrmargin, this.bitheight * var16 + this.bitcenter);
  516.             } else if (this.alignment == 3) {
  517.                this.g_suboff[0].drawString(this.subs[var5 + var16 * 4 + 1], this.menuwidth - (this.field_1.stringWidth(this.subs[var5 + var16 * 4 + 1]) + this.itadjust + this.m_lrmargin), this.bitheight * var16 + this.bitcenter);
  518.             }
  519.          }
  520.  
  521.          this.g_ts.drawImage(this.suboff[0], this.menux, this.menuy, this);
  522.          this.paintIt();
  523.          if (this.m_cur_menu_hloutcolor[0] != null) {
  524.             this.subsave[0] = ((Component)this).createImage(this.suboff[0].getWidth(this), this.suboff[0].getHeight(this));
  525.             Graphics var17 = this.subsave[0].getGraphics();
  526.             var17.drawImage(this.suboff[0], 0, 0, this);
  527.          }
  528.  
  529.          this.cur_level = 0;
  530.       }
  531.    }
  532.  
  533.    public void FirstRun(Graphics var1) {
  534.       this.rendering_images = true;
  535.       ((OCAviewerExtend)this).showStatus("Loading Menu Images...");
  536.       this.g_ts.setColor(this.m_page_bgcolor);
  537.       this.g_ts.fillRect(0, 0, this.field_0.width, this.field_0.height);
  538.       this.g_ts.setFont(new Font("Helvetica", 0, 11));
  539.       FontMetrics var2 = this.g_ts.getFontMetrics();
  540.       this.g_ts.setColor(this.m_load_msgcolor);
  541.       this.g_ts.drawString(this.m_load_msg, this.field_0.width / 2 - var2.stringWidth(this.m_load_msg) / 2, this.field_0.height / 2 + var2.getHeight() / 2);
  542.       ((Component)this).getGraphics().drawImage(this.field_2, 0, 0, this);
  543.  
  544.       for(int var3 = this.break_pictype; var3 < this.num_icons; this.break_pictype = var3++) {
  545.          this.i_pic[var3] = this.trackReturn(this.m_icon_file[var3]);
  546.       }
  547.  
  548.       for(int var5 = this.break_picload; var5 < this.num_icons; this.break_picload = var5++) {
  549.          if ((this.s_pic[var5] = this.trackReturn(this.m_icon_switch_file[var5])) == null) {
  550.             this.s_pic[var5] = this.i_pic[var5];
  551.          }
  552.       }
  553.  
  554.       if ((this.m_subbg = this.trackReturn(this.m_sub_bgfile)) != null) {
  555.          this.m_bgfile_stat = true;
  556.       }
  557.  
  558.       for(int var6 = this.break_bgload; var6 < this.level_max; this.break_bgload = var6++) {
  559.          if ((this.mc_subbg[var6] = this.trackReturn(this.mc_sub_bgfile[var6])) != null) {
  560.             this.mc_bgfile_stat[var6] = true;
  561.          }
  562.       }
  563.  
  564.       for(int var7 = this.break_stand; var7 < this.num_images; this.break_stand = var7++) {
  565.          if ((this.s_picture[var7] = this.trackReturn(this.m_imagefile[var7])) != null) {
  566.             if (var7 == 0) {
  567.                this.g_ts.setColor(this.m_page_bgcolor);
  568.                this.g_ts.fillRect(0, 0, this.field_0.width, this.field_0.height);
  569.             }
  570.  
  571.             this.simg_status[var7] = true;
  572.             this.g_ts.drawImage(this.s_picture[var7], this.m_pic_xcord[var7], this.m_pic_ycord[var7], this);
  573.  
  574.             for(int var4 = 0; var4 <= this.cur_level; ++var4) {
  575.                this.g_ts.drawImage(this.suboff[var4], this.menu_coords[var4 * 7], this.menu_coords[var4 * 7 + 1], this);
  576.             }
  577.  
  578.             ((Component)this).getGraphics().drawImage(this.field_2, 0, 0, this);
  579.             this.pic_width[var7] = this.s_picture[var7].getWidth(this);
  580.             this.pic_height[var7] = this.s_picture[var7].getHeight(this);
  581.          }
  582.       }
  583.  
  584.       for(int var8 = this.break_hl; var8 < this.num_images; this.break_hl = var8++) {
  585.          if ((this.h_picture[var8] = this.trackReturn(this.m_switchfile[var8])) == null) {
  586.             this.h_picture[var8] = this.s_picture[var8];
  587.          } else {
  588.             this.hlimg_status[var8] = true;
  589.             if (this.last_drawn != -1) {
  590.                if (this.last_drawn == var8) {
  591.                   this.g_ts.drawImage(this.h_picture[var8], this.m_pic_xcord[var8], this.m_pic_ycord[var8], this);
  592.                }
  593.  
  594.                for(int var10 = 0; var10 <= this.cur_level; ++var10) {
  595.                   this.g_ts.drawImage(this.suboff[var10], this.menu_coords[var10 * 7], this.menu_coords[var10 * 7 + 1], this);
  596.                }
  597.  
  598.                ((Component)this).getGraphics().drawImage(this.field_2, 0, 0, this);
  599.             }
  600.          }
  601.       }
  602.  
  603.       if ((this.field_3 = this.trackReturn(this.m_bgimage_file)) != null) {
  604.          this.bg_stat = true;
  605.          this.UndoSpecifics(0, this.cur_level, true);
  606.  
  607.          for(int var9 = 0; var9 <= this.cur_level; ++var9) {
  608.             this.g_ts.drawImage(this.suboff[var9], this.menu_coords[var9 * 7], this.menu_coords[var9 * 7 + 1], this);
  609.          }
  610.  
  611.          ((Component)this).getGraphics().drawImage(this.field_2, 0, 0, this);
  612.       }
  613.  
  614.       if (this.mouse_in) {
  615.          ((OCAviewerExtend)this).showStatus(this.m_onsbtext);
  616.       } else {
  617.          ((OCAviewerExtend)this).showStatus(this.m_offsbtext);
  618.       }
  619.  
  620.       this.rendering_images = false;
  621.    }
  622.  
  623.    public void MouseInSub(int var1, int var2) {
  624.       int var3 = 0;
  625.       boolean var4 = false;
  626.       if (var2 < this.cur_level) {
  627.          var4 = true;
  628.       }
  629.  
  630.       for(int var5 = 1; var5 <= this.cur_num_subs; ++var5) {
  631.          if (var1 > this.bitheight * (var5 - 1) && var1 < this.bitheight * var5) {
  632.             if (var4) {
  633.                if (this.menu_coords[(var2 + 1) * 7 + 5] == var5) {
  634.                   if (this.on_sub_num != -1) {
  635.                      this.UndoSubHighlight(((Component)this).getGraphics(), this.last_sub);
  636.                      this.paintIt();
  637.                   }
  638.  
  639.                   this.sub_highlighted = false;
  640.                   this.on_sub_num = -1;
  641.                   return;
  642.                }
  643.  
  644.                this.UndoSpecifics(var2 + 1, this.cur_level, true);
  645.  
  646.                for(int var6 = 0; var6 <= var2; ++var6) {
  647.                   var3 = var6 * 7;
  648.                   this.g_ts.drawImage(this.suboff[var6], this.menu_coords[var3], this.menu_coords[var3 + 1], this);
  649.                }
  650.  
  651.                this.cur_level = var2;
  652.                this.cur_sub_point = this.menu_coords[this.cur_level * 7 + 6];
  653.                this.UndoSubHighlight(((Component)this).getGraphics(), this.menu_coords[(this.cur_level + 1) * 7 + 5] - 1);
  654.                this.on_sub_num = var5;
  655.                this.SubHighlight(((Component)this).getGraphics(), var5 - 1);
  656.                return;
  657.             }
  658.  
  659.             if (var5 != this.on_sub_num) {
  660.                if (this.sub_highlighted) {
  661.                   this.UndoSubHighlight(((Component)this).getGraphics(), this.last_sub);
  662.                }
  663.  
  664.                this.on_sub_num = var5;
  665.                this.SubHighlight(((Component)this).getGraphics(), var5 - 1);
  666.                return;
  667.             }
  668.             break;
  669.          }
  670.       }
  671.  
  672.    }
  673.  
  674.    public void start() {
  675.       if (this.tag) {
  676.          if (this.first_run) {
  677.             this.trun = new Thread(this);
  678.             this.trun.start();
  679.          }
  680.  
  681.       }
  682.    }
  683.  
  684.    public void SubHighlight(Graphics var1, int var2) {
  685.       this.last_sub = var2;
  686.       this.sub_highlighted = true;
  687.       this.cur_link[this.cur_level] = this.subs[this.cur_sub_point + var2 * 4 + 3];
  688.       this.highlightText(this.m_cur_menu_hltextcolor[this.cur_level], var2, true);
  689.       int var3 = new Integer(this.subs[this.cur_sub_point + var2 * 4]);
  690.       if (var3 > -1) {
  691.          ++this.cur_level;
  692.          this.CreateSub(var3 * 5, var2);
  693.       } else {
  694.          this.paintIt();
  695.       }
  696.    }
  697.  
  698.    public void run() {
  699.       while(true) {
  700.          if (this.first_run) {
  701.             this.FirstRun(((Component)this).getGraphics());
  702.             this.first_run = false;
  703.          }
  704.  
  705.          try {
  706.             Thread.sleep(500L);
  707.          } catch (InterruptedException var1) {
  708.          }
  709.       }
  710.    }
  711.  
  712.    public void init() {
  713.       String var1 = "Infinite Icon Menus, Copyright (c) 1998 OpenCube Technologies, Registered";
  714.       this.field_0 = ((Component)this).size();
  715.       boolean var3 = false;
  716.       String var2 = ((OCAviewerExtend)this).getParameter("Notice");
  717.       if (var2 == null) {
  718.          this.m_onsbtext = "Missing 'Notice' Tag";
  719.       } else {
  720.          String var4 = compkey.getKey(var2, ((OCAviewerExtend)this).getDocumentBase());
  721.          if (!var4.equals(var1)) {
  722.             if (var4.equals("-1")) {
  723.                this.m_onsbtext = "Incorrect Base URL Registration";
  724.             } else {
  725.                this.m_onsbtext = "Incorrect Copyright Notice in 'Notice' tag";
  726.             }
  727.          } else {
  728.             this.tag = true;
  729.             var2 = ((OCAviewerExtend)this).getParameter("subbgfile");
  730.             if (var2 != null) {
  731.                this.m_sub_bgfile = var2;
  732.             }
  733.  
  734.             var2 = ((OCAviewerExtend)this).getParameter("icontextspace");
  735.             if (var2 != null) {
  736.                this.m_it_space = Integer.parseInt(var2);
  737.             }
  738.  
  739.             var2 = ((OCAviewerExtend)this).getParameter("italign");
  740.             if (var2 != null) {
  741.                this.m_italign = var2;
  742.             }
  743.  
  744.             var2 = ((OCAviewerExtend)this).getParameter("menubitheight");
  745.             if (var2 != null) {
  746.                this.m_forced_height = Integer.parseInt(var2);
  747.             }
  748.  
  749.             var2 = ((OCAviewerExtend)this).getParameter("menucolor");
  750.             if (var2 != null) {
  751.                this.m_menu_color = occcolor.ConvertColor(var2);
  752.             }
  753.  
  754.             var2 = ((OCAviewerExtend)this).getParameter("menuhloutcolor");
  755.             if (var2 != null) {
  756.                this.m_menu_hloutcolor = occcolor.ConvertColor(var2);
  757.             }
  758.  
  759.             var2 = ((OCAviewerExtend)this).getParameter("menuboxoutcolor");
  760.             if (var2 != null) {
  761.                this.m_menu_bocolor = occcolor.ConvertColor(var2);
  762.             }
  763.  
  764.             var2 = ((OCAviewerExtend)this).getParameter("menuoutlinecolor");
  765.             if (var2 != null) {
  766.                this.m_outline_color = occcolor.ConvertColor(var2);
  767.             }
  768.  
  769.             var2 = ((OCAviewerExtend)this).getParameter("bgimagefile");
  770.             if (var2 != null) {
  771.                this.m_bgimage_file = var2;
  772.             }
  773.  
  774.             var2 = ((OCAviewerExtend)this).getParameter("loadmsgcolor");
  775.             if (var2 != null) {
  776.                this.m_load_msgcolor = occcolor.ConvertColor(var2);
  777.             }
  778.  
  779.             var2 = ((OCAviewerExtend)this).getParameter("loadmsg");
  780.             if (var2 != null) {
  781.                this.m_load_msg = var2;
  782.             }
  783.  
  784.             var2 = ((OCAviewerExtend)this).getParameter("menutextcolor");
  785.             if (var2 != null) {
  786.                this.m_menu_textcolor = occcolor.ConvertColor(var2);
  787.             }
  788.  
  789.             var2 = ((OCAviewerExtend)this).getParameter("menuhltextcolor");
  790.             if (var2 != null) {
  791.                this.m_menu_hltextcolor = occcolor.ConvertColor(var2);
  792.             }
  793.  
  794.             var2 = ((OCAviewerExtend)this).getParameter("onsbtext");
  795.             if (var2 != null) {
  796.                this.m_onsbtext = var2;
  797.             }
  798.  
  799.             var2 = ((OCAviewerExtend)this).getParameter("offsbtext");
  800.             if (var2 != null) {
  801.                this.m_offsbtext = var2;
  802.             }
  803.  
  804.             var2 = ((OCAviewerExtend)this).getParameter("bgimagexy");
  805.             if (var2 != null) {
  806.                int[] var5 = occcord.getIntValues(var2, ",", 2);
  807.                if (var5 != null) {
  808.                   this.m_bgimage_x = var5[0];
  809.                   this.m_bgimage_y = var5[1];
  810.                }
  811.             }
  812.  
  813.             var2 = ((OCAviewerExtend)this).getParameter("font");
  814.             if (var2 != null) {
  815.                this.font = ocfontc.getFontSD(var2, ",");
  816.             } else {
  817.                this.font = new Font("Helvetica", 0, 12);
  818.             }
  819.  
  820.             ((Component)this).setFont(this.font);
  821.             this.field_1 = ((Component)this).getFontMetrics(this.font);
  822.             var2 = ((OCAviewerExtend)this).getParameter("lrmargin");
  823.             if (var2 != null) {
  824.                this.m_lrmargin = Integer.parseInt(var2);
  825.             }
  826.  
  827.             var2 = ((OCAviewerExtend)this).getParameter("loadwhere");
  828.             if (var2 != null) {
  829.                this.m_loadwhere = var2;
  830.             }
  831.  
  832.             var2 = ((OCAviewerExtend)this).getParameter("bgcolor");
  833.             if (var2 != null) {
  834.                this.m_page_bgcolor = occcolor.ConvertColor(var2);
  835.             }
  836.  
  837.             ((Component)this).setBackground(this.m_page_bgcolor);
  838.  
  839.             while(((OCAviewerExtend)this).getParameter("iconfile" + this.num_icons) != null) {
  840.                ++this.num_icons;
  841.             }
  842.  
  843.             this.m_icon_file = new String[this.num_icons];
  844.             this.m_icon_switch_file = new String[this.num_icons];
  845.             this.i_pic = new Image[this.num_icons];
  846.             this.s_pic = new Image[this.num_icons];
  847.  
  848.             for(int var63 = 0; var63 < this.num_icons; ++var63) {
  849.                var2 = ((OCAviewerExtend)this).getParameter("iconfile" + var63);
  850.                if (var2 != null) {
  851.                   this.m_icon_file[var63] = new String(var2);
  852.                } else {
  853.                   this.m_icon_file[var63] = new String(" ");
  854.                }
  855.  
  856.                var2 = ((OCAviewerExtend)this).getParameter("iconswitchfile" + var63);
  857.                if (var2 != null) {
  858.                   this.m_icon_switch_file[var63] = new String(var2);
  859.                } else {
  860.                   this.m_icon_switch_file[var63] = this.m_icon_file[var63];
  861.                }
  862.             }
  863.  
  864.             while(((OCAviewerExtend)this).getParameter("imagefile" + this.num_images) != null) {
  865.                ++this.num_images;
  866.             }
  867.  
  868.             this.m_imagefile = new String[this.num_images];
  869.             this.m_switchfile = new String[this.num_images];
  870.             this.m_pic_xcord = new int[this.num_images];
  871.             this.m_pic_ycord = new int[this.num_images];
  872.             this.m_cur_image_desturl = new String[this.num_images];
  873.             this.ItoM = new int[this.num_images];
  874.             this.hlimg_status = new boolean[this.num_images];
  875.             this.simg_status = new boolean[this.num_images];
  876.             this.pic_width = new int[this.num_images];
  877.             this.pic_height = new int[this.num_images];
  878.             this.s_picture = new Image[this.num_images];
  879.             this.h_picture = new Image[this.num_images];
  880.             this.max_string_width = new int[this.num_images];
  881.             this.no_subs = new boolean[this.num_images];
  882.             Vector var68 = new Vector();
  883.             Vector var6 = new Vector();
  884.             int var7 = 0;
  885.             int var8 = 0;
  886.             String var9 = "";
  887.             String var10 = "";
  888.             Stack var11 = new Stack();
  889.             Stack var12 = new Stack();
  890.             int var13 = 0;
  891.             int var14 = 0;
  892.             String var15 = "";
  893.             int var16 = 0;
  894.             boolean var17 = false;
  895.             int var18 = 0;
  896.             int var19 = 0;
  897.  
  898.             for(int var64 = 0; var64 < this.num_images; ++var64) {
  899.                var9 = (new Integer(var64)).toString();
  900.                var10 = var9;
  901.                var17 = true;
  902.  
  903.                while(true) {
  904.                   var9 = var10 + "-" + var8;
  905.                   var2 = ((OCAviewerExtend)this).getParameter("desc" + var9);
  906.                   int var20 = 0;
  907.                   int var21 = 0;
  908.                   boolean var22 = false;
  909.  
  910.                   while(var20 != -1) {
  911.                      var20 = var9.indexOf("-", var20 + 1);
  912.                      if (var20 == -1) {
  913.                         break;
  914.                      }
  915.  
  916.                      ++var21;
  917.                      if (var21 > this.level_max) {
  918.                         this.level_max = var21;
  919.                         var22 = true;
  920.                      }
  921.                   }
  922.  
  923.                   if (var2 != null) {
  924.                      if (((OCAviewerExtend)this).getParameter("desc" + var9 + "-0") != null) {
  925.                         var68.addElement(var9);
  926.                         ++var13;
  927.                         var11.push(var9);
  928.                         var12.push((new Integer(var7 * 4)).toString());
  929.                      } else {
  930.                         var68.addElement("-1");
  931.                      }
  932.  
  933.                      String var77 = "-1";
  934.                      String var24 = "-1";
  935.                      int var25 = var2.indexOf("|");
  936.                      if (var25 > 0) {
  937.                         if (var25 < var2.length() - 1) {
  938.                            var77 = var2.substring(0, var25);
  939.                            var24 = var2.substring(var25 + 1);
  940.                         } else {
  941.                            var24 = var2;
  942.                         }
  943.                      } else {
  944.                         var24 = var2;
  945.                      }
  946.  
  947.                      var68.addElement(var24);
  948.                      if (this.field_1.stringWidth(var24) + this.m_lrmargin * 2 > var14) {
  949.                         var14 = this.field_1.stringWidth(var24) + this.m_lrmargin * 2;
  950.                      }
  951.  
  952.                      var68.addElement(var77);
  953.                      var2 = ((OCAviewerExtend)this).getParameter("desturl" + var9);
  954.                      if (var2 != null) {
  955.                         var68.addElement(var2);
  956.                      } else {
  957.                         var68.addElement("-1");
  958.                      }
  959.  
  960.                      if (var8 == 0) {
  961.                         var2 = ((OCAviewerExtend)this).getParameter("menuxy" + var10);
  962.                         if (var2 != null) {
  963.                            var6.addElement(var2);
  964.                         } else {
  965.                            var6.addElement("-1,-2");
  966.                         }
  967.  
  968.                         var2 = ((OCAviewerExtend)this).getParameter("italign" + var10);
  969.                         if (var2 != null) {
  970.                            var6.addElement(var2);
  971.                         } else {
  972.                            var6.addElement(this.m_italign);
  973.                         }
  974.  
  975.                         var6.addElement((new Integer(var7)).toString());
  976.                      }
  977.  
  978.                      ++var7;
  979.                      ++var8;
  980.                   } else {
  981.                      if (this.no_subs[var64]) {
  982.                         int var23 = 0;
  983.  
  984.                         do {
  985.                            var6.addElement("0");
  986.                            ++var23;
  987.                         } while(var23 < 5);
  988.                      }
  989.  
  990.                      if (var8 > 0) {
  991.                         var6.addElement((new Integer(var7 - 1)).toString());
  992.                         var6.addElement((new Integer(var14)).toString());
  993.                      }
  994.  
  995.                      ++var16;
  996.                      ++var18;
  997.                      if (var17) {
  998.                         this.ItoM[var64] = (var16 - 1) * 5;
  999.                         var17 = false;
  1000.                      }
  1001.  
  1002.                      if (var13 < 1) {
  1003.                         var11 = new Stack();
  1004.                         var14 = 0;
  1005.                         var12 = new Stack();
  1006.                         var8 = 0;
  1007.                         if (var18 > var19) {
  1008.                            var19 = var18;
  1009.                            var18 = 0;
  1010.                         }
  1011.  
  1012.                         var2 = ((OCAviewerExtend)this).getParameter("imagefile" + var64);
  1013.                         if (var2 != null) {
  1014.                            this.m_imagefile[var64] = new String(var2);
  1015.                         } else {
  1016.                            this.m_imagefile[var64] = new String(" ");
  1017.                         }
  1018.  
  1019.                         var2 = ((OCAviewerExtend)this).getParameter("switchfile" + var64);
  1020.                         if (var2 != null) {
  1021.                            this.m_switchfile[var64] = new String(var2);
  1022.                         } else {
  1023.                            this.m_switchfile[var64] = new String(" ");
  1024.                         }
  1025.  
  1026.                         var2 = ((OCAviewerExtend)this).getParameter("picxy" + var64);
  1027.                         if (var2 != null) {
  1028.                            int[] var74 = occcord.getIntValues(var2, ",", 2);
  1029.                            if (var74 != null) {
  1030.                               this.m_pic_xcord[var64] = var74[0];
  1031.                               this.m_pic_ycord[var64] = var74[1];
  1032.                            }
  1033.                         }
  1034.  
  1035.                         var2 = ((OCAviewerExtend)this).getParameter("imagedesturl" + var64);
  1036.                         if (var2 != null) {
  1037.                            this.m_cur_image_desturl[var64] = var2;
  1038.                         } else {
  1039.                            this.m_cur_image_desturl[var64] = null;
  1040.                         }
  1041.  
  1042.                         this.field_2 = ((Component)this).createImage(this.field_0.width, this.field_0.height);
  1043.                         this.g_ts = this.field_2.getGraphics();
  1044.                         this.g_ts.setColor(this.m_page_bgcolor);
  1045.                         this.g_ts.fillRect(0, 0, this.field_0.width, this.field_0.height);
  1046.                         break;
  1047.                      }
  1048.  
  1049.                      var10 = var11.pop().toString();
  1050.                      --var13;
  1051.                      var15 = var12.pop().toString();
  1052.                      var68.setElementAt((new Integer(var16)).toString(), new Integer(var15));
  1053.                      var8 = 0;
  1054.                      var14 = 0;
  1055.                   }
  1056.                }
  1057.             }
  1058.  
  1059.             this.menu_coords = new int[var19 * 7];
  1060.             this.cur_link = new String[var19];
  1061.             this.suboff = new Image[var19];
  1062.             this.g_suboff = new Graphics[var19];
  1063.             this.subsave = new Image[var19];
  1064.             this.subs = new String[var68.size()];
  1065.             var68.copyInto(this.subs);
  1066.             this.p_subs = new String[var6.size()];
  1067.             var6.copyInto(this.p_subs);
  1068.  
  1069.             for(int var65 = 0; var65 < this.num_images; ++var65) {
  1070.                if (((OCAviewerExtend)this).getParameter("desc" + var65 + "-0") == null) {
  1071.                   this.no_subs[var65] = true;
  1072.                }
  1073.             }
  1074.  
  1075.             var3 = false;
  1076.             this.m_cur_outline_color = new Color[this.level_max];
  1077.             this.m_cur_menu_color = new Color[this.level_max];
  1078.             this.m_cur_menu_textcolor = new Color[this.level_max];
  1079.             this.m_cur_menu_hloutcolor = new Color[this.level_max];
  1080.             this.m_cur_menu_hltextcolor = new Color[this.level_max];
  1081.             this.m_cur_menu_bocolor = new Color[this.level_max];
  1082.             this.mc_sub_bgfile = new String[this.level_max];
  1083.             this.mc_subbg = new Image[this.level_max];
  1084.             this.mc_bgfile_stat = new boolean[this.level_max];
  1085.             this.cur_alignment = new int[this.level_max];
  1086.             this.cur_itadjust = new int[this.level_max];
  1087.             this.cur_menuwidth = new int[this.level_max];
  1088.             this.def_menuloc = new int[this.level_max];
  1089.             this.gif_tile = new boolean[this.level_max];
  1090.  
  1091.             for(int var67 = 0; var67 < this.level_max; ++var67) {
  1092.                var2 = ((OCAviewerExtend)this).getParameter("subbgfile" + var67);
  1093.                if (var2 != null) {
  1094.                   this.mc_sub_bgfile[var67] = var2;
  1095.                } else {
  1096.                   this.mc_sub_bgfile[var67] = this.m_sub_bgfile;
  1097.                }
  1098.  
  1099.                String var75 = this.mc_sub_bgfile[var67].toLowerCase();
  1100.                if (var75.lastIndexOf("gif") != -1) {
  1101.                   this.gif_tile[var67] = true;
  1102.                }
  1103.  
  1104.                var2 = ((OCAviewerExtend)this).getParameter("menucolor" + var67);
  1105.                if (var2 != null) {
  1106.                   this.m_cur_menu_color[var67] = occcolor.ConvertColor(var2);
  1107.                } else {
  1108.                   this.m_cur_menu_color[var67] = this.m_menu_color;
  1109.                }
  1110.  
  1111.                var2 = ((OCAviewerExtend)this).getParameter("menuhloutcolor" + var67);
  1112.                if (var2 != null) {
  1113.                   this.m_cur_menu_hloutcolor[var67] = occcolor.ConvertColor(var2);
  1114.                } else {
  1115.                   this.m_cur_menu_hloutcolor[var67] = this.m_menu_hloutcolor;
  1116.                }
  1117.  
  1118.                var2 = ((OCAviewerExtend)this).getParameter("menuboxoutcolor" + var67);
  1119.                if (var2 != null) {
  1120.                   this.m_cur_menu_bocolor[var67] = occcolor.ConvertColor(var2);
  1121.                } else {
  1122.                   this.m_cur_menu_bocolor[var67] = this.m_menu_bocolor;
  1123.                }
  1124.  
  1125.                var2 = ((OCAviewerExtend)this).getParameter("menuoutlinecolor" + var67);
  1126.                if (var2 != null) {
  1127.                   this.m_cur_outline_color[var67] = occcolor.ConvertColor(var2);
  1128.                } else {
  1129.                   this.m_cur_outline_color[var67] = this.m_outline_color;
  1130.                }
  1131.  
  1132.                var2 = ((OCAviewerExtend)this).getParameter("menutextcolor" + var67);
  1133.                if (var2 != null) {
  1134.                   this.m_cur_menu_textcolor[var67] = occcolor.ConvertColor(var2);
  1135.                } else {
  1136.                   this.m_cur_menu_textcolor[var67] = this.m_menu_textcolor;
  1137.                }
  1138.  
  1139.                var2 = ((OCAviewerExtend)this).getParameter("menuhltextcolor" + var67);
  1140.                if (var2 != null) {
  1141.                   this.m_cur_menu_hltextcolor[var67] = occcolor.ConvertColor(var2);
  1142.                } else {
  1143.                   this.m_cur_menu_hltextcolor[var67] = this.m_menu_hltextcolor;
  1144.                }
  1145.             }
  1146.  
  1147.             if (this.m_forced_height > 0) {
  1148.                this.bitheight = this.m_forced_height;
  1149.                if (this.bitheight < this.field_1.getHeight()) {
  1150.                   this.bitheight = this.field_1.getHeight();
  1151.                }
  1152.             } else {
  1153.                this.bitheight = this.field_1.getHeight();
  1154.             }
  1155.  
  1156.             this.bitcenter = this.bitheight / 2 + (this.field_1.getAscent() + this.field_1.getLeading()) / 2;
  1157.          }
  1158.       }
  1159.    }
  1160.  
  1161.    public void CreateSub(int var1, int var2) {
  1162.       int var3 = 0;
  1163.       if (this.lasticoid > -1) {
  1164.          var3 = this.i_pic[this.lasticoid].getWidth(this);
  1165.       }
  1166.  
  1167.       int var4 = new Integer(this.p_subs[var1 + 3]) - new Integer(this.p_subs[var1 + 2]) + 1;
  1168.       int var5 = new Integer(this.p_subs[var1 + 2]) * 4;
  1169.       this.alignment = new Integer(this.p_subs[var1 + 1]);
  1170.       this.cur_alignment[this.cur_level] = this.alignment;
  1171.       this.cur_sub_point = var5;
  1172.       this.cur_num_subs = var4;
  1173.       int[] var6 = occcord.getIntValues(this.p_subs[var1], ",", 2);
  1174.       if (var6 != null) {
  1175.          this.menux = var6[0];
  1176.          this.menuy = var6[1];
  1177.       }
  1178.  
  1179.       this.menuwidth = new Integer(this.p_subs[var1 + 4]);
  1180.       this.menuheight = var4 * this.bitheight + 1;
  1181.       this.maxiconwidth = 0;
  1182.  
  1183.       for(int var7 = 0; var7 < var4; ++var7) {
  1184.          int var8 = Integer.parseInt(this.subs[var5 + var7 * 4 + 2]);
  1185.          if (var8 > -1 && this.i_pic[var8] != null) {
  1186.             int var9 = this.i_pic[var8].getWidth(this);
  1187.             if (var9 > this.maxiconwidth) {
  1188.                this.maxiconwidth = var9;
  1189.             }
  1190.          }
  1191.       }
  1192.  
  1193.       this.menuwidth = this.menuwidth + this.maxiconwidth + this.m_it_space + 1;
  1194.       this.cur_menuwidth[this.cur_level] = this.menuwidth;
  1195.       this.menu_coords[this.cur_level * 7 + 2] = this.menuwidth;
  1196.       this.menu_coords[this.cur_level * 7 + 3] = this.menuheight;
  1197.       this.menu_coords[this.cur_level * 7 + 4] = this.cur_num_subs;
  1198.       this.menu_coords[this.cur_level * 7 + 5] = this.on_sub_num;
  1199.       this.menu_coords[this.cur_level * 7 + 6] = this.cur_sub_point;
  1200.       this.suboff[this.cur_level] = ((Component)this).createImage(this.menuwidth, this.menuheight);
  1201.       this.subsave[this.cur_level] = ((Component)this).createImage(this.menuwidth, this.menuheight);
  1202.       this.g_suboff[this.cur_level] = this.suboff[this.cur_level].getGraphics();
  1203.       this.g_suboff[this.cur_level].setFont(this.font);
  1204.       Color var16 = this.m_cur_menu_color[this.cur_level];
  1205.       Color var10000 = this.m_cur_outline_color[this.cur_level];
  1206.       var10000 = this.m_cur_menu_textcolor[this.cur_level];
  1207.       this.g_suboff[this.cur_level].setColor(var16);
  1208.       this.g_suboff[this.cur_level].fillRect(0, 0, this.menuwidth, this.menuheight);
  1209.       Image var17 = this.mc_subbg[this.cur_level];
  1210.       boolean var18 = this.mc_bgfile_stat[this.cur_level];
  1211.       if (var18) {
  1212.          int var10 = 0;
  1213.          int var11 = 0;
  1214.          int var12 = var17.getWidth(this);
  1215.          int var13 = var17.getHeight(this);
  1216.          if (this.gif_tile[this.cur_level]) {
  1217.             var11 = -1;
  1218.          }
  1219.  
  1220.          while(true) {
  1221.             this.g_suboff[this.cur_level].drawImage(var17, var10, var11, this);
  1222.             var10 += var12;
  1223.             if (var10 > this.menuwidth + 1) {
  1224.                var10 = 0;
  1225.                var11 += var13;
  1226.                if (this.gif_tile[this.cur_level]) {
  1227.                   --var11;
  1228.                }
  1229.  
  1230.                if (var11 > this.menuheight + 1) {
  1231.                   break;
  1232.                }
  1233.             }
  1234.          }
  1235.       }
  1236.  
  1237.       if (this.m_cur_menu_bocolor[this.cur_level] != null) {
  1238.          this.g_suboff[this.cur_level].setColor(this.m_cur_menu_bocolor[this.cur_level]);
  1239.          this.g_suboff[this.cur_level].drawRect(0, 0, this.menuwidth - 1, this.menuheight - 1);
  1240.       }
  1241.  
  1242.       int var19 = this.m_lrmargin;
  1243.       boolean var20 = false;
  1244.  
  1245.       for(int var21 = 0; var21 < var4; ++var21) {
  1246.          int var26 = Integer.parseInt(this.subs[var5 + var21 * 4 + 2]);
  1247.          if (var26 > -1 && this.i_pic[var26] != null) {
  1248.             int var14 = this.i_pic[var26].getWidth(this);
  1249.             if (this.alignment == 2 || this.alignment == 3) {
  1250.                var19 = this.menuwidth - this.m_lrmargin - var14;
  1251.             }
  1252.  
  1253.             if (var21 == var2) {
  1254.                ;
  1255.             }
  1256.  
  1257.             this.g_suboff[this.cur_level].drawImage(this.i_pic[var26], var19, this.bitheight * var21 + this.bitheight / 2 - this.i_pic[var26].getHeight(this) / 2, this);
  1258.          }
  1259.       }
  1260.  
  1261.       this.def_menuloc[this.cur_level] = var19;
  1262.       if (this.menux == -1 && this.menuy == -2) {
  1263.          if (this.cur_alignment[this.cur_level - 1] != 2 && this.cur_alignment[this.cur_level - 1] != 3) {
  1264.             this.menu_coords[this.cur_level * 7] = this.menu_coords[(this.cur_level - 1) * 7] + this.def_menuloc[this.cur_level - 1] - this.menuwidth - 2;
  1265.          } else {
  1266.             this.menu_coords[this.cur_level * 7] = this.menu_coords[(this.cur_level - 1) * 7] + this.cur_menuwidth[this.cur_level - 1] - 2;
  1267.          }
  1268.  
  1269.          int var22 = this.menu_coords[(this.cur_level - 1) * 7 + 1] + var2 * this.bitheight + this.bitheight * var4;
  1270.          var22 = this.field_0.height - var22;
  1271.          if (var22 < 0) {
  1272.             this.menu_coords[this.cur_level * 7 + 1] = this.menu_coords[(this.cur_level - 1) * 7 + 1] + var2 * this.bitheight + var22 - 1;
  1273.          } else {
  1274.             this.menu_coords[this.cur_level * 7 + 1] = this.menu_coords[(this.cur_level - 1) * 7 + 1] + var2 * this.bitheight - 2;
  1275.          }
  1276.       } else {
  1277.          this.menu_coords[this.cur_level * 7] = this.menu_coords[(this.cur_level - 1) * 7] + this.menux;
  1278.          this.menu_coords[this.cur_level * 7 + 1] = this.menu_coords[(this.cur_level - 1) * 7 + 1] + this.menuy;
  1279.       }
  1280.  
  1281.       this.itadjust = 0;
  1282.       if (this.maxiconwidth > 0) {
  1283.          this.itadjust = this.maxiconwidth + this.m_it_space;
  1284.       }
  1285.  
  1286.       this.cur_itadjust[this.cur_level] = this.itadjust;
  1287.  
  1288.       for(int var24 = 0; var24 < var4; ++var24) {
  1289.          if (this.m_cur_outline_color[this.cur_level] != null) {
  1290.             this.g_suboff[this.cur_level].setColor(this.m_cur_outline_color[this.cur_level]);
  1291.             this.g_suboff[this.cur_level].drawRect(0, this.bitheight * var24, this.menuwidth, this.bitheight);
  1292.          }
  1293.  
  1294.          this.g_suboff[this.cur_level].setColor(this.m_cur_menu_textcolor[this.cur_level]);
  1295.          if (this.alignment == 0) {
  1296.             this.g_suboff[this.cur_level].drawString(this.subs[var5 + var24 * 4 + 1], this.m_lrmargin + this.itadjust, this.bitheight * var24 + this.bitcenter);
  1297.          } else if (this.alignment == 1) {
  1298.             this.g_suboff[this.cur_level].drawString(this.subs[var5 + var24 * 4 + 1], this.menuwidth - (this.field_1.stringWidth(this.subs[var5 + var24 * 4 + 1]) + this.m_lrmargin), this.bitheight * var24 + this.bitcenter);
  1299.          } else if (this.alignment == 2) {
  1300.             this.g_suboff[this.cur_level].drawString(this.subs[var5 + var24 * 4 + 1], this.m_lrmargin, this.bitheight * var24 + this.bitcenter);
  1301.          } else if (this.alignment == 3) {
  1302.             this.g_suboff[this.cur_level].drawString(this.subs[var5 + var24 * 4 + 1], this.menuwidth - (this.field_1.stringWidth(this.subs[var5 + var24 * 4 + 1]) + this.itadjust + this.m_lrmargin), this.bitheight * var24 + this.bitcenter);
  1303.          }
  1304.       }
  1305.  
  1306.       this.g_ts.drawImage(this.suboff[this.cur_level], this.menu_coords[this.cur_level * 7], this.menu_coords[this.cur_level * 7 + 1], this);
  1307.       this.paintIt();
  1308.       if (this.m_cur_menu_hloutcolor[this.cur_level] != null) {
  1309.          this.subsave[this.cur_level] = ((Component)this).createImage(this.suboff[this.cur_level].getWidth(this), this.suboff[this.cur_level].getHeight(this));
  1310.          Graphics var25 = this.subsave[this.cur_level].getGraphics();
  1311.          var25.drawImage(this.suboff[this.cur_level], 0, 0, this);
  1312.       }
  1313.  
  1314.       this.on_sub_num = -1;
  1315.    }
  1316.  
  1317.    public void UndoSpecifics(int var1, int var2, boolean var3) {
  1318.       this.g_ts.fillRect(0, 0, this.field_0.width, this.field_0.height);
  1319.       if (this.bg_stat) {
  1320.          this.g_ts.drawImage(this.field_3, this.m_bgimage_x, this.m_bgimage_y, this.m_page_bgcolor, this);
  1321.       }
  1322.  
  1323.       for(int var4 = 0; var4 < this.num_images; ++var4) {
  1324.          if (this.simg_status[var4]) {
  1325.             this.g_ts.drawImage(this.s_picture[var4], this.m_pic_xcord[var4], this.m_pic_ycord[var4], this);
  1326.          }
  1327.       }
  1328.  
  1329.       if (this.last_drawn > -1 && var3 && this.hlimg_status[this.last_drawn]) {
  1330.          this.g_ts.drawImage(this.h_picture[this.last_drawn], this.m_pic_xcord[this.last_drawn], this.m_pic_ycord[this.last_drawn], this);
  1331.       }
  1332.  
  1333.    }
  1334.  
  1335.    public boolean mouseMove(Event var1, int var2, int var3) {
  1336.       if (this.last_drawn != -1) {
  1337.          int var4 = 0;
  1338.  
  1339.          for(int var5 = this.cur_level; var5 >= 0; --var5) {
  1340.             var4 = var5 * 7;
  1341.             if (var2 > this.menu_coords[var4] && var2 < this.menu_coords[var4] + this.menu_coords[var4 + 2] && var3 > this.menu_coords[var4 + 1] && var3 < this.menu_coords[var4 + 1] + this.menu_coords[var4 + 3]) {
  1342.                this.cur_num_subs = this.menu_coords[var4 + 4];
  1343.                this.actual_level = var5;
  1344.                this.MouseInSub(var3 - this.menu_coords[var4 + 1], var5);
  1345.                return true;
  1346.             }
  1347.          }
  1348.  
  1349.          this.actual_level = -1;
  1350.       }
  1351.  
  1352.       if (this.sub_highlighted) {
  1353.          this.UndoSubHighlight(((Component)this).getGraphics(), this.last_sub);
  1354.          this.cur_link[this.cur_level] = "-1";
  1355.          this.paintIt();
  1356.       }
  1357.  
  1358.       this.on_sub_num = -1;
  1359.  
  1360.       for(int var7 = this.num_images - 1; var7 >= 0; --var7) {
  1361.          if (var3 > this.m_pic_ycord[var7] && var3 < this.m_pic_ycord[var7] + this.pic_height[var7] && var2 > this.m_pic_xcord[var7] && var2 < this.m_pic_xcord[var7] + this.pic_width[var7]) {
  1362.             if (var7 != this.last_drawn) {
  1363.                if (this.last_drawn != -1) {
  1364.                   if (var3 > this.m_pic_ycord[this.last_drawn] && var3 < this.m_pic_ycord[this.last_drawn] + this.pic_height[this.last_drawn] && var2 > this.m_pic_xcord[this.last_drawn] && var2 < this.m_pic_xcord[this.last_drawn] + this.pic_width[this.last_drawn]) {
  1365.                      return true;
  1366.                   }
  1367.  
  1368.                   if (this.cur_level > 0) {
  1369.                      this.UndoSpecifics(0, this.cur_level, false);
  1370.                      this.cur_level = 0;
  1371.                   } else {
  1372.                      this.UndoHP(0);
  1373.                   }
  1374.                }
  1375.  
  1376.                this.last_drawn = var7;
  1377.                this.cur_img_link = this.m_cur_image_desturl[this.last_drawn];
  1378.                this.cur_level = -1;
  1379.                this.HighlightPic(var7);
  1380.                return true;
  1381.             }
  1382.  
  1383.             if (!this.sub_highlighted && this.cur_level > -1) {
  1384.                this.cur_link[this.cur_level] = this.m_cur_image_desturl[this.last_drawn];
  1385.             }
  1386.  
  1387.             return true;
  1388.          }
  1389.       }
  1390.  
  1391.       if (this.last_drawn != -1 && this.no_subs[this.last_drawn]) {
  1392.          this.UndoHP(this.last_drawn);
  1393.          this.last_drawn = -1;
  1394.          this.cur_level = -1;
  1395.       }
  1396.  
  1397.       return true;
  1398.    }
  1399. }
  1400.