home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2001 December / dppcpro1201.iso / Extras / maple / Viewer / WebEQ / MMLViewerInstall.cab / MMLViewerApplet.cab / webeq3 / schema / MTr.class (.txt) < prev    next >
Encoding:
Java Class File  |  2001-05-24  |  4.9 KB  |  218 lines

  1. package webeq3.schema;
  2.  
  3. import java.awt.Graphics;
  4. import java.util.StringTokenizer;
  5. import webeq3.app.Equation;
  6. import webeq3.array.ArrayDims;
  7. import webeq3.constants.ArrayConstants;
  8. import webeq3.constants.AttributeConstants;
  9.  
  10. public class MTr extends LineBreakRewriter implements ArrayConstants, AttributeConstants {
  11.    ArrayDims dims = null;
  12.    int row = 0;
  13.    int[] COL;
  14.  
  15.    public MTr(Box var1) {
  16.       super(var1);
  17.       super.type = 68;
  18.       super.kind = 5;
  19.    }
  20.  
  21.    public MTr() {
  22.       super.type = 68;
  23.       super.kind = 5;
  24.    }
  25.  
  26.    public MTr(Equation var1) {
  27.       super(var1);
  28.       super.type = 68;
  29.       super.kind = 5;
  30.    }
  31.  
  32.    public void layout() {
  33.       super.left = 0;
  34.       super.top = 0;
  35.       super.width = 0;
  36.       super.ascent = 0;
  37.       super.descent = 0;
  38.       super.embellished_op = false;
  39.       super.is_spacelike = false;
  40.       this.size();
  41.       if (super.useLinearForm) {
  42.          this.position();
  43.       }
  44.  
  45.    }
  46.  
  47.    public void size() {
  48.       super.bgcolor = ((Box)this).resolveColor(17);
  49.       super.fgcolor = ((Box)this).resolveColor(4);
  50.       if (super.useLinearForm) {
  51.          super.lb_rewrite.left = 0;
  52.          super.lb_rewrite.top = 0;
  53.          super.lb_rewrite.width = 0;
  54.          super.lb_rewrite.ascent = 0;
  55.          super.lb_rewrite.descent = 0;
  56.          super.lb_rewrite.embellished_op = false;
  57.          super.lb_rewrite.is_spacelike = false;
  58.          super.lb_rewrite.size();
  59.          super.width = super.lb_rewrite.getWidth();
  60.          super.ascent = super.lb_rewrite.getAscent();
  61.          super.descent = super.lb_rewrite.getDescent();
  62.          super.height = super.ascent + super.descent;
  63.       } else {
  64.          int var2 = 0;
  65.          this.storeColAlign();
  66.          int var3 = this.fetchRowAlign();
  67.          if (super.children.size() == 0) {
  68.             this.dims.setCellSpan(this.row, this.fitCol(this.row, 0, 1), 1, 1);
  69.          } else {
  70.             this.COL = new int[super.children.size()];
  71.  
  72.             for(int var4 = 0; var4 < super.children.size(); ++var4) {
  73.                MTd var1 = (MTd)((Box)this).getChild(var4);
  74.                this.COL[var4] = this.fitCol(this.row, var2, var1.getCellCspan());
  75.                var2 = this.COL[var4] + var1.getCellCspan();
  76.                var1.setIndex(this.row, this.COL[var4]);
  77.                var1.depth = super.depth;
  78.                ((Box)var1).layout();
  79.                this.dims.setCellDims(this.row, this.COL[var4], var1);
  80.                this.updateColAlign(this.row, this.COL[var4], var1);
  81.             }
  82.          }
  83.  
  84.          this.updateRowAlign(var3);
  85.  
  86.          for(int var6 = 0; var6 < super.children.size(); ++var6) {
  87.             MTd var5 = (MTd)((Box)this).getChild(var6);
  88.             var5.setCellAlign();
  89.          }
  90.       }
  91.  
  92.    }
  93.  
  94.    public void position() {
  95.       if (super.useLinearForm) {
  96.          super.lb_rewrite.setTop(0);
  97.          super.lb_rewrite.setLeft(0);
  98.          super.lb_rewrite.position();
  99.       } else {
  100.          for(int var2 = 0; var2 < super.children.size(); ++var2) {
  101.             MTd var1 = (MTd)((Box)this).getChild(var2);
  102.             ((Box)var1).setTop(this.dims.getCellTop(this.row, this.COL[var2]));
  103.             ((Box)var1).setLeft(this.dims.getCellLeft(this.row, this.COL[var2]));
  104.          }
  105.       }
  106.  
  107.    }
  108.  
  109.    public void setDims(ArrayDims var1, int var2) {
  110.       this.dims = var1;
  111.       this.row = var2;
  112.    }
  113.  
  114.    private int fitCol(int var1, int var2, int var3) {
  115.       int var4 = 0;
  116.  
  117.       for(int var5 = 0; var5 < var3; ++var5) {
  118.          var4 = var2 + var5;
  119.          if (var4 <= this.dims.getCurNumCols() - 1) {
  120.             try {
  121.                this.dims.getCell(var1, var4);
  122.                if (this.dims.getCell(var1, var4).occupied) {
  123.                   var2 = var4 + 1;
  124.                   return this.fitCol(var1, var2, var3);
  125.                }
  126.             } catch (ArrayIndexOutOfBoundsException var7) {
  127.             }
  128.          }
  129.  
  130.          if (var5 > this.dims.getCurNumCols() - 1) {
  131.             return var2;
  132.          }
  133.       }
  134.  
  135.       return var2;
  136.    }
  137.  
  138.    private int fetchRowAlign() {
  139.       boolean var1 = false;
  140.       String var2 = super.attributes[30] == null ? "" : super.attributes[30].trim();
  141.       if (var2.equals("top")) {
  142.          return 10;
  143.       } else if (var2.equals("bottom")) {
  144.          return 11;
  145.       } else if (var2.equals("center")) {
  146.          return 2;
  147.       } else if (var2.equals("baseline")) {
  148.          return 12;
  149.       } else {
  150.          return var2.equals("axis") ? 13 : this.dims.getRAfromMtable(this.row);
  151.       }
  152.    }
  153.  
  154.    private void updateRowAlign(int var1) {
  155.       this.dims.setRowAlign(this.row, var1);
  156.  
  157.       for(int var2 = 0; var2 < this.dims.getCurNumCols(); ++var2) {
  158.          this.dims.getCell(this.row, var2).ra = var1;
  159.       }
  160.  
  161.    }
  162.  
  163.    private void storeColAlign() {
  164.       Object var1 = null;
  165.       this.dims.MTrColAlignValues.removeAllElements();
  166.       String var2 = super.attributes[31] == null ? "" : super.attributes[31];
  167.       StringTokenizer var3 = new StringTokenizer(var2.toLowerCase());
  168.  
  169.       while(var3.hasMoreTokens()) {
  170.          String var4 = var3.nextToken();
  171.          this.dims.MTrColAlignValues.addElement(var4);
  172.       }
  173.  
  174.    }
  175.  
  176.    private void updateColAlign(int var1, int var2, MTd var3) {
  177.       if (this.dims.MTrColAlignValues.size() != 0) {
  178.          this.dims.getCell(var1, var2).ca = var2 < this.dims.MTrColAlignValues.size() ? this.dims.colValueToType((String)this.dims.MTrColAlignValues.elementAt(var2)) : this.dims.colValueToType((String)this.dims.MTrColAlignValues.lastElement());
  179.       }
  180.    }
  181.  
  182.    protected void rewrite() {
  183.       super.lb_rewrite = new MRow(((Box)this).getParent());
  184.       MO var1 = new MO(super.lb_rewrite);
  185.       ((Box)var1).addData("[");
  186.       super.lb_rewrite.addChild(var1);
  187.  
  188.       for(int var4 = 0; var4 < super.children.size() - 1; ++var4) {
  189.          MTd var2 = (MTd)((Box)this).getChild(var4);
  190.          super.lb_rewrite.addChild(var2);
  191.          ((Box)var2).setParent(this);
  192.          var2.rewrite();
  193.          MO var3 = new MO(super.lb_rewrite);
  194.          ((Box)var3).addData(",");
  195.          super.lb_rewrite.addChild(var3);
  196.       }
  197.  
  198.       MTd var6 = (MTd)((Box)this).getChild(super.children.size() - 1);
  199.       super.lb_rewrite.addChild(var6);
  200.       ((Box)var6).setParent(this);
  201.       var6.rewrite();
  202.       var1 = new MO(super.lb_rewrite);
  203.       ((Box)var1).addData("]");
  204.       super.lb_rewrite.addChild(var1);
  205.    }
  206.  
  207.    public void paint(Graphics var1, int var2, int var3) {
  208.       if (super.useLinearForm) {
  209.          super.lb_rewrite.paint(var1, var2 + super.left, var3 + super.top);
  210.       } else {
  211.          super.paint(var1, var2, var3);
  212.       }
  213.  
  214.       super.absleft = var2 + super.left;
  215.       super.abstop = var3 + super.top;
  216.    }
  217. }
  218.