package org.safermobile.clear.micro.ui; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import org.safermobile.micro.utils.CharTokenizer; import org.safermobile.micro.utils.StringTokenizer; public class LargeStringCanvas extends Canvas { private String _largeString; private final static String NEWLINE = "\n"; public LargeStringCanvas (String largeString) { _largeString = processString(largeString); } private static String processString (String input) { int nlIdx = input.indexOf("\\n"); if (nlIdx !=-1) { input = input.substring(0,nlIdx) + '\n' + input.substring(nlIdx+2); } return input; } protected void paint(Graphics graphics) { graphics.setColor(0,0,0); graphics.fillRect(0, 0, getWidth(), getHeight()); graphics.setColor(255,255,255); graphics.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE)); StringTokenizer st = new StringTokenizer(_largeString,NEWLINE); int startY = getHeight()/2; String line; Font font = graphics.getFont(); int screenWidth = this.getWidth(); int lineWidth; int lineHeight = graphics.getFont().getHeight() + 3; //padding while (st.hasMoreTokens()) { line = st.next(); lineWidth = font.charsWidth(line.toCharArray(), 0, line.length()); if (lineWidth > screenWidth) { startY+=lineHeight; graphics.drawString(line.substring(0, line.length()/2), getWidth()/2, startY, Graphics.HCENTER|Graphics.BASELINE); startY+=lineHeight; graphics.drawString(line.substring(line.length()/2), getWidth()/2, startY, Graphics.HCENTER|Graphics.BASELINE); startY+=lineHeight; } else { graphics.drawString(line, getWidth()/2, startY, Graphics.HCENTER|Graphics.BASELINE); startY+=lineHeight; } } } public void setLargeString (String largeString) { _largeString = processString(largeString); repaint(); } }