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