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