home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2002 June / INTERNET92.ISO / pc / software / windows / building / visual_dhtml / visualdhtmlwin9x_nt.exe / vtiscrol.___ (.txt) < prev    next >
Encoding:
Java Class File  |  2001-10-19  |  14.3 KB  |  1,087 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.  
  14. public class vtiscroll extends OCAviewerExtend implements Runnable {
  15.    Font font;
  16.    // $FF: renamed from: fm java.awt.FontMetrics
  17.    FontMetrics field_0;
  18.    Font loadfont;
  19.    Thread animator;
  20.    // $FF: renamed from: d java.awt.Dimension
  21.    Dimension field_1;
  22.    Image off;
  23.    Graphics g_off;
  24.    Graphics g_erase;
  25.    Image erase;
  26.    URL goURL;
  27.    String connect_message;
  28.    Color ignore_color;
  29.    boolean first_go = true;
  30.    boolean scrollafterlink = false;
  31.    boolean dragged = false;
  32.    boolean break_pause = false;
  33.    boolean tag = false;
  34.    long next_time;
  35.    int reload_count = 0;
  36.    // $FF: renamed from: my int
  37.    int field_2;
  38.    int hLine = -1;
  39.    boolean mouseIn = false;
  40.    int l_h = -1;
  41.    int soff;
  42.    boolean update_si = false;
  43.    boolean in_hl = false;
  44.    int num_i;
  45.    int p_inx;
  46.    int num_links;
  47.    int temp_links;
  48.    int[] link_cords;
  49.    String[] link_urls;
  50.    int[] line_coords;
  51.    int[] re_draw;
  52.    int font_style;
  53.    int num_descrips;
  54.    int scroll_y;
  55.    int last_h = -1;
  56.    int cur_dline;
  57.    int hold_move;
  58.    int link_ref = 0;
  59.    int i_h;
  60.    String later_string = "";
  61.    boolean try_later = false;
  62.    boolean force_draw = false;
  63.    boolean done_draw = false;
  64.    boolean graphics_ready = false;
  65.    boolean first_run = false;
  66.    boolean paused;
  67.    boolean mdown = false;
  68.    boolean fetching_file = false;
  69.    private boolean m_underline = false;
  70.    private int m_top_margin = 5;
  71.    private int m_icon_base_off = 0;
  72.    private int m_def_delay = 0;
  73.    private int m_def_halign = 0;
  74.    private int m_scroll_delay = 20;
  75.    private Color m_def_textcolor;
  76.    private Color m_bgcolor;
  77.    private Color m_def_hlcolor;
  78.    private String m_sb_text;
  79.    private int m_xoffset;
  80.    private String m_def_loadwhere;
  81.    private String m_offsbtext;
  82.    private String m_file_location;
  83.    private int m_file_update_scrolls;
  84.    private boolean m_wait_for_file;
  85.    private int m_jump;
  86.    private Color m_load_color;
  87.    private String m_load_msg;
  88.    private int m_autofit;
  89.    private int[] m_iconx;
  90.    private int[] m_icony;
  91.    private int[] m_cur_autofit;
  92.    private int[] m_delay;
  93.    private Color[] m_textcolor;
  94.    private String[] m_desc;
  95.    private String[] m_linkurl;
  96.    private Font[] m_font;
  97.    private int[] m_halign;
  98.    private String[] m_loadwhere;
  99.    private String[] m_icon_file;
  100.    private String[] m_icon_sfile;
  101.    private int[] m_icon_id;
  102.    private boolean m_indent_all;
  103.    private boolean[] m_cur_underline;
  104.    private boolean[] use_coords;
  105.    boolean first_connect_message;
  106.    boolean first_update_message;
  107.    Image[] icon;
  108.    Image[] sicon;
  109.    boolean bg_stat;
  110.  
  111.    public boolean mouseMove(Event var1, int var2, int var3) {
  112.       this.field_2 = var3;
  113.       if (this.paused) {
  114.          this.mCheck();
  115.       }
  116.  
  117.       return true;
  118.    }
  119.  
  120.    public void stop() {
  121.       if (this.animator != null) {
  122.          this.animator.stop();
  123.       }
  124.  
  125.       this.animator = null;
  126.    }
  127.  
  128.    public boolean mouseEnter(Event var1, int var2, int var3) {
  129.       this.mouseIn = true;
  130.       this.showStatusText();
  131.       return true;
  132.    }
  133.  
  134.    public String[] ReadDescrips(String var1) {
  135.       String[] var2 = new String[9];
  136.       int var3 = 0;
  137.       int var4 = 0;
  138.       int var5 = 0;
  139.       int var6 = 0;
  140.       int var7 = 0;
  141.  
  142.       do {
  143.          var2[var7] = "-1";
  144.          ++var7;
  145.       } while(var7 < 9);
  146.  
  147.       if (var1.equals("|")) {
  148.          return var2;
  149.       } else {
  150.          while(var5 != -1) {
  151.             var5 = var1.indexOf(124, var4);
  152.             if (var5 == -1) {
  153.                break;
  154.             }
  155.  
  156.             if (var5 - var4 != 0) {
  157.                var2[var3] = var1.substring(var4, var5);
  158.             }
  159.  
  160.             var4 = var5 + 1;
  161.             ++var3;
  162.             var6 = var5;
  163.             if (var3 == 9) {
  164.                break;
  165.             }
  166.          }
  167.  
  168.          if (var3 == 0) {
  169.             var2[8] = var1;
  170.          } else if (var1.length() > var6 + 1) {
  171.             var2[8] = var1.substring(var6 + 1);
  172.          }
  173.  
  174.          return var2;
  175.       }
  176.    }
  177.  
  178.    public void firstGo() {
  179.       this.off = ((Component)this).createImage(this.field_1.width, this.field_1.height);
  180.       this.g_off = this.off.getGraphics();
  181.       this.g_off.setColor(this.m_bgcolor);
  182.       this.g_off.fillRect(0, 0, this.field_1.width, this.field_1.height);
  183.       this.g_off.setColor(this.m_load_color);
  184.       this.g_off.setFont(this.loadfont);
  185.       FontMetrics var1 = this.g_off.getFontMetrics(this.loadfont);
  186.       this.g_off.drawString(this.m_load_msg, this.field_1.width / 2 - var1.stringWidth(this.m_load_msg) / 2, this.field_1.height / 2 + var1.getHeight() / 2);
  187.       this.graphics_ready = true;
  188.       this.paintIt();
  189.       this.scroll_y = this.field_1.height;
  190.  
  191.       for(int var2 = 0; var2 < this.num_i; ++var2) {
  192.          this.icon[var2] = this.trackReturn(this.m_icon_file[var2]);
  193.          if ((this.sicon[var2] = this.trackReturn(this.m_icon_sfile[var2])) == null) {
  194.             this.sicon[var2] = this.icon[var2];
  195.          }
  196.       }
  197.  
  198.    }
  199.  
  200.    public synchronized void mCheck() {
  201.       if (this.num_links != 0) {
  202.          for(int var1 = 0; var1 < this.num_links; ++var1) {
  203.             if (!this.mouseIn) {
  204.                this.p_inx = 0;
  205.                this.hLine = -1;
  206.                this.chl(var1);
  207.                return;
  208.             }
  209.  
  210.             if (this.field_2 > this.link_cords[var1 * 3] + this.scroll_y && this.field_2 < this.link_cords[var1 * 3 + 1] + this.scroll_y) {
  211.                this.hLine = this.link_cords[var1 * 3 + 2];
  212.                this.p_inx = this.link_cords[var1 * 3];
  213.                this.link_ref = var1;
  214.                this.chl(var1);
  215.                return;
  216.             }
  217.  
  218.             if (var1 == this.num_links - 1) {
  219.                this.p_inx = 0;
  220.                this.hLine = -1;
  221.                this.chl(var1);
  222.                return;
  223.             }
  224.          }
  225.  
  226.       }
  227.    }
  228.  
  229.    public boolean mouseExit(Event var1, int var2, int var3) {
  230.       this.mouseIn = false;
  231.       this.showStatusText();
  232.       if (this.done_draw) {
  233.          this.mCheck();
  234.       }
  235.  
  236.       return true;
  237.    }
  238.  
  239.    static int getAlignValue(String var0) {
  240.       if (var0.equalsIgnoreCase("right")) {
  241.          return 2;
  242.       } else {
  243.          return var0.equalsIgnoreCase("center") ? 1 : 0;
  244.       }
  245.    }
  246.  
  247.    public void WhereAmI() {
  248.       boolean var1 = false;
  249.  
  250.       for(int var2 = this.num_descrips - 1; var2 > -1; --var2) {
  251.          if (this.scroll_y > -this.line_coords[var2]) {
  252.             this.cur_dline = var2;
  253.             var1 = true;
  254.          }
  255.       }
  256.  
  257.       if (!var1) {
  258.          this.cur_dline = this.num_descrips - 1;
  259.       }
  260.  
  261.    }
  262.  
  263.    public void paint(Graphics var1) {
  264.       this.paintIt();
  265.    }
  266.  
  267.    public Image trackReturn(String var1) {
  268.       ocgifix var2 = new ocgifix();
  269.       Object var3 = null;
  270.       MediaTracker var4 = new MediaTracker(this);
  271.       if (!var1.equals("-1")) {
  272.          Image var6 = ((Applet)this).getImage(((OCAviewerExtend)this).getDocumentBase(), var1);
  273.          var4.addImage(var6, 0);
  274.  
  275.          try {
  276.             var4.waitForID(0);
  277.          } catch (InterruptedException var5) {
  278.             return null;
  279.          }
  280.  
  281.          if (var4.isErrorID(0)) {
  282.             System.out.println("Error Loading Image File:" + var1);
  283.             return null;
  284.          } else {
  285.             var6 = var2.gifix(var6, var1);
  286.             return var6;
  287.          }
  288.       } else {
  289.          return null;
  290.       }
  291.    }
  292.  
  293.    public vtiscroll() {
  294.       this.m_def_textcolor = Color.black;
  295.       this.m_bgcolor = Color.white;
  296.       this.m_def_hlcolor = Color.blue;
  297.       this.m_sb_text = "OpenCube - Vertical Text & Image Scroll";
  298.       this.m_xoffset = 5;
  299.       this.m_def_loadwhere = "_self";
  300.       this.m_offsbtext = "Java By OpenCube";
  301.       this.m_file_update_scrolls = 1;
  302.       this.m_wait_for_file = false;
  303.       this.m_jump = 1;
  304.       this.m_load_color = Color.black;
  305.       this.m_load_msg = "Loading Scroll Images...";
  306.       this.m_autofit = 0;
  307.       this.first_connect_message = true;
  308.       this.first_update_message = false;
  309.    }
  310.  
  311.    public boolean mouseUp(Event var1, int var2, int var3) {
  312.       this.WhereAmI();
  313.       this.mdown = false;
  314.       if (this.dragged) {
  315.          this.dragged = false;
  316.          return true;
  317.       } else {
  318.          if (this.hLine != -1 && !this.link_urls[this.link_ref].equals("-1")) {
  319.             try {
  320.                this.goURL = new URL(((OCAviewerExtend)this).getDocumentBase(), this.link_urls[this.link_ref]);
  321.             } catch (MalformedURLException var4) {
  322.             }
  323.  
  324.             ((Applet)this).getAppletContext().showDocument(this.goURL, this.m_loadwhere[this.hLine]);
  325.          }
  326.  
  327.          return true;
  328.       }
  329.    }
  330.  
  331.    private void paintIt() {
  332.       if (this.tag) {
  333.          if (this.graphics_ready) {
  334.             ((Component)this).getGraphics().drawImage(this.off, 0, this.scroll_y, this);
  335.             return;
  336.          }
  337.       } else {
  338.          ((Component)this).getGraphics().drawString(this.m_sb_text, 5, 20);
  339.       }
  340.  
  341.    }
  342.  
  343.    public void start() {
  344.       this.paused = false;
  345.       if (this.first_run) {
  346.          this.WhereAmI();
  347.       }
  348.  
  349.       this.animator = new Thread(this);
  350.       this.animator.start();
  351.    }
  352.  
  353.    public void ScrollIt(boolean var1) {
  354.       if (var1 && this.scroll_y == -this.line_coords[this.cur_dline] && this.cur_dline != this.num_descrips) {
  355.          this.paused = true;
  356.          if (this.m_delay[this.cur_dline] > 0) {
  357.             ++this.scroll_y;
  358.             this.next_time = System.currentTimeMillis() + (long)this.m_delay[this.cur_dline];
  359.  
  360.             while(System.currentTimeMillis() < this.next_time) {
  361.                try {
  362.                   Thread.sleep(10L);
  363.                } catch (InterruptedException var2) {
  364.                }
  365.  
  366.                if (this.break_pause) {
  367.                   this.break_pause = false;
  368.                   break;
  369.                }
  370.             }
  371.  
  372.             this.scroll_y += -1;
  373.          }
  374.  
  375.          this.paused = false;
  376.          if (this.cur_dline != this.num_descrips - 1) {
  377.             ++this.cur_dline;
  378.          }
  379.       }
  380.  
  381.       this.paintIt();
  382.       if (this.scroll_y < -this.off.getHeight(this)) {
  383.          this.scroll_y = this.field_1.height;
  384.          this.cur_dline = 0;
  385.       }
  386.  
  387.    }
  388.  
  389.    public String CheckSPart(String var1) {
  390.       return var1.trim().length() == 0 ? " " : var1.trim();
  391.    }
  392.  
  393.    public void DrawScroll() {
  394.       Object var1 = null;
  395.       int var2 = 0;
  396.       int var3 = 0;
  397.       int var4 = 0;
  398.       int var5 = 0;
  399.       boolean var6 = false;
  400.       this.num_links = this.temp_links;
  401.       this.link_cords = new int[this.num_links * 3];
  402.       this.link_urls = new String[this.num_links];
  403.       int var7 = 0;
  404.  
  405.       do {
  406.          var2 = 0;
  407.          var5 = 0;
  408.  
  409.          for(int var8 = 0; var8 < this.num_descrips; ++var8) {
  410.             if (var7 == 0) {
  411.                int var21 = 0;
  412.                int var22 = 0;
  413.                this.field_0 = ((Component)this).getFontMetrics(this.m_font[var8]);
  414.                var3 = var2;
  415.                if (this.m_cur_autofit[var8] == 1) {
  416.                   var5 = var2;
  417.                   var6 = true;
  418.                } else if (!var6) {
  419.                   var5 = var2;
  420.                }
  421.  
  422.                String[] var16;
  423.                if (this.m_icon_id[var8] != -1) {
  424.                   if (this.icon[this.m_icon_id[var8]] != null) {
  425.                      var21 = this.icon[this.m_icon_id[var8]].getWidth(this);
  426.                      var22 = this.icon[this.m_icon_id[var8]].getHeight(this);
  427.                   }
  428.  
  429.                   var16 = ocwordw.WrapText(this.m_desc[var8], this.field_1.width - this.m_xoffset * 2 - var21, this.field_0);
  430.                } else {
  431.                   var16 = ocwordw.WrapText(this.m_desc[var8], this.field_1.width - this.m_xoffset * 2, this.field_0);
  432.                }
  433.  
  434.                for(int var24 = 0; var24 < var16.length; ++var24) {
  435.                   var2 += this.field_0.getHeight();
  436.                }
  437.  
  438.                if (var2 - var3 < var22) {
  439.                   var2 = var3 + var22;
  440.                }
  441.  
  442.                if (var8 == this.m_desc.length - 1) {
  443.                   this.g_off.setColor(this.m_bgcolor);
  444.                   this.g_off.fillRect(0, 0, this.field_1.width, this.field_1.height);
  445.                   ((Component)this).getGraphics().drawImage(this.off, 0, 0, this);
  446.                   this.i_h = var2 + this.field_0.getDescent() + 5;
  447.                   this.off = ((Component)this).createImage(this.field_1.width, this.i_h);
  448.                   this.g_off = this.off.getGraphics();
  449.                   this.g_off.setColor(this.m_bgcolor);
  450.                   this.g_off.fillRect(0, 0, this.field_1.width, this.i_h);
  451.                } else if (var2 - var5 < this.field_1.height && this.m_cur_autofit[var8] == 2) {
  452.                   var2 = var2 + (this.field_1.height - (var2 - var5)) + 1 - this.m_top_margin;
  453.                   var6 = false;
  454.                }
  455.             } else {
  456.                this.g_off.setFont(this.m_font[var8]);
  457.                this.field_0 = this.g_off.getFontMetrics(this.m_font[var8]);
  458.                var3 = var2;
  459.                if (this.m_cur_autofit[var8] == 1) {
  460.                   var5 = var2;
  461.                   var6 = true;
  462.                } else if (!var6) {
  463.                   var5 = var2;
  464.                }
  465.  
  466.                this.line_coords[var8] = var2 + this.field_0.getDescent() + 1 - this.m_top_margin;
  467.                this.re_draw[var8] = var2;
  468.                int var9 = 0;
  469.                int var10 = 0;
  470.                String[] var15;
  471.                if (this.m_icon_id[var8] != -1) {
  472.                   if (this.icon[this.m_icon_id[var8]] != null) {
  473.                      var9 = this.icon[this.m_icon_id[var8]].getWidth(this);
  474.                      var10 = this.icon[this.m_icon_id[var8]].getHeight(this);
  475.                   }
  476.  
  477.                   var15 = ocwordw.WrapText(this.m_desc[var8], this.field_1.width - this.m_xoffset * 2 - var9, this.field_0);
  478.                } else {
  479.                   var15 = ocwordw.WrapText(this.m_desc[var8], this.field_1.width - this.m_xoffset * 2, this.field_0);
  480.                }
  481.  
  482.                int var11 = 0;
  483.                int var12 = 0;
  484.                boolean var13 = false;
  485.  
  486.                for(int var14 = 0; var14 < var15.length; ++var14) {
  487.                   var2 += this.field_0.getHeight();
  488.                   this.g_off.setColor(this.m_textcolor[var8]);
  489.                   if (this.m_halign[var8] == 1) {
  490.                      if (var14 == 0 && this.m_icon_id[var8] != -1) {
  491.                         var11 = (this.field_1.width - (this.field_0.stringWidth(var15[var14]) + var9 + 1)) / 2;
  492.                         if (this.icon[this.m_icon_id[var8]] != null) {
  493.                            if (var2 + this.m_icon_base_off - var10 < var3) {
  494.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], var11, var3 + this.m_icon_base_off, this);
  495.                            } else {
  496.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], var11, var2 + this.m_icon_base_off - var10, this);
  497.                            }
  498.                         }
  499.  
  500.                         this.g_off.drawString(var15[var14], var11 + var9 + 1, var2);
  501.                      } else {
  502.                         this.g_off.drawString(var15[var14], (this.field_1.width - this.field_0.stringWidth(var15[var14])) / 2, var2);
  503.                      }
  504.  
  505.                      if (this.m_cur_underline[var8]) {
  506.                         var12 = (this.field_1.width - this.field_0.stringWidth(var15[var14])) / 2;
  507.                         if (var14 == 0) {
  508.                            var12 = (this.field_1.width - (this.field_0.stringWidth(var15[var14]) + var9 + 1)) / 2 + var9 + 1;
  509.                         }
  510.  
  511.                         this.g_off.drawLine(var12 + 1, var2 + 1, var12 + this.field_0.stringWidth(var15[var14]) - 1, var2 + 1);
  512.                      }
  513.                   } else if (this.m_halign[var8] == 2) {
  514.                      if ((var14 == 0 || this.m_indent_all) && this.m_icon_id[var8] != -1) {
  515.                         var11 = var9 + 1;
  516.                         if (var14 == 0 && this.icon[this.m_icon_id[var8]] != null) {
  517.                            if (var2 + this.m_icon_base_off - var10 < var3) {
  518.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], this.field_1.width - var9 - this.m_xoffset, var3 + this.m_icon_base_off, this);
  519.                            } else {
  520.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], this.field_1.width - var9 - this.m_xoffset, var2 + this.m_icon_base_off - var10, this);
  521.                            }
  522.                         }
  523.                      }
  524.  
  525.                      this.g_off.drawString(var15[var14], this.field_1.width - this.m_xoffset - this.field_0.stringWidth(var15[var14]) - var11, var2);
  526.                      if (this.m_cur_underline[var8]) {
  527.                         var12 = this.field_1.width - this.m_xoffset - this.field_0.stringWidth(var15[var14]) - var11;
  528.                         this.g_off.drawLine(var12 + 1, var2 + 1, var12 + this.field_0.stringWidth(var15[var14]) - 1, var2 + 1);
  529.                      }
  530.                   } else {
  531.                      if ((var14 == 0 || this.m_indent_all) && this.m_icon_id[var8] != -1) {
  532.                         if (var14 == 0 && this.icon[this.m_icon_id[var8]] != null) {
  533.                            if (var2 + this.m_icon_base_off - var10 < var3) {
  534.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], this.m_xoffset, var3 + this.m_icon_base_off, this);
  535.                            } else {
  536.                               this.g_off.drawImage(this.icon[this.m_icon_id[var8]], this.m_xoffset, var2 + this.m_icon_base_off - var10, this);
  537.                            }
  538.                         }
  539.  
  540.                         var11 = var9 + 1;
  541.                      }
  542.  
  543.                      this.g_off.drawString(var15[var14], this.m_xoffset + var11, var2);
  544.                      if (this.m_cur_underline[var8]) {
  545.                         var12 = this.m_xoffset + var11;
  546.                         this.g_off.drawLine(var12 + 1, var2 + 1, var12 + this.field_0.stringWidth(var15[var14]) - 1, var2 + 1);
  547.                      }
  548.                   }
  549.  
  550.                   var11 = 0;
  551.                }
  552.  
  553.                if (var2 - var3 < var10) {
  554.                   var2 = var3 + var10;
  555.                }
  556.  
  557.                if (!this.m_linkurl[var8].equals("-1")) {
  558.                   if (var8 == this.m_desc.length - 1) {
  559.                      var2 += this.field_0.getDescent();
  560.                   }
  561.  
  562.                   this.link_cords[var4 * 3] = var3;
  563.                   this.link_cords[var4 * 3 + 1] = var2;
  564.                   this.link_cords[var4 * 3 + 2] = var8;
  565.                   this.link_urls[var4] = this.m_linkurl[var8];
  566.                   ++var4;
  567.                }
  568.  
  569.                if (var8 != this.m_desc.length - 1 && var2 - var5 < this.field_1.height && this.m_cur_autofit[var8] == 2) {
  570.                   var2 = var2 + (this.field_1.height - (var2 - var5)) + 1 - this.m_top_margin;
  571.                   var6 = false;
  572.                }
  573.             }
  574.          }
  575.  
  576.          ++var7;
  577.       } while(var7 < 2);
  578.  
  579.       this.done_draw = true;
  580.    }
  581.  
  582.    public boolean mouseDown(Event var1, int var2, int var3) {
  583.       this.mdown = true;
  584.       this.hold_move = this.field_2;
  585.       this.cur_dline = 0;
  586.       if (this.hLine == -1 && this.paused) {
  587.          this.break_pause = true;
  588.       }
  589.  
  590.       return true;
  591.    }
  592.  
  593.    private synchronized void chl(int var1) {
  594.       if (this.l_h != this.hLine) {
  595.          if (this.l_h != -1) {
  596.             this.method_0(this.l_h, false);
  597.             ((OCAviewerExtend)this).showStatus(this.m_sb_text);
  598.          }
  599.  
  600.          if (this.hLine != -1) {
  601.             this.method_0(this.hLine, true);
  602.             ((OCAviewerExtend)this).showStatus(this.link_urls[var1]);
  603.          }
  604.       }
  605.  
  606.       this.l_h = this.hLine;
  607.    }
  608.  
  609.    public void run() {
  610.       while(true) {
  611.          if (!this.first_run) {
  612.             this.firstGo();
  613.             ((OCAviewerExtend)this).showStatus(this.m_sb_text);
  614.             this.DrawScroll();
  615.             this.first_run = true;
  616.          }
  617.  
  618.          if (!this.mdown) {
  619.             --this.scroll_y;
  620.             this.ScrollIt(true);
  621.             this.mCheck();
  622.          }
  623.  
  624.          try {
  625.             Thread.sleep((long)this.m_scroll_delay);
  626.          } catch (InterruptedException var1) {
  627.          }
  628.       }
  629.    }
  630.  
  631.    public void init() {
  632.       String var1 = "Vertical Text and Image Scroll, Copyright (c) 1999, OpenCube Inc.";
  633.       boolean var3 = false;
  634.       this.field_1 = ((Component)this).size();
  635.       String var2 = ((OCAviewerExtend)this).getParameter("Notice");
  636.       if (var2 == null) {
  637.          this.m_sb_text = "Missing 'Notice' Tag";
  638.       } else {
  639.          String var4 = compkey.getKey(var2, ((OCAviewerExtend)this).getDocumentBase());
  640.          if (!var4.equals(var1)) {
  641.             if (var4.equals("-1")) {
  642.                this.m_sb_text = "Incorrect Base URL Registration";
  643.             } else {
  644.                this.m_sb_text = "Incorrect Copyright Notice in 'Notice' tag";
  645.             }
  646.          } else {
  647.             this.tag = true;
  648.             var2 = ((OCAviewerExtend)this).getParameter("font");
  649.             if (var2 != null) {
  650.                this.font = ocfontc.getFontSD(var2, ",");
  651.             } else {
  652.                this.font = new Font("Dialog", 0, 12);
  653.             }
  654.  
  655.             var2 = ((OCAviewerExtend)this).getParameter("loadfont");
  656.             if (var2 != null) {
  657.                this.loadfont = ocfontc.getFontSD(var2, ",");
  658.             } else {
  659.                this.loadfont = new Font("Dialog", 0, 12);
  660.             }
  661.  
  662.             var2 = ((OCAviewerExtend)this).getParameter("loadcolor");
  663.             if (var2 != null) {
  664.                this.m_load_color = occcolor.ConvertColor(var2);
  665.             }
  666.  
  667.             var2 = ((OCAviewerExtend)this).getParameter("loadmsg");
  668.             if (var2 != null) {
  669.                this.m_load_msg = var2;
  670.             }
  671.  
  672.             var2 = ((OCAviewerExtend)this).getParameter("iconvoff");
  673.             if (var2 != null) {
  674.                this.m_icon_base_off = Integer.parseInt(var2);
  675.             }
  676.  
  677.             var2 = ((OCAviewerExtend)this).getParameter("topmargin");
  678.             if (var2 != null) {
  679.                this.m_top_margin = Integer.parseInt(var2);
  680.             }
  681.  
  682.             var2 = ((OCAviewerExtend)this).getParameter("autofit");
  683.             if (var2 != null) {
  684.                this.m_autofit = getAutoValue(var2);
  685.             }
  686.  
  687.             var2 = ((OCAviewerExtend)this).getParameter("scrolljump");
  688.             if (var2 != null) {
  689.                this.m_jump = Integer.parseInt(var2);
  690.             }
  691.  
  692.             var2 = ((OCAviewerExtend)this).getParameter("aligniconparas");
  693.             if (var2 != null) {
  694.                this.m_indent_all = Boolean.valueOf(var2);
  695.             }
  696.  
  697.             var2 = ((OCAviewerExtend)this).getParameter("underline");
  698.             if (var2 != null) {
  699.                this.m_underline = Boolean.valueOf(var2);
  700.             }
  701.  
  702.             var2 = ((OCAviewerExtend)this).getParameter("halign");
  703.             if (var2 != null) {
  704.                this.m_def_halign = getAlignValue(var2);
  705.             }
  706.  
  707.             var2 = ((OCAviewerExtend)this).getParameter("loadwhere");
  708.             if (var2 != null) {
  709.                this.m_def_loadwhere = var2;
  710.             }
  711.  
  712.             var2 = ((OCAviewerExtend)this).getParameter("textcolor");
  713.             if (var2 != null) {
  714.                this.m_def_textcolor = occcolor.ConvertColor(var2);
  715.             }
  716.  
  717.             var2 = ((OCAviewerExtend)this).getParameter("bgcolor");
  718.             if (var2 != null) {
  719.                this.m_bgcolor = occcolor.ConvertColor(var2);
  720.             }
  721.  
  722.             ((Component)this).setBackground(this.m_bgcolor);
  723.             var2 = ((OCAviewerExtend)this).getParameter("delay");
  724.             if (var2 != null) {
  725.                this.m_def_delay = Integer.parseInt(var2);
  726.             }
  727.  
  728.             var2 = ((OCAviewerExtend)this).getParameter("scrolldelay");
  729.             if (var2 != null) {
  730.                this.m_scroll_delay = Integer.parseInt(var2);
  731.             }
  732.  
  733.             var2 = ((OCAviewerExtend)this).getParameter("lrmargin");
  734.             if (var2 != null) {
  735.                this.m_xoffset = Integer.parseInt(var2);
  736.             }
  737.  
  738.             var2 = ((OCAviewerExtend)this).getParameter("hlcolor");
  739.             if (var2 != null) {
  740.                this.m_def_hlcolor = occcolor.ConvertColor(var2);
  741.             }
  742.  
  743.             var2 = ((OCAviewerExtend)this).getParameter("onsbtext");
  744.             if (var2 != null) {
  745.                this.m_sb_text = var2;
  746.             }
  747.  
  748.             var2 = ((OCAviewerExtend)this).getParameter("offsbtext");
  749.             if (var2 != null) {
  750.                this.m_offsbtext = var2;
  751.             }
  752.  
  753.             while(((OCAviewerExtend)this).getParameter("desc" + this.num_descrips) != null) {
  754.                ++this.num_descrips;
  755.             }
  756.  
  757.             this.m_delay = new int[this.num_descrips];
  758.             this.m_textcolor = new Color[this.num_descrips];
  759.             this.m_desc = new String[this.num_descrips];
  760.             this.m_linkurl = new String[this.num_descrips];
  761.             this.m_font = new Font[this.num_descrips];
  762.             this.m_halign = new int[this.num_descrips];
  763.             this.m_loadwhere = new String[this.num_descrips];
  764.             this.m_cur_autofit = new int[this.num_descrips];
  765.             this.m_icon_id = new int[this.num_descrips];
  766.             this.line_coords = new int[this.num_descrips];
  767.             this.re_draw = new int[this.num_descrips];
  768.             this.m_iconx = new int[this.num_descrips];
  769.             this.m_icony = new int[this.num_descrips];
  770.             this.m_cur_underline = new boolean[this.num_descrips];
  771.             this.use_coords = new boolean[this.num_descrips];
  772.  
  773.             for(int var37 = 0; var37 < this.num_descrips; ++var37) {
  774.                var2 = ((OCAviewerExtend)this).getParameter("desc" + var37);
  775.                if (var2 != null) {
  776.                   this.m_desc[var37] = var2;
  777.                } else {
  778.                   this.m_desc[var37] = "";
  779.                }
  780.  
  781.                var2 = ((OCAviewerExtend)this).getParameter("iconid" + var37);
  782.                if (var2 != null) {
  783.                   this.m_icon_id[var37] = Integer.parseInt(var2);
  784.                } else {
  785.                   this.m_icon_id[var37] = -1;
  786.                }
  787.  
  788.                var2 = ((OCAviewerExtend)this).getParameter("underline" + var37);
  789.                if (var2 != null) {
  790.                   this.m_cur_underline[var37] = Boolean.valueOf(var2);
  791.                } else {
  792.                   this.m_cur_underline[var37] = this.m_underline;
  793.                }
  794.  
  795.                var2 = ((OCAviewerExtend)this).getParameter("autofit" + var37);
  796.                if (var2 != null) {
  797.                   this.m_cur_autofit[var37] = getAutoValue(var2);
  798.                } else {
  799.                   this.m_cur_autofit[var37] = this.m_autofit;
  800.                }
  801.  
  802.                var2 = ((OCAviewerExtend)this).getParameter("delay" + var37);
  803.                if (var2 != null) {
  804.                   this.m_delay[var37] = Integer.parseInt(var2);
  805.                } else {
  806.                   this.m_delay[var37] = this.m_def_delay;
  807.                }
  808.  
  809.                var2 = ((OCAviewerExtend)this).getParameter("font" + var37);
  810.                if (var2 != null) {
  811.                   this.m_font[var37] = ocfontc.getFontSD(var2, ",");
  812.                } else {
  813.                   this.m_font[var37] = this.font;
  814.                }
  815.  
  816.                var2 = ((OCAviewerExtend)this).getParameter("halign" + var37);
  817.                if (var2 != null) {
  818.                   this.m_halign[var37] = getAlignValue(var2);
  819.                } else {
  820.                   this.m_halign[var37] = this.m_def_halign;
  821.                }
  822.  
  823.                var2 = ((OCAviewerExtend)this).getParameter("textcolor" + var37);
  824.                if (var2 != null) {
  825.                   this.m_textcolor[var37] = occcolor.ConvertColor(var2);
  826.                } else {
  827.                   this.m_textcolor[var37] = this.m_def_textcolor;
  828.                }
  829.  
  830.                var2 = ((OCAviewerExtend)this).getParameter("loadwhere" + var37);
  831.                if (var2 != null) {
  832.                   this.m_loadwhere[var37] = var2;
  833.                } else {
  834.                   this.m_loadwhere[var37] = this.m_def_loadwhere;
  835.                }
  836.  
  837.                var2 = ((OCAviewerExtend)this).getParameter("desturl" + var37);
  838.                if (var2 != null) {
  839.                   ++this.temp_links;
  840.                   this.m_linkurl[var37] = var2;
  841.                } else {
  842.                   this.m_linkurl[var37] = "-1";
  843.                }
  844.             }
  845.  
  846.             while(((OCAviewerExtend)this).getParameter("iconfile" + this.num_i) != null) {
  847.                ++this.num_i;
  848.             }
  849.  
  850.             this.m_icon_file = new String[this.num_i];
  851.             this.m_icon_sfile = new String[this.num_i];
  852.             this.icon = new Image[this.num_i];
  853.             this.sicon = new Image[this.num_i];
  854.  
  855.             for(int var38 = 0; var38 < this.num_i; ++var38) {
  856.                var2 = ((OCAviewerExtend)this).getParameter("iconfile" + var38);
  857.                if (var2 != null) {
  858.                   this.m_icon_file[var38] = var2;
  859.                } else {
  860.                   this.m_icon_file[var38] = "-1";
  861.                }
  862.  
  863.                var2 = ((OCAviewerExtend)this).getParameter("iconswitchfile" + var38);
  864.                if (var2 != null) {
  865.                   this.m_icon_sfile[var38] = var2;
  866.                } else {
  867.                   this.m_icon_sfile[var38] = "-1";
  868.                }
  869.             }
  870.  
  871.          }
  872.       }
  873.    }
  874.  
  875.    public Image ImageWait(Image var1) {
  876.       MediaTracker var2 = new MediaTracker(this);
  877.       var2.addImage(var1, 0);
  878.  
  879.       try {
  880.          var2.waitForID(0);
  881.       } catch (InterruptedException var3) {
  882.       }
  883.  
  884.       return var2.isErrorID(0) ? null : var1;
  885.    }
  886.  
  887.    static int getAutoValue(String var0) {
  888.       if (var0.equalsIgnoreCase("end")) {
  889.          return 2;
  890.       } else if (var0.equalsIgnoreCase("fit")) {
  891.          return 2;
  892.       } else {
  893.          return var0.equalsIgnoreCase("start") ? 1 : 0;
  894.       }
  895.    }
  896.  
  897.    public boolean mouseDrag(Event var1, int var2, int var3) {
  898.       this.field_2 = var3;
  899.       if (!this.done_draw) {
  900.          return true;
  901.       } else if (this.hold_move == this.field_2) {
  902.          return true;
  903.       } else {
  904.          if (this.paused) {
  905.             this.break_pause = true;
  906.          }
  907.  
  908.          if (!this.dragged && Math.abs(this.hold_move - this.field_2) > 1) {
  909.             this.hLine = -1;
  910.             this.chl(0);
  911.             this.dragged = true;
  912.             this.showStatusText();
  913.          }
  914.  
  915.          this.scroll_y += this.field_2 - this.hold_move;
  916.          if (this.scroll_y > this.field_1.height || this.scroll_y < -this.i_h) {
  917.             if (this.scroll_y > this.field_1.height) {
  918.                this.scroll_y = this.field_1.height;
  919.             }
  920.  
  921.             if (this.scroll_y < -this.i_h) {
  922.                this.scroll_y = -this.i_h;
  923.             }
  924.          }
  925.  
  926.          this.ScrollIt(false);
  927.          int var4 = Math.abs(this.field_2 - this.hold_move);
  928.          this.erase = ((Component)this).createImage(this.field_1.width, var4);
  929.          this.g_erase = this.erase.getGraphics();
  930.          this.g_erase.setColor(this.m_bgcolor);
  931.          this.g_erase.fillRect(0, 0, this.field_1.width, var4);
  932.          if (this.scroll_y > 0) {
  933.             ((Component)this).getGraphics().drawImage(this.erase, 0, this.scroll_y - var4, this);
  934.          }
  935.  
  936.          if (this.scroll_y + this.i_h < this.field_1.height) {
  937.             ((Component)this).getGraphics().drawImage(this.erase, 0, this.scroll_y + this.i_h, this);
  938.          }
  939.  
  940.          this.hold_move = this.field_2;
  941.          return true;
  942.       }
  943.    }
  944.  
  945.    // $FF: renamed from: HL (int, boolean) void
  946.    public void method_0(int var1, boolean var2) {
  947.       int var3 = this.re_draw[var1];
  948.       int var4 = 0;
  949.       int var5 = 0;
  950.       this.in_hl = var2;
  951.       Object var6 = null;
  952.       Object var7 = null;
  953.       Color var18;
  954.       if (var2) {
  955.          var18 = this.m_def_hlcolor;
  956.       } else {
  957.          var18 = this.m_textcolor[var1];
  958.       }
  959.  
  960.       this.g_off.setColor(var18);
  961.       this.g_off.setFont(this.m_font[var1]);
  962.       this.field_0 = this.g_off.getFontMetrics(this.m_font[var1]);
  963.       int var8 = 0;
  964.       int var9 = 0;
  965.       var4 = var3;
  966.       boolean var10 = false;
  967.       String[] var17;
  968.       if (this.m_icon_id[var1] != -1) {
  969.          if (this.icon[this.m_icon_id[var1]] != null) {
  970.             var10 = true;
  971.             var8 = this.icon[this.m_icon_id[var1]].getWidth(this);
  972.             var9 = this.icon[this.m_icon_id[var1]].getHeight(this);
  973.          }
  974.  
  975.          var17 = ocwordw.WrapText(this.m_desc[var1], this.field_1.width - this.m_xoffset * 2 - var8, this.field_0);
  976.       } else {
  977.          var17 = ocwordw.WrapText(this.m_desc[var1], this.field_1.width - this.m_xoffset * 2, this.field_0);
  978.       }
  979.  
  980.       int var11 = 0;
  981.       boolean var12 = false;
  982.  
  983.       for(int var13 = 0; var13 < var17.length; ++var13) {
  984.          var3 += this.field_0.getHeight();
  985.          if (this.m_halign[var1] == 1) {
  986.             if (var13 == 0 && this.m_icon_id[var1] != -1) {
  987.                var5 = (this.field_1.width - (this.field_0.stringWidth(var17[var13]) + var8 + 1)) / 2;
  988.                if (var10) {
  989.                   int var14 = 0;
  990.                   if (var3 + this.m_icon_base_off - var9 < var4) {
  991.                      var14 = var4 + this.m_icon_base_off;
  992.                   } else {
  993.                      var14 = var3 + this.m_icon_base_off - var9;
  994.                   }
  995.  
  996.                   if (var2) {
  997.                      this.g_off.drawImage(this.sicon[this.m_icon_id[var1]], var5, var14, this);
  998.                   } else {
  999.                      this.g_off.drawImage(this.icon[this.m_icon_id[var1]], var5, var14, this);
  1000.                   }
  1001.                }
  1002.  
  1003.                this.g_off.drawString(var17[var13], var5 + var8 + 1, var3);
  1004.             } else {
  1005.                this.g_off.drawString(var17[var13], (this.field_1.width - this.field_0.stringWidth(var17[var13])) / 2, var3);
  1006.             }
  1007.  
  1008.             if (this.m_cur_underline[var1]) {
  1009.                var11 = (this.field_1.width - this.field_0.stringWidth(var17[var13])) / 2;
  1010.                if (var13 == 0) {
  1011.                   var11 = (this.field_1.width - (this.field_0.stringWidth(var17[var13]) + var8 + 1)) / 2 + var8 + 1;
  1012.                }
  1013.  
  1014.                this.g_off.drawLine(var11 + 1, var3 + 1, var11 + this.field_0.stringWidth(var17[var13]) - 1, var3 + 1);
  1015.             }
  1016.          } else if (this.m_halign[var1] == 2) {
  1017.             if ((var13 == 0 || this.m_indent_all) && this.m_icon_id[var1] != -1) {
  1018.                var5 = var8 + 1;
  1019.                if (var13 == 0 && var10) {
  1020.                   int var23 = 0;
  1021.                   if (var3 + this.m_icon_base_off - var9 < var4) {
  1022.                      var23 = var4 + this.m_icon_base_off;
  1023.                   } else {
  1024.                      var23 = var3 + this.m_icon_base_off - var9;
  1025.                   }
  1026.  
  1027.                   if (var2) {
  1028.                      this.g_off.drawImage(this.sicon[this.m_icon_id[var1]], this.field_1.width - var8 - this.m_xoffset, var23, this);
  1029.                   } else {
  1030.                      this.g_off.drawImage(this.icon[this.m_icon_id[var1]], this.field_1.width - var8 - this.m_xoffset, var23, this);
  1031.                   }
  1032.                }
  1033.             }
  1034.  
  1035.             this.g_off.drawString(var17[var13], this.field_1.width - this.m_xoffset - this.field_0.stringWidth(var17[var13]) - var5, var3);
  1036.             if (this.m_cur_underline[var1]) {
  1037.                var11 = this.field_1.width - this.m_xoffset - this.field_0.stringWidth(var17[var13]) - var5;
  1038.                this.g_off.drawLine(var11 + 1, var3 + 1, var11 + this.field_0.stringWidth(var17[var13]) - 1, var3 + 1);
  1039.             }
  1040.          } else {
  1041.             if ((var13 == 0 || this.m_indent_all) && this.m_icon_id[var1] != -1) {
  1042.                if (var13 == 0 && var10) {
  1043.                   int var25 = 0;
  1044.                   if (var3 + this.m_icon_base_off - var9 < var4) {
  1045.                      var25 = var4 + this.m_icon_base_off;
  1046.                   } else {
  1047.                      var25 = var3 + this.m_icon_base_off - var9;
  1048.                   }
  1049.  
  1050.                   if (var2) {
  1051.                      this.g_off.drawImage(this.sicon[this.m_icon_id[var1]], this.m_xoffset, var25, this);
  1052.                   } else {
  1053.                      this.g_off.drawImage(this.icon[this.m_icon_id[var1]], this.m_xoffset, var25, this);
  1054.                   }
  1055.                }
  1056.  
  1057.                var5 = var8 + 1;
  1058.             }
  1059.  
  1060.             this.g_off.drawString(var17[var13], this.m_xoffset + var5, var3);
  1061.             if (this.m_cur_underline[var1]) {
  1062.                var11 = this.m_xoffset + var5;
  1063.                this.g_off.drawLine(var11 + 1, var3 + 1, var11 + this.field_0.stringWidth(var17[var13]) - 1, var3 + 1);
  1064.             }
  1065.          }
  1066.  
  1067.          var5 = 0;
  1068.       }
  1069.  
  1070.       this.paintIt();
  1071.    }
  1072.  
  1073.    public void showStatusText() {
  1074.       if (this.fetching_file) {
  1075.          ((OCAviewerExtend)this).showStatus(this.connect_message);
  1076.       } else if (this.mouseIn) {
  1077.          ((OCAviewerExtend)this).showStatus(this.m_sb_text);
  1078.       } else {
  1079.          ((OCAviewerExtend)this).showStatus(this.m_offsbtext);
  1080.       }
  1081.    }
  1082.  
  1083.    public synchronized void drawIt() {
  1084.       ((Component)this).getGraphics().drawImage(this.off, 0, this.scroll_y, this);
  1085.    }
  1086. }
  1087.