1 package com.vaadin.contextmenu; 2 3 import java.io.Serializable; 4 import java.util.EventListener; 5 6 import com.vaadin.contextmenu.ContextMenu.ContextMenuOpenListener.ContextMenuOpenEvent; 7 import com.vaadin.contextmenu.GridContextMenu.GridContextMenuOpenListener.GridContextMenuOpenEvent; 8 import com.vaadin.shared.ui.grid.GridConstants.Section; 9 import com.vaadin.ui.Grid; 10 import com.vaadin.ui.Grid.Column; 11 import com.vaadin.ui.Grid.GridContextClickEvent; 12 13 @SuppressWarnings("serial") 14 public class GridContextMenu<T> extends ContextMenu { 15 16 public GridContextMenu(Grid<T> parentComponent) { 17 super(parentComponent, true); 18 } 19 20 private void addGridSectionContextMenuListener(final Section section, 21 final GridContextMenuOpenListener<T> listener) { 22 addContextMenuOpenListener(new ContextMenuOpenListener() { 23 @Override 24 public void onContextMenuOpen(ContextMenuOpenEvent event) { 25 if (event 26 .getContextClickEvent() instanceof GridContextClickEvent) { 27 @SuppressWarnings("unchecked") 28 GridContextClickEvent<T> gridEvent = (GridContextClickEvent<T>) event 29 .getContextClickEvent(); 30 if (gridEvent.getSection() == section) { 31 listener.onContextMenuOpen( 32 new GridContextMenuOpenEvent<T>( 33 GridContextMenu.this, gridEvent)); 34 } 35 } 36 } 37 }); 38 } 39 40 public void addGridHeaderContextMenuListener( 41 GridContextMenuOpenListener<T> listener) { 42 addGridSectionContextMenuListener(Section.HEADER, listener); 43 } 44 45 public void addGridFooterContextMenuListener( 46 GridContextMenuOpenListener<T> listener) { 47 addGridSectionContextMenuListener(Section.FOOTER, listener); 48 } 49 50 public void addGridBodyContextMenuListener( 51 GridContextMenuOpenListener<T> listener) { 52 addGridSectionContextMenuListener(Section.BODY, listener); 53 } 54 55 public interface GridContextMenuOpenListener<T> 56 extends EventListener, Serializable { 57 58 public void onContextMenuOpen(GridContextMenuOpenEvent<T> event); 59 60 public static class GridContextMenuOpenEvent<T> 61 extends ContextMenuOpenEvent { 62 private final Object item; 63 private final int rowIndex; 64 private final Column<?, ?> column; 65 private final Section section; 66 67 public GridContextMenuOpenEvent(ContextMenu contextMenu, 68 GridContextClickEvent<T> contextClickEvent) { 69 super(contextMenu, contextClickEvent); 70 item = contextClickEvent.getItem(); 71 rowIndex = contextClickEvent.getRowIndex(); 72 column = contextClickEvent.getColumn(); 73 section = contextClickEvent.getSection(); 74 } 75 76 public Object getItem() { 77 return item; 78 } 79 80 public int getRowIndex() { 81 return rowIndex; 82 } 83 84 public Column<?, ?> getColumn() { 85 return column; 86 } 87 88 public Section getSection() { 89 return section; 90 } 91 } 92 } 93 }