home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / motif / MTextAreaPeer.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  7.3 KB  |  336 lines

  1. package sun.awt.motif;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dialog;
  7. import java.awt.Dimension;
  8. import java.awt.Font;
  9. import java.awt.FontMetrics;
  10. import java.awt.Frame;
  11. import java.awt.Graphics;
  12. import java.awt.TextArea;
  13. import java.awt.TextComponent;
  14. import java.awt.datatransfer.Clipboard;
  15. import java.awt.datatransfer.DataFlavor;
  16. import java.awt.datatransfer.Transferable;
  17. import java.awt.event.TextEvent;
  18. import java.awt.peer.TextAreaPeer;
  19. import java.io.BufferedReader;
  20. import java.io.IOException;
  21. import java.io.StringReader;
  22. import java.util.Vector;
  23.  
  24. public class MTextAreaPeer extends MComponentPeer implements TextAreaPeer {
  25.    static final int MARGIN = 2;
  26.    static final int BORDER = 1;
  27.    static final int SCROLLBAR = 16;
  28.    int fontHeight;
  29.    int fontAscent;
  30.    int fontLeading;
  31.    int topLine;
  32.    int numLines;
  33.    int textLength;
  34.    Vector lines;
  35.    int selStart;
  36.    int selEnd;
  37.    int movedRight;
  38.  
  39.    native void create(MComponentPeer var1);
  40.  
  41.    native void pDispose();
  42.  
  43.    void initialize() {
  44.       TextArea var1 = (TextArea)super.target;
  45.       String var2;
  46.       if ((var2 = ((TextComponent)var1).getText()) != null) {
  47.          this.setText(var2);
  48.       }
  49.  
  50.       this.select(((TextComponent)var1).getSelectionStart(), ((TextComponent)var1).getSelectionEnd());
  51.       this.setEditable(((TextComponent)var1).isEditable());
  52.  
  53.       Container var3;
  54.       for(var3 = super.target.getParent(); var3 != null && !(var3 instanceof Frame) && !(var3 instanceof Dialog); var3 = ((Component)var3).getParent()) {
  55.       }
  56.  
  57.       if (var3 instanceof Frame) {
  58.          ((MFramePeer)((Frame)var3).getPeer()).addTextComponent();
  59.       } else if (var3 instanceof Dialog) {
  60.          ((MDialogPeer)((Dialog)var3).getPeer()).addTextComponent();
  61.       }
  62.  
  63.       super.initialize();
  64.    }
  65.  
  66.    public MTextAreaPeer(TextArea var1) {
  67.       super(var1);
  68.    }
  69.  
  70.    public void setEditable(boolean var1) {
  71.       this.pSetEditable(var1);
  72.       this.setBackground(super.target.getBackground());
  73.    }
  74.  
  75.    public void setBackground(Color var1) {
  76.       TextArea var2 = (TextArea)super.target;
  77.       super.setBackground(var1);
  78.       if (((TextComponent)var2).isEditable()) {
  79.          this.setTextBackground(var1.brighter());
  80.       }
  81.  
  82.    }
  83.  
  84.    native int getExtraWidth();
  85.  
  86.    native int getExtraHeight();
  87.  
  88.    public native void setTextBackground(Color var1);
  89.  
  90.    public native void pSetEditable(boolean var1);
  91.  
  92.    public native void select(int var1, int var2);
  93.  
  94.    public native int getSelectionStart();
  95.  
  96.    public native int getSelectionEnd();
  97.  
  98.    public native void setText(String var1);
  99.  
  100.    public native String getText();
  101.  
  102.    public native void insert(String var1, int var2);
  103.  
  104.    public native void replaceRange(String var1, int var2, int var3);
  105.  
  106.    public native void setFont(Font var1);
  107.  
  108.    public native void setCaretPosition(int var1);
  109.  
  110.    public native int getCaretPosition();
  111.  
  112.    public Dimension getMinimumSize() {
  113.       return this.getMinimumSize(10, 60);
  114.    }
  115.  
  116.    public Dimension getPreferredSize(int var1, int var2) {
  117.       return this.getMinimumSize(var1, var2);
  118.    }
  119.  
  120.    public Dimension getMinimumSize(int var1, int var2) {
  121.       FontMetrics var3 = ((MComponentPeer)this).getFontMetrics(super.target.getFont());
  122.       int var4 = var3.charWidth('0');
  123.       int var5 = var3.getHeight() - var3.getLeading();
  124.       return new Dimension(var2 * var4 + this.getExtraWidth(), var1 * var5 + this.getExtraHeight());
  125.    }
  126.  
  127.    public boolean isFocusTraversable() {
  128.       return true;
  129.    }
  130.  
  131.    public void pasteFromClipboard() {
  132.       Clipboard var1 = super.target.getToolkit().getSystemClipboard();
  133.       Transferable var2 = var1.getContents(this);
  134.       if (var2 != null) {
  135.          try {
  136.             String var3 = (String)var2.getTransferData(DataFlavor.stringFlavor);
  137.             this.replaceRange(var3, this.getSelectionStart(), this.getSelectionEnd());
  138.          } catch (Exception var4) {
  139.          }
  140.       }
  141.    }
  142.  
  143.    public void print(Graphics var1) {
  144.       TextArea var2 = (TextArea)super.target;
  145.       Dimension var3 = ((Component)var2).size();
  146.       Color var4 = ((Component)var2).getBackground();
  147.       Color var5 = ((Component)var2).getForeground();
  148.       FontMetrics var6 = ((MComponentPeer)this).getFontMetrics(((Component)var2).getFont());
  149.       int var15 = 0;
  150.       String var16 = ((TextComponent)var2).getText();
  151.       this.textLength = var16.length();
  152.       BufferedReader var17 = new BufferedReader(new StringReader(var16));
  153.       int var19 = 0;
  154.       this.lines = new Vector();
  155.  
  156.       try {
  157.          String var18;
  158.          for(this.numLines = 0; (var18 = var17.readLine()) != null; ++this.numLines) {
  159.             TextLine var20 = new TextLine();
  160.             var20.text = var18;
  161.             var20.pos = var19;
  162.             this.lines.addElement(var20);
  163.             var19 += var18.length() + 1;
  164.             int var21 = var6.stringWidth(var18);
  165.             var15 = Math.max(var15, var21);
  166.          }
  167.  
  168.          var17.close();
  169.       } catch (IOException var36) {
  170.       }
  171.  
  172.       int var37 = var3.width - 18;
  173.       int var39 = var3.height - 18;
  174.       this.fontHeight = var6.getHeight();
  175.       this.fontAscent = var6.getAscent();
  176.       this.fontLeading = var6.getLeading();
  177.       byte var7 = 0;
  178.       byte var11 = 0;
  179.       int var10 = this.linesInWindow(true);
  180.       int var8 = Math.max(this.numLines - var10, 0);
  181.       var39 = var3.height - 16;
  182.       byte var9 = 0;
  183.       var37 = var3.width - 16;
  184.       int var14 = var37 - 4;
  185.       int var12 = Math.max(var15 - var14, 0);
  186.       byte var13 = 0;
  187.       var1.setColor(var4);
  188.       var1.fillRect(1, 1, var37, var39);
  189.       int var22 = var3.height - 16;
  190.       Graphics var23 = var1.create();
  191.       var1.fillRect(var3.width - 16 - 3, 1, 13, var22 - 1);
  192.  
  193.       try {
  194.          var23.translate(var3.width - 14, 0);
  195.          ((MComponentPeer)this).drawScrollbar(var23, var4, 14, var22, var7, var8, var9, var10, false);
  196.       } finally {
  197.          var23.dispose();
  198.       }
  199.  
  200.       int var24 = var3.width - 16;
  201.       Graphics var25 = var1.create();
  202.       var1.fillRect(1, var3.height - 16 - 3, var24 - 1, 13);
  203.  
  204.       try {
  205.          var25.translate(0, var3.height - 14);
  206.          ((MComponentPeer)this).drawScrollbar(var25, var4, 14, var24, var11, var12, var13, var14, true);
  207.       } finally {
  208.          var25.dispose();
  209.       }
  210.  
  211.       ((MComponentPeer)this).draw3DRect(var1, var4, 0, 0, var37 - 1, var39 - 1, false);
  212.       if (var16 != null) {
  213.          int var26 = this.linesInWindow(true);
  214.          var39 = var3.height - 20;
  215.          int var27 = Math.min(this.numLines - 1, this.topLine + var26 - 1);
  216.          this.paintLines(var1, var4, var5, this.topLine, var27);
  217.       }
  218.  
  219.       super.target.print(var1);
  220.    }
  221.  
  222.    int linesInWindow(boolean var1) {
  223.       Dimension var2 = super.target.size();
  224.       int var3 = var2.height - (4 + (var1 ? 16 : 0));
  225.       return var3 / this.fontHeight;
  226.    }
  227.  
  228.    void paintLines(Graphics var1, Color var2, Color var3, int var4, int var5) {
  229.       Dimension var6 = super.target.size();
  230.       int var7 = var6.width - 18;
  231.       int var8 = var6.height - 18;
  232.       int var9 = this.linesInWindow(true) + this.topLine;
  233.       var4 = Math.max(this.topLine, var4);
  234.       var5 = Math.min(var5, var9 - 1);
  235.       Graphics var10 = var1.create();
  236.       var10.clipRect(3, 3, var7 - 4, var8 - 4);
  237.       var10.setFont(super.target.getFont());
  238.  
  239.       for(int var11 = var4; var11 <= var5; ++var11) {
  240.          this.paintLine(var10, var2, var3, var11);
  241.       }
  242.  
  243.       var10.dispose();
  244.    }
  245.  
  246.    void paintLine(Graphics var1, Color var2, Color var3, int var4) {
  247.       Dimension var5 = super.target.size();
  248.       int var6 = this.linesInWindow(true);
  249.       if (var4 >= this.topLine && var4 < var6 + this.topLine) {
  250.          int var7 = var5.width - 18;
  251.          int var8 = 2 + this.fontLeading + (var4 - this.topLine) * this.fontHeight;
  252.          String var9 = ((TextLine)this.lines.elementAt(var4)).text;
  253.          int var10 = var9.length();
  254.          if (var4 > this.numLines - 1) {
  255.             var1.setColor(var2);
  256.             var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
  257.          } else {
  258.             byte var11 = 0;
  259.             int var12 = var4 < this.numLines - 1 ? var10 : this.textLength;
  260.             int var13 = this.pos2x(this.selStart) - this.movedRight;
  261.             int var14 = this.pos2x(this.selEnd) - this.movedRight;
  262.             Color var15 = var2.brighter();
  263.             if (this.selStart < var11 && this.selEnd > var12) {
  264.                var1.setColor(var15);
  265.                var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
  266.             } else {
  267.                var1.setColor(var2);
  268.                var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
  269.                if (this.selStart >= var11 && this.selStart <= var12) {
  270.                   var1.setColor(var15);
  271.                   if (this.selEnd > var12) {
  272.                      var1.fillRect(var13, var8 - this.fontLeading, var7 + 1 - var13, this.fontHeight);
  273.                   } else if (this.selStart != this.selEnd) {
  274.                      var1.fillRect(var13, var8 - this.fontLeading, var14 - var13, this.fontHeight);
  275.                   }
  276.                } else if (this.selEnd >= var11 && this.selEnd <= var12) {
  277.                   var1.setColor(var15);
  278.                   var1.fillRect(1, var8 - this.fontLeading, var14 - 1, this.fontHeight);
  279.                }
  280.             }
  281.  
  282.             var1.setColor(var3);
  283.             var1.drawString(var9, 2 - this.movedRight, var8 + this.fontAscent);
  284.          }
  285.       }
  286.    }
  287.  
  288.    int pos2x(int var1) {
  289.       FontMetrics var2 = ((MComponentPeer)this).getFontMetrics(super.target.getFont());
  290.       int[] var3 = var2.getWidths();
  291.       TextLine var4 = (TextLine)this.lines.elementAt(0);
  292.       boolean var6 = false;
  293.  
  294.       for(int var7 = 0; var7 < this.lines.size() - 1; ++var7) {
  295.          TextLine var5 = (TextLine)this.lines.elementAt(var7 + 1);
  296.          if (var1 >= var4.pos && var1 < var5.pos) {
  297.             break;
  298.          }
  299.  
  300.          var4 = var5;
  301.       }
  302.  
  303.       int var8 = 2;
  304.  
  305.       for(int var9 = 0; var9 < var1 - var4.pos - 1; ++var9) {
  306.          var8 += var3[var4.text.charAt(var9)];
  307.       }
  308.  
  309.       return var8;
  310.    }
  311.  
  312.    public void insertText(String var1, int var2) {
  313.       this.insert(var1, var2);
  314.    }
  315.  
  316.    public void replaceText(String var1, int var2, int var3) {
  317.       this.replaceRange(var1, var2, var3);
  318.    }
  319.  
  320.    public Dimension minimumSize() {
  321.       return this.getMinimumSize();
  322.    }
  323.  
  324.    public Dimension preferredSize(int var1, int var2) {
  325.       return this.getPreferredSize(var1, var2);
  326.    }
  327.  
  328.    public Dimension minimumSize(int var1, int var2) {
  329.       return this.getMinimumSize(var1, var2);
  330.    }
  331.  
  332.    public void valueChanged() {
  333.       ((MComponentPeer)this).postEvent(new TextEvent(super.target, 900));
  334.    }
  335. }
  336.