package org.ovirt.engine.ui.userportal.section.main.view; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.uicommon.model.SearchableTableModelProvider; import org.ovirt.engine.ui.common.view.AbstractView; import org.ovirt.engine.ui.common.view.SubTabHelper; import org.ovirt.engine.ui.common.widget.table.SimpleActionTable; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.userportal.ApplicationResources; import org.ovirt.engine.ui.userportal.gin.AssetProvider; import org.ovirt.engine.ui.userportal.gin.ClientGinjectorProvider; import org.ovirt.engine.ui.userportal.section.main.presenter.AbstractSideTabWithDetailsPresenter; import org.ovirt.engine.ui.userportal.widget.extended.ExtendedViewSplitLayoutPanel; import org.ovirt.engine.ui.userportal.widget.table.UserPortalSimpleActionTable; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.SimplePanel; public abstract class AbstractSideTabWithDetailsView<T, M extends SearchableListModel> extends AbstractView implements AbstractSideTabWithDetailsPresenter.ViewDef<T> { protected final SearchableTableModelProvider<T, M> modelProvider; @WithElementId public final SimpleActionTable<T> table; private final ExtendedViewSplitLayoutPanel splitPanel; private final SimplePanel subTabPanelContainer = new SimplePanel(); private final ClientStorage clientStorage; private boolean subTabPanelVisible; private static final ApplicationResources resources = AssetProvider.getResources(); public AbstractSideTabWithDetailsView( SearchableTableModelProvider<T, M> modelProvider, final ClientStorage clientStorage) { this.modelProvider = modelProvider; this.table = createActionTable(); this.table.showRefreshButton(); this.clientStorage = clientStorage; resources.sideTabWithDetailsViewStyle().ensureInjected(); subTabPanelContainer.setStyleName(resources.sideTabWithDetailsViewStyle().detailsContentPanel()); splitPanel = new ExtendedViewSplitLayoutPanel(resources.extendedViewSplitterSnap()) { @Override public void onResize() { super.onResize(); if (subTabPanelVisible) { SubTabHelper.storeSubTabHeight(clientStorage, subTabPanelContainer); } } }; initWidget(splitPanel); initSplitPanel(); } protected SimpleActionTable<T> createActionTable() { return new UserPortalSimpleActionTable<T>(modelProvider, getTableResources(), getTableHeaderResources(), ClientGinjectorProvider.getEventBus(), ClientGinjectorProvider.getClientStorage()) { @Override protected String getTableContainerStyleName() { return AbstractSideTabWithDetailsView.this.getTableContainerStyleName() == null ? super.getTableContainerStyleName() : AbstractSideTabWithDetailsView.this.getTableContainerStyleName(); } }; } protected Resources getTableResources() { return null; } protected Resources getTableHeaderResources() { return null; } protected String getTableContainerStyleName() { return null; } void initSplitPanel() { splitPanel.add(table); subTabPanelVisible = false; } @Override public void setInSlot(Object slot, IsWidget content) { if (slot == getSubTabPanelContentSlot()) { setPanelContent(subTabPanelContainer, content); } else { super.setInSlot(slot, content); } } /** * Returns the slot object associated with the sub tab panel content area. */ protected abstract Object getSubTabPanelContentSlot(); @Override public void setSubTabPanelVisible(boolean subTabPanelVisible) { if (this.subTabPanelVisible != subTabPanelVisible) { splitPanel.clear(); if (subTabPanelVisible) { splitPanel.addSouth(subTabPanelContainer, SubTabHelper.getSubTabHeight(clientStorage, splitPanel)); splitPanel.add(table); splitPanel.init(); } else { splitPanel.add(table); } this.subTabPanelVisible = subTabPanelVisible; } } @Override public SimpleActionTable<T> getTable() { return table; } protected M getModel() { return modelProvider.getModel(); } }