187 lines
5.7 KiB
Java
187 lines
5.7 KiB
Java
/*
|
||
* aNNiMON 2010
|
||
* For more info visit http://annimon.com/
|
||
*/
|
||
|
||
/*
|
||
* На основе класса MultiLineText от А.С. Ледкова
|
||
* www.mobilab.ru
|
||
*/
|
||
import com.annimon.XID;
|
||
import com.annimon.ui.ESkin;
|
||
import com.annimon.ui.EWindow;
|
||
import java.util.Vector;
|
||
import javax.microedition.lcdui.*;
|
||
|
||
public class About extends EWindow {
|
||
|
||
private static final String PATH = "/about";
|
||
private Font def;
|
||
private int defHeight;
|
||
private String str; // текст
|
||
|
||
private int mh, y0; // Положение верхнего края текста
|
||
private int dy; // Шаг при прокрутке текста
|
||
private int textheight; // Общая высота текста
|
||
private Vector strLines;
|
||
|
||
public About(String about) {
|
||
super(about);
|
||
str = new XID().loadText(PATH);
|
||
def = Font.getDefaultFont();
|
||
dy = defHeight = def.getHeight()+2;
|
||
mh = super.hh - 1;
|
||
SetTextPar();
|
||
}
|
||
|
||
public void paint(Graphics g, int w, int h) {
|
||
g.setFont(def);
|
||
g.setColor(ESkin.textColor);
|
||
int y1 = y0;
|
||
for (int i = 0; i < strLines.size(); i++) {
|
||
if ((y1 + defHeight) > 0) {
|
||
g.drawString(strLines.elementAt(i).toString(), 1, 3 + y1, Graphics.LEFT | Graphics.TOP);
|
||
}
|
||
y1 += defHeight;
|
||
if (y1 > mh) break;
|
||
}
|
||
}
|
||
|
||
public void keyEvent(int key, byte state) {
|
||
if(state!=RELEASED) {
|
||
int ga = getGameAction(key);
|
||
if(ga==UP) MoveUp();
|
||
else if(ga==DOWN) MoveDown();
|
||
else if(ga==LEFT) PageUp();
|
||
else if(ga==RIGHT) PageDown();
|
||
else if(ga==FIRE || key==KEY_LSK || key==KEY_RSK)
|
||
Main.midlet.dsp.setCurrent(Main.midlet.main);
|
||
redraw();
|
||
}
|
||
}
|
||
|
||
protected void pointerPressed(int x, int y) {
|
||
int w3 = w/3;
|
||
int h3 = h/3;
|
||
if(y<h3 && (x>w3 && x<(w-w3))) keyPressed(UP);
|
||
else if(y>(h-h3) && (x>w3 && x<(w-w3))) keyPressed(DOWN);
|
||
|
||
if(x<w3 && (y>h3 && y<(h-h3))) keyPressed(LEFT);
|
||
else if(x>(w-w3) && (y>h3 && y<(h-h3))) keyPressed(RIGHT);
|
||
|
||
else if(x<w3 && y>(h-h3)) keyPressed(-6);
|
||
else if(x>(w-w3) && y>(h-h3)) keyPressed(-7);
|
||
else if( (x>w3 && x<(w-w3)) && (y>h3 && y<(h-h3)) ) keyPressed(FIRE);
|
||
}
|
||
|
||
private void SetTextPar() {
|
||
//Разбиваем строку на массив строк
|
||
strLines = null;
|
||
strLines = new Vector();
|
||
String[] arr = splitString(str, "\n");
|
||
for(int i=0; i<arr.length; i++) {
|
||
String substr = arr[i];
|
||
int i0 = 0, space = 0, in = 0, j = 0, jw = 0; //Смещение от начала строки
|
||
int imax = substr.length(); //Длина строки
|
||
boolean isexit = true;
|
||
y0 = 0;
|
||
while (isexit) {
|
||
space = substr.indexOf(" ", i0 + 1);
|
||
if (space <= i0) {
|
||
space = imax;
|
||
isexit = false;
|
||
}
|
||
|
||
j = def.stringWidth(substr.substring(i0, space));
|
||
if (jw + j < w) {//Слово умещается
|
||
jw = jw + j;
|
||
i0 = space;
|
||
} else {//Слово не умещается
|
||
strLines.addElement(substr.substring(in, i0));
|
||
in = i0 + 1;
|
||
jw = j;
|
||
if (j > 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;
|
||
}
|
||
|
||
private void MoveDown() {
|
||
if (textheight > mh) {
|
||
y0 = y0 - dy;
|
||
if (mh - y0 > textheight) {
|
||
y0 = mh - textheight;
|
||
}
|
||
}
|
||
}
|
||
|
||
private void MoveUp() {
|
||
if (textheight > mh) {
|
||
y0 = y0 + dy;
|
||
if (y0 > 0) {
|
||
y0 = 0;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
private void PageUp() {
|
||
if (textheight > mh) {
|
||
y0 = y0 + mh;
|
||
if (y0 > 0) {
|
||
y0 = 0;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
private void PageDown() {
|
||
if (textheight > mh) {
|
||
y0 = y0 - mh;
|
||
if (mh - y0 > textheight) {
|
||
y0 = mh - textheight;
|
||
}
|
||
}
|
||
}
|
||
|
||
private String[] splitString(String str, String delim) {
|
||
if ("".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;
|
||
}
|
||
|
||
}
|