/******************************************************************************* * 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; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeContentProvider; import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeViewer; import org.w3c.dom.Element; public class XSDTableTreeViewer extends XMLTableTreeViewer { String filter = ""; //$NON-NLS-1$ class XSDActionMenuListener implements IMenuListener { public void menuAboutToShow(IMenuManager menuManager) { // used to disable NodeSelection listening while running NodeAction // XSDActionManager nodeActionManager = new XSDActionManager(fModel, // XSDTableTreeViewer.this); // nodeActionManager.setCommandStack(commandStack); // nodeActionManager.fillContextMenu(menuManager, getSelection()); // used to disable NodeSelection listening while running NodeAction // XMLNodeActionManager nodeActionManager = new // XMLNodeActionManager(((IDOMDocument) getInput()).getModel(), // XMLTableTreeViewer.this) { if (getInput() != null) { XSDActionManager nodeActionManager = new XSDActionManager(((IDOMDocument) (((Element) getInput()).getOwnerDocument())).getModel(), XSDTableTreeViewer.this); // nodeActionManager.setCommandStack(commandStack); nodeActionManager.fillContextMenu(menuManager, getSelection()); } } } public XSDTableTreeViewer(Composite parent) { super(parent); // treeExtension.setCellModifier(null); getTree().setLinesVisible(true); // treeExtension = new XMLTreeExtension(getTree()); // Reassign the content provider XMLTableTreeContentProvider provider = new MyContentProvider(); // provider.addViewer(this); setContentProvider(provider); setLabelProvider(provider); // setViewerSelectionManager(new ViewerSelectionManagerImpl(null)); } protected Object getRoot() { return super.getRoot(); } public void setFilter(String filter) { this.filter = filter; } protected void createContextMenu() { // TODO Verify if this is okay to override the MenuManager MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$ contextMenu.add(new Separator("additions")); //$NON-NLS-1$ contextMenu.setRemoveAllWhenShown(true); // This is the line we have to modify contextMenu.addMenuListener(new XSDActionMenuListener()); Menu menu = contextMenu.createContextMenu(getControl()); getControl().setMenu(menu); } boolean added = false; class MyContentProvider extends XMLTableTreeContentProvider { // public Object[] getChildren(Object element) { // // if (!added) { // if (element instanceof Element) { // added = true; // Element elem = (Element)element; // if (elem instanceof INodeNotifier) { // viewerNotifyingAdapterFactory.adapt((INodeNotifier) elem); // } // // return new Object[] {elem}; // } // } // return super.getChildren(element); // } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { added = false; if (oldInput instanceof Element) oldInput = ((Element) oldInput).getOwnerDocument(); if (newInput instanceof Element) newInput = ((Element) newInput).getOwnerDocument(); super.inputChanged(viewer, oldInput, newInput); } } }