View Javadoc
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  }