package tv.dyndns.kishibe.qmaclone.client.creation; import java.util.List; import tv.dyndns.kishibe.qmaclone.client.packet.PacketWrongAnswer; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.visualization.client.AbstractDataTable.ColumnType; import com.google.gwt.visualization.client.DataTable; import com.google.gwt.visualization.client.visualizations.corechart.ComboChart.Options; import com.google.gwt.visualization.client.visualizations.corechart.PieChart; public class WrongAnswerViewImpl extends Composite implements WrongAnswerView { private static WrongAnswerViewImplUiBinder uiBinder = GWT .create(WrongAnswerViewImplUiBinder.class); interface WrongAnswerViewImplUiBinder extends UiBinder<Widget, WrongAnswerViewImpl> { } @UiField SimplePanel panel; @UiField HTML html; public WrongAnswerViewImpl() { initWidget(uiBinder.createAndBindUi(this)); } @Override public void setAnswer(List<PacketWrongAnswer> wrongAnswers) { setChart(wrongAnswers); setHtml(wrongAnswers); } private void setChart(List<PacketWrongAnswer> wrongAnswers) { DataTable data = DataTable.create(); data.addColumn(ColumnType.STRING, "誤解答"); data.addColumn(ColumnType.NUMBER, "回答数"); data.addRows(wrongAnswers.size()); for (int row = 0; row < wrongAnswers.size(); ++row) { PacketWrongAnswer wrongAnswer = wrongAnswers.get(row); data.setValue(row, 0, wrongAnswer.answer); data.setValue(row, 1, wrongAnswer.count); } Options options = Options.create(); options.setWidth(780); options.setHeight(400); options.setTitle("誤解答例"); panel.setWidget(new PieChart(data, options)); } private void setHtml(List<PacketWrongAnswer> wrongAnswers) { // 文字列化 List<String> formatteds = Lists.newArrayList(); for (PacketWrongAnswer wrongAnswer : wrongAnswers) { formatteds.add(wrongAnswer.answer + "(" + wrongAnswer.count + ")"); } String joined = Joiner.on(' ').join(formatteds); html.setHTML(SafeHtmlUtils.fromString(joined)); } }