home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / ScrollBar.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  19.2 KB  |  1,003 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.ClassInfo;
  4. import netscape.util.CodingException;
  5. import netscape.util.Decoder;
  6. import netscape.util.Encoder;
  7.  
  8. public class ScrollBar extends View implements Target {
  9.    Scrollable scrollableView;
  10.    Button increaseButton;
  11.    Button decreaseButton;
  12.    Image knobImage;
  13.    Image trayTopImage;
  14.    Image trayBottomImage;
  15.    Image trayLeftImage;
  16.    Image trayRightImage;
  17.    Timer timer;
  18.    int scrollValue;
  19.    int origScrollValue;
  20.    int knobLength;
  21.    int lastMouseValue;
  22.    int lastAltMouseValue;
  23.    int lineIncrement;
  24.    int axis;
  25.    boolean active;
  26.    boolean enabled;
  27.    boolean shouldRedraw;
  28.    float pageSizeAsPercent;
  29.    int pixelScrollValue;
  30.    ScrollBarOwner scrollBarOwner;
  31.    public static final int DEFAULT_LINE_INCREMENT = 12;
  32.    public static final float DEFAULT_PAGE_SIZE = 1.0F;
  33.    public static final int DEFAULT_WIDTH = 0;
  34.    public static final int DEFAULT_HEIGHT = 0;
  35.    public static final String UPDATE = "updateScrollValue";
  36.    public static final String SCROLL_PAGE_BACKWARD = "scrollPageBackward";
  37.    public static final String SCROLL_PAGE_FORWARD = "scrollPageForward";
  38.    public static final String SCROLL_LINE_BACKWARD = "scrollLineBackward";
  39.    public static final String SCROLL_LINE_FORWARD = "scrollLineForward";
  40.    private static final String TIMER_SCROLL_PAGE = "timerScroll";
  41.    static final String SCROLLVIEW_KEY = "scrollView";
  42.    static final String INCREASEBUTTON_KEY = "increaseButton";
  43.    static final String DECREASEBUTTON_KEY = "decreaseButton";
  44.    static final String KNOBIMAGE_KEY = "image";
  45.    static final String SCROLLVALUE_KEY = "scrollValue";
  46.    static final String AXIS_KEY = "axis";
  47.    static final String ACTIVE_KEY = "active";
  48.    static final String ENABLED_KEY = "enabled";
  49.    static final String LINE_INCREMENT_KEY = "lineIncrement";
  50.    static final String OWNER_KEY = "owner";
  51.  
  52.    public ScrollBar() {
  53.       this(0, 0, 0, 0);
  54.    }
  55.  
  56.    public ScrollBar(Rect var1) {
  57.       this(var1.x, var1.y, var1.width, var1.height);
  58.    }
  59.  
  60.    public ScrollBar(int var1, int var2, int var3, int var4) {
  61.       this(var1, var2, var3, var4, 1);
  62.    }
  63.  
  64.    public ScrollBar(int var1, int var2, int var3, int var4, int var5) {
  65.       super(var1, var2, var3, var4);
  66.       this.axis = var5;
  67.       this.lineIncrement = 12;
  68.       this.pageSizeAsPercent = 1.0F;
  69.       this.setEnabled(true);
  70.       Button var6 = new Button(0, 0, 16, 16);
  71.       var6.setType(3);
  72.       var6.setBordered(true);
  73.       var6.setRaisedBorder(BezelBorder.raisedScrollButtonBezel());
  74.       var6.setLoweredBorder(BezelBorder.loweredScrollButtonBezel());
  75.       if (this.axis == 0) {
  76.          var6.setImage(Bitmap.bitmapNamed("netscape/application/ScrollRightArrow.gif"));
  77.          var6.setAltImage(Bitmap.bitmapNamed("netscape/application/ScrollRightArrowActive.gif"));
  78.       } else {
  79.          var6.setImage(Bitmap.bitmapNamed("netscape/application/ScrollDownArrow.gif"));
  80.          var6.setAltImage(Bitmap.bitmapNamed("netscape/application/ScrollDownArrowActive.gif"));
  81.       }
  82.  
  83.       this.setIncreaseButton(var6);
  84.       var6 = new Button(0, 0, 16, 16);
  85.       var6.setType(3);
  86.       var6.setBordered(true);
  87.       var6.setRaisedBorder(BezelBorder.raisedScrollButtonBezel());
  88.       var6.setLoweredBorder(BezelBorder.loweredScrollButtonBezel());
  89.       if (this.axis == 0) {
  90.          var6.setImage(Bitmap.bitmapNamed("netscape/application/ScrollLeftArrow.gif"));
  91.          var6.setAltImage(Bitmap.bitmapNamed("netscape/application/ScrollLeftArrowActive.gif"));
  92.       } else {
  93.          var6.setImage(Bitmap.bitmapNamed("netscape/application/ScrollUpArrow.gif"));
  94.          var6.setAltImage(Bitmap.bitmapNamed("netscape/application/ScrollUpArrowActive.gif"));
  95.       }
  96.  
  97.       this.setDecreaseButton(var6);
  98.       if (this.axis == 0) {
  99.          ((View)this).setHorizResizeInstruction(2);
  100.          ((View)this).setVertResizeInstruction(8);
  101.       } else {
  102.          ((View)this).setHorizResizeInstruction(1);
  103.          ((View)this).setVertResizeInstruction(16);
  104.       }
  105.  
  106.       if (this.axis == 0) {
  107.          this.setKnobImage(Bitmap.bitmapNamed("netscape/application/ScrollKnobH.gif"));
  108.       } else {
  109.          this.setKnobImage(Bitmap.bitmapNamed("netscape/application/ScrollKnobV.gif"));
  110.       }
  111.  
  112.       this.trayTopImage = Bitmap.bitmapNamed("netscape/application/ScrollTrayTop.gif");
  113.       this.trayBottomImage = Bitmap.bitmapNamed("netscape/application/ScrollTrayBottom.gif");
  114.       this.trayLeftImage = Bitmap.bitmapNamed("netscape/application/ScrollTrayLeft.gif");
  115.       this.trayRightImage = Bitmap.bitmapNamed("netscape/application/ScrollTrayRight.gif");
  116.       if (this.axis == 0 && super.bounds.height == 0 || this.axis != 0 && super.bounds.width == 0) {
  117.          this._adjustToFit();
  118.       }
  119.  
  120.       this._computeScrollValue();
  121.       this._setupKeyboard();
  122.    }
  123.  
  124.    public boolean isTransparent() {
  125.       return false;
  126.    }
  127.  
  128.    public Rect interiorRect() {
  129.       return Rect.newRect(1, 1, ((View)this).width() - 2, ((View)this).height() - 2);
  130.    }
  131.  
  132.    public Size minSize() {
  133.       int var1;
  134.       int var2;
  135.       if (this.increaseButton != null) {
  136.          var1 = this.increaseButton.bounds.width;
  137.          var2 = this.increaseButton.bounds.height;
  138.       } else {
  139.          var2 = 0;
  140.          var1 = 0;
  141.       }
  142.  
  143.       if (this.decreaseButton != null) {
  144.          if (this.axis == 0) {
  145.             var1 += this.decreaseButton.bounds.width;
  146.             if (var2 < this.decreaseButton.bounds.height) {
  147.                var2 = this.decreaseButton.bounds.height;
  148.             }
  149.          } else {
  150.             if (var1 < this.decreaseButton.bounds.width) {
  151.                var1 = this.decreaseButton.bounds.width;
  152.             }
  153.  
  154.             var2 += this.decreaseButton.bounds.height;
  155.          }
  156.       }
  157.  
  158.       return new Size(var1 + 2, var2 + 2);
  159.    }
  160.  
  161.    void _adjustToFit() {
  162.       Size var1 = this.minSize();
  163.       if (this.axis == 0) {
  164.          ((View)this).sizeTo(super.bounds.width, var1.height);
  165.       } else {
  166.          ((View)this).sizeTo(var1.width, super.bounds.height);
  167.       }
  168.    }
  169.  
  170.    public void didSizeBy(int var1, int var2) {
  171.       super.didSizeBy(var1, var2);
  172.       this._computeScrollValue();
  173.    }
  174.  
  175.    public void setIncreaseButton(Button var1) {
  176.       if (this.increaseButton != null) {
  177.          this.increaseButton.removeFromSuperview();
  178.       }
  179.  
  180.       this.increaseButton = var1;
  181.       if (this.increaseButton != null) {
  182.          this.increaseButton.setTarget(this);
  183.          this.increaseButton.setCommand("scrollLineForward");
  184.          if (this.axis == 0) {
  185.             this.increaseButton.setHorizResizeInstruction(1);
  186.             this.increaseButton.setVertResizeInstruction(16);
  187.          } else {
  188.             this.increaseButton.setHorizResizeInstruction(2);
  189.             this.increaseButton.setVertResizeInstruction(8);
  190.          }
  191.  
  192.          this._adjustToFit();
  193.       }
  194.  
  195.       if (this.enabled && this.active) {
  196.          this.addParts();
  197.       }
  198.  
  199.    }
  200.  
  201.    public Button increaseButton() {
  202.       return this.increaseButton;
  203.    }
  204.  
  205.    public void setDecreaseButton(Button var1) {
  206.       if (this.decreaseButton != null) {
  207.          this.decreaseButton.removeFromSuperview();
  208.       }
  209.  
  210.       this.decreaseButton = var1;
  211.       if (this.decreaseButton != null) {
  212.          this.decreaseButton.setTarget(this);
  213.          this.decreaseButton.setCommand("scrollLineBackward");
  214.          if (this.axis == 0) {
  215.             this.decreaseButton.setHorizResizeInstruction(0);
  216.             this.decreaseButton.setVertResizeInstruction(16);
  217.          } else {
  218.             this.decreaseButton.setHorizResizeInstruction(2);
  219.             this.decreaseButton.setVertResizeInstruction(4);
  220.          }
  221.  
  222.          this._adjustToFit();
  223.       }
  224.  
  225.       if (this.enabled && this.active) {
  226.          this.addParts();
  227.       }
  228.  
  229.    }
  230.  
  231.    public Button decreaseButton() {
  232.       return this.decreaseButton;
  233.    }
  234.  
  235.    public void addParts() {
  236.       byte var1 = 1;
  237.       byte var2 = 1;
  238.       if (this.decreaseButton != null) {
  239.          this.decreaseButton.moveTo(var1, var2);
  240.       }
  241.  
  242.       if (this.axis == 0) {
  243.          if (this.increaseButton != null) {
  244.             this.increaseButton.moveTo(((View)this).width() - 1 - this.increaseButton.width(), var2);
  245.          }
  246.       } else if (this.increaseButton != null) {
  247.          this.increaseButton.moveTo(var1, ((View)this).height() - 1 - this.increaseButton.height());
  248.       }
  249.  
  250.       ((View)this).addSubview(this.increaseButton);
  251.       ((View)this).addSubview(this.decreaseButton);
  252.    }
  253.  
  254.    public void removeParts() {
  255.       if (this.increaseButton != null) {
  256.          this.increaseButton.removeFromSuperview();
  257.       }
  258.  
  259.       if (this.decreaseButton != null) {
  260.          this.decreaseButton.removeFromSuperview();
  261.       }
  262.  
  263.    }
  264.  
  265.    public void setScrollableObject(Scrollable var1) {
  266.       if (this.scrollableView != var1) {
  267.          this.scrollableView = var1;
  268.          this._computeScrollValue();
  269.       }
  270.    }
  271.  
  272.    public Scrollable scrollableObject() {
  273.       return this.scrollableView;
  274.    }
  275.  
  276.    public void setScrollBarOwner(ScrollBarOwner var1) {
  277.       this.scrollBarOwner = var1;
  278.    }
  279.  
  280.    public ScrollBarOwner scrollBarOwner() {
  281.       return this.scrollBarOwner;
  282.    }
  283.  
  284.    public Rect scrollTrayRect() {
  285.       if (this.axis == 0) {
  286.          int var1 = 1;
  287.          if (this.decreaseButton != null) {
  288.             var1 += this.decreaseButton.bounds.width;
  289.          }
  290.  
  291.          int var2 = ((View)this).width() - 1;
  292.          if (this.increaseButton != null) {
  293.             var2 -= this.increaseButton.width();
  294.          }
  295.  
  296.          return Rect.newRect(var1, 1, var2 - var1, ((View)this).height() - 2);
  297.       } else {
  298.          int var3 = 1;
  299.          if (this.decreaseButton != null) {
  300.             var3 += this.decreaseButton.height();
  301.          }
  302.  
  303.          int var4 = ((View)this).height() - 1;
  304.          if (this.increaseButton != null) {
  305.             var4 -= this.increaseButton.height();
  306.          }
  307.  
  308.          return Rect.newRect(1, var3, ((View)this).width() - 2, var4 - var3);
  309.       }
  310.    }
  311.  
  312.    public int scrollTrayLength() {
  313.       Rect var1 = this.scrollTrayRect();
  314.       int var2 = this.axis == 0 ? var1.width : var1.height;
  315.       Rect.returnRect(var1);
  316.       return var2;
  317.    }
  318.  
  319.    public void setKnobImage(Image var1) {
  320.       this.knobImage = var1;
  321.       this._adjustToFit();
  322.    }
  323.  
  324.    public Image knobImage() {
  325.       return this.knobImage;
  326.    }
  327.  
  328.    public Rect knobRect() {
  329.       Rect var1 = this.scrollTrayRect();
  330.       int var2;
  331.       int var3;
  332.       int var4;
  333.       int var5;
  334.       if (this.axis == 0) {
  335.          var2 = var1.x + this.scrollValue;
  336.          var3 = var1.y;
  337.          var4 = this.knobLength;
  338.          var5 = var1.height;
  339.       } else {
  340.          var2 = var1.x;
  341.          var3 = var1.y + this.scrollValue;
  342.          var4 = var1.width;
  343.          var5 = this.knobLength;
  344.       }
  345.  
  346.       var1.setBounds(var2, var3, var4, var5);
  347.       return var1;
  348.    }
  349.  
  350.    public void setKnobLength(int var1) {
  351.       int var2 = this.scrollTrayLength();
  352.       if (var1 < this.minKnobLength()) {
  353.          var1 = this.minKnobLength();
  354.       } else if (var1 > var2) {
  355.          var1 = var2;
  356.       }
  357.  
  358.       this.knobLength = var1;
  359.    }
  360.  
  361.    public int knobLength() {
  362.       return this.knobLength;
  363.    }
  364.  
  365.    public int minKnobLength() {
  366.       return this.axis == 0 ? ((View)this).height() - 2 : ((View)this).width() - 2;
  367.    }
  368.  
  369.    public void setEnabled(boolean var1) {
  370.       if (var1 != this.enabled) {
  371.          this.enabled = var1;
  372.          if (this.active && this.enabled) {
  373.             this.addParts();
  374.          } else {
  375.             if (this.enabled) {
  376.                return;
  377.             }
  378.  
  379.             this.removeParts();
  380.          }
  381.  
  382.          ((View)this).setDirty(true);
  383.          if (this.scrollBarOwner != null) {
  384.             if (this.enabled) {
  385.                this.scrollBarOwner.scrollBarWasEnabled(this);
  386.                return;
  387.             }
  388.  
  389.             this.scrollBarOwner.scrollBarWasDisabled(this);
  390.          }
  391.  
  392.       }
  393.    }
  394.  
  395.    public boolean isEnabled() {
  396.       return this.enabled;
  397.    }
  398.  
  399.    public void setActive(boolean var1) {
  400.       if (var1 != this.active) {
  401.          this.active = var1;
  402.          if (this.active && this.enabled) {
  403.             this.addParts();
  404.          } else if (!this.active) {
  405.             this.removeParts();
  406.          }
  407.  
  408.          ((View)this).setDirty(true);
  409.          if (this.scrollBarOwner != null) {
  410.             if (this.active) {
  411.                this.scrollBarOwner.scrollBarDidBecomeActive(this);
  412.                return;
  413.             }
  414.  
  415.             this.scrollBarOwner.scrollBarDidBecomeInactive(this);
  416.          }
  417.  
  418.       }
  419.    }
  420.  
  421.    public boolean isActive() {
  422.       return this.active;
  423.    }
  424.  
  425.    public void drawViewKnobInRect(Graphics var1, Rect var2) {
  426.       BezelBorder.raisedScrollButtonBezel().drawInRect(var1, var2);
  427.       var1.setColor(Color.lightGray);
  428.       var1.fillRect(var2.x + 1, var2.y + 1, var2.width - 2, var2.height - 2);
  429.       if (this.knobImage != null) {
  430.          this.knobImage.drawCentered(var1, var2);
  431.       }
  432.  
  433.    }
  434.  
  435.    public void drawView(Graphics var1) {
  436.       var1.setColor(Color.gray153);
  437.       var1.drawLine(0, 0, 0, ((View)this).height() - 1);
  438.       var1.drawLine(1, 0, ((View)this).width() - 1, 0);
  439.       var1.setColor(Color.gray231);
  440.       var1.drawLine(((View)this).width() - 1, 0, ((View)this).width() - 1, ((View)this).height());
  441.       var1.drawLine(0, ((View)this).height() - 1, ((View)this).width() - 1, ((View)this).height() - 1);
  442.       Rect var2 = this.scrollTrayRect();
  443.       int var4 = this.interiorRect().x;
  444.       int var5 = this.interiorRect().y;
  445.       int var6 = this.interiorRect().maxX();
  446.       int var7 = this.interiorRect().maxY();
  447.       int var11 = var2.x;
  448.       int var10 = var2.y;
  449.       int var8 = var2.x + var2.width;
  450.       int var9 = var2.y + var2.height;
  451.       if (this.isEnabled() && this.isActive()) {
  452.          if (this.knobLength <= this.scrollTrayLength()) {
  453.             var4 = var2.x;
  454.             var6 = var2.maxX();
  455.             var5 = var2.y;
  456.             var7 = var2.maxY();
  457.             if (this.axis == 0) {
  458.                var11 = var4 + this.scrollValue - 1;
  459.                var8 = var4 + this.scrollValue + this.knobLength;
  460.                if (this.scrollValue > 0) {
  461.                   var1.setColor(Color.gray153);
  462.                   var1.drawLine(var4, var5, var11, var5);
  463.                   var1.drawLine(var4, var5 + 1, var4, var7 - 2);
  464.                   this.trayTopImage.drawTiled(var1, var4 + 1, var5 + 1, var11 - var4, 1);
  465.                   this.trayBottomImage.drawTiled(var1, var4 + 1, var7 - 1, var11 - var4, 1);
  466.                   this.trayLeftImage.drawTiled(var1, var4 + 1, var5 + 1, 1, var7 - 3);
  467.                   var1.setColor(Color.lightGray);
  468.                   var1.fillRect(var4 + 2, var5 + 2, var11 - var4 - 1, var7 - var5 - 3);
  469.                }
  470.  
  471.                if (var8 < var6) {
  472.                   var1.setColor(Color.gray153);
  473.                   var1.drawLine(var8, var5, var6 - 2, var5);
  474.                   var1.drawLine(var6 - 1, var5, var6 - 1, var7 - 1);
  475.                   this.trayTopImage.drawTiled(var1, var8, var5 + 1, var6 - var8 - 1, 1);
  476.                   this.trayBottomImage.drawTiled(var1, var8, var7 - 1, var6 - var8 - 1, 1);
  477.                   this.trayLeftImage.drawTiled(var1, var8, var5 + 1, 1, var7 - 3);
  478.                   this.trayRightImage.drawTiled(var1, var6 - 2, var5 + 1, 1, var7 - 3);
  479.                   var1.setColor(Color.lightGray);
  480.                   var1.fillRect(var8 + 1, var5 + 2, var6 - var8 - 3, var7 - var5 - 3);
  481.                }
  482.             } else {
  483.                var10 = var5 + this.scrollValue - 1;
  484.                var9 = var5 + this.scrollValue + this.knobLength;
  485.                if (this.scrollValue > 0) {
  486.                   var1.setColor(Color.gray153);
  487.                   var1.drawLine(var4, var5 + 1, var4, var10);
  488.                   var1.drawLine(var4, var5, var6 - 1, var5);
  489.                   this.trayTopImage.drawTiled(var1, var4 + 1, var5 + 1, var6 - 2, 1);
  490.                   this.trayLeftImage.drawTiled(var1, var4 + 1, var5 + 1, 1, var10 - var5);
  491.                   this.trayRightImage.drawTiled(var1, var6 - 1, var5 + 1, 1, var10 - var5);
  492.                   var1.setColor(Color.lightGray);
  493.                   var1.fillRect(var4 + 2, var5 + 2, var6 - var4 - 3, var10 - var5 - 1);
  494.                }
  495.  
  496.                if (var9 < var7) {
  497.                   var1.setColor(Color.gray153);
  498.                   var1.drawLine(var4, var9, var4, var7 - 2);
  499.                   var1.drawLine(var4, var7 - 1, var6 - 1, var7 - 1);
  500.                   this.trayTopImage.drawTiled(var1, var4 + 1, var9, var6 - var4 - 2, 1);
  501.                   this.trayBottomImage.drawTiled(var1, var4 + 1, var7 - 2, var6 - var4 - 1, 1);
  502.                   this.trayLeftImage.drawTiled(var1, var4 + 1, var9, 1, var7 - var9 - 2);
  503.                   this.trayRightImage.drawTiled(var1, var6 - 1, var9, 1, var7 - var9 - 2);
  504.                   var1.setColor(Color.lightGray);
  505.                   var1.fillRect(var4 + 2, var9 + 1, var6 - var4 - 3, var7 - var9 - 3);
  506.                }
  507.             }
  508.  
  509.             Rect.returnRect(var2);
  510.             Rect var3 = this.knobRect();
  511.             this.drawViewKnobInRect(var1, var3);
  512.             Rect.returnRect(var3);
  513.          } else if (this.axis == 0) {
  514.             var1.setColor(Color.lightGray);
  515.             var1.fillRect(var2.x + 1, var2.y + 1, var2.width - 2, var2.height - 2);
  516.             var1.setColor(Color.gray102);
  517.             var1.drawLine(var4, var7 - 1, var6 - 1, var7 - 1);
  518.             var1.drawLine(var8 - 1, var5, var8 - 1, var7 - 2);
  519.             var1.setColor(Color.gray231);
  520.             var1.drawLine(var11, var5, var11, var7 - 2);
  521.             var1.drawLine(var11 + 1, var5, var8 - 2, var5);
  522.          } else {
  523.             var1.setColor(Color.lightGray);
  524.             var1.fillRect(var2.x + 1, var2.y + 1, var2.width - 2, var2.height - 2);
  525.             var1.setColor(Color.gray102);
  526.             var1.drawLine(var6 - 1, var5, var6 - 1, var7 - 1);
  527.             var1.drawLine(var4, var9 - 1, var6 - 2, var9 - 1);
  528.             var1.setColor(Color.gray231);
  529.             var1.drawLine(var4, var10, var6 - 2, var10);
  530.             var1.drawLine(var4, var10 + 1, var4, var9 - 2);
  531.          }
  532.       } else {
  533.          if (this.axis == 0) {
  534.             var1.setColor(Color.lightGray);
  535.             var1.fillRect(var4 + 1, var5 + 1, var11 - 3, var7 - 3);
  536.             var1.fillRect(var8 + 1, var5 + 1, var6 - var8 - 2, var7 - 3);
  537.             var1.fillRect(var2.x + 1, var2.y + 1, var2.width - 2, var2.height - 2);
  538.             var1.setColor(Color.gray153);
  539.             var1.drawLine(var4, var7 - 1, var6 - 1, var7 - 1);
  540.             var1.drawLine(var6 - 1, var5, var6 - 1, var7 - 2);
  541.             var1.drawLine(var11 - 1, var5, var11 - 1, var7 - 2);
  542.             var1.drawLine(var8 - 1, var5, var8 - 1, var7 - 2);
  543.             var1.drawLine(var4 + 5, var5 + 7, var4 + 5, var5 + 8);
  544.             var1.drawLine(var4 + 6, var5 + 6, var4 + 6, var5 + 9);
  545.             var1.drawLine(var4 + 7, var5 + 5, var4 + 7, var5 + 10);
  546.             var1.drawLine(var4 + 8, var5 + 4, var4 + 8, var5 + 11);
  547.             var1.drawLine(var4 + 9, var5 + 3, var4 + 9, var5 + 12);
  548.             var1.drawLine(var8 + 6, var5 + 3, var8 + 6, var5 + 12);
  549.             var1.drawLine(var8 + 7, var5 + 4, var8 + 7, var5 + 11);
  550.             var1.drawLine(var8 + 8, var5 + 5, var8 + 8, var5 + 10);
  551.             var1.drawLine(var8 + 9, var5 + 6, var8 + 9, var5 + 9);
  552.             var1.drawLine(var8 + 10, var5 + 7, var8 + 10, var5 + 8);
  553.             var1.setColor(Color.gray231);
  554.             var1.drawLine(var4, var5, var4, var7 - 2);
  555.             var1.drawLine(var4 + 1, var5, var11 - 2, var5);
  556.             var1.drawLine(var11, var5, var11, var7 - 2);
  557.             var1.drawLine(var11 + 1, var5, var8 - 2, var5);
  558.             var1.drawLine(var8, var5, var8, var7 - 2);
  559.             var1.drawLine(var8 + 1, var5, var6 - 2, var5);
  560.          } else {
  561.             var1.setColor(Color.lightGray);
  562.             var1.fillRect(var4 + 1, var5 + 1, var6 - 3, var10 - 3);
  563.             var1.fillRect(var4 + 1, var9 + 1, var6 - 3, var7 - var9 - 2);
  564.             var1.fillRect(var2.x + 1, var2.y + 1, var2.width - 2, var2.height - 2);
  565.             var1.setColor(Color.gray153);
  566.             var1.drawLine(var6 - 1, var5, var6 - 1, var7 - 1);
  567.             var1.drawLine(var4, var7 - 1, var6 - 2, var7 - 1);
  568.             var1.drawLine(var4, var10 - 1, var6 - 2, var10 - 1);
  569.             var1.drawLine(var4, var9 - 1, var6 - 2, var9 - 1);
  570.             var1.drawLine(var4 + 7, var5 + 5, var4 + 8, var5 + 5);
  571.             var1.drawLine(var4 + 6, var5 + 6, var4 + 9, var5 + 6);
  572.             var1.drawLine(var4 + 5, var5 + 7, var4 + 10, var5 + 7);
  573.             var1.drawLine(var4 + 4, var5 + 8, var4 + 11, var5 + 8);
  574.             var1.drawLine(var4 + 3, var5 + 9, var4 + 12, var5 + 9);
  575.             var1.drawLine(var4 + 3, var9 + 6, var4 + 12, var9 + 6);
  576.             var1.drawLine(var4 + 4, var9 + 7, var4 + 11, var9 + 7);
  577.             var1.drawLine(var4 + 5, var9 + 8, var4 + 10, var9 + 8);
  578.             var1.drawLine(var4 + 6, var9 + 9, var4 + 9, var9 + 9);
  579.             var1.drawLine(var4 + 7, var9 + 10, var4 + 8, var9 + 10);
  580.             var1.setColor(Color.gray231);
  581.             var1.drawLine(var4, var5, var6 - 2, var5);
  582.             var1.drawLine(var4, var5 + 1, var4, var10 - 2);
  583.             var1.drawLine(var4, var10, var6 - 2, var10);
  584.             var1.drawLine(var4, var10 + 1, var4, var9 - 2);
  585.             var1.drawLine(var4, var9, var6 - 2, var9);
  586.             var1.drawLine(var4, var9 + 1, var4, var7 - 2);
  587.          }
  588.  
  589.          Rect.returnRect(var2);
  590.       }
  591.    }
  592.  
  593.    public void drawScrollTray() {
  594.       Rect var1 = this.scrollTrayRect();
  595.       ((View)this).addDirtyRect(var1);
  596.       Rect.returnRect(var1);
  597.    }
  598.  
  599.    void _setScrollValue(int var1) {
  600.       if (var1 < 0) {
  601.          this.scrollValue = 0;
  602.       } else if (var1 > this._maxScrollValue()) {
  603.          this.scrollValue = this._maxScrollValue();
  604.       } else {
  605.          this.scrollValue = var1;
  606.       }
  607.    }
  608.  
  609.    void _setScrollPercent(float var1) {
  610.       if (!(var1 < 0.0F) && !(var1 > 1.0F)) {
  611.          int var2 = (int)(var1 * (float)this._maxScrollValue());
  612.          if (var2 == 0 && var1 != 0.0F) {
  613.             this._setScrollValue((int)Math.ceil((double)(var1 * (float)this._maxScrollValue())));
  614.          } else {
  615.             this._setScrollValue(var2);
  616.          }
  617.       }
  618.    }
  619.  
  620.    void _setPercentVisible(float var1) {
  621.       int var2 = this.scrollTrayLength();
  622.       int var3 = (int)(var1 * (float)var2);
  623.       this.setKnobLength(var3);
  624.       if (var2 >= 1 && var2 > var3) {
  625.          this.setActive(true);
  626.       } else {
  627.          this.setActive(false);
  628.       }
  629.    }
  630.  
  631.    void _computeScrollValue() {
  632.       int var6 = this.scrollValue;
  633.       int var7 = this.knobLength;
  634.       boolean var9 = this.active;
  635.       byte var1 = 0;
  636.       int var2;
  637.       int var4;
  638.       int var5;
  639.       if (this.scrollableView != null) {
  640.          int var8 = this.axis();
  641.          var2 = this.scrollableView.lengthOfScrollViewForAxis(var8);
  642.          var5 = this.scrollableView.lengthOfContentViewForAxis(var8);
  643.          var4 = this.scrollableView.positionOfContentViewForAxis(var8);
  644.       } else {
  645.          var2 = 0;
  646.          var5 = 0;
  647.          var4 = 0;
  648.       }
  649.  
  650.       if (var5 == 0) {
  651.          this._setPercentVisible(1.0F);
  652.       } else {
  653.          this._setPercentVisible((float)var2 / (float)var5);
  654.       }
  655.  
  656.       int var3 = var5 - var2;
  657.       if (var3 <= 0) {
  658.          this._setScrollPercent(0.0F);
  659.       } else {
  660.          this._setScrollPercent((float)(var1 - var4) / (float)var3);
  661.       }
  662.  
  663.       if ((this.scrollValue != var6 || this.knobLength != var7 || this.active != var9) && this.isActive() && this.isEnabled()) {
  664.          this.drawScrollTray();
  665.       }
  666.  
  667.    }
  668.  
  669.    public int scrollValue() {
  670.       return this.scrollValue;
  671.    }
  672.  
  673.    int pixelScrollValue() {
  674.       return this.pixelScrollValue;
  675.    }
  676.  
  677.    int _maxScrollValue() {
  678.       return this.scrollTrayLength() - this.knobLength;
  679.    }
  680.  
  681.    public float scrollPercent() {
  682.       int var1 = this._maxScrollValue();
  683.       return var1 == 0 ? 0.0F : (float)this.scrollValue() / (float)var1;
  684.    }
  685.  
  686.    int _mouseValue(MouseEvent var1) {
  687.       Rect var2 = this.scrollTrayRect();
  688.       int var3 = this.axis == 0 ? var1.x - var2.x : var1.y - var2.y;
  689.       Rect.returnRect(var2);
  690.       return var3;
  691.    }
  692.  
  693.    public boolean mouseDown(MouseEvent var1) {
  694.       if (this.isEnabled() && this.isActive()) {
  695.          this.lastMouseValue = this.lastAltMouseValue = this._mouseValue(var1);
  696.          if (var1.isMetaKeyDown() && (this.lastMouseValue >= this.scrollValue + this.knobLength || this.lastMouseValue < this.scrollValue)) {
  697.             int var2 = this.scrollValue;
  698.             this._setScrollValue(this.lastMouseValue - this.knobLength / 2);
  699.             int var3 = this.scrollValue - var2;
  700.             if (var3 != 0) {
  701.                this.scrollToCurrentPosition();
  702.             }
  703.          } else if (this.lastMouseValue < this.scrollValue) {
  704.             this.scrollPageBackward();
  705.             this.timer = new Timer(this, "timerScroll", 75);
  706.             this.timer.setInitialDelay(300);
  707.             if (this.lastMouseValue < this.scrollValue) {
  708.                this.timer.start();
  709.             } else if (this.lastMouseValue < this.scrollValue + this.knobLength) {
  710.                this.timer = null;
  711.             }
  712.          } else if (this.lastMouseValue >= this.scrollValue + this.knobLength) {
  713.             this.scrollPageForward();
  714.             this.timer = new Timer(this, "timerScroll", 75);
  715.             this.timer.setInitialDelay(300);
  716.             if (this.lastMouseValue >= this.scrollValue - this.knobLength) {
  717.                this.timer.start();
  718.             } else if (this.lastMouseValue >= this.scrollValue) {
  719.                this.timer = null;
  720.             }
  721.          }
  722.  
  723.          this.origScrollValue = this.scrollValue;
  724.          return true;
  725.       } else {
  726.          return false;
  727.       }
  728.    }
  729.  
  730.    public void mouseDragged(MouseEvent var1) {
  731.       int var2 = this._mouseValue(var1);
  732.       if (this.isEnabled() && this.isActive() && this.timer == null) {
  733.          if (var1.isControlKeyDown()) {
  734.             this.pixelScrollValue = this.lastAltMouseValue - var2;
  735.             this.scrollByPixel(this.pixelScrollValue);
  736.             this.lastAltMouseValue = var2;
  737.             this.origScrollValue = this.scrollValue;
  738.          } else {
  739.             this.lastAltMouseValue = var2;
  740.             int var4 = this.scrollValue;
  741.             this._setScrollValue(this.origScrollValue + (var2 - this.lastMouseValue));
  742.             int var3 = this.scrollValue - var4;
  743.             if (var3 != 0) {
  744.                this.scrollToCurrentPosition();
  745.             }
  746.  
  747.          }
  748.       } else {
  749.          this.lastMouseValue = var2;
  750.          this.origScrollValue = this.scrollValue;
  751.       }
  752.    }
  753.  
  754.    private void timerScroll() {
  755.       if (this.lastMouseValue < this.scrollValue) {
  756.          this.scrollPageBackward();
  757.          if (this.lastMouseValue >= this.scrollValue) {
  758.             this.timer.stop();
  759.             if (this.lastMouseValue < this.scrollValue + this.knobLength) {
  760.                this.timer = null;
  761.             }
  762.          }
  763.       } else if (this.lastMouseValue >= this.scrollValue + this.knobLength) {
  764.          this.scrollPageForward();
  765.          if (this.lastMouseValue < this.scrollValue - this.knobLength) {
  766.             this.timer.stop();
  767.             if (this.lastMouseValue >= this.scrollValue) {
  768.                this.timer = null;
  769.             }
  770.          }
  771.       }
  772.  
  773.       this.origScrollValue = this.scrollValue;
  774.    }
  775.  
  776.    public void mouseUp(MouseEvent var1) {
  777.       if (this.timer != null) {
  778.          this.timer.stop();
  779.          this.timer = null;
  780.       }
  781.  
  782.    }
  783.  
  784.    public void performCommand(String var1, Object var2) {
  785.       if ("timerScroll".equals(var1)) {
  786.          this.timerScroll();
  787.       } else if ("updateScrollValue".equals(var1)) {
  788.          this.update();
  789.       } else if ("scrollLineForward".equals(var1)) {
  790.          this.scrollLineForward();
  791.       } else if ("scrollLineBackward".equals(var1)) {
  792.          this.scrollLineBackward();
  793.       } else if ("scrollPageForward".equals(var1)) {
  794.          this.scrollPageForward();
  795.       } else if ("scrollPageBackward".equals(var1)) {
  796.          this.scrollPageBackward();
  797.       } else {
  798.          throw new NoSuchMethodError("unknown command: " + var1);
  799.       }
  800.    }
  801.  
  802.    private void update() {
  803.       int var1 = this.scrollValue;
  804.       int var2 = this.knobLength;
  805.       boolean var3 = this.active;
  806.       var3 = this.active;
  807.       this._computeScrollValue();
  808.       if (var3 != this.active) {
  809.          ((View)this).setDirty(true);
  810.       } else {
  811.          if (this.shouldRedraw || (this.scrollValue != var1 || this.knobLength != var2 || this.active != var3) && this.isActive() && this.isEnabled()) {
  812.             this.drawScrollTray();
  813.          }
  814.  
  815.       }
  816.    }
  817.  
  818.    public void describeClassInfo(ClassInfo var1) {
  819.       super.describeClassInfo(var1);
  820.       var1.addClass("netscape.application.ScrollBar", 2);
  821.       var1.addField("scrollView", (byte)18);
  822.       var1.addField("increaseButton", (byte)18);
  823.       var1.addField("decreaseButton", (byte)18);
  824.       var1.addField("image", (byte)18);
  825.       var1.addField("scrollValue", (byte)8);
  826.       var1.addField("axis", (byte)8);
  827.       var1.addField("active", (byte)0);
  828.       var1.addField("enabled", (byte)0);
  829.       var1.addField("lineIncrement", (byte)8);
  830.       var1.addField("owner", (byte)18);
  831.    }
  832.  
  833.    public void encode(Encoder var1) throws CodingException {
  834.       super.encode(var1);
  835.       var1.encodeObject("scrollView", this.scrollableView);
  836.       var1.encodeObject("increaseButton", this.increaseButton);
  837.       var1.encodeObject("decreaseButton", this.decreaseButton);
  838.       var1.encodeObject("image", this.knobImage);
  839.       var1.encodeInt("scrollValue", this.scrollValue);
  840.       var1.encodeInt("axis", this.axis);
  841.       var1.encodeBoolean("active", this.active);
  842.       var1.encodeBoolean("enabled", this.enabled);
  843.       var1.encodeInt("lineIncrement", this.lineIncrement);
  844.       var1.encodeObject("owner", this.scrollBarOwner);
  845.    }
  846.  
  847.    public void decode(Decoder var1) throws CodingException {
  848.       int var2 = var1.versionForClassName("netscape.application.ScrollBar");
  849.       super.decode(var1);
  850.       this.scrollableView = (Scrollable)var1.decodeObject("scrollView");
  851.       this.increaseButton = (Button)var1.decodeObject("increaseButton");
  852.       this.decreaseButton = (Button)var1.decodeObject("decreaseButton");
  853.       this.knobImage = (Image)var1.decodeObject("image");
  854.       this.scrollValue = var1.decodeInt("scrollValue");
  855.       this.axis = var1.decodeInt("axis");
  856.       this.active = var1.decodeBoolean("active");
  857.       this.enabled = var1.decodeBoolean("enabled");
  858.       if (var2 >= 2) {
  859.          this.lineIncrement = var1.decodeInt("lineIncrement");
  860.          this.scrollBarOwner = (ScrollBarOwner)var1.decodeObject("owner");
  861.       } else {
  862.          this.lineIncrement = 12;
  863.          this.scrollBarOwner = null;
  864.       }
  865.  
  866.       this._computeScrollValue();
  867.    }
  868.  
  869.    public int axis() {
  870.       return this.axis;
  871.    }
  872.  
  873.    public float pageSizeAsPercent() {
  874.       return this.pageSizeAsPercent;
  875.    }
  876.  
  877.    public void setPageSizeAsPercent(float var1) {
  878.       if (!(var1 <= 0.0F) && !(var1 > 1.0F)) {
  879.          this.pageSizeAsPercent = var1;
  880.       }
  881.    }
  882.  
  883.    public void setLineIncrement(int var1) {
  884.       if (var1 > 0) {
  885.          this.lineIncrement = var1;
  886.       }
  887.  
  888.    }
  889.  
  890.    public int lineIncrement() {
  891.       return this.lineIncrement;
  892.    }
  893.  
  894.    private void scrollTo(int var1, int var2) {
  895.       this.shouldRedraw = true;
  896.       if (this.scrollableView != null) {
  897.          this.scrollableView.scrollTo(var1, var2);
  898.       }
  899.  
  900.       this.shouldRedraw = false;
  901.    }
  902.  
  903.    private void scrollBy(int var1, int var2) {
  904.       this.shouldRedraw = true;
  905.       if (this.scrollableView != null) {
  906.          this.scrollableView.scrollBy(var1, var2);
  907.       }
  908.  
  909.       this.shouldRedraw = false;
  910.    }
  911.  
  912.    private void scrollByPixel(int var1) {
  913.       if (this.scrollableView != null) {
  914.          if (this.axis == 0) {
  915.             this.scrollBy(var1, 0);
  916.             return;
  917.          }
  918.  
  919.          this.scrollBy(0, var1);
  920.       }
  921.  
  922.    }
  923.  
  924.    private void scrollByLine(int var1) {
  925.       if (this.scrollableView != null) {
  926.          if (this.axis == 0) {
  927.             this.scrollBy(var1 * this.lineIncrement, 0);
  928.             return;
  929.          }
  930.  
  931.          this.scrollBy(0, var1 * this.lineIncrement);
  932.       }
  933.  
  934.    }
  935.  
  936.    private void scrollByPage(float var1) {
  937.       if (this.scrollableView != null) {
  938.          if (this.axis == 0) {
  939.             this.scrollBy((int)(var1 * (float)this.scrollableView.lengthOfScrollViewForAxis(this.axis)), 0);
  940.             return;
  941.          }
  942.  
  943.          this.scrollBy(0, (int)(var1 * (float)this.scrollableView.lengthOfScrollViewForAxis(this.axis)));
  944.       }
  945.  
  946.    }
  947.  
  948.    private void scrollToPercent(float var1) {
  949.       if (this.scrollableView != null) {
  950.          int var2 = this.scrollableView.lengthOfContentViewForAxis(this.axis);
  951.          int var3 = this.scrollableView.lengthOfScrollViewForAxis(this.axis);
  952.          int var4 = -((int)(var1 * (float)(var2 - var3)));
  953.          if (this.axis == 0) {
  954.             this.scrollTo(var4, this.scrollableView.positionOfContentViewForAxis(1));
  955.             return;
  956.          }
  957.  
  958.          this.scrollTo(this.scrollableView.positionOfContentViewForAxis(0), var4);
  959.       }
  960.  
  961.    }
  962.  
  963.    public void scrollLineForward() {
  964.       this.scrollByLine(-1);
  965.    }
  966.  
  967.    public void scrollLineBackward() {
  968.       this.scrollByLine(1);
  969.    }
  970.  
  971.    public void scrollPageForward() {
  972.       this.scrollByPage(-this.pageSizeAsPercent);
  973.    }
  974.  
  975.    public void scrollPageBackward() {
  976.       this.scrollByPage(this.pageSizeAsPercent);
  977.    }
  978.  
  979.    public void scrollToCurrentPosition() {
  980.       this.scrollToPercent(this.scrollPercent());
  981.    }
  982.  
  983.    public void setScrollPercent(float var1) {
  984.       this._setScrollPercent(var1);
  985.       this.scrollToCurrentPosition();
  986.    }
  987.  
  988.    void _setupKeyboard() {
  989.       ((View)this).removeAllCommandsForKeys();
  990.       if (this.axis() == 0) {
  991.          ((View)this).setCommandForKey("scrollLineForward", 1007, 1);
  992.          ((View)this).setCommandForKey("scrollLineBackward", 1006, 1);
  993.       } else {
  994.          ((View)this).setCommandForKey("scrollLineForward", 1005, 1);
  995.          ((View)this).setCommandForKey("scrollLineBackward", 1004, 1);
  996.       }
  997.    }
  998.  
  999.    public boolean hidesSubviewsFromKeyboard() {
  1000.       return true;
  1001.    }
  1002. }
  1003.