package org.activityinfo.ui.client.widget.loading;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.LoadingStateChangeEvent;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.activityinfo.ui.client.widget.Button;
import org.activityinfo.ui.client.widget.ButtonWithSize;
/**
* Displays the loading state of a table
*/
public class TableLoadingIndicator implements IsWidget, LoadingView {
private final HTMLPanel rootElement;
@UiField Button retryButton;
@UiField SpanElement messageSpan;
interface LoadingIndicatorUiBinder extends UiBinder<HTMLPanel, TableLoadingIndicator> {
}
private static LoadingIndicatorUiBinder ourUiBinder = GWT.create(LoadingIndicatorUiBinder.class);
public TableLoadingIndicator() {
rootElement = ourUiBinder.createAndBindUi(this);
}
@Override
public void onLoadingStateChanged(final LoadingState state, final Throwable caught) {
Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
@Override
public boolean execute() {
ExceptionOracle.setLoadingStyle(rootElement, state);
messageSpan.setInnerText(ExceptionOracle.getHeading(caught));
return false;
}
}, 500);
}
@Override
public HasClickHandlers getRetryButton() {
return retryButton;
}
@Override
public Widget asWidget() {
return rootElement;
}
}