| /******************************************************************************* |
| * Copyright (c) 2001, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.xsd.ui.internal.common.properties.sections.appinfo; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.action.IMenuListener; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; |
| import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; |
| import org.eclipse.wst.xml.core.internal.document.ElementImpl; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; |
| import org.eclipse.wst.xml.ui.internal.contentoutline.XMLNodeActionManager; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.Node; |
| |
| public class DOMExtensionItemMenuListener implements IMenuListener |
| { |
| TreeViewer treeViewer; |
| |
| public DOMExtensionItemMenuListener(TreeViewer treeViewer) |
| { |
| this.treeViewer = treeViewer; |
| } |
| |
| public void menuAboutToShow(IMenuManager manager) |
| { |
| manager.removeAll(); |
| ISelection selection = treeViewer.getSelection(); |
| if (selection instanceof IStructuredSelection) |
| { |
| IStructuredSelection structuredSelection = (IStructuredSelection) selection; |
| if (structuredSelection.getFirstElement() instanceof ElementImpl) |
| { |
| ElementImpl elementImpl = (ElementImpl) structuredSelection.getFirstElement(); |
| IDOMDocument domDocument = (IDOMDocument) elementImpl.getOwnerDocument(); |
| InternalNodeActionManager actionManager = new InternalNodeActionManager(domDocument.getModel(), treeViewer); |
| actionManager.fillContextMenu(manager, structuredSelection); |
| } |
| } |
| } |
| |
| |
| class InternalNodeActionManager extends XMLNodeActionManager |
| { |
| public InternalNodeActionManager(IStructuredModel model, Viewer viewer) |
| { |
| super(model, viewer); |
| } |
| |
| public void contributeActions(IMenuManager menu, List selection) |
| { |
| //menu.add(new Action("there"){}); |
| try |
| { |
| int editMode = modelQuery.getEditMode(); |
| int ic = ModelQuery.INCLUDE_CHILD_NODES; |
| int vc = (editMode == ModelQuery.EDIT_MODE_CONSTRAINED_STRICT) ? ModelQuery.VALIDITY_STRICT : ModelQuery.VALIDITY_NONE; |
| List implicitlySelectedNodeList = null; |
| |
| if (selection.size() == 1) |
| { |
| Node node = (Node) selection.get(0); |
| // contribute add child actions |
| contributeAddChildActions(menu, node, ic, vc); |
| } |
| if (selection.size() > 0) |
| { |
| implicitlySelectedNodeList = getSelectedNodes(selection, true); |
| // contribute delete actions |
| contributeDeleteActions(menu, implicitlySelectedNodeList, ic, vc); |
| } |
| } |
| catch(Exception e) |
| { |
| menu.add(new Action(e.getMessage()){}); |
| } |
| /* |
| if (selection.size() > 0) |
| { |
| // contribute replace actions |
| contributeReplaceActions(menu, implicitlySelectedNodeList, ic, vc); |
| }*/ |
| } |
| |
| protected void contributeAddChildActions(IMenuManager menu, Node node, int ic, int vc) |
| { |
| int nodeType = node.getNodeType(); |
| if (nodeType == Node.ELEMENT_NODE) |
| { |
| // 'Add Child...' and 'Add Attribute...' actions |
| // |
| Element element = (Element) node; |
| MyMenuManager newMenu = new MyMenuManager("New"){ |
| public boolean isVisible() { return true; } |
| };//$NON-NLS-1$ |
| newMenu.setVisible(true); |
| menu.add(newMenu); |
| |
| CMElementDeclaration ed = modelQuery.getCMElementDeclaration(element); |
| if (ed != null) |
| { |
| List modelQueryActionList = new ArrayList(); |
| // add insert child node actions |
| // |
| modelQueryActionList = new ArrayList(); |
| modelQuery.getInsertActions(element, ed, -1, ic, vc, modelQueryActionList); |
| addActionHelper(newMenu, modelQueryActionList); |
| } |
| } |
| } |
| } |
| } |