package com.revolsys.swing.map.layer.grid;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import org.jdesktop.swingx.VerticalLayout;
import com.revolsys.datatype.DataTypes;
import com.revolsys.swing.Panels;
import com.revolsys.swing.field.Field;
import com.revolsys.swing.map.layer.record.style.GeometryStyle;
import com.revolsys.swing.map.layer.record.style.TextStyle;
import com.revolsys.swing.map.layer.record.style.panel.BaseStylePanel;
import com.revolsys.swing.map.layer.record.style.panel.GeometryStylePreview;
import com.revolsys.swing.map.layer.record.style.panel.TextStylePreview;
import com.revolsys.util.Property;
public class GridLayerStylePanel extends BaseStylePanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private final GeometryStyle geometryStyle;
private final TextStyle textStyle;
private final JPanel previews;
private final GridLayerRenderer gridLayerRenderer;
public GridLayerStylePanel(final GridLayerRenderer gridLayerRenderer) {
super(gridLayerRenderer, false);
this.gridLayerRenderer = gridLayerRenderer;
this.geometryStyle = gridLayerRenderer.getGeometryStyle();
this.textStyle = gridLayerRenderer.getTextStyle();
final JPanel panel = new JPanel(new BorderLayout());
add(panel, 1);
final JPanel stylePanels = new JPanel(new VerticalLayout(5));
panel.add(stylePanels, BorderLayout.CENTER);
this.previews = Panels.titledTransparentVerticalLayout("Preview", 5);
final GeometryStylePreview geometryPreview = new GeometryStylePreview(this.geometryStyle,
DataTypes.POLYGON, new Rectangle2D.Double(19, 19, 60, 60));
this.previews.add(geometryPreview);
this.previews.add(new TextStylePreview(this.textStyle));
final JPanel previewContainer = new JPanel(new VerticalLayout());
previewContainer.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
previewContainer.add(this.previews);
panel.add(previewContainer, BorderLayout.EAST);
addLineStylePanel(stylePanels, this.geometryStyle);
addTextStylePanels(stylePanels, this.textStyle);
}
@Override
public void propertyChangeDo(final PropertyChangeEvent event) {
final Object source = event.getSource();
if (source instanceof Field) {
final Field field = (Field)source;
final String fieldName = field.getFieldName();
Object fieldValue = field.getFieldValue();
if ("lineDashOffset".equals(fieldName) && !Property.hasValue(fieldValue)) {
fieldValue = 0;
}
this.geometryStyle.setProperty(fieldName, fieldValue);
this.textStyle.setProperty(fieldName, fieldValue);
} else if (source == this.geometryStyle || source == this.textStyle) {
final String name = event.getPropertyName();
final Object value = event.getNewValue();
setFieldValue(name, value);
}
for (final Component preview : this.previews.getComponents()) {
preview.repaint();
}
}
@Override
public void save() {
super.save();
this.gridLayerRenderer.setGeometryStyle(this.geometryStyle);
this.gridLayerRenderer.setTextStyle(this.textStyle);
}
}