Package org.eclipse.jst.pagedesigner.editpolicies

Source Code of org.eclipse.jst.pagedesigner.editpolicies.AbsolutePointLocator

/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle 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:
*     Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.editpolicies;

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Locator;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;

/**
* @author cbateman
*
*/
public class AbsolutePointLocator implements Locator
{
    private static AbsolutePointLocator   INSTANCE;
    private final static Point    DEFAULT_POINT = new Point(0,0);
   
    private Point  _referencePoint = DEFAULT_POINT;
    private int    _xOffset = 0;
    private int    _yOffset = 0;
    private IFigure _intersectFigure;
   
    /**
     * @return the singleton instance
     */
    public synchronized static AbsolutePointLocator getInstance()
    {
        if (INSTANCE == null)
        {
            INSTANCE = new AbsolutePointLocator();
        }
        return INSTANCE;
    }
   
    /**
     * Relocates the target figure to the reference point with possible x and y
     * offsetting.  Uses the target's preferredSize as the new size.
     */
    public void relocate(IFigure target)
    {
        Point leftTop = new Point(_referencePoint.x+_xOffset, _referencePoint.y+_yOffset);
       

        //figure.translateToAbsolute(leftTop);
        target.translateToRelative(leftTop);
        Dimension d = target.getPreferredSize();
        Rectangle rect = new Rectangle(leftTop, d);

        // to avoid enlargemeent
        if (_intersectFigure != null)
        {
            rect = rect.intersect(_intersectFigure.getBounds());
        }
       
        target.setBounds(rect);
    }

    /**
     * Sets the reference point used to calculate the location to which
     * relocate will relocate its target.  The x and y offset values are added
     * to the reference point before final re-location.  If point is null
     * then the reference is set to (0,0)
     * @param point
     * @param xoffset
     * @param yoffset
     */
    public void setReferencePoint(Point point, int xoffset, int yoffset)
    {
        if (point == null)
        {
            _referencePoint = DEFAULT_POINT;
        }
        else
        {
            _referencePoint = point;
        }
      
        _xOffset = xoffset;
        _yOffset = yoffset;
    }
   
    /**
     * Sets the figure used to calculate a rectangular intersect of the
     * relocated target.  This normally set to the parent of the target
     * such as a layer to ensure that the relocate target does not enlarge
     * its parent by relocating outside it's rectangle.
     *
     * If intersectFigure is set to null, then no intersect calculation will
     * be performed.
     *
     * @param intersectFigure
     */
    public void setIntersectFigure(IFigure intersectFigure)
    {
        _intersectFigure = intersectFigure;
    }
   
    private AbsolutePointLocator() {/*no external instantiation*/}
TOP

Related Classes of org.eclipse.jst.pagedesigner.editpolicies.AbsolutePointLocator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.