home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / ScrollGroup.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  10.5 KB  |  411 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. import netscape.util.Vector;
  8.  
  9. public class ScrollGroup extends View implements ScrollBarOwner {
  10.    ScrollView scrollView;
  11.    ScrollBar vertScrollBar;
  12.    ScrollBar horizScrollBar;
  13.    Border border;
  14.    Border interiorBorder;
  15.    Color cornerColor;
  16.    int horizScrollDisplay;
  17.    int vertScrollDisplay;
  18.    private boolean ignoreScrollBars;
  19.    private static final boolean debugScrollers = false;
  20.    public static final int NEVER_DISPLAY = 0;
  21.    public static final int ALWAYS_DISPLAY = 1;
  22.    public static final int AS_NEEDED_DISPLAY = 2;
  23.    static final String SCROLLVIEW_KEY = "scrollView";
  24.    static final String VERTSCROLLBAR_KEY = "vertScrollBar";
  25.    static final String HORIZSCROLLBAR_KEY = "horizScrollBar";
  26.    static final String BORDER_KEY = "border";
  27.    static final String HORIZDISPLAY_KEY = "horizScrollDisplay";
  28.    static final String VERTDISPLAY_KEY = "vertScrollDisplay";
  29.    static final String CORNER_COLOR_KEY = "cornerColor";
  30.  
  31.    public ScrollGroup() {
  32.       this(0, 0, 0, 0);
  33.    }
  34.  
  35.    public ScrollGroup(Rect var1) {
  36.       this(var1.x, var1.y, var1.width, var1.height);
  37.    }
  38.  
  39.    public ScrollGroup(int var1, int var2, int var3, int var4) {
  40.       super(var1, var2, var3, var4);
  41.       this.border = EmptyBorder.emptyBorder();
  42.       this.interiorBorder = new ScrollViewLineBorder();
  43.       this.scrollView = this.createScrollView();
  44.       ((View)this).addSubview(this.scrollView);
  45.       this.horizScrollBar = this.createScrollBar(true);
  46.       this.horizScrollBar.setScrollableObject(this.scrollView);
  47.       this.horizScrollBar.setScrollBarOwner(this);
  48.       this.scrollView.addScrollBar(this.horizScrollBar);
  49.       ((View)this).addSubview(this.horizScrollBar);
  50.       this.vertScrollBar = this.createScrollBar(false);
  51.       this.vertScrollBar.setScrollableObject(this.scrollView);
  52.       this.vertScrollBar.setScrollBarOwner(this);
  53.       this.scrollView.addScrollBar(this.vertScrollBar);
  54.       ((View)this).addSubview(this.vertScrollBar);
  55.       this.ignoreScrollBars = false;
  56.       this.setCornerColor(Color.lightGray);
  57.       this.layoutView(0, 0);
  58.    }
  59.  
  60.    public Size minSize() {
  61.       Size var1 = super.minSize();
  62.       if (var1 == null || var1.width == 0 && var1.height == 0) {
  63.          if (this.vertScrollDisplay == 0 && this.horizScrollDisplay == 0) {
  64.             return new Size(this.border.widthMargin(), this.border.heightMargin());
  65.          } else if (this.vertScrollDisplay != 0 && this.horizScrollDisplay != 0) {
  66.             return new Size(this.border.widthMargin() + this.horizScrollBar().minSize().width + this.vertScrollBar().minSize().width, this.border.heightMargin() + this.horizScrollBar().minSize().height + this.vertScrollBar().minSize().height);
  67.          } else if (this.horizScrollDisplay != 1 && this.horizScrollDisplay != 2) {
  68.             return this.vertScrollDisplay != 1 && this.vertScrollDisplay != 2 ? super.minSize() : new Size(this.border.widthMargin() + this.vertScrollBar().minSize().width * 2, this.border.heightMargin() + this.vertScrollBar().minSize().height);
  69.          } else {
  70.             return new Size(this.border.widthMargin() + this.horizScrollBar().minSize().width, this.border.heightMargin() + this.horizScrollBar().minSize().height * 2);
  71.          }
  72.       } else {
  73.          return var1;
  74.       }
  75.    }
  76.  
  77.    public boolean isTransparent() {
  78.       Vector var1 = ((View)this).subviews();
  79.       int var3 = var1.count();
  80.  
  81.       for(int var2 = 0; var2 < var3; ++var2) {
  82.          if (((View)((View)this).subviews().elementAt(var2)).isTransparent()) {
  83.             return true;
  84.          }
  85.       }
  86.  
  87.       return false;
  88.    }
  89.  
  90.    public void setBorder(Border var1) {
  91.       if (var1 == null) {
  92.          var1 = EmptyBorder.emptyBorder();
  93.       }
  94.  
  95.       this.interiorBorder = var1;
  96.       this.layoutView(0, 0);
  97.    }
  98.  
  99.    public Border border() {
  100.       return this.interiorBorder;
  101.    }
  102.  
  103.    protected ScrollView createScrollView() {
  104.       return new ScrollView(0, 0, super.bounds.width, super.bounds.height);
  105.    }
  106.  
  107.    public ScrollView scrollView() {
  108.       return this.scrollView;
  109.    }
  110.  
  111.    protected ScrollBar createScrollBar(boolean var1) {
  112.       ScrollBar var2;
  113.       if (var1) {
  114.          var2 = new ScrollBar(0, 0, super.bounds.width, 1, 0);
  115.       } else {
  116.          var2 = new ScrollBar(0, 0, 1, super.bounds.height, 1);
  117.       }
  118.  
  119.       return var2;
  120.    }
  121.  
  122.    public void setHasVertScrollBar(boolean var1) {
  123.       if (var1) {
  124.          this.setVertScrollBarDisplay(1);
  125.       } else {
  126.          this.setVertScrollBarDisplay(0);
  127.       }
  128.    }
  129.  
  130.    public boolean hasVertScrollBar() {
  131.       return this.vertScrollDisplay == 1;
  132.    }
  133.  
  134.    public void setVertScrollBarDisplay(int var1) {
  135.       this.vertScrollDisplay = var1;
  136.       if (this.vertScrollBar == null) {
  137.          this.vertScrollBar = this.createScrollBar(false);
  138.          this.vertScrollBar.setScrollableObject(this.scrollView);
  139.          this.vertScrollBar.setScrollBarOwner(this);
  140.          this.scrollView.addScrollBar(this.vertScrollBar);
  141.          ((View)this).addSubview(this.vertScrollBar);
  142.       }
  143.  
  144.       this.layoutView(0, 0);
  145.    }
  146.  
  147.    public int vertScrollBarDisplay() {
  148.       return this.vertScrollDisplay;
  149.    }
  150.  
  151.    public ScrollBar vertScrollBar() {
  152.       return this.vertScrollBar;
  153.    }
  154.  
  155.    public void setHasHorizScrollBar(boolean var1) {
  156.       if (var1) {
  157.          this.setHorizScrollBarDisplay(1);
  158.       } else {
  159.          this.setHorizScrollBarDisplay(0);
  160.       }
  161.    }
  162.  
  163.    public boolean hasHorizScrollBar() {
  164.       return this.horizScrollDisplay == 1;
  165.    }
  166.  
  167.    public void setHorizScrollBarDisplay(int var1) {
  168.       this.horizScrollDisplay = var1;
  169.       if (this.horizScrollBar == null) {
  170.          this.horizScrollBar = this.createScrollBar(true);
  171.          this.horizScrollBar.setScrollableObject(this.scrollView);
  172.          this.horizScrollBar.setScrollBarOwner(this);
  173.          this.scrollView.addScrollBar(this.horizScrollBar);
  174.          ((View)this).addSubview(this.horizScrollBar);
  175.       }
  176.  
  177.       this.layoutView(0, 0);
  178.    }
  179.  
  180.    public int horizScrollBarDisplay() {
  181.       return this.horizScrollDisplay;
  182.    }
  183.  
  184.    public ScrollBar horizScrollBar() {
  185.       return this.horizScrollBar;
  186.    }
  187.  
  188.    private void putParts() {
  189.       this.horizScrollBar.removeFromSuperview();
  190.       this.vertScrollBar.removeFromSuperview();
  191.       if (this.scrollView != null) {
  192.          Rect var5 = new Rect(0, 0, 0, 0);
  193.          if (this.horizScrollBar != null && this.horizScrollBar.scrollableObject() != null) {
  194.             var5.width = this.horizScrollBar.scrollableObject().lengthOfContentViewForAxis(0);
  195.          } else if (this.scrollView.contentView != null) {
  196.             var5.width = this.scrollView.contentView.bounds.width;
  197.          }
  198.  
  199.          if (this.vertScrollBar != null && this.vertScrollBar.scrollableObject() != null) {
  200.             var5.height = this.vertScrollBar.scrollableObject().lengthOfContentViewForAxis(1);
  201.          } else if (this.scrollView.contentView != null) {
  202.             var5.height = this.scrollView.contentView.bounds.height;
  203.          }
  204.  
  205.          int var1 = this.border.leftMargin() + this.interiorBorder.leftMargin();
  206.          int var2 = this.border.topMargin() + this.interiorBorder.topMargin();
  207.          int var3 = super.bounds.width - this.border.widthMargin() - this.interiorBorder.widthMargin();
  208.          int var4 = super.bounds.height - this.border.heightMargin() - this.interiorBorder.heightMargin();
  209.          this.ignoreScrollBars = true;
  210.          this.scrollView.moveTo(var1, var2);
  211.          this.scrollView.sizeTo(var3, var4);
  212.          this.vertScrollBar.moveTo(var1 + var3 - this.vertScrollBar.bounds.width, var2);
  213.          this.vertScrollBar.sizeTo(this.vertScrollBar.bounds.width, var4);
  214.          this.horizScrollBar.moveTo(var1, var2 + var4 - this.horizScrollBar.bounds.height);
  215.          this.horizScrollBar.sizeTo(var3, this.horizScrollBar.bounds.height);
  216.          this.ignoreScrollBars = false;
  217.          if ((this.vertScrollDisplay != 1 || this.horizScrollDisplay != 1) && (this.vertScrollDisplay != 2 || this.horizScrollDisplay != 2 || this.scrollView.bounds.width >= var5.width || this.scrollView.bounds.height >= var5.height)) {
  218.             if (this.vertScrollDisplay == 1 || this.vertScrollDisplay == 2 && this.scrollView.bounds.height < var5.height) {
  219.                if (this.horizScrollDisplay != 1 && (this.horizScrollDisplay != 2 || this.scrollView.bounds.width - var5.width >= this.vertScrollBar.bounds.width)) {
  220.                   this.horizScrollBar.removeFromSuperview();
  221.                   this.ignoreScrollBars = true;
  222.                   this.scrollView.moveTo(var1, var2);
  223.                   this.scrollView.sizeTo(var3 - this.vertScrollBar.bounds.width, var4);
  224.                   this.vertScrollBar.moveTo(super.bounds.width - this.border.rightMargin() - this.vertScrollBar.bounds.width, this.border.topMargin());
  225.                   this.vertScrollBar.sizeTo(this.vertScrollBar.bounds.width, super.bounds.height - this.border.heightMargin());
  226.                   ((View)this).addSubview(this.vertScrollBar);
  227.                   this.ignoreScrollBars = false;
  228.                } else {
  229.                   this.setBothScrollersOn();
  230.                }
  231.             } else if (this.vertScrollDisplay == 2 && this.horizScrollDisplay == 2 && this.scrollView.bounds.height == var5.height) {
  232.                this.ignoreScrollBars = true;
  233.                this.vertScrollBar.removeFromSuperview();
  234.                this.horizScrollBar.removeFromSuperview();
  235.                this.scrollView.moveTo(var1, var2);
  236.                this.scrollView.sizeTo(var3, var4);
  237.                this.ignoreScrollBars = false;
  238.             } else if (this.horizScrollDisplay == 1 || this.horizScrollDisplay == 2 && this.scrollView.bounds.width < var5.width) {
  239.                if (this.vertScrollDisplay != 1 && (this.vertScrollDisplay != 2 || this.scrollView.bounds.height - var5.height >= this.horizScrollBar.bounds.height)) {
  240.                   this.vertScrollBar.removeFromSuperview();
  241.                   this.ignoreScrollBars = true;
  242.                   this.scrollView.moveTo(var1, var2);
  243.                   this.scrollView.sizeTo(var3, var4 - this.horizScrollBar.bounds.height);
  244.                   this.horizScrollBar.moveTo(this.border.leftMargin(), super.bounds.height - this.border.bottomMargin() - this.horizScrollBar.bounds.height);
  245.                   this.horizScrollBar.sizeTo(super.bounds.width - this.border.widthMargin(), this.horizScrollBar.bounds.height);
  246.                   ((View)this).addSubview(this.horizScrollBar);
  247.                   this.ignoreScrollBars = false;
  248.                } else {
  249.                   this.setBothScrollersOn();
  250.                }
  251.             } else if (this.horizScrollDisplay == 2 && this.vertScrollDisplay == 2 && this.scrollView.bounds.width == var5.width) {
  252.                this.ignoreScrollBars = true;
  253.                this.horizScrollBar.removeFromSuperview();
  254.                this.vertScrollBar.removeFromSuperview();
  255.                this.scrollView.moveTo(var1, var2);
  256.                this.scrollView.sizeTo(var3, var4);
  257.                this.ignoreScrollBars = false;
  258.             }
  259.          } else {
  260.             this.setBothScrollersOn();
  261.          }
  262.       }
  263.    }
  264.  
  265.    void setBothScrollersOn() {
  266.       int var1 = this.border.leftMargin() + this.interiorBorder.leftMargin();
  267.       int var2 = this.border.topMargin() + this.interiorBorder.topMargin();
  268.       int var3 = super.bounds.width - this.border.widthMargin() - this.interiorBorder.widthMargin();
  269.       int var4 = super.bounds.height - this.border.heightMargin() - this.interiorBorder.heightMargin();
  270.       this.ignoreScrollBars = true;
  271.       this.scrollView.moveTo(var1, var2);
  272.       this.scrollView.sizeTo(var3 - this.vertScrollBar.bounds.width, var4 - this.horizScrollBar.bounds.height);
  273.       this.horizScrollBar.moveTo(this.border.leftMargin(), super.bounds.height - this.border.bottomMargin() - this.horizScrollBar.bounds.height);
  274.       this.horizScrollBar.sizeTo(super.bounds.width - this.border.widthMargin() - this.vertScrollBar.bounds.width + 2, this.horizScrollBar.bounds.height);
  275.       ((View)this).addSubview(this.horizScrollBar);
  276.       this.vertScrollBar.moveTo(super.bounds.width - this.border.rightMargin() - this.vertScrollBar.bounds.width, this.border.topMargin());
  277.       this.vertScrollBar.sizeTo(this.vertScrollBar.bounds.width, super.bounds.height - this.border.heightMargin() - this.horizScrollBar.bounds.height + 2);
  278.       ((View)this).addSubview(this.vertScrollBar);
  279.       this.ignoreScrollBars = false;
  280.    }
  281.  
  282.    public void drawView(Graphics var1) {
  283.       this.border.drawInRect(var1, 0, 0, super.bounds.width, super.bounds.height);
  284.       this.interiorBorder.drawInRect(var1, this.border.leftMargin(), this.border.topMargin(), this.scrollView.bounds.width + this.interiorBorder.widthMargin(), this.scrollView.bounds.height + this.interiorBorder.heightMargin());
  285.       if (this.cornerColor != null && this.horizScrollBarIsVisible() && this.vertScrollBarIsVisible()) {
  286.          var1.setColor(this.cornerColor);
  287.          var1.fillRect(this.horizScrollBar.bounds.maxX(), this.vertScrollBar.bounds.maxY(), this.vertScrollBar.bounds.width - 2, this.horizScrollBar.bounds.height - 2);
  288.       }
  289.  
  290.    }
  291.  
  292.    public void drawContents() {
  293.       this.scrollView.setDirty(true);
  294.    }
  295.  
  296.    public void drawSubviews(Graphics var1) {
  297.       super.drawSubviews(var1);
  298.       this.drawView(var1);
  299.    }
  300.  
  301.    public void setContentView(View var1) {
  302.       this.scrollView.setContentView(var1);
  303.       this.layoutView(0, 0);
  304.    }
  305.  
  306.    public View contentView() {
  307.       return this.scrollView.contentView();
  308.    }
  309.  
  310.    public void setBackgroundColor(Color var1) {
  311.       this.scrollView.setBackgroundColor(var1);
  312.    }
  313.  
  314.    public void setCornerColor(Color var1) {
  315.       this.cornerColor = var1;
  316.    }
  317.  
  318.    public void describeClassInfo(ClassInfo var1) {
  319.       super.describeClassInfo(var1);
  320.       var1.addClass("netscape.application.ScrollGroup", 2);
  321.       var1.addField("scrollView", (byte)18);
  322.       var1.addField("vertScrollBar", (byte)18);
  323.       var1.addField("horizScrollBar", (byte)18);
  324.       var1.addField("border", (byte)18);
  325.       var1.addField("horizScrollDisplay", (byte)8);
  326.       var1.addField("vertScrollDisplay", (byte)8);
  327.       var1.addField("cornerColor", (byte)18);
  328.    }
  329.  
  330.    public void encode(Encoder var1) throws CodingException {
  331.       super.encode(var1);
  332.       var1.encodeObject("scrollView", this.scrollView);
  333.       var1.encodeObject("vertScrollBar", this.vertScrollBar);
  334.       var1.encodeObject("horizScrollBar", this.horizScrollBar);
  335.       var1.encodeObject("border", this.interiorBorder);
  336.       var1.encodeInt("horizScrollDisplay", this.horizScrollDisplay);
  337.       var1.encodeInt("vertScrollDisplay", this.vertScrollDisplay);
  338.       var1.encodeObject("cornerColor", this.cornerColor);
  339.    }
  340.  
  341.    public void decode(Decoder var1) throws CodingException {
  342.       int var2 = var1.versionForClassName("netscape.application.ScrollGroup");
  343.       super.decode(var1);
  344.       this.scrollView = (ScrollView)var1.decodeObject("scrollView");
  345.       this.vertScrollBar = (ScrollBar)var1.decodeObject("vertScrollBar");
  346.       this.horizScrollBar = (ScrollBar)var1.decodeObject("horizScrollBar");
  347.       this.interiorBorder = (Border)var1.decodeObject("border");
  348.       this.horizScrollDisplay = var1.decodeInt("horizScrollDisplay");
  349.       this.vertScrollDisplay = var1.decodeInt("vertScrollDisplay");
  350.       if (var2 >= 2) {
  351.          this.cornerColor = (Color)var1.decodeObject("cornerColor");
  352.       } else {
  353.          this.cornerColor = Color.lightGray;
  354.       }
  355.    }
  356.  
  357.    public void scrollBarDidBecomeActive(ScrollBar var1) {
  358.       if (!this.ignoreScrollBars) {
  359.          if (var1 != this.horizScrollBar || this.horizScrollDisplay != 0) {
  360.             if (var1 != this.vertScrollBar || this.vertScrollDisplay != 0) {
  361.                this.layoutView(0, 0);
  362.             }
  363.          }
  364.       }
  365.    }
  366.  
  367.    public void scrollBarDidBecomeInactive(ScrollBar var1) {
  368.       if (!this.ignoreScrollBars) {
  369.          if (var1 != this.horizScrollBar || this.horizScrollDisplay != 0) {
  370.             if (var1 != this.vertScrollBar || this.vertScrollDisplay != 0) {
  371.                this.layoutView(0, 0);
  372.             }
  373.          }
  374.       }
  375.    }
  376.  
  377.    public void scrollBarWasEnabled(ScrollBar var1) {
  378.       if (!this.ignoreScrollBars) {
  379.          if (var1 != this.horizScrollBar || this.horizScrollDisplay != 0) {
  380.             if (var1 != this.vertScrollBar || this.vertScrollDisplay != 0) {
  381.                this.layoutView(0, 0);
  382.             }
  383.          }
  384.       }
  385.    }
  386.  
  387.    public void scrollBarWasDisabled(ScrollBar var1) {
  388.       if (!this.ignoreScrollBars) {
  389.          if (var1 != this.horizScrollBar || this.horizScrollDisplay != 0) {
  390.             if (var1 != this.vertScrollBar || this.vertScrollDisplay != 0) {
  391.                this.layoutView(0, 0);
  392.             }
  393.          }
  394.       }
  395.    }
  396.  
  397.    public boolean vertScrollBarIsVisible() {
  398.       return this.vertScrollBar.isInViewHierarchy();
  399.    }
  400.  
  401.    public boolean horizScrollBarIsVisible() {
  402.       return this.horizScrollBar.isInViewHierarchy();
  403.    }
  404.  
  405.    public void layoutView(int var1, int var2) {
  406.       this.putParts();
  407.       this.ignoreScrollBars = false;
  408.       ((View)this).setDirty(true);
  409.    }
  410. }
  411.