blob: 9adc8e49cec1cb3157d6d6a62739723a17c79e9e [file] [log] [blame]
package autotest.common.table;
import autotest.common.table.DynamicTable.DynamicTableListener;
import autotest.common.ui.Paginator;
import autotest.common.ui.TableActionsPanel;
import autotest.common.ui.TableSelectionPanel;
import autotest.common.ui.TableActionsPanel.TableActionsListener;
import autotest.common.ui.TableActionsPanel.TableActionsWithExportCsvListener;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Widget;
/**
* This class can optionally add any of the following controls around a table (in this order of
* layout):
* Filter controls
* Selection/action menu
* Top paginator
* Actual data table
* Bottom paginator
*/
public class TableDecorator extends Composite implements DynamicTableListener {
private FlexTable enclosingTable = new FlexTable();
private FlexTable filterTable = new FlexTable();
private DynamicTable dataTable;
private SelectionManager selectionManager;
private int numFilters = 0;
private static class LayoutRows {
public static final int FILTERS = 0,
TOP_ACTIONS = 1,
TOP_PAGINATOR = 2,
TABLE = 3,
BOTTOM_PAGINATOR = 4,
BOTTOM_ACTIONS = 5;
}
public TableDecorator(DynamicTable dataTable) {
this.dataTable = dataTable;
setRow(LayoutRows.TABLE, dataTable);
setRow(LayoutRows.FILTERS, filterTable);
initWidget(enclosingTable);
}
public void addPaginators() {
for(int i = 0; i < 2; i++) {
Paginator paginator = new Paginator();
dataTable.attachPaginator(paginator);
if (i == 0) { // add at top
setRow(LayoutRows.TOP_PAGINATOR, paginator);
}
else { // add at bottom
setRow(LayoutRows.BOTTOM_PAGINATOR, paginator);
}
}
}
public void addFilter(String text, Filter filter) {
dataTable.addFilter(filter);
addControl(text, filter.getWidget());
}
public void addControl(String text, Widget widget) {
int row = numFilters;
numFilters++;
filterTable.setText(row, 0, text);
filterTable.setWidget(row, 1, widget);
}
public SelectionManager addSelectionManager(boolean selectOnlyOne) {
selectionManager = new DynamicTableSelectionManager(dataTable, selectOnlyOne);
dataTable.addListener(this);
return selectionManager;
}
public void addSelectionPanel(boolean wantSelectVisible) {
assert selectionManager != null;
for(int i = 0; i < 2; i++) {
TableSelectionPanel selectionPanel = new TableSelectionPanel(wantSelectVisible);
selectionPanel.setListener(selectionManager);
if (i == 0)
setRow(LayoutRows.TOP_ACTIONS, selectionPanel);
else
setRow(LayoutRows.BOTTOM_ACTIONS, selectionPanel);
}
}
private TableActionsPanel createTableActionsPanel(boolean wantSelectVisible) {
assert selectionManager != null;
TableActionsPanel actionsPanel = new TableActionsPanel(wantSelectVisible);
actionsPanel.setSelectionListener(selectionManager);
return actionsPanel;
}
public void addTableActionsPanel(TableActionsListener listener, boolean wantSelectVisible) {
for(int i = 0; i < 2; i++) {
TableActionsPanel actionsPanel = createTableActionsPanel(wantSelectVisible);
actionsPanel.setActionsListener(listener);
if (i == 0)
setRow(LayoutRows.TOP_ACTIONS, actionsPanel);
else
setRow(LayoutRows.BOTTOM_ACTIONS, actionsPanel);
}
}
public void addTableActionsWithExportCsvListener(TableActionsWithExportCsvListener listener) {
addTableActionsPanel(listener, true);
}
public void setActionsWidget(Widget widget) {
setRow(LayoutRows.TOP_ACTIONS, widget);
}
private void setRow(int row, Widget widget) {
enclosingTable.setWidget(row, 0, widget);
}
@Override
public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) {}
public void onTableRefreshed() {
assert selectionManager != null;
selectionManager.refreshSelection();
}
}