package klik.client.mvp; import java.util.Date; import klik.client.resources.Resources; import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; 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.Timer; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.gwtplatform.mvp.client.ViewWithUiHandlers; public class LayoutView extends ViewWithUiHandlers<LayoutUiHandlers> implements LayoutPresenter.MyView { public interface Binder extends UiBinder<Widget, LayoutView> { } private final Widget widget; private String loading; private String backup; private long loadStart; @UiField HTMLPanel alertPanel; @UiField HTMLPanel contentPanel; @UiField Button setupButton; @UiField Button refreshButton; @Inject public LayoutView(final Binder binder, final Resources resources) { loading = new Image(resources.loading()).toString(); widget = binder.createAndBindUi(this); backup = refreshButton.getElement().getInnerHTML(); } @Override public Widget asWidget() { return widget; } @Override public void setInSlot(Object slot, Widget content) { if (slot == LayoutPresenter.TYPE_SetContent) { contentPanel.clear(); if (content != null) { contentPanel.add(content); } } else { super.setInSlot(slot, content); } } @Override public void showLoading(boolean visible) { if (visible) { refreshButton.getElement().setInnerHTML(loading); loadStart = new Date().getTime(); } else { long time = (new Date().getTime() - loadStart); GWT.log("load time:"+time); try { new Timer() { @Override public void run() { refreshButton.getElement().setInnerHTML(backup); } }.schedule(time < 200 ? 200 : 0); // run it with a little delay } catch (IllegalArgumentException e) { // Sometimes exception is thrown saying "must be positive" in Chrome.. GWT.log("Exception from timer: "+e.getMessage()); refreshButton.getElement().setInnerHTML(backup); // do it anyway } } } @Override public void clearAlerts() { if (alertPanel.getWidgetCount() > 0) { alertPanel.clear(); } } @Override public void showAlert(AlertType type, String message) { Alert alert = new Alert(); alert.setType(type); alert.setText(message); alert.setAnimation(true); alertPanel.add(alert); } @UiHandler("refreshButton") void onRefreshClick(ClickEvent e) { if (getUiHandlers() != null) { getUiHandlers().onRefresh(); } } @UiHandler("setupButton") void onSetupClick(ClickEvent e) { if (getUiHandlers() != null) { getUiHandlers().onSetup(); } } }