home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / INTERNET / NETSCAP4.06 / CP32E406.EXE / nav40.z / java40.jar / netscape / security / ImgPanel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-13  |  18.3 KB  |  1,045 lines

  1. package netscape.security;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.FontMetrics;
  10. import java.awt.Frame;
  11. import java.awt.Graphics;
  12. import java.awt.Image;
  13. import java.awt.Label;
  14. import java.awt.LayoutManager;
  15. import java.awt.Panel;
  16. import java.awt.Point;
  17. import java.awt.Rectangle;
  18. import java.awt.Scrollbar;
  19. import java.awt.Toolkit;
  20. import java.net.MalformedURLException;
  21. import java.net.URL;
  22. import java.util.Enumeration;
  23. import java.util.Hashtable;
  24. import java.util.StringTokenizer;
  25. import java.util.Vector;
  26.  
  27. class ImgPanel extends Panel {
  28.    Hashtable txtHash_g = new Hashtable();
  29.    Hashtable imgHash_g = new Hashtable();
  30.    Hashtable sbarHash_g = new Hashtable();
  31.    Image offImg_g;
  32.    Graphics offG_g;
  33.    boolean dblBuff_g = false;
  34.    int fnSzDecr_g = 1;
  35.    URLTipWindow urltw_g;
  36.    boolean urltwNowShowing_g = false;
  37.    Applet applet_g = GlobalCtxt.getApplet();
  38.    Frame parentFrame_g;
  39.    TxtRes prevTxtRes_g;
  40.    Graphics gdup_g;
  41.    boolean isDirty_g = true;
  42.    XYLayout hXYL = new XYLayout((Rectangle)null);
  43.    boolean rszEvent_g = false;
  44.    static final String FONT_SIZE_STR = "FONT SIZE=";
  45.    static final String END_FONT_STR = "</FONT>";
  46.    static final String LINE_BRK_STR = "<BR>";
  47.    static final String BW_STR = "<BW>";
  48.    boolean querySBarsNotDone = true;
  49.    Font prevFn;
  50.  
  51.    ImgPanel() {
  52.       super.setLayout(this.hXYL);
  53.       ((Container)this).invalidate();
  54.    }
  55.  
  56.    public void setLayout(LayoutManager var1) {
  57.    }
  58.  
  59.    void setImage(Label var1, URL var2, int var3, int var4, int var5, int var6, int var7, int var8) {
  60.       ImgWrap var9 = null;
  61.       if (var2 != null) {
  62.          var9 = ImgWrap.getImageWrap(var2);
  63.       }
  64.  
  65.       this.imgHash_g.put(var1, new ImgRes(var9, var3, var4, var5, var6, var7, var8));
  66.    }
  67.  
  68.    void setImage(Label var1, String var2, int var3, int var4, int var5, int var6, int var7, int var8) {
  69.       ImgWrap var9 = null;
  70.       if (var2 != null) {
  71.          var9 = ImgWrap.getImageWrap(var2);
  72.       }
  73.  
  74.       this.imgHash_g.put(var1, new ImgRes(var9, var3, var4, var5, var6, var7, var8));
  75.    }
  76.  
  77.    void setText(Label var1, String var2, int var3, int var4, int var5, int var6, Font var7, Color var8) {
  78.       int var9 = 0;
  79.       int var10 = 0;
  80.       String var11 = null;
  81.       if ((var9 = var2.indexOf("<href>")) > 0) {
  82.          var10 = var2.indexOf("</href>");
  83.          var11 = var2.substring(var9 + 6, var10);
  84.          var2 = var2.substring(0, var9 - 1);
  85.          if (this.urltw_g == null) {
  86.             this.urltw_g = new URLTipWindow(this.parentFrame_g = this.getParentFrame());
  87.          }
  88.       }
  89.  
  90.       this.txtHash_g.put(var1, new TxtRes(var2, var3, var4, var5, var6, var7, var8, var11));
  91.    }
  92.  
  93.    void queryLabels() {
  94.       Component[] var1 = ((Container)this).getComponents();
  95.  
  96.       for(int var2 = 0; var2 < ((Container)this).countComponents(); ++var2) {
  97.          Component var3 = var1[var2];
  98.          if (var3 instanceof Label) {
  99.             Label var4 = (Label)var3;
  100.             if (((Component)var4).isEnabled()) {
  101.                String var5 = var4.getText().trim();
  102.                int var6 = -1;
  103.                if ((var6 = var5.indexOf("<img>")) > -1) {
  104.                   if (this.imgHash_g.containsKey(var4)) {
  105.                      ImgRes var7 = (ImgRes)this.imgHash_g.get(var4);
  106.                      if (var7.reshape) {
  107.                         Rectangle var8 = ((Component)var4).bounds();
  108.                         var7.x = var8.x;
  109.                         var7.y = var8.y;
  110.                         var7.wd = var8.width;
  111.                         var7.ht = var8.height;
  112.                      }
  113.  
  114.                      if (!var7.isDirty) {
  115.                         continue;
  116.                      }
  117.                   }
  118.  
  119.                   var5 = var5.substring(var6 + 6).trim();
  120.                   int var17 = 0;
  121.                   int var19 = 0;
  122.                   if ((var6 = var5.indexOf("<tile>")) > -1) {
  123.                      var17 = -1;
  124.                      var19 = -1;
  125.                      var5 = var5.substring(var6 + 7).trim();
  126.                   } else {
  127.                      if ((var6 = var5.indexOf("<trows=")) > -1) {
  128.                         int var9;
  129.                         var17 = new Integer(var5.substring(var6 + 7, var9 = var5.indexOf(">", var6)));
  130.                         var5 = var5.substring(var9 + 1).trim();
  131.                      }
  132.  
  133.                      if ((var6 = var5.indexOf("<tcols=")) > -1) {
  134.                         int var21;
  135.                         var19 = new Integer(var5.substring(var6 + 7, var21 = var5.indexOf(">", var6)));
  136.                         var5 = var5.substring(var21 + 1).trim();
  137.                      }
  138.                   }
  139.  
  140.                   String var22 = var5.trim();
  141.                   boolean var10 = false;
  142.  
  143.                   try {
  144.                      if (this.applet_g.getCodeBase() != null) {
  145.                         var10 = true;
  146.                         var22 = this.applet_g.getCodeBase().toString() + var22;
  147.                      }
  148.  
  149.                      if (var10) {
  150.                         this.setImage(var4, new URL(var22), ((Component)var4).location().x, ((Component)var4).location().y, ((Component)var4).size().width, ((Component)var4).size().height, var17, var19);
  151.                      } else {
  152.                         this.setImage(var4, var22, ((Component)var4).location().x, ((Component)var4).location().y, ((Component)var4).size().width, ((Component)var4).size().height, var17, var19);
  153.                      }
  154.                   } catch (MalformedURLException var11) {
  155.                   }
  156.                } else {
  157.                   Rectangle var18 = ((Component)var4).bounds();
  158.                   if (this.txtHash_g.containsKey(var4)) {
  159.                      TxtRes var20 = (TxtRes)this.txtHash_g.get(var4);
  160.                      if (var20.isDirty) {
  161.                         var20.str = var5;
  162.                         var20.x = var18.x;
  163.                         var20.y = var18.y;
  164.                         var20.wd = var18.width;
  165.                         var20.ht = var18.height;
  166.                         var20.fn = ((Component)var4).getFont();
  167.                         var20.clr = ((Component)var4).getForeground();
  168.                      }
  169.                   } else {
  170.                      this.setText(var4, var5, var18.x, var18.y, var18.width, var18.height, ((Component)var4).getFont(), ((Component)var4).getForeground());
  171.                   }
  172.                }
  173.             }
  174.          }
  175.       }
  176.  
  177.    }
  178.  
  179.    void queryScrollBars() {
  180.       Component[] var1 = ((Container)this).getComponents();
  181.  
  182.       for(int var2 = 0; var2 < ((Container)this).countComponents(); ++var2) {
  183.          Component var3 = var1[var2];
  184.          if (var3 instanceof Scrollbar) {
  185.             Scrollbar var4 = (Scrollbar)var3;
  186.             if (((Component)var4).isEnabled()) {
  187.                Rectangle var5 = ((Component)var4).bounds();
  188.                int var6 = var4.getOrientation();
  189.                Enumeration var7 = this.txtHash_g.keys();
  190.  
  191.                while(var7.hasMoreElements()) {
  192.                   Label var8 = (Label)var7.nextElement();
  193.                   if (((Component)var8).isEnabled()) {
  194.                      TxtRes var9 = (TxtRes)this.txtHash_g.get(var8);
  195.                      if (var6 == 1 && var9.y == var5.y && var9.ht == var5.height && var9.x + var9.wd + 10 > var5.x) {
  196.                         this.sbarHash_g.put(var4, var9);
  197.                         var9.vsbar = var4;
  198.                         break;
  199.                      }
  200.  
  201.                      if (var6 == 0 && var9.x == var5.x && var9.wd == var5.width && var9.y + var9.ht + 10 > var5.height) {
  202.                         this.sbarHash_g.put(var4, var9);
  203.                         var9.hsbar = var4;
  204.                         break;
  205.                      }
  206.                   }
  207.                }
  208.             }
  209.          }
  210.       }
  211.  
  212.    }
  213.  
  214.    Frame getParentFrame() {
  215.       Container var1;
  216.       for(var1 = ((Component)this).getParent(); !(var1 instanceof Frame); var1 = ((Component)var1).getParent()) {
  217.       }
  218.  
  219.       return (Frame)var1;
  220.    }
  221.  
  222.    void dr3DRect(Graphics var1, int var2, int var3, int var4, int var5, int var6, Color var7, Color var8) {
  223.       int var9 = 1;
  224.       int var13 = 1;
  225.       var1.setColor(Color.black);
  226.       var1.drawRect(var2, var3, var4, var5);
  227.       int var12 = var6 - 2;
  228.       var1.setColor(var7);
  229.  
  230.       while(var12-- > 0) {
  231.          var1.drawLine(var2 + var9, var3 + var9, var2 + var4 - var9, var3 + var9);
  232.          var1.drawLine(var2 + var9, var3 + var9, var2 + var9, var3 + var5 - var9);
  233.          ++var9;
  234.       }
  235.  
  236.       var12 = var6 - 1;
  237.       var1.setColor(var8);
  238.  
  239.       while(var12-- > 0) {
  240.          var1.drawLine(var2 + var13, var3 + var5 - var13, var2 + var4 - var13, var3 + var5 - var13);
  241.          var1.drawLine(var2 + var4 - var13, var3 + var13, var2 + var4 - var13, var3 + var5 - var13);
  242.          ++var13;
  243.       }
  244.  
  245.    }
  246.  
  247.    Vector parseStr(String var1, TxtRes var2) {
  248.       Vector var3 = new Vector(0);
  249.       Object var4 = null;
  250.       Font var5 = null;
  251.       int var7 = 0;
  252.       StringTokenizer var15;
  253.       if (this.applet_g instanceof PseudoApplet) {
  254.          var15 = ((PseudoApplet)this.applet_g).getStringTokenizer(var1);
  255.       } else {
  256.          var15 = new StringTokenizer(var1, "\t\n\r", true);
  257.       }
  258.  
  259.       Font var8 = var2.fn;
  260.       var3.addElement(new Font(var8.getName(), var8.getStyle(), var8.getSize()));
  261.  
  262.       while(var15.hasMoreTokens()) {
  263.          String var6 = var15.nextToken();
  264.          if (var6 != null) {
  265.             String var9 = var6.toUpperCase();
  266.             boolean var10 = true;
  267.             if (var9.indexOf("<BR>") > -1) {
  268.                var3.addElement(var6);
  269.             } else if (var9.indexOf("<BW>") > -1) {
  270.                byte var23 = 1;
  271.                var2.bw = var23;
  272.             } else {
  273.                var7 = 0;
  274.                switch (var6.charAt(var7++)) {
  275.                   case '<':
  276.                      switch (var6.charAt(var7++)) {
  277.                         case '/':
  278.                            var8 = var5;
  279.                            boolean var21 = true;
  280.                            String var24 = var6.toUpperCase();
  281.                            if (var24.indexOf("</FONT>") > -1) {
  282.                               var7 += 4;
  283.                            } else {
  284.                               ++var7;
  285.  
  286.                               while(var6.charAt(var7) >= '0' && var6.charAt(var7) <= '9') {
  287.                                  ++var7;
  288.                               }
  289.                            }
  290.                            break;
  291.                         case 'F':
  292.                         case 'f':
  293.                            int var11 = -1;
  294.                            int var12 = -1;
  295.                            int var13 = var8.getSize();
  296.                            String var14 = var6.toUpperCase();
  297.                            if (var14.indexOf("FONT SIZE=") > -1) {
  298.                               if ((var11 = var14.indexOf("+")) > -1) {
  299.                                  var13 += new Integer(var14.substring(var11 + 1, var14.indexOf(">")));
  300.                               } else if ((var11 = var14.indexOf("-")) > -1) {
  301.                                  var13 += new Integer(var14.substring(var11 + 1, var12 = var14.indexOf(">")));
  302.                               }
  303.                            }
  304.  
  305.                            var5 = new Font(var8.getName(), var8.getStyle(), var8.getSize());
  306.                            var8 = new Font(var8.getName(), 0, var13);
  307.                            var7 += var12 - var7;
  308.                            break;
  309.                         case 'b':
  310.                            var5 = new Font(var8.getName(), var8.getStyle(), var8.getSize());
  311.                            var8 = new Font(var8.getName(), 1, var8.getSize());
  312.                            break;
  313.                         case 'i':
  314.                            var5 = new Font(var8.getName(), var8.getStyle(), var8.getSize());
  315.                            var8 = new Font(var8.getName(), 2, var8.getSize());
  316.                            break;
  317.                         case 'p':
  318.                            var5 = new Font(var8.getName(), var8.getStyle(), var8.getSize());
  319.                            var8 = new Font(var8.getName(), 0, var8.getSize());
  320.                            break;
  321.                         default:
  322.                            int var22 = 0;
  323.                            int var25 = var8.getSize();
  324.                            --var7;
  325.  
  326.                            while(var6.charAt(var7) >= '0' && var6.charAt(var7) <= '9') {
  327.                               ++var22;
  328.                               ++var7;
  329.                            }
  330.  
  331.                            if (var22 > 0) {
  332.                               String var26 = var6.substring(var6.indexOf("<") + 1, var6.indexOf(">"));
  333.                               var25 = new Integer(new String(var26));
  334.                            }
  335.  
  336.                            var5 = new Font(var8.getName(), var8.getStyle(), var8.getSize());
  337.                            var8 = new Font(var6, var8.getStyle(), var25);
  338.                      }
  339.  
  340.                      if (var6.charAt(var7) == '>') {
  341.                         var3.addElement(var8);
  342.                      }
  343.                      break;
  344.                   default:
  345.                      var3.addElement(var6);
  346.                }
  347.             }
  348.          }
  349.       }
  350.  
  351.       return var3;
  352.    }
  353.  
  354.    Vector parseStrAndResizeFonts(Graphics var1, String var2, TxtRes var3) {
  355.       Font var5 = var3.fn;
  356.       Object var6 = null;
  357.       Vector var25;
  358.       if ((var25 = var3.tokens) == null) {
  359.          var25 = this.parseStr(var2, var3);
  360.       }
  361.  
  362.       if (!GlobalCtxt.rszFnSz_g) {
  363.          return var25;
  364.       } else {
  365.          boolean var13 = false;
  366.          byte var14 = 0;
  367.          int var15 = 0;
  368.          int var16 = 0;
  369.          boolean var17 = false;
  370.  
  371.          while(true) {
  372.             var1.setFont(var3.fn);
  373.             FontMetrics var4 = var1.getFontMetrics(var3.fn);
  374.             int var7 = 0;
  375.             int var8 = 0;
  376.             int var9 = var3.wd;
  377.             int var10 = var4.getMaxAscent() + var4.getLeading();
  378.             int var11 = var4.getMaxAscent();
  379.             int var12 = 0;
  380.             var15 = 0;
  381.             var16 = 0;
  382.             var17 = false;
  383.  
  384.             for(int var18 = 0; var18 < var25.size(); ++var18) {
  385.                Object var19 = var25.elementAt(var18);
  386.                if (var19 instanceof Font) {
  387.                   var1.setFont((Font)var19);
  388.                   var4 = var1.getFontMetrics((Font)var19);
  389.                } else {
  390.                   ++var16;
  391.                   boolean var20 = true;
  392.                   String var21 = ((String)var19).toUpperCase();
  393.                   if (var21.indexOf("<BR>") > -1) {
  394.                      var17 = true;
  395.                   } else {
  396.                      var7 += var4.stringWidth((String)var19);
  397.                   }
  398.  
  399.                   if (var17 || var7 > var9 && var16 != 1) {
  400.                      var8 += var10;
  401.                      ++var12;
  402.                      var15 = var7;
  403.                      if (!var17) {
  404.                         --var18;
  405.                      }
  406.  
  407.                      var16 = 0;
  408.                      var11 = 0;
  409.                      var10 = 0;
  410.                      var7 = 0;
  411.                      var17 = false;
  412.                   } else {
  413.                      if (var8 == 0) {
  414.                         var10 = Math.max(var10, var4.getMaxAscent() + var4.getDescent());
  415.                         var11 = Math.max(var11, var4.getMaxAscent());
  416.                      } else {
  417.                         var10 = Math.max(var10, var4.getHeight());
  418.                         var11 = Math.max(var11, var4.getAscent() + var4.getLeading());
  419.                      }
  420.  
  421.                      var15 = var7;
  422.                   }
  423.                }
  424.             }
  425.  
  426.             var8 += var10;
  427.             if (var8 <= var3.ht && var15 <= var9) {
  428.                if (var14 == -1) {
  429.                   var14 = 0;
  430.                   break;
  431.                }
  432.  
  433.                boolean var33 = true;
  434.  
  435.                for(int var35 = 0; var35 < var25.size(); ++var35) {
  436.                   Object var37 = var25.elementAt(var35);
  437.                   if (var37 instanceof Font) {
  438.                      var5 = (Font)var37;
  439.                      if (var5.getSize() + this.fnSzDecr_g < GlobalCtxt.maxFnSz_g) {
  440.                         Font var22 = new Font(var5.getName(), var5.getStyle(), var5.getSize() + this.fnSzDecr_g);
  441.                         var25.removeElementAt(var35);
  442.                         var25.insertElementAt(var22, var35);
  443.                         var33 = false;
  444.                      }
  445.                   }
  446.                }
  447.  
  448.                if (var33) {
  449.                   var14 = 0;
  450.                   break;
  451.                }
  452.  
  453.                var14 = 1;
  454.             } else {
  455.                for(int var32 = 0; var32 < var25.size(); ++var32) {
  456.                   Object var34 = var25.elementAt(var32);
  457.                   if (var34 instanceof Font) {
  458.                      var5 = (Font)var34;
  459.                      if (var5.getSize() - this.fnSzDecr_g <= GlobalCtxt.minFnSz_g) {
  460.                         return var25;
  461.                      }
  462.  
  463.                      Font var36 = new Font(var5.getName(), var5.getStyle(), var5.getSize() - this.fnSzDecr_g);
  464.                      var25.removeElementAt(var32);
  465.                      var25.insertElementAt(var36, var32);
  466.                   }
  467.                }
  468.  
  469.                var14 = -1;
  470.             }
  471.          }
  472.  
  473.          return var25;
  474.       }
  475.    }
  476.  
  477.    void paintLine(Graphics var1, TxtRes var2, Vector var3, int var4, int var5, int var6, int var7, int var8) {
  478.       int var9 = 0;
  479.       var1 = var1.create();
  480.       if (this.prevFn != null) {
  481.          var1.setFont(this.prevFn);
  482.       }
  483.  
  484.       FontMetrics var10 = var1.getFontMetrics();
  485.       var1.setColor(var2.clr);
  486.  
  487.       for(int var11 = var4; var11 < var5; ++var11) {
  488.          Object var12 = var3.elementAt(var11);
  489.          if (var12 instanceof Font) {
  490.             var1.setFont((Font)var12);
  491.             var10 = var1.getFontMetrics();
  492.             this.prevFn = (Font)var12;
  493.          } else {
  494.             int var13 = var2.bw;
  495.             var1.clipRect(var2.x + var13, var2.y + var13, var2.wd - 2 * var13, var2.ht - 2 * var13);
  496.             var1.drawString((String)var12, var2.x + var9 + var13 + var2.xorg, var2.y + var6 + var8 + var13 + var2.yorg);
  497.             int var14 = var10.stringWidth((String)var12);
  498.             var9 += var14;
  499.             var2.isDirty = false;
  500.          }
  501.       }
  502.  
  503.    }
  504.  
  505.    void setTxtDirty(Label var1, boolean var2) {
  506.       TxtRes var3 = (TxtRes)this.txtHash_g.get(var1);
  507.       if (var3 != null) {
  508.          var3.isDirty = true;
  509.          if (var2) {
  510.             var3.tokens = null;
  511.          }
  512.  
  513.          this.isDirty_g = true;
  514.          var3.vsbshown = false;
  515.          if (var3.vsbar != null) {
  516.             var3.xorg = 0;
  517.             var3.yorg = 0;
  518.             var3.vsbar.setValue(0);
  519.             var3.vsbval = 0;
  520.          }
  521.  
  522.          if (var3.hsbar != null) {
  523.             var3.xorg = 0;
  524.             var3.yorg = 0;
  525.             var3.hsbar.setValue(0);
  526.             var3.hsbval = 0;
  527.          }
  528.       }
  529.  
  530.    }
  531.  
  532.    void setAllTxtsDirty(boolean var1) {
  533.       Enumeration var2 = this.txtHash_g.keys();
  534.  
  535.       while(var2.hasMoreElements()) {
  536.          Label var3 = (Label)var2.nextElement();
  537.          this.setTxtDirty(var3, var1);
  538.       }
  539.  
  540.    }
  541.  
  542.    void paintText(Graphics var1, TxtRes var2) {
  543.       Vector var3 = var2.tokens;
  544.       var1.setFont(var2.fn);
  545.       FontMetrics var4 = var1.getFontMetrics(var2.fn);
  546.       int var5 = 0;
  547.       int var6 = 0;
  548.       int var7 = 0;
  549.       int var8 = var2.wd;
  550.       int var9 = var4.getMaxAscent() + var4.getLeading();
  551.       int var10 = 0;
  552.       int var11 = var4.getMaxAscent();
  553.       int var12 = 0;
  554.       int var13 = 0;
  555.       boolean var14 = false;
  556.       if (var2.bw > 0) {
  557.          var1.setColor(Color.black);
  558.          var1.drawRect(var2.x, var2.y, var2.wd, var2.ht);
  559.       }
  560.  
  561.       for(int var15 = 0; var15 < var3.size(); ++var15) {
  562.          Object var16 = var3.elementAt(var15);
  563.          if (var16 instanceof Font) {
  564.             var1.setFont((Font)var16);
  565.             var4 = var1.getFontMetrics((Font)var16);
  566.          } else {
  567.             ++var13;
  568.             boolean var17 = true;
  569.             String var18 = ((String)var16).toUpperCase();
  570.             if (var18.indexOf("<BR>") > -1) {
  571.                var14 = true;
  572.             } else {
  573.                var6 += var4.stringWidth((String)var16);
  574.             }
  575.  
  576.             if (var14 || var6 > var8 && var13 != 1) {
  577.                this.paintLine(var1, var2, var3, var5, var15, var7, var9, var11);
  578.                if (!var14) {
  579.                   var5 = var15--;
  580.                } else {
  581.                   var5 = var15 + 1;
  582.                }
  583.  
  584.                var7 += var9;
  585.                ++var12;
  586.                var10 = var9;
  587.                var13 = 0;
  588.                var11 = 0;
  589.                var9 = 0;
  590.                var6 = 0;
  591.                var14 = false;
  592.             } else if (var7 == 0) {
  593.                var9 = Math.max(var9, var4.getMaxAscent() + var4.getDescent());
  594.                var11 = Math.max(var11, var4.getMaxAscent());
  595.             } else {
  596.                var9 = Math.max(var9, var4.getHeight());
  597.                var11 = Math.max(var11, var4.getAscent() + var4.getLeading());
  598.             }
  599.          }
  600.       }
  601.  
  602.       this.paintLine(var1, var2, var3, var5, var3.size(), var7, var9, var11);
  603.       var7 += var10;
  604.       if (var2.vsbval == 0 && var2.vsbar != null && !var2.vsbshown) {
  605.          if (var7 > var2.ht) {
  606.             var2.vsbar.setValues(0, var2.ht, 0, var7 / var2.ht * var2.ht);
  607.             var2.vsbar.setLineIncrement(var10);
  608.             var2.vsbar.setPageIncrement(var2.ht);
  609.             var2.vsbshown = true;
  610.             return;
  611.          }
  612.  
  613.          var2.vsbshown = true;
  614.       }
  615.  
  616.    }
  617.  
  618.    void paintAllTexts(Graphics var1) {
  619.       Enumeration var2 = this.txtHash_g.keys();
  620.  
  621.       while(var2.hasMoreElements()) {
  622.          Label var3 = (Label)var2.nextElement();
  623.          if (((Component)var3).isEnabled()) {
  624.             TxtRes var4 = (TxtRes)this.txtHash_g.get(var3);
  625.             Object var5 = null;
  626.             if (var4.isDirty) {
  627.                Vector var6 = this.parseStrAndResizeFonts(var1, var4.str, var4);
  628.                var4.tokens = var6;
  629.             }
  630.  
  631.             this.paintText(var1, var4);
  632.          }
  633.       }
  634.  
  635.       Toolkit.getDefaultToolkit().sync();
  636.    }
  637.  
  638.    void setImgDirty(Label var1, boolean var2) {
  639.       ImgRes var3 = (ImgRes)this.imgHash_g.get(var1);
  640.       if (var3 != null) {
  641.          if (var2) {
  642.             var3.isDirty = true;
  643.          } else {
  644.             var3.reshape = true;
  645.          }
  646.  
  647.          this.isDirty_g = true;
  648.       }
  649.  
  650.    }
  651.  
  652.    void setAllImgsDirty(boolean var1) {
  653.       Enumeration var2 = this.imgHash_g.keys();
  654.  
  655.       while(var2.hasMoreElements()) {
  656.          Label var3 = (Label)var2.nextElement();
  657.          this.setImgDirty(var3, var1);
  658.       }
  659.  
  660.    }
  661.  
  662.    boolean paintImage(Graphics var1) {
  663.       boolean var2 = true;
  664.       var1 = var1.create();
  665.       Enumeration var4 = this.imgHash_g.keys();
  666.  
  667.       while(var4.hasMoreElements()) {
  668.          Label var5 = (Label)var4.nextElement();
  669.          ImgRes var6 = (ImgRes)this.imgHash_g.get(var5);
  670.          ImgWrap var7 = var6.imgWrap;
  671.          Image var8 = var7.getImage();
  672.          if (var8 != null && var6.tileRows == -1 && var6.tileCols == -1) {
  673.             ((Component)this).prepareImage(var8, var7);
  674.             var7.callWait(0);
  675.             int var9 = var8.getWidth(var7);
  676.             int var10 = var8.getHeight(var7);
  677.             int var11 = ((Component)this).size().height / var10 + 1;
  678.             int var12 = ((Component)this).size().width / var9 + 1;
  679.             Graphics var3 = var1.create();
  680.  
  681.             for(int var13 = 0; var13 < var11 + 1; ++var13) {
  682.                for(int var14 = 0; var14 < var12 + 1; ++var14) {
  683.                   if (var2 = var3.drawImage(var8, var14 * var9, var13 * var10, var7)) {
  684.                      var6.isDirty = false;
  685.                   }
  686.                }
  687.             }
  688.  
  689.             var6.paintedInPrevStep = true;
  690.          }
  691.       }
  692.  
  693.       Enumeration var19 = this.imgHash_g.keys();
  694.  
  695.       while(var19.hasMoreElements()) {
  696.          Label var20 = (Label)var19.nextElement();
  697.          ImgRes var22 = (ImgRes)this.imgHash_g.get(var20);
  698.          ImgWrap var25 = var22.imgWrap;
  699.          Image var28 = var25.getImage();
  700.          if (var28 != null && !var22.paintedInPrevStep && (var22.tileRows > 0 || var22.tileCols > 0)) {
  701.             ((Component)this).prepareImage(var28, var25);
  702.             var25.callWait(0);
  703.             int var31 = var28.getWidth(var25);
  704.             int var33 = var28.getHeight(var25);
  705.             int var34 = var22.ht / var33 + 1;
  706.             int var35 = var22.wd / var31 + 1;
  707.             if (var22.tileRows > 0) {
  708.                var34 = var22.tileRows;
  709.             }
  710.  
  711.             if (var22.tileCols > 0) {
  712.                var35 = var22.tileCols;
  713.             }
  714.  
  715.             Graphics var17 = var1.create();
  716.             var17.translate(var22.x, var22.y);
  717.             var17.clipRect(0, 0, var22.wd, var22.ht);
  718.  
  719.             for(int var36 = 0; var36 < var34 + 1; ++var36) {
  720.                for(int var15 = 0; var15 < var35 + 1; ++var15) {
  721.                   if (var2 = var17.drawImage(var28, var15 * var31, var36 * var33, var25)) {
  722.                      var22.isDirty = false;
  723.                   }
  724.                }
  725.             }
  726.  
  727.             var22.paintedInPrevStep = true;
  728.          }
  729.       }
  730.  
  731.       Enumeration var21 = this.imgHash_g.keys();
  732.  
  733.       while(var21.hasMoreElements()) {
  734.          Label var23 = (Label)var21.nextElement();
  735.          ImgRes var26 = (ImgRes)this.imgHash_g.get(var23);
  736.          ImgWrap var29 = var26.imgWrap;
  737.          Image var32 = var29.getImage();
  738.          if (var32 != null && !var26.paintedInPrevStep) {
  739.             Graphics var18 = var1.create();
  740.             var18.clipRect(var26.x, var26.y, var26.wd, var26.ht);
  741.             ((Component)this).prepareImage(var32, var29);
  742.             var29.callWait(0);
  743.             if (var2 = var18.drawImage(var32, var26.x, var26.y, var29)) {
  744.                var26.isDirty = false;
  745.                var26.paintedInPrevStep = true;
  746.             }
  747.          }
  748.       }
  749.  
  750.       ImgRes var30;
  751.       for(Enumeration var24 = this.imgHash_g.keys(); var24.hasMoreElements(); var30.paintedInPrevStep = false) {
  752.          Label var27 = (Label)var24.nextElement();
  753.          var30 = (ImgRes)this.imgHash_g.get(var27);
  754.       }
  755.  
  756.       Toolkit.getDefaultToolkit().sync();
  757.       return var2;
  758.    }
  759.  
  760.    public synchronized void paint(Graphics var1) {
  761.       if (this.gdup_g == null) {
  762.          this.gdup_g = var1.create();
  763.       }
  764.  
  765.       if (!this.isDirty_g) {
  766.          var1.drawImage(this.offImg_g, 0, 0, this);
  767.          Toolkit.getDefaultToolkit().sync();
  768.       } else {
  769.          this.queryLabels();
  770.          if (this.querySBarsNotDone) {
  771.             this.queryScrollBars();
  772.             this.querySBarsNotDone = false;
  773.          }
  774.  
  775.          Graphics var2 = var1;
  776.          int var3 = ((Component)this).size().width;
  777.          int var4 = ((Component)this).size().height;
  778.          byte var5 = 3;
  779.          Color var6 = ((Component)this).getBackground();
  780.          ((Component)this).getForeground();
  781.          Rectangle var7 = new Rectangle(var5, var5, var3 - 2 * var5, var4 - 2 * var5);
  782.          if (this.dblBuff_g && this.offImg_g == null) {
  783.             this.offImg_g = ((Component)this).createImage(var3, var4);
  784.             this.offG_g = this.offImg_g.getGraphics();
  785.             this.offG_g.setColor(var6);
  786.             this.offG_g.fillRect(0, 0, var3, var4);
  787.             this.dr3DRect(this.offG_g, 0, 0, var3, var4, var5, Color.white, Color.black);
  788.             this.offG_g.clipRect(var7.x, var7.y, var7.width, var7.height);
  789.          }
  790.  
  791.          if (this.dblBuff_g) {
  792.             var1 = this.offG_g;
  793.          } else {
  794.             this.dr3DRect(var1, 0, 0, var3, var4, var5, Color.white, Color.black);
  795.             var1.clipRect(var7.x, var7.y, var7.width, var7.height);
  796.          }
  797.  
  798.          var1.setColor(var6);
  799.          var1.fillRect(0, 0, var7.width, var7.height);
  800.          boolean var8 = false;
  801.          if (this.imgHash_g != null && this.isDirty_g) {
  802.             var8 = this.paintImage(var1);
  803.          }
  804.  
  805.          if (this.txtHash_g != null && this.isDirty_g) {
  806.             this.paintAllTexts(var1);
  807.          }
  808.  
  809.          if (this.dblBuff_g) {
  810.             var2.drawImage(this.offImg_g, 0, 0, this);
  811.             Toolkit.getDefaultToolkit().sync();
  812.             if (!var8) {
  813.                this.isDirty_g = true;
  814.             } else {
  815.                this.isDirty_g = false;
  816.             }
  817.          }
  818.  
  819.          if (this.rszEvent_g) {
  820.             this.rszEvent_g = false;
  821.          }
  822.  
  823.       }
  824.    }
  825.  
  826.    TxtRes eventInsideHotLink(Event var1) {
  827.       Enumeration var2 = this.txtHash_g.keys();
  828.  
  829.       while(var2.hasMoreElements()) {
  830.          Label var3 = (Label)var2.nextElement();
  831.          TxtRes var4 = (TxtRes)this.txtHash_g.get(var3);
  832.          Rectangle var5 = new Rectangle(var4.x, var4.y, var4.wd, var4.ht);
  833.          if (var4.urlStr != null && var5.inside(var1.x, var1.y)) {
  834.             return var4;
  835.          }
  836.       }
  837.  
  838.       return null;
  839.    }
  840.  
  841.    Point getFrameCoord(int var1, int var2) {
  842.       Point var3 = new Point(var1, var2);
  843.       Object var4 = this;
  844.  
  845.       do {
  846.          var3.x += ((Component)var4).location().x;
  847.          var3.y += ((Component)var4).location().y;
  848.          var4 = ((Component)var4).getParent();
  849.       } while(var4 != this.parentFrame_g);
  850.  
  851.       return var3;
  852.    }
  853.  
  854.    void showUrlTipWindow(TxtRes var1) {
  855.       if (!this.urltw_g.isVisible()) {
  856.          String var2 = var1.urlStr;
  857.          Point var3 = this.getFrameCoord(var1.x, var1.y + var1.ht);
  858.          this.urltw_g.reshape(var3.x, var3.y, 10, 10);
  859.          if (this.applet_g.getCodeBase() != null) {
  860.             var2 = this.applet_g.getCodeBase().toString() + var1.urlStr;
  861.          }
  862.  
  863.          this.urltw_g.setUrlStr(var2);
  864.          this.urltwNowShowing_g = true;
  865.       }
  866.  
  867.    }
  868.  
  869.    public synchronized boolean handleEvent(Event var1) {
  870.       if (var1.target != this && !(var1.target instanceof Scrollbar)) {
  871.          return false;
  872.       } else if (var1.id == -1) {
  873.          this.setAllTxtsDirty(false);
  874.          this.setAllImgsDirty(false);
  875.          return true;
  876.       } else {
  877.          if (var1.id != 506 && var1.id != 503) {
  878.             if (var1.id == 501) {
  879.                TxtRes var9;
  880.                if ((var9 = this.eventInsideHotLink(var1)) != null) {
  881.                   String var3 = var9.urlStr;
  882.                   if (this.urltwNowShowing_g) {
  883.                      this.gdup_g.setXORMode(Color.blue);
  884.                      this.gdup_g.setColor(Color.yellow);
  885.                      this.gdup_g.drawRect(this.prevTxtRes_g.x, this.prevTxtRes_g.y, this.prevTxtRes_g.wd, this.prevTxtRes_g.ht);
  886.                   }
  887.  
  888.                   this.urltw_g.hide();
  889.                   this.urltwNowShowing_g = false;
  890.  
  891.                   try {
  892.                      if (this.applet_g.getCodeBase() != null) {
  893.                         var3 = this.applet_g.getCodeBase().toString() + var9.urlStr;
  894.                      }
  895.  
  896.                      this.applet_g.getAppletContext().showDocument(new URL(var3), new String("_blank"));
  897.                   } catch (MalformedURLException var8) {
  898.                   }
  899.                }
  900.             } else if (var1.target instanceof Scrollbar && (var1.id == 603 || var1.id == 604 || var1.id == 601 || var1.id == 602 || var1.id == 605)) {
  901.                Scrollbar var11 = (Scrollbar)var1.target;
  902.                int var4 = 0;
  903.                int var5 = 0;
  904.                TxtRes var10 = (TxtRes)this.sbarHash_g.get(var11);
  905.                int var6 = var11.getOrientation();
  906.                if (var6 == 0) {
  907.                   var4 = var10.hsbval;
  908.                } else {
  909.                   var4 = var10.vsbval;
  910.                }
  911.  
  912.                if (var1.id == 603) {
  913.                   var4 -= var11.getPageIncrement();
  914.                   if (var4 == var11.getMinimum() - var11.getPageIncrement()) {
  915.                      var5 = 0;
  916.                      var4 = var11.getMinimum();
  917.                   } else if (var4 < var11.getMinimum()) {
  918.                      var5 = var4 + var11.getPageIncrement();
  919.                      var4 = var11.getMinimum();
  920.                   } else {
  921.                      var5 = var11.getPageIncrement();
  922.                   }
  923.                } else if (var1.id == 604) {
  924.                   var4 += var11.getPageIncrement();
  925.                   if (var4 == var11.getMaximum() + var11.getPageIncrement()) {
  926.                      var5 = 0;
  927.                      var4 = var11.getMaximum();
  928.                   } else if (var4 > var11.getMaximum()) {
  929.                      var5 = -(var11.getMaximum() - (var4 - var11.getPageIncrement()));
  930.                      var4 = var11.getMaximum();
  931.                   } else {
  932.                      var5 = -var11.getPageIncrement();
  933.                   }
  934.                } else if (var1.id == 601) {
  935.                   var4 -= var11.getLineIncrement();
  936.                   if (var4 == var11.getMinimum() - var11.getLineIncrement()) {
  937.                      var5 = 0;
  938.                      var4 = var11.getMinimum();
  939.                   } else if (var4 < var11.getMinimum()) {
  940.                      var5 = var4 + var11.getLineIncrement();
  941.                      var4 = var11.getMinimum();
  942.                   } else {
  943.                      var5 = var11.getLineIncrement();
  944.                   }
  945.                } else if (var1.id == 602) {
  946.                   var4 += var11.getLineIncrement();
  947.                   if (var4 == var11.getMaximum() + var11.getLineIncrement()) {
  948.                      var5 = 0;
  949.                      var4 = var11.getMaximum();
  950.                   } else if (var4 > var11.getMaximum()) {
  951.                      var5 = -(var11.getMaximum() - (var4 - var11.getLineIncrement()));
  952.                      var4 = var11.getMaximum();
  953.                   } else {
  954.                      var5 = -var11.getLineIncrement();
  955.                   }
  956.                } else if (var1.id == 605) {
  957.                   int var7 = var11.getValue();
  958.                   var5 = var4 - var7;
  959.                   var4 += var7 - var4;
  960.                }
  961.  
  962.                if (var5 != 0) {
  963.                   this.scrollRes(var11, var5, var10);
  964.                   if (var6 == 0) {
  965.                      var10.hsbval = var4;
  966.                   } else {
  967.                      var10.vsbval = var4;
  968.                   }
  969.                }
  970.             }
  971.          } else {
  972.             TxtRes var2;
  973.             if ((var2 = this.eventInsideHotLink(var1)) != null) {
  974.                if (!this.urltwNowShowing_g) {
  975.                   this.gdup_g.setXORMode(Color.blue);
  976.                   this.gdup_g.setColor(Color.yellow);
  977.                   this.gdup_g.drawRect(var2.x, var2.y, var2.wd, var2.ht);
  978.                }
  979.  
  980.                this.showUrlTipWindow(var2);
  981.                this.prevTxtRes_g = var2;
  982.             } else if (this.urltwNowShowing_g) {
  983.                this.gdup_g.setXORMode(Color.blue);
  984.                this.gdup_g.setColor(Color.yellow);
  985.                this.gdup_g.drawRect(this.prevTxtRes_g.x, this.prevTxtRes_g.y, this.prevTxtRes_g.wd, this.prevTxtRes_g.ht);
  986.                this.urltwNowShowing_g = false;
  987.             }
  988.          }
  989.  
  990.          return true;
  991.       }
  992.    }
  993.  
  994.    private void scrollRes(Scrollbar var1, int var2, Geometry var3) {
  995.       int var4 = var1.getOrientation();
  996.       ((Component)this).getForeground();
  997.       int var5 = var3.bw;
  998.       Rectangle var6 = new Rectangle(var3.x + var5, var3.y + var5, var3.wd - 2 * var5, var3.ht - 2 * var5);
  999.       int var7 = var3.xorg;
  1000.       int var8 = var3.yorg;
  1001.       int var9 = 0;
  1002.       int var10 = 0;
  1003.       if (var4 == 0) {
  1004.          var10 = var2;
  1005.       } else {
  1006.          var9 = var2;
  1007.       }
  1008.  
  1009.       Graphics var11 = ((Component)this).getGraphics();
  1010.       var11.clipRect(var6.x, var6.y, var6.width, var6.height);
  1011.       if (var9 != 0) {
  1012.          var11.copyArea(var6.x, var6.y, var6.width, var6.height, 0, var9);
  1013.          var8 += var9;
  1014.          if (var9 < 0) {
  1015.             var11.clipRect(var6.x, var6.y + var6.height - -var9, var6.width, -var9);
  1016.          } else if (var9 > 0) {
  1017.             var11.clipRect(var6.x, var6.y, var6.width, var9);
  1018.          }
  1019.       } else if (var10 != 0) {
  1020.          if (var7 + var10 > var6.x) {
  1021.             var10 = -var7 + var6.x;
  1022.          }
  1023.  
  1024.          if (var1.getValue() == 0) {
  1025.             var10 = -var7 + var6.x;
  1026.          }
  1027.  
  1028.          var11.copyArea(var6.x, var6.y, var6.width, var6.height, var10, 0);
  1029.          var7 += var10;
  1030.          if (var10 < 0) {
  1031.             var11.clipRect(var6.x + var6.width - -var10, var6.y, -var10, var6.height);
  1032.          } else if (var10 > 0) {
  1033.             var11.clipRect(var6.x, var6.y, var10, var6.height);
  1034.          }
  1035.       }
  1036.  
  1037.       var3.xorg = var7;
  1038.       var3.yorg = var8;
  1039.       Color var12 = ((Component)this).getBackground();
  1040.       var11.setColor(var12);
  1041.       var11.fillRect(var3.x, var3.y, var3.wd, var3.ht);
  1042.       this.paintText(var11, (TxtRes)var3);
  1043.    }
  1044. }
  1045.