home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / BoxView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  8.0 KB  |  589 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Graphics;
  6. import java.awt.Rectangle;
  7. import java.awt.Shape;
  8. import javax.swing.SizeRequirements;
  9. import javax.swing.event.DocumentEvent;
  10. import javax.swing.text.Position.Bias;
  11.  
  12. public class BoxView extends CompositeView {
  13.    int axis;
  14.    int width;
  15.    int height;
  16.    boolean xValid;
  17.    boolean yValid;
  18.    SizeRequirements xRequest;
  19.    SizeRequirements yRequest;
  20.    boolean xAllocValid;
  21.    int[] xOffsets;
  22.    int[] xSpans;
  23.    boolean yAllocValid;
  24.    int[] yOffsets;
  25.    int[] ySpans;
  26.    Rectangle tempRect = new Rectangle();
  27.  
  28.    public BoxView(Element var1, int var2) {
  29.       super(var1);
  30.       this.axis = var2;
  31.       this.xOffsets = new int[0];
  32.       this.xSpans = new int[0];
  33.       this.xValid = false;
  34.       this.xAllocValid = false;
  35.       this.yOffsets = new int[0];
  36.       this.ySpans = new int[0];
  37.       this.yValid = false;
  38.       this.yAllocValid = false;
  39.    }
  40.  
  41.    public int getAxis() {
  42.       return this.axis;
  43.    }
  44.  
  45.    public void setAxis(int var1) {
  46.       this.axis = var1;
  47.       this.preferenceChanged((View)null, true, true);
  48.    }
  49.  
  50.    public void layoutChanged(int var1) {
  51.       if (var1 == 0) {
  52.          this.xAllocValid = false;
  53.       } else {
  54.          this.yAllocValid = false;
  55.       }
  56.  
  57.    }
  58.  
  59.    protected void paintChild(Graphics var1, Rectangle var2, int var3) {
  60.       View var4 = ((CompositeView)this).getView(var3);
  61.       var4.paint(var1, var2);
  62.    }
  63.  
  64.    public void replace(int var1, int var2, View[] var3) {
  65.       super.replace(var1, var2, var3);
  66.       int var4 = var3 != null ? var3.length : 0;
  67.       this.xOffsets = this.updateLayoutArray(this.xOffsets, var1, var4);
  68.       this.xSpans = this.updateLayoutArray(this.xSpans, var1, var4);
  69.       this.xValid = false;
  70.       this.xAllocValid = false;
  71.       this.yOffsets = this.updateLayoutArray(this.yOffsets, var1, var4);
  72.       this.ySpans = this.updateLayoutArray(this.ySpans, var1, var4);
  73.       this.yValid = false;
  74.       this.yAllocValid = false;
  75.    }
  76.  
  77.    int[] updateLayoutArray(int[] var1, int var2, int var3) {
  78.       int var4 = ((CompositeView)this).getViewCount();
  79.       int[] var5 = new int[var4];
  80.       System.arraycopy(var1, 0, var5, 0, var2);
  81.       System.arraycopy(var1, var2, var5, var2 + var3, var4 - var3 - var2);
  82.       return var5;
  83.    }
  84.  
  85.    protected void forwardUpdate(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
  86.       boolean var5 = this.isAllocationValid();
  87.       super.forwardUpdate(var1, var2, var3, var4);
  88.       if (var5 && !this.isAllocationValid()) {
  89.          Container var6 = ((View)this).getContainer();
  90.          if (var3 != null && var6 != null) {
  91.             int var7 = var2.getOffset();
  92.             int var8 = ((CompositeView)this).getViewIndexAtPosition(var7);
  93.             Rectangle var9 = ((CompositeView)this).getInsideAllocation(var3);
  94.             if (this.axis == 0) {
  95.                var9.x += this.xOffsets[var8];
  96.                var9.width -= this.xSpans[var8];
  97.             } else {
  98.                var9.y += this.yOffsets[var8];
  99.                var9.height -= this.ySpans[var8];
  100.             }
  101.  
  102.             ((Component)var6).repaint(var9.x, var9.y, var9.width, var9.height);
  103.          }
  104.       }
  105.  
  106.    }
  107.  
  108.    public void preferenceChanged(View var1, boolean var2, boolean var3) {
  109.       if (var2) {
  110.          this.xValid = false;
  111.          this.xAllocValid = false;
  112.       }
  113.  
  114.       if (var3) {
  115.          this.yValid = false;
  116.          this.yAllocValid = false;
  117.       }
  118.  
  119.       super.preferenceChanged(var1, var2, var3);
  120.    }
  121.  
  122.    public int getResizeWeight(int var1) {
  123.       this.checkRequests();
  124.       switch (var1) {
  125.          case 0:
  126.             if (this.xRequest.preferred != this.xRequest.minimum && this.xRequest.preferred != this.xRequest.maximum) {
  127.                return 1;
  128.             }
  129.  
  130.             return 0;
  131.          case 1:
  132.             if (this.yRequest.preferred != this.yRequest.minimum && this.yRequest.preferred != this.yRequest.maximum) {
  133.                return 1;
  134.             }
  135.  
  136.             return 0;
  137.          default:
  138.             throw new IllegalArgumentException("Invalid axis: " + var1);
  139.       }
  140.    }
  141.  
  142.    public void setSize(float var1, float var2) {
  143.       if ((int)var1 != this.width) {
  144.          this.xAllocValid = false;
  145.       }
  146.  
  147.       if ((int)var2 != this.height) {
  148.          this.yAllocValid = false;
  149.       }
  150.  
  151.       if (!this.xAllocValid || !this.yAllocValid) {
  152.          this.width = (int)var1;
  153.          this.height = (int)var2;
  154.          this.layout(this.width - ((CompositeView)this).getLeftInset() - ((CompositeView)this).getRightInset(), this.height - ((CompositeView)this).getTopInset() - ((CompositeView)this).getBottomInset());
  155.       }
  156.  
  157.    }
  158.  
  159.    public void paint(Graphics var1, Shape var2) {
  160.       Rectangle var3 = var2 instanceof Rectangle ? (Rectangle)var2 : var2.getBounds();
  161.       this.setSize((float)var3.width, (float)var3.height);
  162.       int var4 = ((CompositeView)this).getViewCount();
  163.       int var5 = var3.x + ((CompositeView)this).getLeftInset();
  164.       int var6 = var3.y + ((CompositeView)this).getTopInset();
  165.       Rectangle var7 = var1.getClipBounds();
  166.  
  167.       for(int var8 = 0; var8 < var4; ++var8) {
  168.          this.tempRect.x = var5 + this.xOffsets[var8];
  169.          this.tempRect.y = var6 + this.yOffsets[var8];
  170.          this.tempRect.width = this.xSpans[var8];
  171.          this.tempRect.height = this.ySpans[var8];
  172.          if (this.tempRect.intersects(var7)) {
  173.             this.paintChild(var1, this.tempRect, var8);
  174.          }
  175.       }
  176.  
  177.    }
  178.  
  179.    public Shape getChildAllocation(int var1, Shape var2) {
  180.       if (var2 != null) {
  181.          Shape var3 = super.getChildAllocation(var1, var2);
  182.          if (var3 != null && !this.isAllocationValid()) {
  183.             Rectangle var4 = var3 instanceof Rectangle ? (Rectangle)var3 : var3.getBounds();
  184.             if (var4.width == 0 && var4.height == 0) {
  185.                return null;
  186.             }
  187.          }
  188.  
  189.          return var3;
  190.       } else {
  191.          return null;
  192.       }
  193.    }
  194.  
  195.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  196.       if (!this.isAllocationValid()) {
  197.          Rectangle var4 = var2.getBounds();
  198.          this.setSize((float)var4.width, (float)var4.height);
  199.       }
  200.  
  201.       return super.modelToView(var1, var2, var3);
  202.    }
  203.  
  204.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  205.       if (!this.isAllocationValid()) {
  206.          Rectangle var5 = var3.getBounds();
  207.          this.setSize((float)var5.width, (float)var5.height);
  208.       }
  209.  
  210.       return super.viewToModel(var1, var2, var3, var4);
  211.    }
  212.  
  213.    public float getAlignment(int var1) {
  214.       this.checkRequests();
  215.       switch (var1) {
  216.          case 0:
  217.             return this.xRequest.alignment;
  218.          case 1:
  219.             return this.yRequest.alignment;
  220.          default:
  221.             throw new IllegalArgumentException("Invalid axis: " + var1);
  222.       }
  223.    }
  224.  
  225.    public float getPreferredSpan(int var1) {
  226.       this.checkRequests();
  227.       switch (var1) {
  228.          case 0:
  229.             return (float)this.xRequest.preferred + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  230.          case 1:
  231.             return (float)this.yRequest.preferred + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  232.          default:
  233.             throw new IllegalArgumentException("Invalid axis: " + var1);
  234.       }
  235.    }
  236.  
  237.    public float getMinimumSpan(int var1) {
  238.       this.checkRequests();
  239.       switch (var1) {
  240.          case 0:
  241.             return (float)this.xRequest.minimum + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  242.          case 1:
  243.             return (float)this.yRequest.minimum + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  244.          default:
  245.             throw new IllegalArgumentException("Invalid axis: " + var1);
  246.       }
  247.    }
  248.  
  249.    public float getMaximumSpan(int var1) {
  250.       this.checkRequests();
  251.       switch (var1) {
  252.          case 0:
  253.             return (float)this.xRequest.maximum + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  254.          case 1:
  255.             return (float)this.yRequest.maximum + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  256.          default:
  257.             throw new IllegalArgumentException("Invalid axis: " + var1);
  258.       }
  259.    }
  260.  
  261.    protected boolean isAllocationValid() {
  262.       return this.xAllocValid && this.yAllocValid;
  263.    }
  264.  
  265.    protected boolean isBefore(int var1, int var2, Rectangle var3) {
  266.       if (this.axis == 0) {
  267.          return var1 < var3.x;
  268.       } else {
  269.          return var2 < var3.y;
  270.       }
  271.    }
  272.  
  273.    protected boolean isAfter(int var1, int var2, Rectangle var3) {
  274.       if (this.axis == 0) {
  275.          return var1 > var3.width + var3.x;
  276.       } else {
  277.          return var2 > var3.height + var3.y;
  278.       }
  279.    }
  280.  
  281.    protected View getViewAtPoint(int var1, int var2, Rectangle var3) {
  282.       int var4 = ((CompositeView)this).getViewCount();
  283.       if (this.axis == 0) {
  284.          if (var1 < var3.x + this.xOffsets[0]) {
  285.             this.childAllocation(0, var3);
  286.             return ((CompositeView)this).getView(0);
  287.          } else {
  288.             for(int var6 = 0; var6 < var4; ++var6) {
  289.                if (var1 < var3.x + this.xOffsets[var6]) {
  290.                   this.childAllocation(var6 - 1, var3);
  291.                   return ((CompositeView)this).getView(var6 - 1);
  292.                }
  293.             }
  294.  
  295.             this.childAllocation(var4 - 1, var3);
  296.             return ((CompositeView)this).getView(var4 - 1);
  297.          }
  298.       } else if (var2 < var3.y + this.yOffsets[0]) {
  299.          this.childAllocation(0, var3);
  300.          return ((CompositeView)this).getView(0);
  301.       } else {
  302.          for(int var5 = 0; var5 < var4; ++var5) {
  303.             if (var2 < var3.y + this.yOffsets[var5]) {
  304.                this.childAllocation(var5 - 1, var3);
  305.                return ((CompositeView)this).getView(var5 - 1);
  306.             }
  307.          }
  308.  
  309.          this.childAllocation(var4 - 1, var3);
  310.          return ((CompositeView)this).getView(var4 - 1);
  311.       }
  312.    }
  313.  
  314.    protected void childAllocation(int var1, Rectangle var2) {
  315.       var2.x += this.xOffsets[var1];
  316.       var2.y += this.yOffsets[var1];
  317.       var2.width = this.xSpans[var1];
  318.       var2.height = this.ySpans[var1];
  319.    }
  320.  
  321.    protected void layout(int var1, int var2) {
  322.       this.checkRequests();
  323.       if (this.axis == 0) {
  324.          if (!this.xAllocValid) {
  325.             this.layoutMajorAxis(var1, 0, this.xOffsets, this.xSpans);
  326.          }
  327.  
  328.          if (!this.yAllocValid) {
  329.             this.layoutMinorAxis(var2, 1, this.yOffsets, this.ySpans);
  330.          }
  331.       } else {
  332.          if (!this.xAllocValid) {
  333.             this.layoutMinorAxis(var1, 0, this.xOffsets, this.xSpans);
  334.          }
  335.  
  336.          if (!this.yAllocValid) {
  337.             this.layoutMajorAxis(var2, 1, this.yOffsets, this.ySpans);
  338.          }
  339.       }
  340.  
  341.       this.xAllocValid = true;
  342.       this.yAllocValid = true;
  343.       int var3 = ((CompositeView)this).getViewCount();
  344.  
  345.       for(int var4 = 0; var4 < var3; ++var4) {
  346.          View var5 = ((CompositeView)this).getView(var4);
  347.          var5.setSize((float)this.xSpans[var4], (float)this.ySpans[var4]);
  348.       }
  349.  
  350.    }
  351.  
  352.    public int getWidth() {
  353.       return this.width;
  354.    }
  355.  
  356.    public int getHeight() {
  357.       return this.height;
  358.    }
  359.  
  360.    protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
  361.       long var5 = 0L;
  362.       long var7 = 0L;
  363.       long var9 = 0L;
  364.       int var11 = ((CompositeView)this).getViewCount();
  365.  
  366.       for(int var12 = 0; var12 < var11; ++var12) {
  367.          View var13 = ((CompositeView)this).getView(var12);
  368.          var4[var12] = (int)var13.getPreferredSpan(var2);
  369.          var9 += (long)var4[var12];
  370.          var5 = (long)((float)var5 + var13.getMinimumSpan(var2));
  371.          var7 = (long)((float)var7 + var13.getMaximumSpan(var2));
  372.       }
  373.  
  374.       long var22 = (long)var1 - var9;
  375.       float var15 = 0.0F;
  376.       if (var22 != 0L) {
  377.          float var16 = var22 > 0L ? (float)(var7 - var9) : (float)(var9 - var5);
  378.          if (var16 == 0.0F) {
  379.             var15 = 0.0F;
  380.          } else {
  381.             var15 = (float)var22 / var16;
  382.             var15 = Math.min(var15, 1.0F);
  383.             var15 = Math.max(var15, -1.0F);
  384.          }
  385.       }
  386.  
  387.       int var25 = 0;
  388.  
  389.       for(int var17 = 0; var17 < var11; ++var17) {
  390.          View var18 = ((CompositeView)this).getView(var17);
  391.          var3[var17] = var25;
  392.          int var19 = var15 > 0.0F ? (int)var18.getMaximumSpan(var2) - var4[var17] : var4[var17] - (int)var18.getMinimumSpan(var2);
  393.          float var20 = var15 * (float)var19;
  394.          if (var20 < 0.0F) {
  395.             var20 -= 0.5F;
  396.          } else {
  397.             var20 += 0.5F;
  398.          }
  399.  
  400.          int var21 = (int)var20;
  401.          var4[var17] += var21;
  402.          var25 = (int)Math.min((long)var25 + (long)var4[var17], 2147483647L);
  403.       }
  404.  
  405.    }
  406.  
  407.    protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
  408.       int var5 = ((CompositeView)this).getViewCount();
  409.  
  410.       for(int var6 = 0; var6 < var5; ++var6) {
  411.          View var7 = ((CompositeView)this).getView(var6);
  412.          int var8 = (int)var7.getMinimumSpan(var2);
  413.          int var9 = (int)var7.getMaximumSpan(var2);
  414.          if (var9 < var1) {
  415.             float var10 = var7.getAlignment(var2);
  416.             var3[var6] = (int)((float)(var1 - var9) * var10);
  417.             var4[var6] = var9;
  418.          } else {
  419.             var3[var6] = 0;
  420.             var4[var6] = Math.max(var8, var1);
  421.          }
  422.       }
  423.  
  424.    }
  425.  
  426.    protected SizeRequirements calculateMajorAxisRequirements(int var1, SizeRequirements var2) {
  427.       float var3 = 0.0F;
  428.       float var4 = 0.0F;
  429.       float var5 = 0.0F;
  430.       int var6 = ((CompositeView)this).getViewCount();
  431.  
  432.       for(int var7 = 0; var7 < var6; ++var7) {
  433.          View var8 = ((CompositeView)this).getView(var7);
  434.          var3 += var8.getMinimumSpan(var1);
  435.          var4 += var8.getPreferredSpan(var1);
  436.          var5 += var8.getMaximumSpan(var1);
  437.       }
  438.  
  439.       if (var2 == null) {
  440.          var2 = new SizeRequirements();
  441.       }
  442.  
  443.       var2.alignment = 0.5F;
  444.       var2.minimum = (int)var3;
  445.       var2.preferred = (int)var4;
  446.       var2.maximum = (int)var5;
  447.       return var2;
  448.    }
  449.  
  450.    protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
  451.       int var3 = 0;
  452.       long var4 = 0L;
  453.       int var6 = Integer.MAX_VALUE;
  454.       int var7 = ((CompositeView)this).getViewCount();
  455.  
  456.       for(int var8 = 0; var8 < var7; ++var8) {
  457.          View var9 = ((CompositeView)this).getView(var8);
  458.          var3 = Math.max((int)var9.getMinimumSpan(var1), var3);
  459.          var4 = Math.max((long)((int)var9.getPreferredSpan(var1)), var4);
  460.          var6 = Math.max((int)var9.getMaximumSpan(var1), var6);
  461.       }
  462.  
  463.       if (var2 == null) {
  464.          var2 = new SizeRequirements();
  465.          var2.alignment = 0.5F;
  466.       }
  467.  
  468.       var2.preferred = (int)var4;
  469.       var2.minimum = var3;
  470.       var2.maximum = var6;
  471.       return var2;
  472.    }
  473.  
  474.    void checkRequests() {
  475.       if (this.axis == 0) {
  476.          if (!this.xValid) {
  477.             this.xRequest = this.calculateMajorAxisRequirements(0, this.xRequest);
  478.          }
  479.  
  480.          if (!this.yValid) {
  481.             this.yRequest = this.calculateMinorAxisRequirements(1, this.yRequest);
  482.          }
  483.       } else {
  484.          if (!this.xValid) {
  485.             this.xRequest = this.calculateMinorAxisRequirements(0, this.xRequest);
  486.          }
  487.  
  488.          if (!this.yValid) {
  489.             this.yRequest = this.calculateMajorAxisRequirements(1, this.yRequest);
  490.          }
  491.       }
  492.  
  493.       this.yValid = true;
  494.       this.xValid = true;
  495.    }
  496.  
  497.    protected void baselineLayout(int var1, int var2, int[] var3, int[] var4) {
  498.       int var5 = (int)((float)var1 * this.getAlignment(var2));
  499.       int var6 = var1 - var5;
  500.       int var7 = ((CompositeView)this).getViewCount();
  501.  
  502.       for(int var8 = 0; var8 < var7; ++var8) {
  503.          View var9 = ((CompositeView)this).getView(var8);
  504.          float var10 = var9.getAlignment(var2);
  505.          int var11 = (int)var9.getPreferredSpan(var2);
  506.          int var12 = (int)((float)var11 * var10);
  507.          int var13 = var11 - var12;
  508.          if (var11 > var1) {
  509.             if ((int)var9.getMinimumSpan(var2) < var11) {
  510.                var12 = var5;
  511.                var13 = var6;
  512.             } else if (var9.getResizeWeight(var2) > 0 && var9.getMaximumSpan(var2) != (float)var11) {
  513.                throw new Error("should not happen: " + var9.getClass());
  514.             }
  515.          } else if (var11 < var1 && (int)var9.getMaximumSpan(var2) > var11) {
  516.             var12 = var5;
  517.             var13 = var6;
  518.          }
  519.  
  520.          var3[var8] = var5 - var12;
  521.          var4[var8] = var12 + var13;
  522.       }
  523.  
  524.    }
  525.  
  526.    protected SizeRequirements baselineRequirements(int var1, SizeRequirements var2) {
  527.       int var3 = 0;
  528.       int var4 = 0;
  529.       int var5 = 0;
  530.       int var6 = ((CompositeView)this).getViewCount();
  531.  
  532.       for(int var7 = 0; var7 < var6; ++var7) {
  533.          View var8 = ((CompositeView)this).getView(var7);
  534.          int var9 = (int)var8.getPreferredSpan(var1);
  535.          int var10 = (int)(var8.getAlignment(var1) * (float)var9);
  536.          int var11 = var9 - var10;
  537.          var3 = Math.max(var11, var3);
  538.          var4 = Math.max(var10, var4);
  539.          var5 += var8.getResizeWeight(var1);
  540.       }
  541.  
  542.       if (var2 == null) {
  543.          var2 = new SizeRequirements();
  544.       }
  545.  
  546.       var2.preferred = var3 + var4;
  547.       if (var5 != 0) {
  548.          var2.maximum = Integer.MAX_VALUE;
  549.          var2.minimum = 0;
  550.       } else {
  551.          var2.maximum = var2.preferred;
  552.          var2.minimum = var2.preferred;
  553.       }
  554.  
  555.       if (var2.preferred > 0) {
  556.          var2.alignment = (float)var4 / (float)var2.preferred;
  557.       } else {
  558.          var2.alignment = 0.5F;
  559.       }
  560.  
  561.       return var2;
  562.    }
  563.  
  564.    protected int getOffset(int var1, int var2) {
  565.       int[] var3 = var1 == 0 ? this.xOffsets : this.yOffsets;
  566.       return var3[var2];
  567.    }
  568.  
  569.    protected int getSpan(int var1, int var2) {
  570.       int[] var3 = var1 == 0 ? this.xSpans : this.ySpans;
  571.       return var3[var2];
  572.    }
  573.  
  574.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  575.       if (this.axis == 1) {
  576.          int var3 = var2 == Bias.Backward ? Math.max(0, var1 - 1) : var1;
  577.          int var4 = ((CompositeView)this).getViewIndexAtPosition(var3);
  578.          if (var4 != -1) {
  579.             View var5 = ((CompositeView)this).getView(var4);
  580.             if (var5 != null && var5 instanceof CompositeView) {
  581.                return ((CompositeView)var5).flipEastAndWestAtEnds(var1, var2);
  582.             }
  583.          }
  584.       }
  585.  
  586.       return false;
  587.    }
  588. }
  589.