View Javadoc
1   /*
2    * Copyright 2000-2018 Vaadin Ltd.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
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 }