001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.visualweb.gravy.actions;
043:
044: import org.netbeans.jellytools.Bundle;
045: import org.netbeans.modules.visualweb.gravy.nodes.Node;
046: import javax.swing.tree.TreePath;
047: import org.netbeans.jemmy.EventTool;
048: import org.netbeans.jemmy.JemmyException;
049: import org.netbeans.jemmy.operators.JPopupMenuOperator;
050: import org.netbeans.jemmy.operators.Operator;
051: import org.netbeans.jemmy.operators.Operator.ComponentVisualizer;
052: import org.netbeans.jemmy.util.EmptyVisualizer;
053:
054: import java.awt.event.KeyEvent;
055:
056: /** Used to call "Delete" popup menu item,
057: * "org.openide.actions.SaveAction" or DEL shortcut.
058: * @see Action
059: * @author Alexey.Butenko@sun.com
060: */
061: public class DeleteAction extends Action {
062: private static final String deletePopup = Bundle.getStringTrimmed(
063: "org.openide.actions.Bundle", "Delete");
064: private static final String deleteMenu = null; //Bundle.getStringTrimmed("org.netbeans.core.Bundle", "Menu/File") + "|" + savePopup; by ois
065: private static final Shortcut deleteShortcut = new Shortcut(
066: KeyEvent.VK_DELETE);
067:
068: public DeleteAction() {
069: super (deleteMenu, deletePopup,
070: "org.openide.actions.DeleteAction", deleteShortcut);
071: }
072:
073: public void performPopup(Node[] nodes) {
074: if (popupPath == null) {
075: throw new UnsupportedOperationException(getClass()
076: .toString()
077: + " does not define popup path");
078: }
079: testNodes(nodes);
080: TreePath paths[] = new TreePath[nodes.length];
081: for (int i = 0; i < nodes.length; i++) {
082: paths[i] = nodes[i].getTreePath();
083: }
084: ComponentVisualizer treeVisualizer = nodes[0].tree()
085: .getVisualizer();
086: ComponentVisualizer oldVisualizer = null;
087: // If visualizer of JTreeOperator is EmptyVisualizer, we need
088: // to avoid making tree component visible in callPopup method.
089: // So far only known case is tree from TreeTableOperator.
090: if (treeVisualizer instanceof EmptyVisualizer) {
091: oldVisualizer = Operator.getDefaultComponentVisualizer();
092: Operator.setDefaultComponentVisualizer(treeVisualizer);
093: }
094: // Need to wait here to be more reliable.
095: // TBD - It can be removed after issue 23663 is solved.
096: new EventTool().waitNoEvent(500);
097: JPopupMenuOperator popup = new JPopupMenuOperator(nodes[0]
098: .tree().callPopupOnPaths(paths));
099: // restore previously used default visualizer
100: if (oldVisualizer != null) {
101: Operator.setDefaultComponentVisualizer(oldVisualizer);
102: }
103: popup.pushMenuNoBlock(popupPath, "|", getComparator());
104: try {
105: Thread.sleep(AFTER_ACTION_WAIT_TIME);
106: } catch (Exception e) {
107: throw new JemmyException("Sleeping interrupted", e);
108: }
109: }
110: }
|