| Counter.java |
1 package counterWidgets;
2
3 import javax.microedition.lcdui.StringItem;
4
5 /**
6 * Luokka laskurille, joka osaa näyttää selitystekstiä ja laskurin arvoa.
7 * Laskurille voidaan asettaa etu- ja jälkiliite, jolloin tulos voi
8 * olla esim: "Hinta: 3 €".
9 * Laskurille voidaan myös asettaa kuuntelija, jota kutsutaan aina arvon
10 * muuttuessa.
11 * <pre>
12 * Counter counterHinta = new Counter("Hinta:"); form.append(counterHinta);
13 * counterHinta.setPostfix(" €");
14 * ...
15 * counterHinta.setCount(7); // Hinta: 7 €
16 * </pre>
17 * @author vesal
18 * @version 17.3.2007
19 */
20 public class Counter extends StringItem {
21
22 /**
23 * Rajapinta joka täytyy toteuttaa jos haluaa kuulla laskurin muutoksista
24 */
25 public interface ChangeCommandListener {
26 /**
27 * Rajapinnna ainoa metodi, jota kutsutaan kun laskurin arvo muuttuu.
28 * @param it laskuri jonka arvo muuttuu
29 * @param diff paljonko arvo muuttui
30 */
31 public void commandChange(Counter it, int diff);
32 }
33
34 /**
35 * Laskurin sisäinen arvo
36 */
37 private int count = 0;
38
39 /**
40 * Viite muutosten kuuntelijaan.
41 */
42 private ChangeCommandListener changeCommandListener = null;
43
44 /**
45 * Etuliite joka tulostuu ennne laskurin arvoa selityksen jälkeen
46 */
47 private String prefix = " ";
48
49 /**
50 * Jälkiliite, joka tulostuu laskurin arvon jälkeen.
51 */
52 private String postfix = " ";
53
54
55 /**
56 * Alustetaan laskuri selityksellä ja tyypillä.
57 * @param text Laskurin viereen tuleva selitys
58 * @param type Tyyppi jolla laskuri näytetään
59 */
60 public Counter(String text,int type) {
61 super(text," 0 ",type);
62 setLayout(LAYOUT_CENTER | LAYOUT_NEWLINE_BEFORE);
63 }
64
65 /**
66 * Alustetaan tavallisen näköinen laskuri.
67 * @param text
68 */
69 public Counter(String text) {
70 this(text,StringItem.PLAIN);
71 }
72
73 /**
74 * Palauttaa laskurin arvon merkkijonona
75 * @return laskurin arvo merkkijonona
76 */
77 public String toString() {
78 return prefix + count + postfix;
79 }
80
81 /**
82 * Asetetaan kunntelija, joka kuuntelee laskurista tulevia muutoksia.
83 * @param listener Muutosten kuuntelija
84 */
85 public void setChangeCommandListener(ChangeCommandListener listener) {
86 changeCommandListener = listener;
87 }
88
89 /**
90 * Asetatetaan laskurille uusia arvo. Jos arvo muuttuu, niin silloin
91 * kutsutaan tarvittaessa muutosten kuuntelijaa.
92 * @param n laskurin uusi arvo
93 */
94 public void setCount(int n) {
95 int old_n = getCount();
96 int diff = n - old_n;
97 if ( diff == 0 ) return;
98 count = n;
99 super.setText(toString());
100 if ( changeCommandListener != null )
101 changeCommandListener.commandChange(this,diff);
102 }
103
104 /**
105 * Saantimetodi laskurin arvolle
106 * @return laskurin nykyinen arvo
107 */
108 public int getCount() {
109 return count;
110 }
111
112 /**
113 * Kasvatetaan laskurin arvoa.
114 * @param i paljollako arvoa kasvatetaan
115 */
116 public void inc(int i) {
117 setCount(getCount() + i);
118 }
119
120 /**
121 * Kasvatetaan laskurin arvoa yhdellä.
122 */
123 public void inc() {
124 inc(1);
125 }
126
127 /**
128 * Nollataan laskurin arvo
129 */
130 public void reset() {
131 setCount(0);
132 }
133
134 /**
135 * Estetään tekstin muuttaminen
136 */
137 public void setText(String s) {
138 }
139
140 /**
141 * Asettaa laskurin etuliitteen.
142 * Etuliite tulostetaan selityksen jälkeen ennen laskurin arvoa.
143 * @param s uusi etuliitteen arvo
144 */
145 public void setPrefix(String s) {
146 prefix = s;
147 super.setText(toString());
148 }
149
150 /**
151 * Asettaa laskurin jälkiliitteen.
152 * Jälkiliite tulostetaan laskurin arvon jälkeen.
153 * @param s uusi jälkiliitteen arvo
154 */
155 public void setPostfix(String s) {
156 postfix = s;
157 super.setText(toString());
158 }
159
160 /**
161 * Palauttaa nykyisen etuliitteen arvon
162 * @return nykyinen etuliite.
163 */
164 public String getPrefix() {
165 return prefix;
166 }
167
168 /**
169 * Palauttaa nykyisen jälkiliitteen arvon
170 * @return nykyinen jälkiliite.
171 */
172 public String getPostfix() {
173 return postfix;
174 }
175
176 }
177