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