blob: 9f1bbec83713e91886fa9582472eda6246e76b6c [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.xsd.ui.internal.graph;
import java.util.Iterator;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.StackLayout;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.gef.tools.SelectionTool;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.wst.xsd.ui.internal.XSDEditor;
import org.eclipse.wst.xsd.ui.internal.XSDMenuListener;
import org.eclipse.wst.xsd.ui.internal.gef.util.figures.ConnectionRenderingFigure;
import org.eclipse.wst.xsd.ui.internal.gef.util.figures.IConnectionRenderingViewer;
import org.eclipse.wst.xsd.ui.internal.graph.figures.CenterLayout;
import org.eclipse.xsd.XSDConcreteComponent;
/**
* @author ernest
*
* To change this generated comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public abstract class BaseGraphicalViewer extends ScrollingGraphicalViewer implements IConnectionRenderingViewer
{
protected FigureCanvasKeyboardHandler figureCanvasKeyboardHandler;
protected EditDomain editDomain;
protected boolean isInputEnabled = true;
protected boolean isSelectionEnabled = true;
protected ISelectionProvider menuSelectionProvider;
protected GraphContextMenuProvider menuProvider;
protected XSDEditor editor;
protected XSDConcreteComponent input;
protected ConnectionRenderingFigure connectionRenderingFigure;
public BaseGraphicalViewer(XSDEditor editor, ISelectionProvider selectionProvider)
{
super();
this.editor = editor;
menuSelectionProvider = selectionProvider;
}
public ConnectionRenderingFigure getConnectionRenderingFigure()
{
return connectionRenderingFigure;
}
public void setInputEnabled(boolean enabled)
{
isInputEnabled = enabled;
}
public void setSelectionEnabled(boolean enabled)
{
isSelectionEnabled = enabled;
}
public XSDMenuListener getMenuListener()
{
return menuProvider.getMenuListener();
}
protected static Color white = null;
protected void hookControl()
{
super.hookControl();
if (white == null)
{
white = new Color(getControl().getDisplay(), 255, 255, 255);
}
getControl().setBackground(white);
editDomain = new DefaultEditDomain(null);
((DefaultEditDomain)editDomain).setDefaultTool(new SelectionTool());
editDomain.loadDefaultTool();
editDomain.addViewer(this);
//jvh - gef port - moved this from below so it is available when adding context menu below
menuProvider = new GraphContextMenuProvider(this, menuSelectionProvider);
setContextMenu(menuProvider);
// add context menu to the graph
MenuManager manager = new MenuManager();
manager.addMenuListener(getMenuListener()); //jvh - gef port
manager.setRemoveAllWhenShown(true);
Menu menu = manager.createContextMenu(getControl());
getControl().setMenu(menu);
// enable popupMenus extension
//BUG 68938 eclipse bug fixed. Bug 112955 - Filter out menu contributions.
editor.getEditorSite().registerContextMenu("org.eclipse.wst.xsd.ui.popup.graph", manager, menuSelectionProvider, false);
// KeyAdapter keyListener = new KeyAdapter()
// {
// /**
// * @see org.eclipse.swt.events.KeyAdapter#keyReleased(KeyEvent)
// */
// public void keyReleased(KeyEvent e)
// {
// if (e.character == SWT.DEL)
// {
// getMenuListener().getDeleteAction().run();
// }
// }
// };
setKeyHandler(new XSDGraphicalViewerKeyHandler(this).setParent(new KeyHandler()));
// getControl().addKeyListener(keyListener);
figureCanvasKeyboardHandler = new FigureCanvasKeyboardHandler(this);
getFigureCanvas().addKeyListener(figureCanvasKeyboardHandler);
getRootEditPart().activate();
ScalableRootEditPart graphicalRootEditPart = (ScalableRootEditPart)getRootEditPart();
// set the layout for the primary layer so that the children are always centered
//
graphicalRootEditPart.getLayer(LayerConstants.PRIMARY_LAYER).setLayoutManager(new CenterLayout());
// add the ConnectionRenderingFigure which is responsible for drawing all of the lines in the view
//
IFigure figure = graphicalRootEditPart.getLayer(LayerConstants.HANDLE_LAYER);
figure.setLayoutManager(new StackLayout());
connectionRenderingFigure = new ConnectionRenderingFigure(graphicalRootEditPart.getLayer(LayerConstants.PRIMARY_LAYER));
figure.add(connectionRenderingFigure);
figure.validate();
}
public XSDConcreteComponent getInput()
{
return input;
}
protected EditPart getEditPart(EditPart parent, Object object)
{
EditPart result = null;
for (Iterator i = parent.getChildren().iterator(); i.hasNext(); )
{
EditPart editPart = (EditPart)i.next();
if (editPart.getModel() == object)
{
result = editPart;
break;
}
}
if (result == null)
{
for (Iterator i = parent.getChildren().iterator(); i.hasNext(); )
{
EditPart editPart = getEditPart((EditPart)i.next(), object);
if (editPart != null)
{
result = editPart;
break;
}
}
}
return result;
}
public abstract void setInput(XSDConcreteComponent comp);
public abstract void setSelection(XSDConcreteComponent comp);
}