home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.motif;
-
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dialog;
- import java.awt.Dimension;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Frame;
- import java.awt.Graphics;
- import java.awt.TextArea;
- import java.awt.TextComponent;
- import java.awt.datatransfer.Clipboard;
- import java.awt.datatransfer.DataFlavor;
- import java.awt.datatransfer.Transferable;
- import java.awt.event.TextEvent;
- import java.awt.peer.TextAreaPeer;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.StringReader;
- import java.util.Vector;
-
- public class MTextAreaPeer extends MComponentPeer implements TextAreaPeer {
- static final int MARGIN = 2;
- static final int BORDER = 1;
- static final int SCROLLBAR = 16;
- int fontHeight;
- int fontAscent;
- int fontLeading;
- int topLine;
- int numLines;
- int textLength;
- Vector lines;
- int selStart;
- int selEnd;
- int movedRight;
-
- native void create(MComponentPeer var1);
-
- native void pDispose();
-
- void initialize() {
- TextArea var1 = (TextArea)super.target;
- String var2;
- if ((var2 = ((TextComponent)var1).getText()) != null) {
- this.setText(var2);
- }
-
- this.select(((TextComponent)var1).getSelectionStart(), ((TextComponent)var1).getSelectionEnd());
- this.setEditable(((TextComponent)var1).isEditable());
-
- Container var3;
- for(var3 = super.target.getParent(); var3 != null && !(var3 instanceof Frame) && !(var3 instanceof Dialog); var3 = ((Component)var3).getParent()) {
- }
-
- if (var3 instanceof Frame) {
- ((MFramePeer)((Frame)var3).getPeer()).addTextComponent();
- } else if (var3 instanceof Dialog) {
- ((MDialogPeer)((Dialog)var3).getPeer()).addTextComponent();
- }
-
- super.initialize();
- }
-
- public MTextAreaPeer(TextArea var1) {
- super(var1);
- }
-
- public void setEditable(boolean var1) {
- this.pSetEditable(var1);
- this.setBackground(super.target.getBackground());
- }
-
- public void setBackground(Color var1) {
- TextArea var2 = (TextArea)super.target;
- super.setBackground(var1);
- if (((TextComponent)var2).isEditable()) {
- this.setTextBackground(var1.brighter());
- }
-
- }
-
- native int getExtraWidth();
-
- native int getExtraHeight();
-
- public native void setTextBackground(Color var1);
-
- public native void pSetEditable(boolean var1);
-
- public native void select(int var1, int var2);
-
- public native int getSelectionStart();
-
- public native int getSelectionEnd();
-
- public native void setText(String var1);
-
- public native String getText();
-
- public native void insert(String var1, int var2);
-
- public native void replaceRange(String var1, int var2, int var3);
-
- public native void setFont(Font var1);
-
- public native void setCaretPosition(int var1);
-
- public native int getCaretPosition();
-
- public Dimension getMinimumSize() {
- return this.getMinimumSize(10, 60);
- }
-
- public Dimension getPreferredSize(int var1, int var2) {
- return this.getMinimumSize(var1, var2);
- }
-
- public Dimension getMinimumSize(int var1, int var2) {
- FontMetrics var3 = ((MComponentPeer)this).getFontMetrics(super.target.getFont());
- int var4 = var3.charWidth('0');
- int var5 = var3.getHeight() - var3.getLeading();
- return new Dimension(var2 * var4 + this.getExtraWidth(), var1 * var5 + this.getExtraHeight());
- }
-
- public boolean isFocusTraversable() {
- return true;
- }
-
- public void pasteFromClipboard() {
- Clipboard var1 = super.target.getToolkit().getSystemClipboard();
- Transferable var2 = var1.getContents(this);
- if (var2 != null) {
- try {
- String var3 = (String)var2.getTransferData(DataFlavor.stringFlavor);
- this.replaceRange(var3, this.getSelectionStart(), this.getSelectionEnd());
- } catch (Exception var4) {
- }
- }
- }
-
- public void print(Graphics var1) {
- TextArea var2 = (TextArea)super.target;
- Dimension var3 = ((Component)var2).size();
- Color var4 = ((Component)var2).getBackground();
- Color var5 = ((Component)var2).getForeground();
- FontMetrics var6 = ((MComponentPeer)this).getFontMetrics(((Component)var2).getFont());
- int var15 = 0;
- String var16 = ((TextComponent)var2).getText();
- this.textLength = var16.length();
- BufferedReader var17 = new BufferedReader(new StringReader(var16));
- int var19 = 0;
- this.lines = new Vector();
-
- try {
- String var18;
- for(this.numLines = 0; (var18 = var17.readLine()) != null; ++this.numLines) {
- TextLine var20 = new TextLine();
- var20.text = var18;
- var20.pos = var19;
- this.lines.addElement(var20);
- var19 += var18.length() + 1;
- int var21 = var6.stringWidth(var18);
- var15 = Math.max(var15, var21);
- }
-
- var17.close();
- } catch (IOException var36) {
- }
-
- int var37 = var3.width - 18;
- int var39 = var3.height - 18;
- this.fontHeight = var6.getHeight();
- this.fontAscent = var6.getAscent();
- this.fontLeading = var6.getLeading();
- byte var7 = 0;
- byte var11 = 0;
- int var10 = this.linesInWindow(true);
- int var8 = Math.max(this.numLines - var10, 0);
- var39 = var3.height - 16;
- byte var9 = 0;
- var37 = var3.width - 16;
- int var14 = var37 - 4;
- int var12 = Math.max(var15 - var14, 0);
- byte var13 = 0;
- var1.setColor(var4);
- var1.fillRect(1, 1, var37, var39);
- int var22 = var3.height - 16;
- Graphics var23 = var1.create();
- var1.fillRect(var3.width - 16 - 3, 1, 13, var22 - 1);
-
- try {
- var23.translate(var3.width - 14, 0);
- ((MComponentPeer)this).drawScrollbar(var23, var4, 14, var22, var7, var8, var9, var10, false);
- } finally {
- var23.dispose();
- }
-
- int var24 = var3.width - 16;
- Graphics var25 = var1.create();
- var1.fillRect(1, var3.height - 16 - 3, var24 - 1, 13);
-
- try {
- var25.translate(0, var3.height - 14);
- ((MComponentPeer)this).drawScrollbar(var25, var4, 14, var24, var11, var12, var13, var14, true);
- } finally {
- var25.dispose();
- }
-
- ((MComponentPeer)this).draw3DRect(var1, var4, 0, 0, var37 - 1, var39 - 1, false);
- if (var16 != null) {
- int var26 = this.linesInWindow(true);
- var39 = var3.height - 20;
- int var27 = Math.min(this.numLines - 1, this.topLine + var26 - 1);
- this.paintLines(var1, var4, var5, this.topLine, var27);
- }
-
- super.target.print(var1);
- }
-
- int linesInWindow(boolean var1) {
- Dimension var2 = super.target.size();
- int var3 = var2.height - (4 + (var1 ? 16 : 0));
- return var3 / this.fontHeight;
- }
-
- void paintLines(Graphics var1, Color var2, Color var3, int var4, int var5) {
- Dimension var6 = super.target.size();
- int var7 = var6.width - 18;
- int var8 = var6.height - 18;
- int var9 = this.linesInWindow(true) + this.topLine;
- var4 = Math.max(this.topLine, var4);
- var5 = Math.min(var5, var9 - 1);
- Graphics var10 = var1.create();
- var10.clipRect(3, 3, var7 - 4, var8 - 4);
- var10.setFont(super.target.getFont());
-
- for(int var11 = var4; var11 <= var5; ++var11) {
- this.paintLine(var10, var2, var3, var11);
- }
-
- var10.dispose();
- }
-
- void paintLine(Graphics var1, Color var2, Color var3, int var4) {
- Dimension var5 = super.target.size();
- int var6 = this.linesInWindow(true);
- if (var4 >= this.topLine && var4 < var6 + this.topLine) {
- int var7 = var5.width - 18;
- int var8 = 2 + this.fontLeading + (var4 - this.topLine) * this.fontHeight;
- String var9 = ((TextLine)this.lines.elementAt(var4)).text;
- int var10 = var9.length();
- if (var4 > this.numLines - 1) {
- var1.setColor(var2);
- var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
- } else {
- byte var11 = 0;
- int var12 = var4 < this.numLines - 1 ? var10 : this.textLength;
- int var13 = this.pos2x(this.selStart) - this.movedRight;
- int var14 = this.pos2x(this.selEnd) - this.movedRight;
- Color var15 = var2.brighter();
- if (this.selStart < var11 && this.selEnd > var12) {
- var1.setColor(var15);
- var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
- } else {
- var1.setColor(var2);
- var1.fillRect(1, var8 - this.fontLeading, var7, this.fontHeight);
- if (this.selStart >= var11 && this.selStart <= var12) {
- var1.setColor(var15);
- if (this.selEnd > var12) {
- var1.fillRect(var13, var8 - this.fontLeading, var7 + 1 - var13, this.fontHeight);
- } else if (this.selStart != this.selEnd) {
- var1.fillRect(var13, var8 - this.fontLeading, var14 - var13, this.fontHeight);
- }
- } else if (this.selEnd >= var11 && this.selEnd <= var12) {
- var1.setColor(var15);
- var1.fillRect(1, var8 - this.fontLeading, var14 - 1, this.fontHeight);
- }
- }
-
- var1.setColor(var3);
- var1.drawString(var9, 2 - this.movedRight, var8 + this.fontAscent);
- }
- }
- }
-
- int pos2x(int var1) {
- FontMetrics var2 = ((MComponentPeer)this).getFontMetrics(super.target.getFont());
- int[] var3 = var2.getWidths();
- TextLine var4 = (TextLine)this.lines.elementAt(0);
- boolean var6 = false;
-
- for(int var7 = 0; var7 < this.lines.size() - 1; ++var7) {
- TextLine var5 = (TextLine)this.lines.elementAt(var7 + 1);
- if (var1 >= var4.pos && var1 < var5.pos) {
- break;
- }
-
- var4 = var5;
- }
-
- int var8 = 2;
-
- for(int var9 = 0; var9 < var1 - var4.pos - 1; ++var9) {
- var8 += var3[var4.text.charAt(var9)];
- }
-
- return var8;
- }
-
- public void insertText(String var1, int var2) {
- this.insert(var1, var2);
- }
-
- public void replaceText(String var1, int var2, int var3) {
- this.replaceRange(var1, var2, var3);
- }
-
- public Dimension minimumSize() {
- return this.getMinimumSize();
- }
-
- public Dimension preferredSize(int var1, int var2) {
- return this.getPreferredSize(var1, var2);
- }
-
- public Dimension minimumSize(int var1, int var2) {
- return this.getMinimumSize(var1, var2);
- }
-
- public void valueChanged() {
- ((MComponentPeer)this).postEvent(new TextEvent(super.target, 900));
- }
- }
-