/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2007 - 2008, Open Source Geospatial Foundation (OSGeo)
* (C) 2008 - 2009, Johann Sorel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.swing.style;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.geotoolkit.gui.swing.resource.MessageBundle;
import org.geotoolkit.map.MapLayer;
import org.opengis.style.LinePlacement;
/**
* Line placement panel
*
* @author Johann Sorel (Puzzle-GIS)
* @module
*/
public class JLinePlacementPane extends StyleElementEditor<LinePlacement>{
private MapLayer layer = null;
private LinePlacement placement = null;
public JLinePlacementPane() {
super(LinePlacement.class);
initComponents();
guiOffset.setModel(0d, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, 1d);
guiInitial.setModel(0d, 0d, Double.POSITIVE_INFINITY, 1d);
guiGap.setModel(0d, 0d, Double.POSITIVE_INFINITY, 1d);
}
public void setExpressionVisible(boolean visible){
guiGap.setExpressionVisible(visible);
guiInitial.setExpressionVisible(visible);
guiOffset.setExpressionVisible(visible);
}
@Override
public void setLayer(final MapLayer layer) {
this.layer = layer;
guiOffset.setLayer(layer);
guiInitial.setLayer(layer);
guiGap.setLayer(layer);
}
@Override
public MapLayer getLayer() {
return layer;
}
@Override
public void parse(final LinePlacement target) {
placement = target;
if(placement != null){
guiOffset.parse(placement.getPerpendicularOffset());
guiInitial.parse(placement.getInitialGap());
guiGap.parse(placement.getGap());
guiAligned.setSelected(placement.IsAligned());
guiGeneralized.setSelected(placement.isGeneralizeLine());
guiRepetead.setSelected(placement.isRepeated());
}
}
@Override
public LinePlacement create() {
return getStyleFactory().linePlacement(
guiOffset.create(),
guiInitial.create(),
guiGap.create(),
guiRepetead.isSelected(),
guiAligned.isSelected(),
guiGeneralized.isSelected()
);
}
@Override
protected Object[] getFirstColumnComponents() {
return new Object[]{guiLabelAlign,guiLabelGap,guiLabelGeneralize,
guiLabelInitial,guiLabelOffset,guiLabelRepeat};
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
guiLabelOffset = new JLabel();
guiOffset = new JNumberExpressionPane();
guiInitial = new JNumberExpressionPane();
guiLabelInitial = new JLabel();
guiLabelGap = new JLabel();
guiGap = new JNumberExpressionPane();
guiRepetead = new JCheckBox();
guiAligned = new JCheckBox();
guiGeneralized = new JCheckBox();
guiLabelRepeat = new JLabel();
guiLabelAlign = new JLabel();
guiLabelGeneralize = new JLabel();
setOpaque(false);
guiLabelOffset.setText(MessageBundle.format("offset2")); // NOI18N
guiOffset.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
propertyChange2(evt);
}
});
guiInitial.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
propertyChange2(evt);
}
});
guiLabelInitial.setText(MessageBundle.format("initial_gap")); // NOI18N
guiLabelGap.setText(MessageBundle.format("gap")); // NOI18N
guiGap.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
propertyChange2(evt);
}
});
guiRepetead.setText(" ");
guiRepetead.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
propertyChange(evt);
}
});
guiAligned.setText(" ");
guiAligned.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
propertyChange(evt);
}
});
guiGeneralized.setText(" ");
guiGeneralized.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
propertyChange(evt);
}
});
guiLabelRepeat.setText(MessageBundle.format("repeated")); // NOI18N
guiLabelAlign.setText(MessageBundle.format("aligned")); // NOI18N
guiLabelGeneralize.setText(MessageBundle.format("generalize")); // NOI18N
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelOffset)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiOffset, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelInitial)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiInitial, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelGap)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiGap, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelGeneralize)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiGeneralized))
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelRepeat)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiRepetead))
.addGroup(layout.createSequentialGroup()
.addComponent(guiLabelAlign)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiAligned)))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.linkSize(SwingConstants.HORIZONTAL, new Component[] {guiLabelAlign, guiLabelGap, guiLabelGeneralize, guiLabelInitial, guiLabelOffset, guiLabelRepeat});
layout.setVerticalGroup(
layout.createParallelGroup(Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(guiOffset, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(guiLabelOffset))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(guiLabelInitial)
.addComponent(guiInitial, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.TRAILING)
.addComponent(guiLabelGap)
.addComponent(guiGap, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
.addComponent(guiRepetead)
.addComponent(guiLabelRepeat))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
.addComponent(guiAligned)
.addComponent(guiLabelAlign))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
.addComponent(guiGeneralized)
.addComponent(guiLabelGeneralize)))
);
layout.linkSize(SwingConstants.VERTICAL, new Component[] {guiLabelOffset, guiOffset});
layout.linkSize(SwingConstants.VERTICAL, new Component[] {guiInitial, guiLabelInitial});
layout.linkSize(SwingConstants.VERTICAL, new Component[] {guiGap, guiLabelGap});
}// </editor-fold>//GEN-END:initComponents
private void propertyChange(ChangeEvent evt) {//GEN-FIRST:event_propertyChange
firePropertyChange(PROPERTY_UPDATED, null, create());
}//GEN-LAST:event_propertyChange
private void propertyChange2(PropertyChangeEvent evt) {//GEN-FIRST:event_propertyChange2
if (PROPERTY_UPDATED.equalsIgnoreCase(evt.getPropertyName())) {
firePropertyChange(PROPERTY_UPDATED, null, create());
}
}//GEN-LAST:event_propertyChange2
// Variables declaration - do not modify//GEN-BEGIN:variables
private JCheckBox guiAligned;
private JNumberExpressionPane guiGap;
private JCheckBox guiGeneralized;
private JNumberExpressionPane guiInitial;
private JLabel guiLabelAlign;
private JLabel guiLabelGap;
private JLabel guiLabelGeneralize;
private JLabel guiLabelInitial;
private JLabel guiLabelOffset;
private JLabel guiLabelRepeat;
private JNumberExpressionPane guiOffset;
private JCheckBox guiRepetead;
// End of variables declaration//GEN-END:variables
}