package org.activityinfo.ui.client.widget.loading; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import org.activityinfo.ui.client.style.Icons; import org.activityinfo.ui.client.widget.Button; /** * Loading Panel view for top level views */ public class PageLoadingPanel implements IsWidget, LoadingPanelView { private final HTMLPanel rootElement; @UiField Element icon; @UiField Element heading; @UiField Element explanation; @UiField Button retryButton; @UiField SimplePanel content; interface PageLoadingUiBinder extends UiBinder<HTMLPanel, PageLoadingPanel> { } private static PageLoadingUiBinder ourUiBinder = GWT.create(PageLoadingUiBinder.class); public PageLoadingPanel() { rootElement = ourUiBinder.createAndBindUi(this); Icons.INSTANCE.ensureInjected(); LoadingStylesheet.INSTANCE.ensureInjected(); } @Override public void onLoadingStateChanged(LoadingState state, Throwable caught) { rootElement.setStyleName(LoadingStylesheet.INSTANCE.loading(), state == LoadingState.LOADING); rootElement.setStyleName(LoadingStylesheet.INSTANCE.failed(), state == LoadingState.FAILED); rootElement.setStyleName(LoadingStylesheet.INSTANCE.loaded(), state == LoadingState.LOADED); if(state == LoadingState.FAILED) { icon.setClassName(ExceptionOracle.getIcon(caught)); heading.setInnerText(ExceptionOracle.getHeading(caught)); explanation.setInnerText(ExceptionOracle.getExplanation(caught)); } } @Override public Widget getWidget() { return content.getWidget(); } @Override public void setWidget(Widget w) { onLoadingStateChanged(LoadingState.LOADED, null); content.setWidget(w); } public void setContentStyleName(String styleName) { content.setStyleName(styleName); } public void setWidget(IsWidget widget) { setWidget(widget.asWidget()); } public HasClickHandlers getRetryButton() { return retryButton; } @Override public Widget asWidget() { return rootElement; } }