home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / text / CompositeView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  7.7 KB  |  447 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Rectangle;
  4. import java.awt.Shape;
  5. import javax.swing.text.Position.Bias;
  6.  
  7. public abstract class CompositeView extends View {
  8.    private static View[] ONE = new View[1];
  9.    private static View[] ZERO = new View[0];
  10.    private View[] children = new View[1];
  11.    private int nchildren = 0;
  12.    private short left;
  13.    private short right;
  14.    private short top;
  15.    private short bottom;
  16.  
  17.    public CompositeView(Element var1) {
  18.       super(var1);
  19.    }
  20.  
  21.    public void append(View var1) {
  22.       ONE[0] = var1;
  23.       this.replace(this.nchildren, 0, ONE);
  24.    }
  25.  
  26.    protected abstract void childAllocation(int var1, Rectangle var2);
  27.  
  28.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  29.       return false;
  30.    }
  31.  
  32.    protected final short getBottomInset() {
  33.       return this.bottom;
  34.    }
  35.  
  36.    public Shape getChildAllocation(int var1, Shape var2) {
  37.       Rectangle var3 = var2.getBounds();
  38.       this.childAllocation(var1, var3);
  39.       return var3;
  40.    }
  41.  
  42.    protected Rectangle getInsideAllocation(Shape var1) {
  43.       if (var1 != null) {
  44.          Rectangle var2 = new Rectangle(var1.getBounds());
  45.          var2.x += this.left;
  46.          var2.y += this.top;
  47.          var2.width -= this.left + this.right;
  48.          var2.height -= this.top + this.bottom;
  49.          return var2;
  50.       } else {
  51.          return null;
  52.       }
  53.    }
  54.  
  55.    protected final short getLeftInset() {
  56.       return this.left;
  57.    }
  58.  
  59.    protected int getNextEastWestVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  60.       boolean var6 = var4 == 3;
  61.       Rectangle var7 = this.getInsideAllocation(var3);
  62.       int var9 = var6 ? 1 : -1;
  63.       int var8;
  64.       if (var1 == -1) {
  65.          View var10 = var6 ? this.getView(0) : this.getView(this.getViewCount() - 1);
  66.          this.childAllocation(0, var7);
  67.          var8 = var10.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  68.          if (var8 == -1 && var6 && this.getViewCount() > 1) {
  69.             var10 = this.getView(1);
  70.             var7 = this.getInsideAllocation(var3);
  71.             this.childAllocation(1, var7);
  72.             var8 = var10.getNextVisualPositionFrom(-1, var5[0], var7, var4, var5);
  73.          }
  74.       } else {
  75.          int var19;
  76.          if (var2 == Bias.Backward) {
  77.             var19 = this.getViewIndexAtPosition(Math.max(((View)this).getStartOffset(), var1 - 1));
  78.          } else {
  79.             var19 = this.getViewIndexAtPosition(var1);
  80.          }
  81.  
  82.          View var11 = this.getView(var19);
  83.          this.childAllocation(var19, var7);
  84.          var8 = var11.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  85.          if (var8 == -1) {
  86.             if (this.flipEastAndWestAtEnds(var1, var2)) {
  87.                var9 *= -1;
  88.             }
  89.  
  90.             var19 += var9;
  91.             if (var19 >= 0 && var19 < this.getViewCount()) {
  92.                var11 = this.getView(var19);
  93.                var7 = this.getInsideAllocation(var3);
  94.                this.childAllocation(var19, var7);
  95.                var8 = var11.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  96.                if (var8 == var1 && var8 != -1 && var5[0] != var2) {
  97.                   var7 = this.getInsideAllocation(var3);
  98.                   this.childAllocation(var19, var7);
  99.                   var8 = var11.getNextVisualPositionFrom(var8, var5[0], var7, var4, var5);
  100.                }
  101.             }
  102.          } else {
  103.             if (this.flipEastAndWestAtEnds(var1, var2)) {
  104.                var9 *= -1;
  105.             }
  106.  
  107.             var19 += var9;
  108.             if (var5[0] != var2 && (var9 == 1 && var11.getEndOffset() == var8 || var9 == -1 && var11.getStartOffset() == var8) && var19 >= 0 && var19 < this.getViewCount()) {
  109.                var11 = this.getView(var19);
  110.                var7 = this.getInsideAllocation(var3);
  111.                this.childAllocation(var19, var7);
  112.                Position.Bias var12 = var5[0];
  113.                int var13 = var11.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  114.                if (var5[0] == var2) {
  115.                   var8 = var13;
  116.                } else {
  117.                   var5[0] = var12;
  118.                }
  119.             }
  120.          }
  121.       }
  122.  
  123.       return var8;
  124.    }
  125.  
  126.    protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  127.       if (this.getViewCount() == 0) {
  128.          return var1;
  129.       } else {
  130.          boolean var6 = var4 == 1;
  131.          Rectangle var7 = this.getInsideAllocation(var3);
  132.          int var8;
  133.          if (var1 == -1) {
  134.             View var9 = var6 ? this.getView(this.getViewCount() - 1) : this.getView(0);
  135.             this.childAllocation(0, var7);
  136.             var8 = var9.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  137.          } else {
  138.             int var12;
  139.             if (var2 == Bias.Backward && var1 > 0) {
  140.                var12 = this.getViewIndexAtPosition(var1 - 1);
  141.             } else {
  142.                var12 = this.getViewIndexAtPosition(var1);
  143.             }
  144.  
  145.             View var10 = this.getView(var12);
  146.             this.childAllocation(var12, var7);
  147.             var8 = var10.getNextVisualPositionFrom(var1, var2, var7, var4, var5);
  148.             if (var8 == -1) {
  149.                label49: {
  150.                   if (var6) {
  151.                      --var12;
  152.                      if (var12 >= 0) {
  153.                         break label49;
  154.                      }
  155.                   }
  156.  
  157.                   if (var6) {
  158.                      return var8;
  159.                   }
  160.  
  161.                   ++var12;
  162.                   if (var12 >= this.getViewCount()) {
  163.                      return var8;
  164.                   }
  165.                }
  166.  
  167.                var10 = this.getView(var12);
  168.                var7 = this.getInsideAllocation(var3);
  169.                this.childAllocation(var12, var7);
  170.                var8 = var10.getNextVisualPositionFrom(-1, var2, var7, var4, var5);
  171.             }
  172.          }
  173.  
  174.          return var8;
  175.       }
  176.    }
  177.  
  178.    public int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  179.       this.getInsideAllocation(var3);
  180.       switch (var4) {
  181.          case 1:
  182.             return this.getNextNorthSouthVisualPositionFrom(var1, var2, var3, var4, var5);
  183.          case 2:
  184.          case 4:
  185.          case 6:
  186.          default:
  187.             throw new IllegalArgumentException("Bad direction: " + var4);
  188.          case 3:
  189.             return this.getNextEastWestVisualPositionFrom(var1, var2, var3, var4, var5);
  190.          case 5:
  191.             return this.getNextNorthSouthVisualPositionFrom(var1, var2, var3, var4, var5);
  192.          case 7:
  193.             return this.getNextEastWestVisualPositionFrom(var1, var2, var3, var4, var5);
  194.       }
  195.    }
  196.  
  197.    protected final short getRightInset() {
  198.       return this.right;
  199.    }
  200.  
  201.    protected final short getTopInset() {
  202.       return this.top;
  203.    }
  204.  
  205.    public View getView(int var1) {
  206.       return this.children[var1];
  207.    }
  208.  
  209.    protected abstract View getViewAtPoint(int var1, int var2, Rectangle var3);
  210.  
  211.    protected View getViewAtPosition(int var1, Rectangle var2) {
  212.       Element var3 = ((View)this).getElement();
  213.       int var4 = var3.getElementIndex(var1);
  214.       Element var5 = var3.getElement(var4);
  215.       if (var5 != null && var4 < this.getViewCount()) {
  216.          View var6 = this.getView(var4);
  217.          if (var6.getElement() == var5) {
  218.             if (var2 != null) {
  219.                this.childAllocation(var4, var2);
  220.             }
  221.  
  222.             return var6;
  223.          }
  224.       }
  225.  
  226.       return null;
  227.    }
  228.  
  229.    public int getViewCount() {
  230.       return this.nchildren;
  231.    }
  232.  
  233.    protected int getViewIndexAtPosition(int var1) {
  234.       Element var2 = ((View)this).getElement();
  235.       return var2.getElementIndex(var1);
  236.    }
  237.  
  238.    public void insert(int var1, View var2) {
  239.       ONE[0] = var2;
  240.       this.replace(var1, 0, ONE);
  241.    }
  242.  
  243.    protected abstract boolean isAfter(int var1, int var2, Rectangle var3);
  244.  
  245.    protected abstract boolean isBefore(int var1, int var2, Rectangle var3);
  246.  
  247.    protected void loadChildren(ViewFactory var1) {
  248.       Element var2 = ((View)this).getElement();
  249.       int var3 = var2.getElementCount();
  250.       if (var3 > 0) {
  251.          View[] var4 = new View[var3];
  252.  
  253.          for(int var5 = 0; var5 < var3; ++var5) {
  254.             var4[var5] = var1.create(var2.getElement(var5));
  255.          }
  256.  
  257.          this.replace(0, 0, var4);
  258.       }
  259.  
  260.    }
  261.  
  262.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  263.       boolean var4 = var3 == Bias.Backward;
  264.       int var5 = var4 ? Math.max(0, var1 - 1) : var1;
  265.       if (var4 && var5 < ((View)this).getStartOffset()) {
  266.          return null;
  267.       } else {
  268.          int var6 = this.getViewIndexAtPosition(var5);
  269.          if (var6 != -1 && var6 < this.getViewCount()) {
  270.             View var7 = this.getView(var6);
  271.             if (var7 != null && var5 >= var7.getStartOffset() && var5 < var7.getEndOffset()) {
  272.                Rectangle var8 = this.getInsideAllocation(var2);
  273.                this.childAllocation(var6, var8);
  274.                Shape var9 = var7.modelToView(var1, var8, var3);
  275.                if (var9 == null && var7.getEndOffset() == var1) {
  276.                   ++var6;
  277.                   if (var6 < this.getViewCount()) {
  278.                      var7 = this.getView(var6);
  279.                      this.childAllocation(var6, var8);
  280.                      var9 = var7.modelToView(var1, var8, var3);
  281.                   }
  282.                }
  283.  
  284.                return var9;
  285.             }
  286.          }
  287.  
  288.          throw new BadLocationException("Position not represented by view", var1);
  289.       }
  290.    }
  291.  
  292.    public Shape modelToView(int var1, Position.Bias var2, int var3, Position.Bias var4, Shape var5) throws BadLocationException {
  293.       if (var1 == ((View)this).getStartOffset() && var3 == ((View)this).getEndOffset()) {
  294.          return var5;
  295.       } else {
  296.          Rectangle var6 = this.getInsideAllocation(var5);
  297.          Rectangle var7 = new Rectangle(var6);
  298.          View var8 = this.getViewAtPosition(var1, var7);
  299.          Rectangle var9 = new Rectangle(var6);
  300.          View var10 = this.getViewAtPosition(var3, var9);
  301.          if (var8 == var10) {
  302.             return var8 == null ? var5 : var8.modelToView(var1, var2, var3, var4, var7);
  303.          } else {
  304.             int var11 = this.getViewCount();
  305.  
  306.             for(int var12 = 0; var12 < var11; ++var12) {
  307.                View var13;
  308.                if ((var13 = this.getView(var12)) == var8 || var13 == var10) {
  309.                   Rectangle var16 = new Rectangle();
  310.                   View var14;
  311.                   Rectangle var15;
  312.                   if (var13 == var8) {
  313.                      var15 = var8.modelToView(var1, var2, var8.getEndOffset(), Bias.Backward, var7).getBounds();
  314.                      var14 = var10;
  315.                   } else {
  316.                      var15 = var10.modelToView(var10.getStartOffset(), Bias.Forward, var3, var4, var9).getBounds();
  317.                      var14 = var8;
  318.                   }
  319.  
  320.                   while(true) {
  321.                      ++var12;
  322.                      if (var12 >= var11 || this.getView(var12) == var14) {
  323.                         if (var14 != null) {
  324.                            Shape var17;
  325.                            if (var14 == var10) {
  326.                               var17 = var10.modelToView(var10.getStartOffset(), Bias.Forward, var3, var4, var9);
  327.                            } else {
  328.                               var17 = var8.modelToView(var1, var2, var8.getEndOffset(), Bias.Backward, var7);
  329.                            }
  330.  
  331.                            if (var17 instanceof Rectangle) {
  332.                               var15.add((Rectangle)var17);
  333.                            } else {
  334.                               var15.add(var17.getBounds());
  335.                            }
  336.                         }
  337.  
  338.                         return var15;
  339.                      }
  340.  
  341.                      var16.setBounds(var6);
  342.                      this.childAllocation(var12, var16);
  343.                      var15.add(var16);
  344.                   }
  345.                }
  346.             }
  347.  
  348.             throw new BadLocationException("Position not represented by view", var1);
  349.          }
  350.       }
  351.    }
  352.  
  353.    public void removeAll() {
  354.       this.replace(0, this.nchildren, ZERO);
  355.    }
  356.  
  357.    public void replace(int var1, int var2, View[] var3) {
  358.       for(int var4 = var1; var4 < var1 + var2; ++var4) {
  359.          this.children[var4].setParent((View)null);
  360.       }
  361.  
  362.       int var5 = var3.length - var2;
  363.       int var6 = var1 + var2;
  364.       int var7 = this.nchildren - var6;
  365.       int var8 = var6 + var5;
  366.       if (this.nchildren + var5 >= this.children.length) {
  367.          int var9 = Math.max(2 * this.children.length, this.nchildren + var5);
  368.          View[] var10 = new View[var9];
  369.          System.arraycopy(this.children, 0, var10, 0, var1);
  370.          System.arraycopy(var3, 0, var10, var1, var3.length);
  371.          System.arraycopy(this.children, var6, var10, var8, var7);
  372.          this.children = var10;
  373.       } else {
  374.          System.arraycopy(this.children, var6, this.children, var8, var7);
  375.          System.arraycopy(var3, 0, this.children, var1, var3.length);
  376.       }
  377.  
  378.       this.nchildren += var5;
  379.  
  380.       for(int var11 = 0; var11 < var3.length; ++var11) {
  381.          var3[var11].setParent(this);
  382.       }
  383.  
  384.    }
  385.  
  386.    protected final void setInsets(short var1, short var2, short var3, short var4) {
  387.       this.top = var1;
  388.       this.left = var2;
  389.       this.right = var4;
  390.       this.bottom = var3;
  391.    }
  392.  
  393.    protected final void setParagraphInsets(AttributeSet var1) {
  394.       this.top = (short)((int)StyleConstants.getSpaceAbove(var1));
  395.       this.left = (short)((int)StyleConstants.getLeftIndent(var1));
  396.       this.bottom = (short)((int)StyleConstants.getSpaceBelow(var1));
  397.       this.right = (short)((int)StyleConstants.getRightIndent(var1));
  398.    }
  399.  
  400.    public void setParent(View var1) {
  401.       super.setParent(var1);
  402.       if (var1 != null) {
  403.          ViewFactory var2 = ((View)this).getViewFactory();
  404.          this.loadChildren(var2);
  405.       }
  406.  
  407.    }
  408.  
  409.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  410.       Rectangle var5 = this.getInsideAllocation(var3);
  411.       if (this.isBefore((int)var1, (int)var2, var5)) {
  412.          int var12 = -1;
  413.  
  414.          try {
  415.             var12 = this.getNextVisualPositionFrom(-1, Bias.Forward, var3, 3, var4);
  416.          } catch (BadLocationException var7) {
  417.          } catch (IllegalArgumentException var8) {
  418.          }
  419.  
  420.          if (var12 == -1) {
  421.             var12 = ((View)this).getStartOffset();
  422.             var4[0] = Bias.Forward;
  423.          }
  424.  
  425.          return var12;
  426.       } else if (this.isAfter((int)var1, (int)var2, var5)) {
  427.          int var11 = -1;
  428.  
  429.          try {
  430.             var11 = this.getNextVisualPositionFrom(-1, Bias.Forward, var3, 7, var4);
  431.          } catch (BadLocationException var9) {
  432.          } catch (IllegalArgumentException var10) {
  433.          }
  434.  
  435.          if (var11 == -1) {
  436.             var11 = ((View)this).getEndOffset() - 1;
  437.             var4[0] = Bias.Forward;
  438.          }
  439.  
  440.          return var11;
  441.       } else {
  442.          View var6 = this.getViewAtPoint((int)var1, (int)var2, var5);
  443.          return var6 != null ? var6.viewToModel(var1, var2, var5, var4) : -1;
  444.       }
  445.    }
  446. }
  447.