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