blob: fd8758129f9b843281c746d61179017dc108d346 [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.adt.design.editparts;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.draw2d.BendpointConnectionRouter;
import org.eclipse.draw2d.ConnectionLayer;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Layer;
import org.eclipse.draw2d.LayeredPane;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.wst.xsd.ui.internal.adt.design.DesignViewerGraphicConstants;
public class RootEditPart extends ScalableRootEditPart implements org.eclipse.gef.RootEditPart
{
public void activate()
{
super.activate();
// Set up Connection layer with a router, if it doesn't already have one
ConnectionLayer connectionLayer = (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER);
if (connectionLayer != null)
{
connectionLayer.setConnectionRouter(new BendpointConnectionRouter());
}
Figure figure = (Figure)getLayer(LayerConstants.FEEDBACK_LAYER);
if (figure != null)
{
if (getViewer() instanceof ScrollingGraphicalViewer)
{
//ScrollingGraphicalViewer sgv = (ScrollingGraphicalViewer)getViewer();
//IndexFigure indexFigure = new IndexFigure(sgv);
//figure.add(indexFigure);
//getViewer().addPropertyChangeListener(indexFigure);
}
}
refresh();
}
protected LayeredPane createPrintableLayers()
{
LayeredPane pane = super.createPrintableLayers();
Layer layer = new ScaledHandleLayer();
layer.setPreferredSize(new Dimension(5, 5));
pane.add(layer, DesignViewerGraphicConstants.SCALED_HANDLE_LAYER);
return pane;
}
class ScaledHandleLayer extends Layer
{
ScaledHandleLayer()
{
setEnabled(true);
}
/**
* @see org.eclipse.draw2d.Figure#getPreferredSize(int, int)
*/
public Dimension getPreferredSize(int wHint, int hHint)
{
Rectangle rect = new Rectangle();
for (int i = 0; i < getChildren().size(); i++)
rect.union(((IFigure)getChildren().get(i)).getBounds());
return rect.getSize();
}
}
class IndexFigure extends RectangleFigure implements PropertyChangeListener
{
EditPart editPart;
ScrollingGraphicalViewer sgv;
public IndexFigure(ScrollingGraphicalViewer sgv)
{
this.sgv = sgv;
((FigureCanvas)sgv.getControl()).getViewport().getHorizontalRangeModel().addPropertyChangeListener(this);
((FigureCanvas)sgv.getControl()).getViewport().getVerticalRangeModel().addPropertyChangeListener(this);
Rectangle bounds = new Rectangle(0, 0, 40, 40);
translateToAbsolute(bounds);
setBounds(bounds);
}
public void propertyChange(PropertyChangeEvent evt)
{
System.out.println("scroll-change");
Rectangle bounds = new Rectangle(0, 0, 40, 40);
Point p = ((FigureCanvas)sgv.getControl()).getViewport().getViewLocation();
bounds.translate(p);
setBounds(bounds);
}
public Rectangle getBounds()
{
Point p = ((FigureCanvas)sgv.getControl()).getViewport().getViewLocation();
bounds.translate(p);
return super.getBounds().getCopy().translate(p);
}
}
}