package au.com.vaadinutils.fields; import java.util.ArrayList; import java.util.List; import org.vaadin.peter.contextmenu.ContextMenu; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.MouseEvents.ClickEvent; import com.vaadin.shared.MouseEventDetails.MouseButton; import com.vaadin.ui.Table; import com.vaadin.ui.Table.FooterClickEvent; import com.vaadin.ui.Table.FooterClickListener; import com.vaadin.ui.Table.HeaderClickEvent; import com.vaadin.ui.Table.HeaderClickListener; public class TableContextMenu extends ContextMenu { private static final long serialVersionUID = 1L; private List<TableContextMenuEvents> eventsList = new ArrayList<>(); /** * Assigns this as the context menu of given table. Allows context menu to * appear only on certain parts of the table. * * @param table * @param onRow * show context menu when row is clicked * @param onHeader * show context menu when header is clicked * @param onFooter * show context menu when footer is clicked */ public void setAsTableContextMenu(final Table table, final boolean onRow, final boolean onHeader, final boolean onFooter) { extend(table); setOpenAutomatically(false); if (onRow) { table.addItemClickListener(new ItemClickEvent.ItemClickListener() { private static final long serialVersionUID = -348059189217149508L; @Override public void itemClick(ItemClickEvent event) { if (event.getButton() == MouseButton.RIGHT) { for (TableContextMenuEvents events : eventsList) events.preContextMenuOpen(); fireEvent(new ContextMenuOpenedOnTableRowEvent(TableContextMenu.this, table, event.getItemId(), event.getPropertyId())); open(event.getClientX(), event.getClientY()); } } }); } if (onHeader) { table.addHeaderClickListener(new HeaderClickListener() { private static final long serialVersionUID = -5880755689414670581L; @Override public void headerClick(HeaderClickEvent event) { if (event.getButton() == MouseButton.RIGHT) { for (TableContextMenuEvents events : eventsList) events.preContextMenuOpen(); fireEvent(new ContextMenuOpenedOnTableHeaderEvent(TableContextMenu.this, table, event .getPropertyId())); open(event.getClientX(), event.getClientY()); } } }); } if (onFooter) { table.addFooterClickListener(new FooterClickListener() { private static final long serialVersionUID = 2884227013964132482L; @Override public void footerClick(FooterClickEvent event) { if (event.getButton() == MouseButton.RIGHT) { for (TableContextMenuEvents events : eventsList) events.preContextMenuOpen(); fireEvent(new ContextMenuOpenedOnTableHeaderEvent(TableContextMenu.this, table, event .getPropertyId())); open(event.getClientX(), event.getClientY()); } } }); } } public void addEvents(final TableContextMenuEvents events) { eventsList.add(events); } public void openRow(final ClickEvent event, final Object itemId, final Object propertyId) { if (event.getButton() == MouseButton.RIGHT) { for (TableContextMenuEvents events : eventsList) events.preContextMenuOpen(); open(event.getClientX(), event.getClientY()); } } }