/******************************************************************************* * Copyright (c) 2005 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.bpel.common.ui.tray; import org.eclipse.draw2d.AncestorListener; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Locator; import org.eclipse.draw2d.TreeSearch; import org.eclipse.gef.DragTracker; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.handles.AbstractHandle; /** * This figure does not draw the selection handle. It is only used to * control when the selection border should be drawn or not. */ public class TraySelectionHandle extends AbstractHandle { protected static class TrayHandleLocator implements Locator { protected IFigure reference; public TrayHandleLocator(IFigure reference) { this.reference = reference; } public void relocate(IFigure target) { target.setBounds(reference.getClientArea()); } } protected SelectionBorderFigure selectionBorderFigure; public TraySelectionHandle(GraphicalEditPart owner, SelectionBorderFigure figure) { super(owner, new TrayHandleLocator(figure)); this.selectionBorderFigure = figure; // controls when the border should be painted based on the // parenting of this handle figure. addAncestorListener(new AncestorListener.Stub() { @Override public void ancestorAdded(IFigure ancestor) { selectionBorderFigure.setPaintSelectionBorder(true); selectionBorderFigure.repaint(); } @Override public void ancestorRemoved(IFigure ancestor) { selectionBorderFigure.setPaintSelectionBorder(false); selectionBorderFigure.repaint(); } }); } /** * The painting is done by the SelectionBorderFigure * and not the selection handle. */ @Override public void paint(Graphics g) { // the painting is done by the SelectionBorderFigure } @Override protected DragTracker createDragTracker() { return null; // not needed } // make it non-clickable otherwise it will block tooltips and direct edit @Override public IFigure findFigureAt(int x, int y, TreeSearch search) { IFigure result = super.findFigureAt(x, y, search); if (result != this) return result; return null; } // get the buttons from the figure that the handle encloses, not from the handle itself @Override public IFigure findMouseEventTargetAt(int x, int y) { return selectionBorderFigure.findMouseEventTargetAt(x, y); } }