/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * 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.geotools.gui.swing.style; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Map; import javax.swing.JComponent; import javax.swing.JDialog; import org.geotools.gui.swing.style.sld.JChannelSelectionPane; import org.geotools.gui.swing.style.sld.JExpressionPane; import org.geotools.map.MapLayer; import org.geotools.styling.FeatureTypeStyle; import org.geotools.styling.LineSymbolizer; import org.geotools.styling.PolygonSymbolizer; import org.geotools.styling.RasterSymbolizer; import org.geotools.styling.Rule; import org.geotools.styling.Style; import org.geotools.styling.StyleBuilder; import org.geotools.styling.Symbolizer; /** * Raster Sybolizer edition panel * * @author Johann Sorel * * @source $URL$ */ public class JRasterSymbolizerPane extends javax.swing.JPanel implements SymbolizerPane<RasterSymbolizer> { private RasterSymbolizer symbol = null; private MapLayer layer = null; private Symbolizer outLine = null; /** Creates new form RasterStylePanel * @param layer the layer style to edit */ public JRasterSymbolizerPane() { initComponents(); init(); } private void init() { guiOpacity.setType(JExpressionPane.EXP_TYPE.NUMBER); tabDemo.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int ligne; Point p = e.getPoint(); ligne = tabDemo.rowAtPoint(p); if (ligne < tabDemo.getModel().getRowCount() && ligne >= 0) { setEdited((RasterSymbolizer) tabDemo.getModel().getValueAt(ligne, 0)); } } }); } public void setDemoSymbolizers(Map<RasterSymbolizer, String> symbols) { tabDemo.setMap(symbols); } public Map<RasterSymbolizer, String> getDemoSymbolizers() { return tabDemo.getMap(); } public void setStyle(Style style) { FeatureTypeStyle[] sty = style.getFeatureTypeStyles(); Rule[] rules = sty[0].getRules(); for (int i = 0; i < rules.length; i++) { Rule r = rules[i]; //on regarde si la regle s'applique au maplayer (s'il n'y a aucun filtre) if (r.getFilter() == null) { Symbolizer[] symbolizers = r.getSymbolizers(); for (int j = 0; j < symbolizers.length; j++) { if (symbolizers[j] instanceof RasterSymbolizer) { setEdited((RasterSymbolizer) symbolizers[j]); } } } } } public Style getStyle() { StyleBuilder sb = new StyleBuilder(); Style style = sb.createStyle(); style.addFeatureTypeStyle(sb.createFeatureTypeStyle("GridCoverage",getEdited())); return style; } public void setLayer(MapLayer layer) { this.layer = layer; guiOpacity.setLayer(layer); guiGeom.setLayer(layer); guiOverLap.setLayer(layer); guiContrast.setLayer(layer); guiRelief.setLayer(layer); } public MapLayer getLayer() { return layer; } public void setEdited(RasterSymbolizer sym) { symbol = sym; if (sym != null) { guiGeom.setGeom(symbol.getGeometryPropertyName()); guiOpacity.setExpression(symbol.getOpacity()); guiOverLap.setExpression(symbol.getOverlap()); guiContrast.setEdited(symbol.getContrastEnhancement()); guiRelief.setEdited(symbol.getShadedRelief()); outLine = symbol.getImageOutline(); if(outLine == null){ guinone.setSelected(true); }else if(outLine instanceof LineSymbolizer){ guiLine.setSelected(true); }else if(outLine instanceof PolygonSymbolizer){ guiPolygon.setSelected(true); } testOutLine(); //handle by a button //symbol.getChannelSelection(); symbol.getColorMap(); } } public RasterSymbolizer getEdited() { if (symbol == null) { StyleBuilder sb = new StyleBuilder(); symbol = sb.createRasterSymbolizer(); } apply(); return symbol; } public void apply() { if (symbol != null) { symbol.setGeometryPropertyName(guiGeom.getGeom()); symbol.setOpacity(guiOpacity.getExpression()); symbol.setOverlap(guiOverLap.getExpression()); symbol.setImageOutline(outLine); symbol.setContrastEnhancement(guiContrast.getEdited()); symbol.setShadedRelief(guiRelief.getEdited()); } } public JComponent getComponent() { return this; } private void testOutLine(){ if(guinone.isSelected()){ butLineSymbolizer.setEnabled(false); butPolygonSymbolizer.setEnabled(false); outLine = null; }else if(guiLine.isSelected()){ butLineSymbolizer.setEnabled(true); butPolygonSymbolizer.setEnabled(false); outLine = new StyleBuilder().createLineSymbolizer(); }else if(guiPolygon.isSelected()){ butLineSymbolizer.setEnabled(false); butPolygonSymbolizer.setEnabled(true); outLine = new StyleBuilder().createPolygonSymbolizer(); } } /** 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() { grpOutline = new javax.swing.ButtonGroup(); jScrollPane1 = new javax.swing.JScrollPane(); tabDemo = new org.geotools.gui.swing.style.sld.JDemoTable(); jScrollPane2 = new javax.swing.JScrollPane(); jXTaskPaneContainer1 = new org.jdesktop.swingx.JXTaskPaneContainer(); guiGeom = new org.geotools.gui.swing.style.sld.JGeomPane(); jXTaskPane1 = new org.jdesktop.swingx.JXTaskPane(); jPanel2 = new javax.swing.JPanel(); butChannels = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); guiOverLap = new org.geotools.gui.swing.style.sld.JExpressionPane(); guiOpacity = new org.geotools.gui.swing.style.sld.JExpressionPane(); jLabel1 = new javax.swing.JLabel(); jXTaskPane2 = new org.jdesktop.swingx.JXTaskPane(); guiContrast = new org.geotools.gui.swing.style.sld.JContrastEnhancement(); jXTaskPane3 = new org.jdesktop.swingx.JXTaskPane(); guiRelief = new org.geotools.gui.swing.style.sld.JShadedReliefPane(); jXTaskPane4 = new org.jdesktop.swingx.JXTaskPane(); jPanel1 = new javax.swing.JPanel(); guinone = new javax.swing.JRadioButton(); guiLine = new javax.swing.JRadioButton(); butLineSymbolizer = new javax.swing.JButton(); guiPolygon = new javax.swing.JRadioButton(); butPolygonSymbolizer = new javax.swing.JButton(); setLayout(new java.awt.BorderLayout()); jScrollPane1.setViewportView(tabDemo); add(jScrollPane1, java.awt.BorderLayout.CENTER); jScrollPane2.setBorder(null); jScrollPane2.setViewportBorder(null); jXTaskPaneContainer1.add(guiGeom); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/geotools/gui/swing/style/sld/Bundle"); // NOI18N jXTaskPane1.setTitle(bundle.getString("general")); // NOI18N jPanel2.setOpaque(false); butChannels.setText(bundle.getString("edit")); // NOI18N butChannels.setBorderPainted(false); butChannels.setPreferredSize(new java.awt.Dimension(79, 22)); butChannels.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { butChannelsActionPerformed(evt); } }); jLabel3.setText(bundle.getString("channels")); // NOI18N jLabel2.setText(bundle.getString("overlap")); // NOI18N java.util.ResourceBundle bundle1 = java.util.ResourceBundle.getBundle("org/geotools/gui/swing/style/Bundle"); // NOI18N jLabel1.setText(bundle1.getString("opacity")); // NOI18N org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel2Layout.createSequentialGroup() .add(jLabel1) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(guiOpacity, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jPanel2Layout.createSequentialGroup() .add(jLabel2) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(guiOverLap, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jPanel2Layout.createSequentialGroup() .add(jLabel3) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(butChannels, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) ); jPanel2Layout.linkSize(new java.awt.Component[] {jLabel1, jLabel2, jLabel3}, org.jdesktop.layout.GroupLayout.HORIZONTAL); jPanel2Layout.linkSize(new java.awt.Component[] {butChannels, guiOpacity, guiOverLap}, org.jdesktop.layout.GroupLayout.HORIZONTAL); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel2Layout.createSequentialGroup() .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(org.jdesktop.layout.GroupLayout.LEADING, jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(org.jdesktop.layout.GroupLayout.LEADING, guiOpacity, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(jLabel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(guiOverLap, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(butChannels, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 24, Short.MAX_VALUE) .add(jLabel3))) ); jXTaskPane1.getContentPane().add(jPanel2); jXTaskPaneContainer1.add(jXTaskPane1); jXTaskPane2.setExpanded(false); jXTaskPane2.setTitle(bundle.getString("contrast")); // NOI18N guiContrast.setOpaque(false); jXTaskPane2.getContentPane().add(guiContrast); jXTaskPaneContainer1.add(jXTaskPane2); jXTaskPane3.setExpanded(false); jXTaskPane3.setTitle(bundle.getString("relief")); // NOI18N jXTaskPane3.getContentPane().add(guiRelief); jXTaskPaneContainer1.add(jXTaskPane3); jXTaskPane4.setExpanded(false); jXTaskPane4.setTitle(bundle.getString("outline")); // NOI18N jPanel1.setOpaque(false); grpOutline.add(guinone); guinone.setSelected(true); guinone.setText(bundle.getString("none")); // NOI18N guinone.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { guinoneActionPerformed(evt); } }); grpOutline.add(guiLine); guiLine.setText(bundle.getString("line")); // NOI18N guiLine.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { guiLineActionPerformed(evt); } }); butLineSymbolizer.setText(bundle.getString("edit")); // NOI18N butLineSymbolizer.setBorderPainted(false); butLineSymbolizer.setEnabled(false); butLineSymbolizer.setPreferredSize(new java.awt.Dimension(79, 20)); butLineSymbolizer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { butLineSymbolizerActionPerformed(evt); } }); grpOutline.add(guiPolygon); guiPolygon.setText(bundle.getString("polygon")); // NOI18N guiPolygon.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { guiPolygonActionPerformed(evt); } }); butPolygonSymbolizer.setText(bundle.getString("edit")); // NOI18N butPolygonSymbolizer.setBorderPainted(false); butPolygonSymbolizer.setEnabled(false); butPolygonSymbolizer.setPreferredSize(new java.awt.Dimension(79, 20)); butPolygonSymbolizer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { butPolygonSymbolizerActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(guinone) .add(85, 85, 85)) .add(jPanel1Layout.createSequentialGroup() .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(guiLine) .add(guiPolygon)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(butLineSymbolizer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(butPolygonSymbolizer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) ); jPanel1Layout.linkSize(new java.awt.Component[] {guiLine, guiPolygon, guinone}, org.jdesktop.layout.GroupLayout.HORIZONTAL); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(guinone) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(butLineSymbolizer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(guiLine)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(butPolygonSymbolizer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(guiPolygon))) ); jXTaskPane4.getContentPane().add(jPanel1); jXTaskPaneContainer1.add(jXTaskPane4); jScrollPane2.setViewportView(jXTaskPaneContainer1); add(jScrollPane2, java.awt.BorderLayout.WEST); }// </editor-fold>//GEN-END:initComponents private void butPolygonSymbolizerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butPolygonSymbolizerActionPerformed JDialog dia = new JDialog(); dia.setModal(true); JPolygonSymbolizerPane pane = new JPolygonSymbolizerPane(); pane.setEdited((PolygonSymbolizer)outLine); pane.setLayer(layer); dia.getContentPane().add(pane); dia.pack(); dia.setLocationRelativeTo(butLineSymbolizer); dia.setVisible(true); outLine = pane.getEdited(); }//GEN-LAST:event_butPolygonSymbolizerActionPerformed private void butLineSymbolizerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butLineSymbolizerActionPerformed JDialog dia = new JDialog(); dia.setModal(true); JLineSymbolizerPane pane = new JLineSymbolizerPane(); pane.setEdited((LineSymbolizer)outLine); pane.setLayer(layer); dia.getContentPane().add(pane); dia.pack(); dia.setLocationRelativeTo(butLineSymbolizer); dia.setVisible(true); outLine = pane.getEdited(); }//GEN-LAST:event_butLineSymbolizerActionPerformed private void guiLineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guiLineActionPerformed testOutLine(); }//GEN-LAST:event_guiLineActionPerformed private void guinoneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guinoneActionPerformed testOutLine(); }//GEN-LAST:event_guinoneActionPerformed private void guiPolygonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guiPolygonActionPerformed testOutLine(); }//GEN-LAST:event_guiPolygonActionPerformed private void butChannelsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butChannelsActionPerformed JDialog dia = new JDialog(); JChannelSelectionPane pane = new JChannelSelectionPane(); pane.setLayer(layer); if(symbol != null){ pane.setEdited(symbol.getChannelSelection()); } dia.setContentPane(pane); dia.pack(); dia.setLocationRelativeTo(butChannels); dia.setModal(true); dia.setVisible(true); if(symbol == null){ symbol = new StyleBuilder().createRasterSymbolizer(); } symbol.setChannelSelection(pane.getEdited()); }//GEN-LAST:event_butChannelsActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton butChannels; private javax.swing.JButton butLineSymbolizer; private javax.swing.JButton butPolygonSymbolizer; private javax.swing.ButtonGroup grpOutline; private org.geotools.gui.swing.style.sld.JContrastEnhancement guiContrast; private org.geotools.gui.swing.style.sld.JGeomPane guiGeom; private javax.swing.JRadioButton guiLine; private org.geotools.gui.swing.style.sld.JExpressionPane guiOpacity; private org.geotools.gui.swing.style.sld.JExpressionPane guiOverLap; private javax.swing.JRadioButton guiPolygon; private org.geotools.gui.swing.style.sld.JShadedReliefPane guiRelief; private javax.swing.JRadioButton guinone; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private org.jdesktop.swingx.JXTaskPane jXTaskPane1; private org.jdesktop.swingx.JXTaskPane jXTaskPane2; private org.jdesktop.swingx.JXTaskPane jXTaskPane3; private org.jdesktop.swingx.JXTaskPane jXTaskPane4; private org.jdesktop.swingx.JXTaskPaneContainer jXTaskPaneContainer1; private org.geotools.gui.swing.style.sld.JDemoTable tabDemo; // End of variables declaration//GEN-END:variables }