125bb1cbbda39d6b0ed3b46cc17b76bc4121501c
[des2015.git] / mart / ev3 / ex1 / nl / ru / des / LCDPrinter.java
1 package nl.ru.des;
2
3 import java.util.Deque;
4 import java.util.Iterator;
5 import java.util.LinkedList;
6
7 import lejos.hardware.lcd.Font;
8 import lejos.hardware.lcd.GraphicsLCD;
9 import lejos.utility.Delay;
10
11 public class LCDPrinter extends Thread {
12 public static final int PRINTDELAY = 50;
13
14 private static Deque<String> buffer = new LinkedList<String>();
15
16 private GraphicsLCD glcd;
17 private Font font;
18 private Deque<String> lcdbuffer;
19 private int charwidth;
20
21 public LCDPrinter(GraphicsLCD glcd, Font font) {
22 this.glcd = glcd;
23 this.font = font;
24 glcd.setFont(font);
25 lcdbuffer = new LinkedList<String>();
26 charwidth = glcd.getWidth()/font.width;
27 for(int i = 0; i<glcd.getHeight()/font.height; i++){
28 lcdbuffer.add("");
29 }
30 }
31
32 public static void print(String s){
33 buffer.addLast(s);
34 }
35
36 public void run() {
37 Iterator<String> it;
38 while (true) {
39 if (!buffer.isEmpty()) {
40 String c = buffer.remove();
41 lcdbuffer.removeLast();
42 if(c.length() > charwidth){
43 buffer.addFirst(c.substring(charwidth, c.length()));
44 c = c.substring(0, charwidth);
45 }
46 lcdbuffer.addFirst(c);
47 glcd.clear();
48 it = lcdbuffer.descendingIterator();
49 for(int i = 0; it.hasNext(); i++){
50 glcd.drawString(it.next(), 0, i*font.height, font.getBaselinePosition());
51 }
52 }
53 Delay.msDelay(PRINTDELAY);
54 }
55 }
56 }