package tv.dyndns.kishibe.qmaclone.client.setting; import java.util.List; import java.util.Map; import java.util.Map.Entry; import tv.dyndns.kishibe.qmaclone.client.UserData; import tv.dyndns.kishibe.qmaclone.client.constant.Constant; import tv.dyndns.kishibe.qmaclone.client.packet.PacketUserData; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeUri; import com.google.gwt.safehtml.shared.UriUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; public class PanelSettingUserCodeView extends Composite implements PanelSettingUserCodePresenter.View { public interface MyTemplate extends SafeHtmlTemplates { @Template("<img src='{0}' width='32px' height='32px'/>{1} {2}") SafeHtml image(SafeUri imageUrl, int userCode, String name); } interface PanelSettingUserCodeViewUiBinder extends UiBinder<Widget, PanelSettingUserCodeView> { } private static final MyTemplate TEMPLATE = GWT.create(MyTemplate.class); private static final PanelSettingUserCodeViewUiBinder uiBinder = GWT .create(PanelSettingUserCodeViewUiBinder.class); private static final String GROUP_USER_CODE = "group user code"; private final PanelSettingUserCodePresenter presenter; private Map<CheckBox, PacketUserData> radioButtonToUserData; private final UserData userData; @UiField TextBox textBoxUserCode; @UiField Button buttonSwitchToUserCode; @UiField HTML htmlInvalidUserCode; @UiField Button buttonConnect; @UiField HTML htmlAlreadyConnected; @UiField HTML htmlConnected; @UiField VerticalPanel panelUserCodeList; @UiField Button buttonShowUserCodeList; @UiField Button buttonSwitchToConnectedUserCode; @UiField Button buttonDisconnectUserCode; @Inject public PanelSettingUserCodeView(PanelSettingUserCodePresenter presenter, UserData userData) { initWidget(uiBinder.createAndBindUi(this)); this.presenter = Preconditions.checkNotNull(presenter); this.presenter.setView(this); this.userData = Preconditions.checkNotNull(userData); } @UiHandler("buttonSwitchToUserCode") void onSwitchToUserCode(ClickEvent e) { presenter.switchToUserCode(); } @UiHandler("buttonConnect") void onConnect(ClickEvent e) { presenter.connect(); } @UiHandler("buttonShowUserCodeList") void onShowUserCodeList(ClickEvent e) { presenter.showUserCodeList(); } @UiHandler("buttonSwitchToConnectedUserCode") void onSwitchToConnectedUserCode(ClickEvent e) { presenter.switchToConnectedUserCode(); } @UiHandler("buttonDisconnectUserCode") void onDisconnectUserCode(ClickEvent e) { presenter.disconnectUserCode(); } @Override protected void onLoad() { super.onLoad(); presenter.onLoad(); } @Override public void setUserCodeTextBoxEnable(boolean enabled) { textBoxUserCode.setEnabled(enabled); } @Override public void setSwitchToUserCodeButtonEnable(boolean enabled) { buttonSwitchToUserCode.setEnabled(enabled); } @Override public void setInvalidUserCodeMessageVisible(boolean visible) { htmlInvalidUserCode.setVisible(visible); } @Override public String getUserCode() { return textBoxUserCode.getValue(); } @Override public void showConnectButton() { buttonConnect.setVisible(true); } @Override public void setConnectButtonEnable(boolean enabled) { buttonConnect.setEnabled(enabled); } @Override public void showAlreadyConnectedMessage() { htmlAlreadyConnected.setVisible(true); } @Override public void showRequiredReloadMessage() { Window.alert("OKボタンを押した後にF5ボタンを押してページをリロードしてください。"); } @Override public void setUserDataList(List<PacketUserData> userDataList) { panelUserCodeList.clear(); radioButtonToUserData = Maps.newHashMap(); for (PacketUserData userData : userDataList) { SafeUri imageUrl = UriUtils.fromString(Constant.ICON_URL_PREFIX + userData.imageFileName); SafeHtml label = TEMPLATE.image(imageUrl, userData.userCode, userData.playerName); RadioButton radioButton = new RadioButton(GROUP_USER_CODE, label); radioButtonToUserData.put(radioButton, userData); panelUserCodeList.add(radioButton); if (this.userData.getUserCode() == userData.userCode) { radioButton.setValue(true); } } } @Override public void showSwitchToConnectedUserCodeButton() { buttonSwitchToConnectedUserCode.setVisible(true); } @Override public void setSwitchToConnectedUserCodeButtonVisible(boolean visible) { buttonSwitchToConnectedUserCode.setVisible(visible); } @Override public void setShowUserCodeListButtonEnable(boolean enabled) { buttonShowUserCodeList.setEnabled(enabled); } @Override public void showShowUserCodeListButton() { buttonShowUserCodeList.setVisible(true); } @Override public int getSelectedUserCode() { for (Entry<CheckBox, PacketUserData> entry : radioButtonToUserData.entrySet()) { if (entry.getKey().getValue()) { return entry.getValue().userCode; } } Preconditions.checkState(false, "Could not find a selected user code."); return 0; } @Override public void setDisconnectUserCodeButtonEnabled(boolean enabled) { buttonDisconnectUserCode.setEnabled(enabled); } @Override public void setDisconnectUserCodeButtonVisible(boolean visible) { buttonDisconnectUserCode.setVisible(visible); } @Override public void showConnectedMessage() { htmlConnected.setVisible(true); } }