package com.vividsolutions.jump.workbench.ui.cursortool;
import java.awt.*;
import java.awt.geom.Point2D;
import javax.swing.*;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import com.vividsolutions.jts.util.Assert;
import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.feature.*;
import com.vividsolutions.jump.workbench.model.Layer;
import com.vividsolutions.jump.workbench.ui.Viewport;
import com.vividsolutions.jump.workbench.ui.renderer.style.Style;
public class NoteStyle implements Style {
public static final int WIDTH = 80;
public static final int HEIGHT = 30;
public static final String CREATED = I18N.get("ui.cursortool.NoteStyle.CREATED");
public static final String MODIFIED = I18N.get("ui.cursortool.NoteStyle.MODIFIED");
public static final String TEXT = I18N.get("ui.cursortool.NoteStyle.TEXT");
public static final String GEOMETRY = "GEOMETRY";
private JTextArea myTextArea = createTextArea();
private Layer layer;
public static FeatureSchema createFeatureSchema() {
return new FeatureSchema() {
{
addAttribute(CREATED, AttributeType.DATE);
addAttribute(MODIFIED, AttributeType.DATE);
addAttribute(TEXT, AttributeType.STRING);
addAttribute(GEOMETRY, AttributeType.GEOMETRY);
}
};
}
public static JTextArea createTextArea() {
return new JTextArea() {
{
setFont(new JLabel().getFont());
setLineWrap(true);
setWrapStyleWord(true);
setBorder(BorderFactory.createLineBorder(Color.lightGray));
}
};
}
public void paint(Feature f, Graphics2D g, Viewport viewport) throws Exception {
paint(f, viewport.toViewPoint(f.getGeometry().getCoordinate()), g);
}
private void paint(Feature f, Point2D location, Graphics2D g) {
myTextArea.setText(f.getString(TEXT));
int ht = myTextArea.getPreferredSize().height;
int wt = myTextArea.getPreferredSize().width;
if (ht < HEIGHT) ht = HEIGHT;
if (wt < WIDTH) wt = WIDTH;
myTextArea.setBounds(0, 0, wt, ht);
//myTextArea.setBounds(0, 0, WIDTH, HEIGHT);
Composite originalComposite = g.getComposite();
g.translate(location.getX(), location.getY());
try {
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
layer.getBasicStyle().getAlpha() / 255f));
myTextArea.paint(g);
} finally {
g.setComposite(originalComposite);
g.translate(-location.getX(), -location.getY());
}
}
public void initialize(Layer layer) {
this.layer = layer;
myTextArea.setBackground(layer.getBasicStyle().getFillColor());
}
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
Assert.shouldNeverReachHere();
return null;
}
}
public void setEnabled(boolean enabled) {
throw new UnsupportedOperationException();
}
public boolean isEnabled() {
return true;
}
}