package org.ovirt.engine.ui.common.widget.table; 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.widget.action.ActionButton; import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition; import org.ovirt.engine.ui.common.widget.action.SimpleActionButton; import org.ovirt.engine.ui.common.widget.refresh.AbstractRefreshManager; import org.ovirt.engine.ui.common.widget.refresh.RefreshPanel; import org.ovirt.engine.ui.common.widget.refresh.SimpleRefreshManager; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.EventBus; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.cellview.client.LoadingStateChangeEvent.LoadingState; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class SimpleActionTable<T> extends AbstractActionTable<T> { interface WidgetUiBinder extends UiBinder<Widget, SimpleActionTable<?>> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } @UiField Style style; @UiField SimplePanel tableOverhead; @UiField HTMLPanel barPanel; @UiField(provided = true) @WithElementId public RefreshPanel refreshPanel; @UiField @WithElementId("itemsCount") public Label itemsCountLabel; public SimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, EventBus eventBus, ClientStorage clientStorage) { this(dataProvider, null, null, eventBus, clientStorage); } public SimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, EventBus eventBus, ClientStorage clientStorage, AbstractRefreshManager<RefreshPanel> refreshManager) { this(dataProvider, null, null, eventBus, clientStorage, refreshManager); } public SimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, Resources resources, EventBus eventBus, ClientStorage clientStorage) { this(dataProvider, resources, null, eventBus, clientStorage); } public SimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, Resources resources, EventBus eventBus, ClientStorage clientStorage, AbstractRefreshManager<RefreshPanel> refreshManager) { this(dataProvider, resources, null, eventBus, clientStorage, refreshManager); } public SimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, Resources resources, Resources headerResources, EventBus eventBus, ClientStorage clientStorage) { this(dataProvider, resources, headerResources, eventBus, clientStorage, new SimpleRefreshManager(dataProvider, eventBus, clientStorage)); } public SimpleActionTable(final SearchableTableModelProvider<T, ?> dataProvider, Resources resources, Resources headerResources, EventBus eventBus, ClientStorage clientStorage, AbstractRefreshManager<RefreshPanel> refreshManager) { super(dataProvider, resources, headerResources, eventBus, clientStorage); this.refreshPanel = refreshManager.getRefreshPanel(); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); initStyles(); refreshPanel.setVisible(false); prevPageButton.setVisible(false); nextPageButton.setVisible(false); itemsCountLabel.setVisible(false); refreshManager.setManualRefreshCallback(() -> { //Do any special refresh options. dataProvider.onManualRefresh(); setLoadingState(LoadingState.LOADING); }); } @Override protected void updateTableControls() { super.updateTableControls(); itemsCountLabel.setText(getDataProvider().getItemsCount()); } void initStyles() { tableContainer.setStyleName(getTableContainerStyleName()); barPanel.setStyleName(getBarPanelStyleName()); } protected String getBarPanelStyleName() { return style.bar(); } protected String getTableContainerStyleName() { return showDefaultHeader ? style.contentWithDefaultHeader() : style.content(); } public void showRefreshButton() { if (getDataProvider().getModel().getIsTimerDisabled()) { refreshPanel.hideRefreshMenuButton(); } refreshPanel.setVisible(true); } public void hideRefreshButton() { refreshPanel.setVisible(false); } public void showItemsCount() { itemsCountLabel.setVisible(true); } public void setBarStyle(String barStyle) { barPanel.setStyleName(barStyle); } @Override protected ActionButton createNewActionButton(ActionButtonDefinition<T> buttonDef) { return new SimpleActionButton(); } @Override protected void updateMenuItem(MenuItem item, ActionButtonDefinition<T> buttonDef) { super.updateMenuItem(item, buttonDef); if (buttonDef.isSubTitledAction()) { item.addStyleName(style.subTitledButton()); } } public void setTableOverhead(Widget widget) { tableOverhead.setWidget(widget); } public void setTableTopMargin(int topMargin) { tableHeaderContainer.getElement().getStyle().setMarginTop(topMargin, Unit.PX); tableContainer.getElement().getStyle().setMarginTop(topMargin, Unit.PX); } interface Style extends CssResource { String content(); String contentWithDefaultHeader(); String subTitledButton(); String bar(); } }