/* * Класс parser предназначен для отображения многострочного текста. * Автор А.С. Ледков * www.mobilab.ru * ledkov@inbox.ru */ /* модификация от Fantastic. * скопировал метод SetTextPar() из класса About.java программы notations. */ import java.util.Vector; import javax.microedition.lcdui.*; public class parser { private int x,y,w,h,fsz,fst,fty; //Размер ограничивающего прямоугольника; private int defHeight; //Высота строки private int y0; //Положение верхнего края текста private int dy; //Шаг при прокрутке текста private int textheight; //Общая высота текста private Vector strLines; private Graphics g; private int gx,gy,gw,gh; //Исходная область public Font def; private String str1; public void MoveDown() { if (textheight>h) { y0=y0-dy; if (h-y0>textheight) {y0=h-textheight;} } } public void MoveUp() { if (textheight>h) { y0=y0+dy; if (y0>0){y0=0;} } } public void PageUp() { if (textheight>h) { y0=y0+h; if (y0>0){y0=0;} } } public void PageDown() { if (textheight>h) { y0=y0-h; if (h-y0>textheight) {y0=h-textheight;} } } public void SetTextPar( int x, int y, int width, int height, int dy, int FontSize, int FontStyle, int FontType, Graphics graph, String str ) { this.x=x; this.y=y; this.w=width; this.h=height; this.dy=dy; this.fsz=FontSize; this.fst=FontStyle; this.fty=FontType; this.g=graph; gx=g.getClipX(); gy=g.getClipY(); gw=g.getClipWidth(); gh=g.getClipHeight(); g.setFont(Font.getFont(fty, fst, fsz)); this.def = Font.getFont(fty, fst, fsz); this.defHeight = def.getHeight(); //Разбиваем строку на массив строк strLines = null; strLines = new Vector(); String[] arr = splitString(str, "\n"); for(int i=0; i w) {//Слово полностью не умещается в строке space = i0; while (jw > w) { j = 0; while (j < w) { space++; j = def.stringWidth(substr.substring(in, space)); } space = space - 1; j = def.stringWidth(substr.substring(in, space)); strLines.addElement(substr.substring(in, space)); jw = jw - j; i0 = space; in = space; } jw = 0; } else { i0 = space; } } } strLines.addElement(substr.substring(in, imax)); } textheight = strLines.size() * defHeight; } public void DrawMultStr() { int y1; g.setClip(x, y, w, h); y1=y0; g.setFont(Font.getFont(fty, fst, fsz)); for (int i=0;i0){ g.drawString(strLines.elementAt(i).toString(), x+1, y+y1, Graphics.LEFT|Graphics.TOP); } y1=y1+defHeight; if (y1>h){break;} } g.setClip(gx, gy, gw, gh); } private String[] splitString(String str, String delim) { String emp = new String(); if (emp.equals(str) || delim == null || delim.length() == 0) return new String[]{str}; Vector v = new Vector(); int pos = 0; int newpos = str.indexOf(delim, 0); while (newpos != -1) { v.addElement(str.substring(pos, newpos)); pos = newpos + delim.length(); newpos = str.indexOf(delim, pos); } v.addElement(str.substring(pos)); String[] s = new String[v.size()]; v.copyInto(s); return s; } }