package de.tud.kom.socom.web.client.login;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
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.uibinder.client.UiTemplate;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.InlineHyperlink;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import de.tud.kom.socom.web.client.htmlelements.ErrorListItemView;
public class LoginWindowView extends Composite implements LoginWindowPresenter.LoginWindowViewInterface {
@UiTemplate("LoginWindowView.ui.xml")
interface LoginWindowViewUiBinder extends UiBinder<Widget, LoginWindowView> {
}
private static LoginWindowViewUiBinder uiBinder = GWT.create(LoginWindowViewUiBinder.class);
@UiField TextBox userName;
@UiField PasswordTextBox password;
@UiField Button buttonLogin;
@UiField Button buttonClose;
@UiField InlineHyperlink passwordForgotten;
@UiField Button buttonFacebook; // provide a generic network independent solution (networkLoginButton + popup for selection of network to use)
private LoginWindowPresenter presenter;
public LoginWindowView(LoginWindowPresenter presenter) {
this.presenter = presenter;
//...
initWidget(uiBinder.createAndBindUi(this));
}
@UiHandler("userName")
void onKeyPressUserNameTextfield (KeyPressEvent event)
{
// decided to do this logic here and NOT forward it to Presenter as it is a simple GUI-focussed behaviour
int keyCode = event.getCharCode();
if (keyCode == 0) {
// Probably Firefox
keyCode = event.getNativeEvent().getKeyCode();
}
if (keyCode == KeyCodes.KEY_ENTER) {
password.setFocus(true);
}
}
@UiHandler("password")
public void onKeyPress(KeyPressEvent event) {
int keyCode = event.getCharCode();
if (keyCode == 0) {
// Probably Firefox
keyCode = event.getNativeEvent().getKeyCode();
}
if (keyCode == KeyCodes.KEY_ENTER) {
presenter.onLoginButtonClicked();
}
}
@UiHandler("buttonLogin")
void onLoginButtonClicked(ClickEvent event)
{
presenter.onLoginButtonClicked();
}
@UiHandler("buttonClose")
void onCloseButtonClicked(ClickEvent event)
{
presenter.onCloseButtonClicked();
}
@UiHandler("buttonFacebook")
void onFacebookButtonClicked(ClickEvent event)
{
presenter.onFacebookButtonClicked();
}
@UiHandler("passwordForgotten")
void onPasswordForgottenClicked(ClickEvent event)
{
presenter.onPasswordForgottenClicked();
}
@Override
public void setLoginFocus() {
userName.setFocus(true);
}
@Override
public void setVisibility(boolean visibility)
{
this.setVisible(visibility);
}
@Override
public Widget asWidget()
{
return this;
}
@Override
public String getUserNameText() {
return userName.getValue();
}
@Override
public String getPasswordText() {
return password.getValue();
}
@Override
public void clear() {
userName.setText("");
password.setText("");
}
@Override
public void showError(ErrorListItemView error) {
// TODO JK: add a Widget with errorDisplay
}
@Override
public void hideErrors() {
// TODO JK: add a Widget with errorDisplay
}
@Override
public void hideError(ErrorListItemView error) {
// // TODO JK: add a Widget that will display errrors and handle them
}
@Override
public void setSNLoginButtonEnabled(boolean enable) {
buttonFacebook.setEnabled(enable);
if(!enable) {
buttonFacebook.setTitle("Facebook Login nur für konkrete Spiele möglich.");
}
}
}