/*
* 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.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import org.geotoolkit.gui.swing.resource.MessageBundle;
import org.geotoolkit.map.MapLayer;
import org.geotoolkit.style.MutableFeatureTypeStyle;
import org.jdesktop.swingx.JXTitledPanel;
import org.opengis.style.SemanticType;
/**
*
* @author Johann Sorel (Puzzle-GIS)
* @module
*/
public class JFeatureTypeStylePane extends StyleElementEditor<MutableFeatureTypeStyle>{
private MapLayer layer = null;
private MutableFeatureTypeStyle fts = null;
/** Creates new form JRulePanel */
public JFeatureTypeStylePane() {
super(MutableFeatureTypeStyle.class);
initComponents();
}
/** 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() {
jXTitledPanel1 = new JXTitledPanel();
jLabel1 = new JLabel();
jLabel2 = new JLabel();
jLabel3 = new JLabel();
jtf_abstract = new JTextField();
jtf_name = new JTextField();
jtf_title = new JTextField();
jXTitledPanel2 = new JXTitledPanel();
jck_any = new JCheckBox();
jck_point = new JCheckBox();
jck_line = new JCheckBox();
jck_polygon = new JCheckBox();
jck_text = new JCheckBox();
jck_raster = new JCheckBox();
jLabel4 = new JLabel();
guiftn = new JTextField();
setOpaque(false);
jXTitledPanel1.setBorder(BorderFactory.createEtchedBorder());
jXTitledPanel1.setTitle(MessageBundle.format("general")); // NOI18N
jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | Font.BOLD));
jLabel1.setText(MessageBundle.format("title")); // NOI18N
jLabel2.setText(MessageBundle.format("name")); // NOI18N
jLabel3.setText(MessageBundle.format("abstrac")); // NOI18N
jtf_title.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jtf_titleActionPerformed(evt);
}
});
GroupLayout jXTitledPanel1Layout = new GroupLayout(jXTitledPanel1);
jXTitledPanel1.setLayout(jXTitledPanel1Layout);
jXTitledPanel1Layout.setHorizontalGroup(
jXTitledPanel1Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jXTitledPanel1Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jtf_name, GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE))
.addGroup(Alignment.TRAILING, jXTitledPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jtf_title, GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE))
.addGroup(jXTitledPanel1Layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jtf_abstract, GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)))
.addContainerGap())
);
jXTitledPanel1Layout.linkSize(SwingConstants.HORIZONTAL, new Component[] {jLabel1, jLabel2, jLabel3});
jXTitledPanel1Layout.setVerticalGroup(
jXTitledPanel1Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jXTitledPanel1Layout.createParallelGroup(Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jtf_name, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(jXTitledPanel1Layout.createParallelGroup(Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jtf_title, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(jXTitledPanel1Layout.createParallelGroup(Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jtf_abstract, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jXTitledPanel2.setBorder(BorderFactory.createEtchedBorder());
jXTitledPanel2.setTitle(MessageBundle.format("filter2")); // NOI18N
jck_any.setText(MessageBundle.format("semantic_any")); // NOI18N
jck_point.setText(MessageBundle.format("semantic_point")); // NOI18N
jck_line.setText(MessageBundle.format("semantic_line")); // NOI18N
jck_polygon.setText(MessageBundle.format("semantic_polygon")); // NOI18N
jck_text.setText(MessageBundle.format("semantic_text")); // NOI18N
jck_raster.setText(MessageBundle.format("semantic_raster")); // NOI18N
jLabel4.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel4.setText(MessageBundle.format("featuretypename")); // NOI18N
jLabel4.setEnabled(false);
guiftn.setEnabled(false);
GroupLayout jXTitledPanel2Layout = new GroupLayout(jXTitledPanel2);
jXTitledPanel2.setLayout(jXTitledPanel2Layout);
jXTitledPanel2Layout.setHorizontalGroup(
jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addComponent(guiftn, GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
.addGroup(jXTitledPanel2Layout.createSequentialGroup()
.addGroup(jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addComponent(jck_any)
.addComponent(jck_point)
.addComponent(jck_line))
.addGap(4, 4, 4)
.addGroup(jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addComponent(jck_polygon)
.addComponent(jck_text)
.addComponent(jck_raster)))
.addComponent(jLabel4))
.addContainerGap())
);
jXTitledPanel2Layout.linkSize(SwingConstants.HORIZONTAL, new Component[] {jck_any, jck_line, jck_point, jck_polygon, jck_raster, jck_text});
jXTitledPanel2Layout.setVerticalGroup(
jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jXTitledPanel2Layout.createParallelGroup(Alignment.LEADING)
.addGroup(jXTitledPanel2Layout.createSequentialGroup()
.addComponent(jck_any)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jck_point)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jck_line))
.addGroup(jXTitledPanel2Layout.createSequentialGroup()
.addComponent(jck_polygon)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jck_text)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jck_raster)))
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(guiftn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jXTitledPanel2Layout.linkSize(SwingConstants.VERTICAL, new Component[] {jck_any, jck_line, jck_point, jck_polygon, jck_raster, jck_text});
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(Alignment.LEADING)
.addComponent(jXTitledPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jXTitledPanel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jXTitledPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(jXTitledPanel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
);
}// </editor-fold>//GEN-END:initComponents
private void jtf_titleActionPerformed(final ActionEvent evt) {//GEN-FIRST:event_jtf_titleActionPerformed
// fts.setTitle(guiTitle.getText());
}//GEN-LAST:event_jtf_titleActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private JTextField guiftn;
private JLabel jLabel1;
private JLabel jLabel2;
private JLabel jLabel3;
private JLabel jLabel4;
private JXTitledPanel jXTitledPanel1;
private JXTitledPanel jXTitledPanel2;
private JCheckBox jck_any;
private JCheckBox jck_line;
private JCheckBox jck_point;
private JCheckBox jck_polygon;
private JCheckBox jck_raster;
private JCheckBox jck_text;
private JTextField jtf_abstract;
private JTextField jtf_name;
private JTextField jtf_title;
// End of variables declaration//GEN-END:variables
@Override
public void setLayer(final MapLayer layer) {
this.layer = layer;
}
@Override
public MapLayer getLayer() {
return layer;
}
@Override
public void parse(final MutableFeatureTypeStyle target) {
this.fts = target;
if(fts != null){
jtf_name.setText(fts.getName());
jtf_title.setText(fts.getDescription().getTitle().toString());
jtf_abstract.setText(fts.getDescription().getAbstract().toString());
jck_any.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.ANY) );
jck_point.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.POINT) );
jck_line.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.LINE) );
jck_polygon.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.POLYGON) );
jck_text.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.TEXT) );
jck_raster.setSelected( fts.semanticTypeIdentifiers().contains(SemanticType.RASTER) );
}
}
@Override
public MutableFeatureTypeStyle create() {
if(fts == null){
fts = getStyleFactory().featureTypeStyle();
}
fts.setName(jtf_name.getText());
fts.setDescription(getStyleFactory().description(
jtf_title.getText(),
jtf_abstract.getText()));
fts.semanticTypeIdentifiers().clear();
if(jck_any.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.ANY);
if(jck_point.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.POINT);
if(jck_line.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.LINE);
if(jck_polygon.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.POLYGON);
if(jck_text.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.TEXT);
if(jck_raster.isSelected()) fts.semanticTypeIdentifiers().add(SemanticType.RASTER);
return fts;
}
@Override
public void apply() {
create();
}
@Override
protected Object[] getFirstColumnComponents() {
return new Object[]{};
}
}