package application.draw; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Point; public class TextBox extends AFigElement { public String attribute; int x1, y1; int width, height; public String getAttribute() { return attribute; } public void setAttribute(String a) { attribute=a; } public void draw(Graphics g, int x, int y) { x1=x; y1=y; this.draw(g); } public boolean isInside(int x, int y) { setSize(); if(xn){ if(s.charAt(n)=='\n'|| s.charAt(n)==(char)13){ g.drawString(aLine,xView(offX),yView(offY+height*lines+fmetrics.getMaxAscent())); aLine=""; lines++; p1=n+1; p2=-1; } if(s.charAt(n)!='\n') aLine=aLine+s.charAt(n); p2++; n++; } g.drawString(aLine,xView(offX),yView(offY+height*lines+fmetrics.getMaxAscent())); } public int getCursorPosition(int x, int y) { if(xxView(offX)+x2) return len; return (int)((((double)x-(double)(xView(offX)))/(double)x2)*len); } public int oldY; public int oldX; public void magnifyXY() { // int x1,y1,x2,y2; double offXw, offYw; offXw=oldX; offYw=oldY; magrotateP(dcX,dcY,magRatio,angle,(double)oldX, (double)oldY); offX=(int)newdX; offY=(int)newdY; return; } public int rightMost; public Point getSize(StringBuffer s) { int height; int lines; int n; int p1,p2; int maxc; int maxl; int x2,y2; char buff[]; buff= new char[256]; height=fmetrics.getMaxAscent()+fmetrics.getMaxDescent(); lines=0; n=0; p1=0; p2=0; maxl=0; maxc=0; while(s.length()>n){ // must be corrected by using fmetrics if(s.charAt(n)=='\n'){ lines++; if(maxc0 && x2==0) x2=maxc*height; y2=(lines+1)*height; return new Point(x2,y2); } public void drawCursor(Graphics g) { StringBuffer sb=new StringBuffer(""); int l=text.length(); int i; for(i=0;il) break; sb.append(text.charAt(i)); } Point pwh=getSize(sb); g.drawLine(xView(offX)+pwh.x,yView(offY)+pwh.y, xView(offX)+pwh.x, yView(offY)); } public String str2saveable(StringBuffer s) { String sx=""; int i=0; int len=s.length(); while(i0) cursorPosition--; } else if(key==1007) { // right arrow key if(cursorPosition(offX+x2)) return false; if(y(offY+y2)) return false; return true; } public TextBox() { } public TextBox(FigCanvas c) { canvas=c; super.init(); x2=20; y2=5; text= new StringBuffer(""); cursorPosition=0; rightMost=0; } public void getSize() { Point pwh=getSize(text); x2=pwh.x; y2=pwh.y; } public void drawTemp(Graphics g) { // g.setFont(font); /* g.drawString(text.toString(), xView(offX), yView(offY+fmetrics.getMaxAscent())); */ drawString2(g,text); getSize(); g.drawRect(xView(offX),yView(offY), x2,y2); drawCursor(g); showRC(g); } public void draw(Graphics g) { if(showhide){ Color cc=g.getColor(); g.setColor(color); g.setFont(font); fmetrics=canvas.getFontMetrics(font); if(isEditing()) drawTemp(g); else /* g.drawString(text.toString(), xView(offX), yView(offY+fmetrics.getMaxAscent())); */ drawString2(g,text); g.setColor(cc); } } public int cursorPosition; public StringBuffer text; }