Home | History | Annotate | Download | only in table
      1 package autotest.common.table;
      2 
      3 import autotest.common.table.DynamicTable.DynamicTableListener;
      4 import autotest.common.ui.Paginator;
      5 import autotest.common.ui.TableActionsPanel;
      6 import autotest.common.ui.TableSelectionPanel;
      7 import autotest.common.ui.TableActionsPanel.TableActionsListener;
      8 import autotest.common.ui.TableActionsPanel.TableActionsWithExportCsvListener;
      9 
     10 import com.google.gwt.json.client.JSONObject;
     11 import com.google.gwt.user.client.ui.Composite;
     12 import com.google.gwt.user.client.ui.FlexTable;
     13 import com.google.gwt.user.client.ui.Widget;
     14 
     15 /**
     16  * This class can optionally add any of the following controls around a table (in this order of
     17  * layout):
     18  * Filter controls
     19  * Selection/action menu
     20  * Top paginator
     21  * Actual data table
     22  * Bottom paginator
     23  */
     24 public class TableDecorator extends Composite implements DynamicTableListener {
     25     private FlexTable enclosingTable = new FlexTable();
     26     private FlexTable filterTable = new FlexTable();
     27     private DynamicTable dataTable;
     28     private SelectionManager selectionManager;
     29     private int numFilters = 0;
     30 
     31     private static class LayoutRows {
     32         public static final int FILTERS = 0,
     33                                 TOP_ACTIONS = 1,
     34                                 TOP_PAGINATOR = 2,
     35                                 TABLE = 3,
     36                                 BOTTOM_PAGINATOR = 4,
     37                                 BOTTOM_ACTIONS = 5;
     38     }
     39 
     40     public TableDecorator(DynamicTable dataTable) {
     41         this.dataTable = dataTable;
     42         setRow(LayoutRows.TABLE, dataTable);
     43         setRow(LayoutRows.FILTERS, filterTable);
     44         initWidget(enclosingTable);
     45     }
     46 
     47     public void addPaginators() {
     48         for(int i = 0; i < 2; i++) {
     49             Paginator paginator = new Paginator();
     50             dataTable.attachPaginator(paginator);
     51             if (i == 0) { // add at top
     52                 setRow(LayoutRows.TOP_PAGINATOR, paginator);
     53             }
     54             else { // add at bottom
     55                 setRow(LayoutRows.BOTTOM_PAGINATOR, paginator);
     56             }
     57         }
     58     }
     59 
     60     public void addFilter(String text, Filter filter) {
     61         dataTable.addFilter(filter);
     62         addControl(text, filter.getWidget());
     63     }
     64 
     65     public void addControl(String text, Widget widget) {
     66       int row = numFilters;
     67       numFilters++;
     68       filterTable.setText(row, 0, text);
     69       filterTable.setWidget(row, 1, widget);
     70     }
     71 
     72     public SelectionManager addSelectionManager(boolean selectOnlyOne) {
     73         selectionManager = new DynamicTableSelectionManager(dataTable, selectOnlyOne);
     74         dataTable.addListener(this);
     75         return selectionManager;
     76     }
     77 
     78     public void addSelectionPanel(boolean wantSelectVisible) {
     79         assert selectionManager != null;
     80         for(int i = 0; i < 2; i++) {
     81             TableSelectionPanel selectionPanel = new TableSelectionPanel(wantSelectVisible);
     82             selectionPanel.setListener(selectionManager);
     83             if (i == 0)
     84                 setRow(LayoutRows.TOP_ACTIONS, selectionPanel);
     85             else
     86                 setRow(LayoutRows.BOTTOM_ACTIONS, selectionPanel);
     87         }
     88     }
     89 
     90     private TableActionsPanel createTableActionsPanel(boolean wantSelectVisible) {
     91         assert selectionManager != null;
     92         TableActionsPanel actionsPanel = new TableActionsPanel(wantSelectVisible);
     93         actionsPanel.setSelectionListener(selectionManager);
     94         return actionsPanel;
     95     }
     96 
     97     public void addTableActionsPanel(TableActionsListener listener, boolean wantSelectVisible) {
     98         for(int i = 0; i < 2; i++) {
     99             TableActionsPanel actionsPanel = createTableActionsPanel(wantSelectVisible);
    100             actionsPanel.setActionsListener(listener);
    101             if (i == 0)
    102                 setRow(LayoutRows.TOP_ACTIONS, actionsPanel);
    103             else
    104                 setRow(LayoutRows.BOTTOM_ACTIONS, actionsPanel);
    105         }
    106     }
    107 
    108     public void addTableActionsWithExportCsvListener(TableActionsWithExportCsvListener listener) {
    109         addTableActionsPanel(listener, true);
    110     }
    111 
    112     public void setActionsWidget(Widget widget) {
    113         setRow(LayoutRows.TOP_ACTIONS, widget);
    114     }
    115 
    116     private void setRow(int row, Widget widget) {
    117         enclosingTable.setWidget(row, 0, widget);
    118     }
    119 
    120     @Override
    121     public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) {}
    122 
    123     public void onTableRefreshed() {
    124         assert selectionManager != null;
    125         selectionManager.refreshSelection();
    126     }
    127 }
    128