| /******************************************************************************* |
| * 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); |
| } |
| } |
| } |