blob: 912a8df31791b6f9fae823da02b6fa0323aba208 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2004 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.xml.ui.internal.tabletree;
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.text.IDocument;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.eclipse.wst.xml.ui.internal.actions.NodeAction;
import org.eclipse.wst.xml.ui.internal.contentoutline.XMLNodeActionManager;
import org.eclipse.wst.xml.ui.internal.dnd.XMLDragAndDropManager;
import org.w3c.dom.Document;
public class XMLTableTreeViewer extends TreeViewer implements IDesignViewer {
class NodeActionMenuListener implements IMenuListener {
public void menuAboutToShow(IMenuManager menuManager) {
// used to disable NodeSelection listening while running
// NodeAction
XMLNodeActionManager nodeActionManager = new XMLNodeActionManager(((IDOMDocument) getInput()).getModel(), XMLTableTreeViewer.this) {
public void beginNodeAction(NodeAction action) {
super.beginNodeAction(action);
}
public void endNodeAction(NodeAction action) {
super.endNodeAction(action);
}
};
nodeActionManager.fillContextMenu(menuManager, getSelection());
}
}
protected CellEditor cellEditor;
int count = 0;
protected XMLTreeExtension treeExtension;
public XMLTableTreeViewer(Composite parent) {
super(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
// set up providers
this.treeExtension = new XMLTreeExtension(getTree());
XMLTableTreeContentProvider provider = new XMLTableTreeContentProvider();
setContentProvider(provider);
setLabelProvider(provider);
createContextMenu();
XMLDragAndDropManager.addDragAndDropSupport(this);
}
/**
* This creates a context menu for the viewer and adds a listener as well
* registering the menu for extension.
*/
protected void createContextMenu() {
MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
contextMenu.add(new Separator("additions")); //$NON-NLS-1$
contextMenu.setRemoveAllWhenShown(true);
contextMenu.addMenuListener(new NodeActionMenuListener());
Menu menu = contextMenu.createContextMenu(getControl());
getControl().setMenu(menu);
}
protected void doRefresh(Object o, boolean fromDelayed) {
treeExtension.resetCachedData();
super.refresh(o);
}
public ISelectionProvider getSelectionProvider() {
return this;
}
public String getTitle() {
return XMLEditorMessages.XMLTableTreeViewer_0;
}
protected void handleDispose(DisposeEvent event) {
super.handleDispose(event);
treeExtension.dispose();
setDocument(null);
}
public void refresh() {
treeExtension.resetCachedData();
super.refresh();
}
public void refresh(Object o) {
treeExtension.resetCachedData();
super.refresh(o);
}
public void refresh(boolean updateLabels) {
treeExtension.resetCachedData();
super.refresh(updateLabels);
getControl().redraw();
}
public void refresh(Object element, boolean updateLabels) {
treeExtension.resetCachedData();
super.refresh(element, updateLabels);
getControl().redraw();
}
public void setDocument(IDocument document) {
/*
* let the text editor to be the one that manages the model's lifetime
*/
IStructuredModel model = null;
try {
model = StructuredModelManager.getModelManager().getExistingModelForRead(document);
if (model != null && model instanceof IDOMModel) {
Document domDoc = null;
domDoc = ((IDOMModel) model).getDocument();
setInput(domDoc);
treeExtension.setIsUnsupportedInput(false);
}
else {
treeExtension.setIsUnsupportedInput(true);
}
}
finally {
if (model != null) {
model.releaseFromRead();
}
}
}
}