package tv.dyndns.kishibe.qmaclone.client.game;
import com.google.gwt.user.client.ui.Label;
public class AnswerViewImpl extends Label implements AnswerView {
private final int maxLength;
private final int temporaryMaxLength;
private String letters = "";
/**
* 回答表示ウィジットのコンストラクタ
*
* @param maxLength
* 解答として送信される文字列の最大長
* @param temporaryMaxLength
* 画面に一時的に表示される文字列の最大長。ローマ字入力にて使用する
* @param fillWithFrame
* 空文字の枠を表示する場合は {@code true}
*/
public AnswerViewImpl(int maxLength, int temporaryMaxLength, boolean fillWithFrame) {
this.maxLength = maxLength;
this.temporaryMaxLength = temporaryMaxLength;
addStyleDependentName("answer");
updateDisplay(fillWithFrame);
}
public AnswerViewImpl(int maxLength, int temporaryMaxLength) {
this(maxLength, temporaryMaxLength, false);
}
public AnswerViewImpl(int maxLength) {
this(maxLength, maxLength, false);
}
private void updateDisplay(boolean fillWithFrame) {
StringBuilder sb = new StringBuilder(letters);
if (fillWithFrame) {
// 回答の最大文字列に達するまで□で埋める
while (sb.length() < maxLength) {
sb.append('□');
}
}
setText(sb.toString());
}
@Override
public void set(String s, boolean fillWithFrame) {
if (s.length() > temporaryMaxLength) {
s = s.substring(0, temporaryMaxLength);
}
letters = s;
updateDisplay(fillWithFrame);
}
@Override
public String get() {
return letters.length() <= maxLength ? letters : letters.substring(0, maxLength);
}
@Override
public String getRaw() {
return letters;
}
}