package tv.dyndns.kishibe.qmaclone.client.game.input; import tv.dyndns.kishibe.qmaclone.client.constant.Constant; import tv.dyndns.kishibe.qmaclone.client.game.AnswerView; import tv.dyndns.kishibe.qmaclone.client.game.ButtonLetter; import tv.dyndns.kishibe.qmaclone.client.game.LetterType; import tv.dyndns.kishibe.qmaclone.client.game.SessionData; import tv.dyndns.kishibe.qmaclone.client.game.panel.QuestionPanel; import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem; import tv.dyndns.kishibe.qmaclone.client.util.StringUtils; import tv.dyndns.kishibe.qmaclone.client.util.StringUtils.VoicedSoundMark; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Widget; public class InputWidgetTyping50 extends InputWidget implements ClickHandler { private static final String BUTTON_LETTER[] = { "あかさたなはまやらわぁゃいきしちにひみ り ぃゅうくすつぬふむゆるをぅょえけせてねへめ れ ぇっおこそとのほもよろんぉー", "アカサタナハマヤラワァャイキシチニヒミ リ ィュウクスツヌフムユルヲゥョエケセテネヘメ レ ェッオコソトノホモヨロンォー", "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" }; private static final int[] NUMBER_OF_LETTERS_PER_ROW = { 12, 12, 10 }; private final Grid gridLetter; private ButtonLetter[] buttons; // 消す・濁点・半濁点・OK private final Button buttonDakuten = new Button("゛", this); private final Button buttonHandakuten = new Button("゜", this); private final Button buttonDelete = new Button("消す", this); private final Button buttonOK = new Button("OK", this); public InputWidgetTyping50(PacketProblem problem, AnswerView answerView, QuestionPanel questionPanel, LetterType letterType, SessionData sessionData) { super(problem, answerView, questionPanel, sessionData); if (letterType == null) { gridLetter = null; return; } String letters = BUTTON_LETTER[letterType.ordinal()]; int numberOfLettersPerRow = NUMBER_OF_LETTERS_PER_ROW[letterType.ordinal()]; gridLetter = new Grid(5, numberOfLettersPerRow + 1); gridLetter.setBorderWidth(0); gridLetter.setCellPadding(0); gridLetter.setCellSpacing(0); buttons = new ButtonLetter[numberOfLettersPerRow * 5]; for (int row = 0; row < 5; ++row) { for (int column = 0; column < numberOfLettersPerRow; ++column) { int index = row * numberOfLettersPerRow + column; if (letters.length() <= index) { break; } String letter = letters.substring(index, index + 1); if (letter.equals(" ")) { continue; } ButtonLetter buttonLetter = new ButtonLetter(letter, answerView); buttons[index] = buttonLetter; gridLetter.setWidget(row, column, buttonLetter); } } buttonDakuten.setStyleName("gwt-Button-typing"); buttonHandakuten.setStyleName("gwt-Button-typing"); buttonDelete.setStyleName("gwt-Button-typingControl"); buttonOK.setStyleName("gwt-Button-typingControl"); buttonDelete.setWidth("90px"); buttonOK.setWidth("90px"); int mostLeftColumIndex = gridLetter.getColumnCount() - 1; if (letterType != LetterType.Alphabet) { gridLetter.setWidget(0, mostLeftColumIndex, buttonDakuten); gridLetter.setWidget(1, mostLeftColumIndex, buttonHandakuten); } gridLetter.setWidget(3, mostLeftColumIndex, buttonDelete); gridLetter.setWidget(4, mostLeftColumIndex, buttonOK); add(gridLetter); } public void enable(boolean enabled) { for (int i = 0; i < buttons.length; ++i) { Button button = buttons[i]; if (button != null) { button.setEnabled(enabled); } } buttonDakuten.setEnabled(enabled); buttonHandakuten.setEnabled(enabled); buttonDelete.setEnabled(enabled); buttonOK.setEnabled(enabled); } @Override public void onClick(ClickEvent event) { Widget sender = (Widget) event.getSource(); if (sender == buttonDakuten) { // 濁点ボタン playSound(Constant.SOUND_URL_BUTTON_PUSH); answerView.set(StringUtils.switchVoicedSoundMarkOfLastLetter(answerView.get(), VoicedSoundMark.Full), true); } else if (sender == buttonHandakuten) { // 半濁点ボタン playSound(Constant.SOUND_URL_BUTTON_PUSH); answerView.set(StringUtils.switchVoicedSoundMarkOfLastLetter(answerView.get(), VoicedSoundMark.Half), true); } else if (sender == buttonDelete) { // 消すボタン answerView.set(StringUtils.removeLast(answerView.get()), true); } else if (sender == buttonOK) { // OKボタン enable(false); sendAnswer(answerView.get()); } } }