package org.ovirt.engine.ui.webadmin.section.main.presenter;
import org.ovirt.engine.ui.common.presenter.AbstractMainTabSelectedItems;
import org.ovirt.engine.ui.common.presenter.DynamicTabContainerPresenter;
import org.ovirt.engine.ui.common.presenter.DynamicTabContainerPresenter.DynamicTabPanel;
import org.ovirt.engine.ui.common.presenter.ScrollableTabBarPresenterWidget;
import org.ovirt.engine.ui.common.widget.tab.TabWidgetHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.ChangeTabHandler;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.RequestTabsHandler;
import com.gwtplatform.mvp.client.TabView;
import com.gwtplatform.mvp.client.annotations.ContentSlot;
import com.gwtplatform.mvp.client.proxy.PlaceManager;
import com.gwtplatform.mvp.client.proxy.Proxy;
import com.gwtplatform.mvp.client.proxy.RevealContentHandler;
import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace;
import com.gwtplatform.mvp.shared.proxy.PlaceRequest;
/**
* Base class for sub tab panel presenters.
*
* @param <V>
* View type.
* @param <P>
* Proxy type.
*/
public abstract class AbstractSubTabPanelPresenter<V extends AbstractSubTabPanelPresenter.ViewDef &
DynamicTabPanel, P extends Proxy<?>> extends DynamicTabContainerPresenter<V, P> implements TabWidgetHandler {
public interface ViewDef extends TabView, HasUiHandlers<TabWidgetHandler> {
}
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetTabBar = new Type<>();
protected final AbstractMainTabSelectedItems<?> selectedItems;
protected final ScrollableTabBarPresenterWidget tabBar;
@Inject
private PlaceManager placeManager;
public AbstractSubTabPanelPresenter(EventBus eventBus, V view, P proxy,
Object tabContentSlot,
Type<RequestTabsHandler> requestTabsEventType,
Type<ChangeTabHandler> changeTabEventType,
AbstractMainTabSelectedItems<?> selectedItems,
ScrollableTabBarPresenterWidget tabBar) {
this(eventBus, view, proxy, tabContentSlot, requestTabsEventType, changeTabEventType,
tabBar, selectedItems, MainContentPresenter.TYPE_SetSubTabPanelContent);
}
public AbstractSubTabPanelPresenter(EventBus eventBus, V view, P proxy,
Object tabContentSlot,
Type<RequestTabsHandler> requestTabsEventType,
Type<ChangeTabHandler> changeTabEventType,
ScrollableTabBarPresenterWidget tabBar,
AbstractMainTabSelectedItems<?> selectedItems,
Type<RevealContentHandler<?>> slot) {
super(eventBus, view, proxy, tabContentSlot, requestTabsEventType, changeTabEventType,
slot);
getView().setUiHandlers(tabBar);
this.selectedItems = selectedItems;
this.tabBar = tabBar;
this.tabBar.setWantsOffset(false);
}
@Override
protected void onReveal() {
super.onReveal();
setInSlot(TYPE_SetTabBar, tabBar);
// Show sub tab panel when revealing sub tab presenter
UpdateMainContentLayoutEvent.fire(this, true);
}
@Override
public void addTabWidget(IsWidget tabWidget, int index) {
tabBar.addTabWidget(tabWidget, index);
}
@Override
public void removeTabWidget(IsWidget tabWidget) {
tabBar.removeTabWidget(tabWidget);
}
protected PlaceRequest getMainTabRequest() {
return null;
}
@SuppressWarnings("unchecked")
@Override
public void prepareFromRequest(PlaceRequest request) {
super.prepareFromRequest(request);
if (getProxy() instanceof TabContentProxyPlace && getMainTabRequest() != null) {
// Reveal presenter only when there is something selected in the main tab
if (selectedItems != null && selectedItems.hasSelection()) {
((TabContentProxyPlace<AbstractSubTabPanelPresenter<V, P>>)getProxy()).manualReveal(this);
} else {
((TabContentProxyPlace<AbstractSubTabPanelPresenter<V, P>>)getProxy()).manualRevealFailed();
placeManager.revealPlace(getMainTabRequest());
}
}
}
}