home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / text / CompositeView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  4.5 KB  |  196 lines

  1. package com.sun.java.swing.text;
  2.  
  3. import java.awt.Rectangle;
  4. import java.awt.Shape;
  5.  
  6. public abstract class CompositeView extends View {
  7.    private static View[] ONE = new View[1];
  8.    private static View[] ZERO = new View[0];
  9.    private View[] children = new View[1];
  10.    private int nchildren = 0;
  11.    private short left;
  12.    private short right;
  13.    private short top;
  14.    private short bottom;
  15.  
  16.    public CompositeView(Element var1) {
  17.       super(var1);
  18.    }
  19.  
  20.    protected void loadChildren(ViewFactory var1) {
  21.       Element var2 = ((View)this).getElement();
  22.       int var3 = var2.getElementCount();
  23.       if (var3 > 0) {
  24.          View[] var4 = new View[var3];
  25.  
  26.          for(int var5 = 0; var5 < var3; ++var5) {
  27.             var4[var5] = var1.create(var2.getElement(var5));
  28.          }
  29.  
  30.          this.replace(0, 0, var4);
  31.       }
  32.  
  33.    }
  34.  
  35.    public void removeAll() {
  36.       this.replace(0, this.nchildren, ZERO);
  37.    }
  38.  
  39.    public void insert(int var1, View var2) {
  40.       ONE[0] = var2;
  41.       this.replace(var1, 0, ONE);
  42.    }
  43.  
  44.    public void append(View var1) {
  45.       ONE[0] = var1;
  46.       this.replace(this.nchildren, 0, ONE);
  47.    }
  48.  
  49.    public void replace(int var1, int var2, View[] var3) {
  50.       for(int var4 = var1; var4 < var1 + var2; ++var4) {
  51.          this.children[var4].setParent((View)null);
  52.       }
  53.  
  54.       int var5 = var3.length - var2;
  55.       int var6 = var1 + var2;
  56.       int var7 = this.nchildren - var6;
  57.       int var8 = var6 + var5;
  58.       if (this.nchildren + var5 >= this.children.length) {
  59.          int var9 = Math.max(2 * this.children.length, this.nchildren + var5);
  60.          View[] var10 = new View[var9];
  61.          System.arraycopy(this.children, 0, var10, 0, var1);
  62.          System.arraycopy(var3, 0, var10, var1, var3.length);
  63.          System.arraycopy(this.children, var6, var10, var8, var7);
  64.          this.children = var10;
  65.       } else {
  66.          System.arraycopy(this.children, var6, this.children, var8, var7);
  67.          System.arraycopy(var3, 0, this.children, var1, var3.length);
  68.       }
  69.  
  70.       this.nchildren += var5;
  71.  
  72.       for(int var11 = 0; var11 < var3.length; ++var11) {
  73.          var3[var11].setParent(this);
  74.       }
  75.  
  76.    }
  77.  
  78.    public void setParent(View var1) {
  79.       super.setParent(var1);
  80.       if (var1 != null) {
  81.          ViewFactory var2 = ((View)this).getViewFactory();
  82.          this.loadChildren(var2);
  83.       }
  84.  
  85.    }
  86.  
  87.    public int getViewCount() {
  88.       return this.nchildren;
  89.    }
  90.  
  91.    public View getView(int var1) {
  92.       return this.children[var1];
  93.    }
  94.  
  95.    public Shape getChildAllocation(int var1, Shape var2) {
  96.       Rectangle var3 = var2.getBounds();
  97.       this.childAllocation(var1, var3);
  98.       return var3;
  99.    }
  100.  
  101.    public Shape modelToView(int var1, Shape var2) throws BadLocationException {
  102.       Rectangle var3 = this.getInsideAllocation(var2);
  103.       View var4 = this.getViewAtPosition(var1, var3);
  104.       if (var4 != null) {
  105.          int var5 = var4.getStartOffset();
  106.          int var6 = var4.getEndOffset();
  107.          if (var1 >= var5 && var1 < var6) {
  108.             return var4.modelToView(var1, var3);
  109.          }
  110.       }
  111.  
  112.       throw new BadLocationException("Position not represented by view", var1);
  113.    }
  114.  
  115.    public int viewToModel(float var1, float var2, Shape var3) {
  116.       Rectangle var4 = this.getInsideAllocation(var3);
  117.       if (this.isBefore((int)var1, (int)var2, var4)) {
  118.          return ((View)this).getStartOffset();
  119.       } else if (this.isAfter((int)var1, (int)var2, var4)) {
  120.          return ((View)this).getEndOffset() - 1;
  121.       } else {
  122.          View var5 = this.getViewAtPoint((int)var1, (int)var2, var4);
  123.          return var5 != null ? var5.viewToModel(var1, var2, var4) : -1;
  124.       }
  125.    }
  126.  
  127.    protected abstract boolean isBefore(int var1, int var2, Rectangle var3);
  128.  
  129.    protected abstract boolean isAfter(int var1, int var2, Rectangle var3);
  130.  
  131.    protected abstract View getViewAtPoint(int var1, int var2, Rectangle var3);
  132.  
  133.    protected abstract void childAllocation(int var1, Rectangle var2);
  134.  
  135.    protected View getViewAtPosition(int var1, Rectangle var2) {
  136.       Element var3 = ((View)this).getElement();
  137.       int var4 = var3.getElementIndex(var1);
  138.       Element var5 = var3.getElement(var4);
  139.       if (var5 != null && var4 < this.getViewCount()) {
  140.          View var6 = this.getView(var4);
  141.          if (var6.getElement() == var5) {
  142.             if (var2 != null) {
  143.                this.childAllocation(var4, var2);
  144.             }
  145.  
  146.             return var6;
  147.          }
  148.       }
  149.  
  150.       return null;
  151.    }
  152.  
  153.    protected Rectangle getInsideAllocation(Shape var1) {
  154.       if (var1 != null) {
  155.          Rectangle var2 = new Rectangle(var1.getBounds());
  156.          var2.x += this.left;
  157.          var2.y += this.top;
  158.          var2.width -= this.left + this.right;
  159.          var2.height -= this.top + this.bottom;
  160.          return var2;
  161.       } else {
  162.          return null;
  163.       }
  164.    }
  165.  
  166.    protected final void setParagraphInsets(AttributeSet var1) {
  167.       this.top = (short)((int)StyleConstants.getSpaceAbove(var1));
  168.       this.left = (short)((int)StyleConstants.getLeftIndent(var1));
  169.       this.bottom = (short)((int)StyleConstants.getSpaceBelow(var1));
  170.       this.right = (short)((int)StyleConstants.getRightIndent(var1));
  171.    }
  172.  
  173.    protected final void setInsets(short var1, short var2, short var3, short var4) {
  174.       this.top = var1;
  175.       this.left = var2;
  176.       this.right = var4;
  177.       this.bottom = var3;
  178.    }
  179.  
  180.    protected final short getLeftInset() {
  181.       return this.left;
  182.    }
  183.  
  184.    protected final short getRightInset() {
  185.       return this.right;
  186.    }
  187.  
  188.    protected final short getTopInset() {
  189.       return this.top;
  190.    }
  191.  
  192.    protected final short getBottomInset() {
  193.       return this.bottom;
  194.    }
  195. }
  196.