TableActionsPanel.java revision 79a7b0d387aac103fc1d125353eefa361030452a
1package autotest.common.ui; 2 3 4import autotest.common.ui.TableSelectionPanel.SelectionPanelListener; 5 6import com.google.gwt.event.dom.client.ClickEvent; 7import com.google.gwt.event.dom.client.ClickHandler; 8import com.google.gwt.event.logical.shared.CloseEvent; 9import com.google.gwt.event.logical.shared.CloseHandler; 10import com.google.gwt.user.client.ui.Composite; 11import com.google.gwt.user.client.ui.HorizontalPanel; 12import com.google.gwt.user.client.ui.Panel; 13import com.google.gwt.user.client.ui.PopupPanel; 14import com.google.gwt.user.client.ui.ToggleButton; 15 16public class TableActionsPanel extends Composite implements ClickHandler, CloseHandler<PopupPanel>{ 17 public static interface TableActionsListener { 18 public ContextMenu getActionMenu(); 19 } 20 21 public static interface TableActionsWithExportCsvListener extends TableActionsListener { 22 public void onExportCsv(); 23 } 24 25 private TableActionsListener listener; 26 private TableActionsWithExportCsvListener csvListener; 27 private ToggleButton actionsButton = new ToggleButton("Actions"); 28 private TableSelectionPanel selectionPanel; 29 private SimpleHyperlink exportCsvLink = new SimpleHyperlink("Export to CSV"); 30 31 public TableActionsPanel(boolean wantSelectVisible) { 32 selectionPanel = new TableSelectionPanel(wantSelectVisible); 33 actionsButton.addClickHandler(this); 34 exportCsvLink.addClickHandler(this); 35 exportCsvLink.setVisible(false); 36 exportCsvLink.getElement().getStyle().setProperty("marginLeft", "1em"); 37 38 Panel mainPanel = new HorizontalPanel(); 39 mainPanel.add(selectionPanel); 40 mainPanel.add(actionsButton); 41 mainPanel.add(exportCsvLink); 42 initWidget(mainPanel); 43 } 44 45 public void setActionsListener(TableActionsListener listener) { 46 this.listener = listener; 47 } 48 49 /** 50 * This automatically enables the Export CSV link, which is disabled by default. 51 */ 52 public void setActionsWithCsvListener(TableActionsWithExportCsvListener listener) { 53 csvListener = listener; 54 this.listener = listener; 55 exportCsvLink.setVisible(true); 56 } 57 58 public void setSelectionListener(SelectionPanelListener listener) { 59 selectionPanel.setListener(listener); 60 } 61 62 public void onClick(ClickEvent event) { 63 if (event.getSource() == exportCsvLink) { 64 assert csvListener != null; 65 csvListener.onExportCsv(); 66 } else { 67 assert event.getSource() == actionsButton; 68 ContextMenu menu = listener.getActionMenu(); 69 menu.addCloseHandler(this); 70 menu.showAt(actionsButton.getAbsoluteLeft(), 71 actionsButton.getAbsoluteTop() + actionsButton.getOffsetHeight()); 72 } 73 } 74 75 @Override 76 public void onClose(CloseEvent<PopupPanel> event) { 77 actionsButton.setDown(false); 78 } 79} 80