blob: 07d2fb669766570ae4c71c842329668f143ad212 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 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.wsdl.ui.internal.outline;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.eclipse.wst.wsdl.ui.internal.WSDLEditor;
import org.eclipse.wst.wsdl.ui.internal.WSDLSelectionManager;
import org.eclipse.wst.wsdl.ui.internal.actions.WSDLMenuListener;
import org.eclipse.wst.wsdl.ui.internal.util.OpenOnSelectionHelper;
public class WSDLContentOutlinePage extends ContentOutlinePage
{
protected WSDLEditor wsdlEditor;
protected int level = 0;
protected Object model;
protected ITreeContentProvider contentProvider;
protected ILabelProvider labelProvider;
protected WSDLSelectionManager selectionManager;
protected SelectionManagerSelectionChangeListener selectionManagerSelectionChangeListener = new SelectionManagerSelectionChangeListener();
protected TreeSelectionChangeListener treeSelectionChangeListener = new TreeSelectionChangeListener();
public WSDLContentOutlinePage(WSDLEditor wsdlEditor)
{
this.wsdlEditor = wsdlEditor;
}
public void setContentProvider(ITreeContentProvider contentProvider)
{
this.contentProvider = contentProvider;
}
public void setLabelProvider(ILabelProvider labelProvider)
{
this.labelProvider = labelProvider;
}
// expose
public TreeViewer getTreeViewer()
{
return super.getTreeViewer();
}
public void createControl(Composite parent)
{
super.createControl(parent);
getTreeViewer().setContentProvider(contentProvider);
getTreeViewer().setLabelProvider(labelProvider);
getTreeViewer().setInput(model);
getTreeViewer().addSelectionChangedListener(this);
KeyAdapter keyListener = new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
if (e.keyCode == SWT.F3)
{
ISelection selection = selectionManager.getSelection();
if (selection instanceof IStructuredSelection)
{
Object object = ((IStructuredSelection)selection).getFirstElement();
if (object instanceof EObject)
{
OpenOnSelectionHelper helper = new OpenOnSelectionHelper(wsdlEditor.getDefinition());
helper.openEditor((EObject)object);
}
}
}
}
};
getTreeViewer().getTree().addKeyListener(keyListener);
MenuManager menuManager = new MenuManager("#popup");//$NON-NLS-1$
menuManager.setRemoveAllWhenShown(true);
Menu menu = menuManager.createContextMenu(getTreeViewer().getControl());
getTreeViewer().getControl().setMenu(menu);
WSDLMenuListener menuListener = new WSDLMenuListener(wsdlEditor, wsdlEditor.getSelectionManager());//, (XSDTextEditor)fTextEditor);
menuManager.addMenuListener(menuListener);
setSelectionManager(wsdlEditor.getSelectionManager());
}
public void setModel(Object object)
{
model = object;
}
public void setExpandToLevel(int i)
{
level = i;
}
public void setInput(Object value)
{
getTreeViewer().setInput(value);
getTreeViewer().expandToLevel(level);
}
public void setSelectionManager(WSDLSelectionManager newSelectionManager)
{
TreeViewer treeViewer = getTreeViewer();
// disconnect from old one
if (selectionManager != null)
{
selectionManager.removeSelectionChangedListener(selectionManagerSelectionChangeListener);
treeViewer.removeSelectionChangedListener(treeSelectionChangeListener);
}
selectionManager = newSelectionManager;
// connect to new one
if (selectionManager != null)
{
selectionManager.addSelectionChangedListener(selectionManagerSelectionChangeListener);
treeViewer.addSelectionChangedListener(treeSelectionChangeListener);
}
}
class SelectionManagerSelectionChangeListener implements ISelectionChangedListener
{
public void selectionChanged(SelectionChangedEvent event)
{
if (event.getSelectionProvider() != getTreeViewer())
{
getTreeViewer().setSelection(event.getSelection(), true);
}
}
}
class TreeSelectionChangeListener implements ISelectionChangedListener
{
public void selectionChanged(SelectionChangedEvent event)
{
if (selectionManager != null)
{
ISelection selection = event.getSelection();
if (selection instanceof IStructuredSelection)
{
IStructuredSelection structuredSelection = (IStructuredSelection)selection;
Object o = structuredSelection.getFirstElement();
// TODO ...
// we need to implement a selectionManagerMapping extension point
// so that extensions can specify how they'd like to map view objects
// to selection objects
//
// if (o instanceof Element)
// {
// try
// {
// Object modelObject = WSDLEditorUtil.getInstance().findModelObjectForElement(wsdlEditor.getDefinition(), (Element)o);
// if (modelObject != null && !(modelObject instanceof UnknownExtensibilityElement))
// {
// o = modelObject;
// }
// }
// catch (Exception e)
// {
// }
// }
if (o != null)
{
selectionManager.setSelection(new StructuredSelection(o), getTreeViewer());
}
else
{
selectionManager.setSelection(new StructuredSelection(), getTreeViewer());
}
}
}
}
}
}