/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.fge.controller; import java.awt.Point; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.io.Serializable; import org.openflexo.fge.GraphicalRepresentation; import org.openflexo.fge.ShapeGraphicalRepresentation; import org.openflexo.fge.controller.DrawingPalette.PaletteDrawing; import org.openflexo.fge.geom.FGEPoint; import org.openflexo.fge.shapes.Shape.ShapeType; import org.openflexo.fge.view.PaletteElementView; import org.openflexo.fge.view.ShapeView; public interface PaletteElement extends Serializable { public PaletteElementGraphicalRepresentation getGraphicalRepresentation(); public boolean acceptDragging(GraphicalRepresentation<?> target); public boolean elementDragged(GraphicalRepresentation<?> target, FGEPoint dropLocation); public DrawingPalette getPalette(); public static class PaletteElementGraphicalRepresentation extends ShapeGraphicalRepresentation<PaletteElement> { private ShapeGraphicalRepresentation<?> originalGR; public PaletteElementGraphicalRepresentation(ShapeType shapeType, PaletteElement paletteElement, PaletteDrawing paletteDrawing) { super(shapeType, paletteElement, paletteDrawing); // setValidated(true); } public PaletteElementGraphicalRepresentation(ShapeGraphicalRepresentation<?> shapeGR, PaletteElement paletteElement, PaletteDrawing paletteDrawing) { this(shapeGR.getShapeType(), paletteElement, paletteDrawing); // Copy parameters... setsWith(shapeGR); this.originalGR = shapeGR; // setValidated(true); } @Override public void delete() { if (originalGR != null) { originalGR.delete(); } super.delete(); } @Override public ShapeView<PaletteElement> makeShapeView(DrawingController controller) { return new PaletteElementView(this, controller); } @Override public final void setIsFocusable(boolean isFocusable) { super.setIsFocusable(isFocusable); } @Override public final boolean getIsFocusable() { return super.getIsFocusable(); } @Override public final void setIsSelectable(boolean isSelectable) { super.setIsSelectable(isSelectable); } @Override public final boolean getIsSelectable() { return super.getIsSelectable(); } @Override public final void setIsReadOnly(boolean readOnly) { super.setIsReadOnly(readOnly); } @Override public final boolean getIsReadOnly() { return super.getIsReadOnly(); } @Override public final void setLocationConstraints(LocationConstraints locationConstraints) { super.setLocationConstraints(locationConstraints); } @Override public final LocationConstraints getLocationConstraints() { return super.getLocationConstraints(); } } public static class PaletteElementTransferable implements Transferable { private static DataFlavor _defaultFlavor; private TransferedPaletteElement _transferedData; public PaletteElementTransferable(PaletteElement element, Point dragOrigin) { _transferedData = new TransferedPaletteElement(element, dragOrigin); } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { defaultFlavor() }; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return true; } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { return _transferedData; } public static DataFlavor defaultFlavor() { if (_defaultFlavor == null) { _defaultFlavor = new DataFlavor(PaletteElementTransferable.class, "PaletteElement"); } return _defaultFlavor; } } public static class TransferedPaletteElement { private Point _offset; private PaletteElement _transfered; public TransferedPaletteElement(PaletteElement element, Point dragOffset) { super(); _transfered = element; _offset = dragOffset; } public Point getOffset() { return _offset; } public PaletteElement getPaletteElement() { return _transfered; } } }