/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.features; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import java.awt.*; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import de.cismet.cismap.commons.WorldToScreenTransform; import de.cismet.cismap.commons.gui.MappingComponent; import de.cismet.cismap.commons.gui.piccolo.FeatureAnnotationSymbol; import de.cismet.cismap.commons.gui.piccolo.eventlistener.SelectionListener; import de.cismet.cismap.commons.interaction.CismapBroker; /** * DOCUMENT ME! * * @author jruiz * @version $Revision$, $Date$ */ public class SelectFeature extends AbstractNewFeature implements DoubleClickableFeature { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SelectFeature.class); //~ Instance fields -------------------------------------------------------- private String inputListenerName; //~ Constructors ----------------------------------------------------------- /** * Creates a new SelectFeature object. * * @param g DOCUMENT ME! * @param inputListenerName DOCUMENT ME! */ public SelectFeature(final Geometry g, final String inputListenerName) { super(g); this.inputListenerName = inputListenerName; } /** * Creates a new SelectFeature object. * * @param point DOCUMENT ME! * @param wtst DOCUMENT ME! */ public SelectFeature(final Point2D point, final WorldToScreenTransform wtst) { super(point, wtst); } /** * Creates a new SelectFeature object. * * @param canvasPoints DOCUMENT ME! * @param wtst DOCUMENT ME! */ public SelectFeature(final Point2D[] canvasPoints, final WorldToScreenTransform wtst) { super(canvasPoints, wtst); } /** * Creates a new SelectFeature object. * * @param coordArr DOCUMENT ME! * @param wtst DOCUMENT ME! */ public SelectFeature(final Coordinate[] coordArr, final WorldToScreenTransform wtst) { super(coordArr, wtst); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getInputListenerName() { return inputListenerName; } /** * DOCUMENT ME! * * @param inputListenerName DOCUMENT ME! */ public void setInputListenerName(final String inputListenerName) { this.inputListenerName = inputListenerName; } @Override public Paint getFillingPaint() { final SelectionListener selectListener = ((SelectionListener)CismapBroker.getInstance().getMappingComponent() .getInputListener( MappingComponent.SELECT)); return selectListener.getSelectColor(); } @Override public Paint getLinePaint() { final Color color = (Color)getFillingPaint(); return color.darker(); } @Override public String getName() { if (getGeometryType() != null) { switch (getGeometryType()) { case RECTANGLE: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.etName().selectRectangle"); // NOI18N } case LINESTRING: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.getName().selectPolyline"); // NOI18N } case ELLIPSE: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.getName().selectEllipse"); // NOI18N } case POINT: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.getName().selectPoint"); // NOI18N } case POLYGON: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.getName().selectPOLYGON"); // NOI18N } case MULTIPOLYGON: { return org.openide.util.NbBundle.getMessage( SelectFeature.class, "SelectFeature.getName().selectMULTIPOLYGON"); // NOI18N } default: { if (super.getName() != null) { return super.getName(); } else { return "---"; } } } } else { return "--"; } } @Override public String getType() { return "Auswahl"; } @Override public FeatureAnnotationSymbol getPointAnnotationSymbol() { final int strokeWidth = 4; final int imageSize = 24; final int circleSize = imageSize - (strokeWidth * 2); // 0 | strokeWidth | circleSize | strokeWidth | imageSize final Color color = (Color)getFillingPaint(); final BufferedImage bufferedImage = new BufferedImage(imageSize, imageSize, BufferedImage.TYPE_INT_ARGB); final Graphics2D graphics = (Graphics2D)bufferedImage.getGraphics(); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.setColor(color); graphics.setStroke(new BasicStroke(strokeWidth)); graphics.drawOval(strokeWidth, strokeWidth, circleSize, circleSize); final FeatureAnnotationSymbol pointAnnotationSymbol = FeatureAnnotationSymbol .newCustomSweetSpotFeatureAnnotationSymbol(bufferedImage, null, 0.5, 0.5); return pointAnnotationSymbol; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getInteractionMode() { return inputListenerName; } @Override public void doubleClickPerformed(final SelectionListener selectionListener) { final MappingComponent mappingComponent = selectionListener.getMappingComponent(); ((DefaultFeatureCollection)mappingComponent.getFeatureCollection()).unselectAll(); mappingComponent.getHandleLayer().removeAllChildren(); selectionListener.select(this); } }