blob: 0b04e7b5aae5b5963e932698991ec3b04de687df [file] [log] [blame]
/*******************************************************************************
* 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);
}
}
}