1 /* 2 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package org.jemmy.fx.control; 26 27 import javafx.scene.control.ContextMenu; 28 import javafx.scene.control.Menu; 29 import javafx.scene.control.MenuItem; 30 import org.jemmy.action.FutureAction; 31 import org.jemmy.control.As; 32 import org.jemmy.control.ControlInterfaces; 33 import org.jemmy.control.ControlType; 34 import org.jemmy.env.Environment; 35 import org.jemmy.fx.WindowWrap; 36 import org.jemmy.input.StringMenuOwner; 37 import org.jemmy.interfaces.Parent; 38 39 import java.util.List; 40 41 /** 42 * Context menu is supported in the very same way as menu bar. 43 * Please consult <a href="../../samples/menu">samples</a> for more info. 44 * 45 * @author shura 46 * @see MenuBarWrap 47 * @see ContextMenuDock 48 */ 49 @ControlType(ContextMenu.class) 50 @ControlInterfaces(value = {Parent.class, StringMenuOwner.class}, 51 encapsulates = {MenuItem.class, MenuItem.class}, name = {"asMenuParent", "asMenuOwner"}) 52 public class ContextMenuWrap<T extends ContextMenu> extends WindowWrap<T> { 53 54 private StringMenuOwnerImpl menuOwner = null; 55 private Parent<MenuItem> parent = null; 56 57 public ContextMenuWrap(Environment env, T window) { 58 super(env, window); 59 } 60 61 /** 62 * @return 63 * @see MenuBarWrap#asMenuParent() 64 */ 65 @As(MenuItem.class) 66 public Parent<MenuItem> asMenuParent() { 67 if (parent == null) { 68 parent = new MenuItemParent(this) { 69 70 @Override 71 protected List getControls() { 72 return new FutureAction<>(getEnvironment(), () -> getControl().getItems()).get(); 73 } 74 }; 75 } 76 return parent; 77 } 78 79 /** 80 * @return 81 * @see MenuBarWrap#asMenuOwner() 82 */ 83 @As(MenuItem.class) 84 public StringMenuOwner<MenuItem> asMenuOwner() { 85 if (menuOwner == null) { 86 menuOwner = new StringMenuOwnerImpl(this, this.as(Parent.class, Menu.class)); 87 } 88 return menuOwner; 89 } 90 91 }