package org.ovirt.engine.ui.webadmin.section.main.view.popup; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.idhandler.HasElementId; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.utils.ElementIdUtils; import org.ovirt.engine.ui.webadmin.view.AbstractPopupView; import org.ovirt.engine.ui.webadmin.widget.HasUiCommandClickHandlers; import org.ovirt.engine.ui.webadmin.widget.UiCommandButton; import org.ovirt.engine.ui.webadmin.widget.dialog.PopupNativeKeyPressHandler; import org.ovirt.engine.ui.webadmin.widget.dialog.ProgressPopupContent; import org.ovirt.engine.ui.webadmin.widget.dialog.SimpleDialogPanel; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; /** * Base class for popup views bound to a UiCommon Window model. * * @param <T> * Window model type. */ public abstract class AbstractModelBoundPopupView<T extends Model> extends AbstractPopupView<SimpleDialogPanel> implements AbstractModelBoundPopupPresenterWidget.ViewDef<T>, HasElementId { /** * Popup progress indicator widget */ private final ProgressPopupContent progressContent = new ProgressPopupContent(); /** * Actual popup content */ private Widget popupContent; /** * Popup hash-name */ private String hashName; private String elementId = DOM.createUniqueId(); public AbstractModelBoundPopupView(EventBus eventBus, ApplicationResources resources) { super(eventBus, resources); } @Override protected void initWidget(SimpleDialogPanel widget) { super.initWidget(widget); this.popupContent = widget.getContent(); } @Override public void setTitle(String title) { asWidget().setHeader(new Label(title)); } @Override public void setMessage(String message) { // No-op, override as necessary } @Override public void setItems(Iterable<?> items) { // No-op, override as necessary } @Override public void setHashName(String name) { hashName = name; } @Override public HasUiCommandClickHandlers addFooterButton(String label) { UiCommandButton button = new UiCommandButton(label); asWidget().addFooterButton(button); // Set button element ID for better accessibility button.asWidget().getElement().setId( ElementIdUtils.createElementId(elementId, label)); return button; } @Override public void removeButtons() { asWidget().removeFooterButtons(); } @Override public void startProgress(String progressMessage) { // Set dialog content to the progress indicator widget progressContent.setProgressMessage(progressMessage); asWidget().setContent(progressContent); // Hide dialog buttons when starting progress asWidget().setFooterPanelVisible(false); } @Override public void stopProgress() { // Set dialog content to the actual popup content widget asWidget().setContent(popupContent); // Show dialog buttons when stopping progress asWidget().setFooterPanelVisible(true); } @Override public void focusInput() { // No-op, override as necessary } @Override public void setPopupKeyPressHandler(PopupNativeKeyPressHandler handler) { asWidget().setKeyPressHandler(handler); } @Override public void setElementId(String elementId) { this.elementId = elementId; } protected String getHashName() { return hashName; } }