home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / JCLASS.BIN / KLG.JAR / jclass / bwt / TextLine.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-05  |  3.7 KB  |  174 lines

  1. package jclass.bwt;
  2.  
  3. import java.awt.Color;
  4. import java.awt.FontMetrics;
  5. import java.awt.Graphics;
  6. import java.awt.Rectangle;
  7.  
  8. class TextLine {
  9.    JCTextAreaComponent comp;
  10.    char[] text;
  11.    int row;
  12.    int start_pos;
  13.    int num_char;
  14.    int width;
  15.  
  16.    TextLine(JCTextAreaComponent var1, int var2, String var3) {
  17.       this.text = new char[0];
  18.       this.comp = var1;
  19.       this.row = var2;
  20.       this.setText(var3);
  21.    }
  22.  
  23.    TextLine(JCTextAreaComponent var1, int var2, char[] var3, int var4, int var5) {
  24.       this(var1, var2, new String(var3, var4, var5));
  25.       this.start_pos = var4;
  26.    }
  27.  
  28.    synchronized void setStartPos(int var1) {
  29.       this.start_pos = var1;
  30.    }
  31.  
  32.    void calcWidth() {
  33.       this.width = this.comp.fm.charsWidth(this.text, 0, this.num_char);
  34.    }
  35.  
  36.    synchronized void append(String var1) {
  37.       this.insert(var1, this.num_char);
  38.    }
  39.  
  40.    synchronized void deleteToEnd(int var1) {
  41.       this.delete(var1, this.num_char);
  42.    }
  43.  
  44.    synchronized void delete(int var1, int var2) {
  45.       if (var2 > var1) {
  46.          this.width -= this.comp.fm.charsWidth(this.text, var1, var2 - var1);
  47.          System.arraycopy(this.text, var2, this.text, var1, this.num_char - var2);
  48.          this.num_char -= var2 - var1;
  49.       }
  50.  
  51.    }
  52.  
  53.    void insert(String var1, int var2) {
  54.       int var3 = var1 != null ? var1.length() : 0;
  55.       if (var3 != 0) {
  56.          if (this.num_char + var3 + var2 >= this.text.length) {
  57.             char[] var4 = new char[Math.max(this.num_char * 2, this.num_char + var2 + var3 + 1)];
  58.             System.arraycopy(this.text, 0, var4, 0, this.num_char);
  59.             this.text = var4;
  60.          }
  61.  
  62.          if (this.num_char > var2) {
  63.             System.arraycopy(this.text, var2, this.text, var2 + var3, this.num_char - var2);
  64.          }
  65.  
  66.          var1.getChars(0, var3, this.text, var2);
  67.          this.num_char += var3;
  68.          this.width += this.comp.fm.stringWidth(var1);
  69.       }
  70.    }
  71.  
  72.    synchronized void replace(String var1, int var2, int var3) {
  73.       this.delete(var2, var3);
  74.       this.insert(var1, var2);
  75.    }
  76.  
  77.    synchronized void setText(String var1) {
  78.       this.num_char = 0;
  79.       this.insert(var1, 0);
  80.       this.calcWidth();
  81.    }
  82.  
  83.    int getWidth() {
  84.       return this.width;
  85.    }
  86.  
  87.    int getWidth(int var1) {
  88.       int var2 = Math.max(0, Math.min(this.num_char, var1 - this.start_pos));
  89.       return this.comp.fm.charsWidth(this.text, 0, var2);
  90.    }
  91.  
  92.    int getWidthToEnd(int var1) {
  93.       int var2 = var1 - this.start_pos;
  94.       return this.comp.fm.charsWidth(this.text, var2, Math.max(0, this.num_char - var2));
  95.    }
  96.  
  97.    int xToPosition(int var1) {
  98.       int[] var2 = this.comp.fm.getWidths();
  99.       Rectangle var4 = this.comp.getDrawingArea();
  100.       switch (this.comp.alignment) {
  101.          case 1:
  102.             var1 -= var4.x + (var4.width - this.width) / 2;
  103.             break;
  104.          case 2:
  105.             var1 -= var4.x + var4.width - this.width - this.comp.horiz_origin;
  106.             break;
  107.          default:
  108.             var1 -= var4.x - this.comp.horiz_origin;
  109.       }
  110.  
  111.       int var3;
  112.       for(var3 = 0; var3 < this.num_char; ++var3) {
  113.          int var5 = var2[this.text[var3]];
  114.          if (var1 < var5 / 2) {
  115.             break;
  116.          }
  117.  
  118.          var1 -= var5;
  119.       }
  120.  
  121.       return var3 + this.start_pos;
  122.    }
  123.  
  124.    synchronized void paint(Graphics var1) {
  125.       Rectangle var2 = this.comp.getDrawingArea();
  126.       var2.reshape(var2.x - this.comp.horiz_origin, var2.y + this.comp.getRowPosition(this.row) - this.comp.vert_origin, var2.width + this.comp.horiz_origin, this.comp.getRowHeight(this.row));
  127.       if (var2.intersects(this.comp.getPaintRect())) {
  128.          FontMetrics var3 = this.comp.fm;
  129.          int var4 = var2.height;
  130.          int var5 = var4 - var3.getAscent();
  131.          int var6 = var2.x;
  132.          int var7 = var2.y + var4 - var5;
  133.          int var8 = this.comp.select_start - this.start_pos;
  134.          int var9 = this.comp.select_end - this.start_pos;
  135.          switch (this.comp.alignment) {
  136.             case 1:
  137.                var6 += (var2.width - this.width) / 2;
  138.                break;
  139.             case 2:
  140.                var6 += var2.width - this.width;
  141.          }
  142.  
  143.          if (var8 != var9 && var8 < this.num_char && var9 >= 0) {
  144.             var8 = Math.max(var8, 0);
  145.             var9 = Math.min(var9, this.num_char);
  146.             if (var8 > 0) {
  147.                var1.drawChars(this.text, 0, var8, var6, var7);
  148.                var6 += var3.charsWidth(this.text, 0, var8);
  149.             }
  150.  
  151.             int var10 = var3.charsWidth(this.text, var8, var9 - var8);
  152.             Color var11 = var1.getColor();
  153.             this.comp.setSelectedBg(var1);
  154.             var1.fillRect(var6, var2.y, var10, var2.height);
  155.             this.comp.setSelectedFg(var1);
  156.             var1.drawChars(this.text, var8, var9 - var8, var6, var7);
  157.             var6 += var10;
  158.             var1.setColor(var11);
  159.             if (var9 < this.num_char) {
  160.                var1.drawChars(this.text, var9, this.num_char - var9, var6, var7);
  161.                return;
  162.             }
  163.          } else {
  164.             var1.drawChars(this.text, 0, this.num_char, var6, var7);
  165.          }
  166.  
  167.       }
  168.    }
  169.  
  170.    public String toString() {
  171.       return "row=" + this.row + " start=" + this.start_pos + " num_char=" + this.num_char + " width=" + this.width + " text=" + new String(this.text, 0, this.num_char) + "|";
  172.    }
  173. }
  174.