/** * Copyright (c) 2009 Borland Software Corp. * * 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: * Alexander Shatalin (Borland) - initial API and implementation */ package org.eclipse.gmf.graphdef.editor.edit.policies.assistant; import java.util.HashMap; import java.util.Map; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Shape; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.TreeSearch; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.DragTracker; import org.eclipse.gef.Handle; public class SelectableBubbleItemFigure extends Shape implements Handle { private static final Insets SELECTION_OUTER_INSETS = new Insets(3, 3, 3, 3); private static final Insets SELECTION_INNER_INSETS = new Insets(3, 3, 3, 3); private SelectionBorder border = new SelectionBorder(ColorConstants.darkGray, 1, Graphics.LINE_DOT, SELECTION_OUTER_INSETS, SELECTION_INNER_INSETS); private DragTracker myDragTracker; private boolean mySelected; private Map<BubbleFigure.Mode, IFigure> myModeToFigureMap = new HashMap<BubbleFigure.Mode, IFigure>(); private IFigure myVisibleChild; public SelectableBubbleItemFigure(DragTracker dragTracker) { myDragTracker = dragTracker; setBorder(border); setOutline(false); setLayoutManager(new StackLayout()); } @Override protected void fillShape(Graphics graphics) { } @Override protected void outlineShape(Graphics graphics) { } public Point getAccessibleLocation() { return null; } public DragTracker getDragTracker() { return myDragTracker; } public void setSelected(boolean selected) { if (mySelected == selected) { return; } mySelected = selected; border.setShowBorder(selected); repaint(); } public boolean isSelected() { return mySelected; } /** * Don't go deeper - it is important to return this figure (and use it as a * Handle) if mouse was pressed in any points inside this figure or it's * children. */ @Override protected IFigure findDescendantAtExcluding(int x, int y, TreeSearch search) { return null; } public void setItemRepresentation(BubbleFigure.Mode mode, IFigure figure) { myModeToFigureMap.put(mode, figure); } void setMode(BubbleFigure.Mode mode) { assert myModeToFigureMap.containsKey(mode); if (myVisibleChild != null) { remove(myVisibleChild); } myVisibleChild = myModeToFigureMap.get(mode); add(myVisibleChild); } }