Package org.eclipse.jst.pagedesigner.editpolicies

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

/*******************************************************************************
* 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 java.util.Collections;
import java.util.List;

import org.eclipse.core.runtime.Assert;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.eclipse.gef.requests.LocationRequest;
import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
import org.eclipse.jst.pagedesigner.parts.NonVisualComponentEditPart;
import org.eclipse.swt.graphics.Color;
import org.w3c.dom.Element;

/**
* An edit policy for non visual child edit parts
* @author cbateman
*
*/
public class NonVisualChildGraphicalEditPolicy extends NonResizableEditPolicy
{
    // the number of pixels to offset the top left of tooltop feedback
    // below the current mouse cursor location
    private static final int TOOLTIP_VERTICAL_OFFSET = 25;
    private final static Color HOVER_FEEDBACK_COLOR = ColorConstants.blue;
   
   
    private BasicLabelToolTip   _toolTip;
    private boolean             _showLabelFeedback;
    private RectangleFigure _mouseOverBorder;

    public void showTargetFeedback(Request request) {
        if (RequestConstants.REQ_SELECTION_HOVER.equals(request.getType())) {
            removeToolTipLabel();
            removeMouseOverBorder();
            Assert.isTrue(request instanceof LocationRequest);
            // don't show tooltip if drag is active
            _showLabelFeedback = !((NodeEditPart)getHost()).isDragActive();
            showHoverFeedback((LocationRequest)request);
        } else {
            super.showTargetFeedback(request);
        }

    }

    public void eraseTargetFeedback(Request request) {
        removeToolTipLabel();
        removeMouseOverBorder();
    }

    /**
     * @param request
     */
    private void showHoverFeedback(LocationRequest request)
    {
        if (_showLabelFeedback)
        {
            addMouseOverBorder();
            _toolTip = new BasicLabelToolTip(getTooltipText());
            addFeedback(_toolTip);

            // use mouse cursor plus an offset so the tooltip doesn't
            // appear z-ordered below the mouse cursor
            AbsolutePointLocator locator = AbsolutePointLocator.getInstance();
            locator.setReferencePoint(request.getLocation(), 0, TOOLTIP_VERTICAL_OFFSET);
            //  to avoid enlargemeent of the feedback layer
            locator.setIntersectFigure(getFeedbackLayer());
            locator.relocate(_toolTip);
        }
    }
   
    private String getTooltipText() {
        Element element = (Element) ((NonVisualComponentEditPart)getHost()).getDOMNode();
        StringBuffer text = new StringBuffer(element.getTagName());
        return text.toString();
    }
   
    private void addMouseOverBorder()
    {
        if (_mouseOverBorder == null)
        {
            _mouseOverBorder = new RectangleFigure();
            _mouseOverBorder.setFill(false);
            _mouseOverBorder.setOutline(true);
            _mouseOverBorder.setLineWidth(1);
            _mouseOverBorder.setForegroundColor(HOVER_FEEDBACK_COLOR);
        }
       
        addFeedback(_mouseOverBorder);
       
        IFigure hostFigure = getHostFigure();
        Rectangle r = hostFigure.getBounds().getCopy().expand(1, 1);
        hostFigure.translateToAbsolute(r);
        _mouseOverBorder.translateToRelative(r);

        _mouseOverBorder.setBounds(r);
    }
   
    /**
     *
     */
    private void removeMouseOverBorder()
    {
        if (_mouseOverBorder != null) {
            removeFeedback(_mouseOverBorder);
            _mouseOverBorder = null;
        }
    }
   
    protected List createSelectionHandles() {
//        return super.createSelectionHandles();
        return Collections.EMPTY_LIST; 
    }

    /**
     *
     */
    private void removeToolTipLabel()
    {
        if (_toolTip != null) {
            removeFeedback(_toolTip);
            _toolTip = null;
        }
    }

}
TOP

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

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.