package org.openjump.core.ui.plugin.raster.color; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.geom.NoninvertibleTransformException; import javax.swing.JComboBox; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JColorChooser; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.JTextField; import javax.swing.border.Border; import org.openjump.core.rasterimage.RasterImageLayer; import org.openjump.core.rasterimage.sextante.OpenJUMPSextanteRasterLayer; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.workbench.plugin.PlugInContext; import com.vividsolutions.jump.workbench.ui.ColorChooserPanel; import com.vividsolutions.jump.workbench.ui.ColorPanel; import com.vividsolutions.jump.workbench.ui.GUIUtil; import com.vividsolutions.jump.workbench.ui.OKCancelPanel; /** * 15 sept. 2005 * * @author Paul PLOUY * Laboratoire RESO - universit� de Rennes 2 * FRANCE * * Learn more about our contribution to OpenJUMP project: * http://www.projet-sigle.org/ * */ public class RasterColorEditorDialog extends JDialog { private RasterImageLayer layer = null; private JTextField fromValue; private JLabel fromValueLabel; private JLabel toValueLabel; private JTextField toValue; private JLabel layerLabel; private JComboBox colorScaleChooser; private String[] colorTableList = { I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Default-colors"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Green-Yellow-Red"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Blue-Green-Red"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Red-Blue"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Blue-Red"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Black-White"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.White-Black"), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Rainbow") }; private JPanel mainPanel = new JPanel(); private OKCancelPanel okCancelPanel = new OKCancelPanel(); private PlugInContext plugInContext; private Border border = BorderFactory.createEmptyBorder(10, 10, 10, 10); private Border borderRaised = BorderFactory.createRaisedBevelBorder(); private Border borderLowerered = BorderFactory.createLoweredBevelBorder(); private Color[] valuesColors; private Color noDataColor; private LayoutManager layout = new BorderLayout(); private ColorChooserPanel colorChooser; private LayoutManager gridBagLayout = new GridBagLayout(); private JButton NoDataColorButton = new JButton(); private JLabel NodataColor = new JLabel(I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.No-data-color")); //$NON-NLS-1$ private ColorPanel NoDataColorPanel = new ColorPanel(); private JCheckBox transparent = new JCheckBox(I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorDialog.Transparency")); //$NON-NLS-1$ private int alpha = 255; private JPanel panelSeparator = new JPanel(); private boolean enabled = true; private String sToolTip = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Choose-a-color-range-It-will-be-automaticaly-expanded-between-the-2-values"); private String sColorRange = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Color-range"); private String sFromValue = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.From-value"); private String sToValue = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.To-value"); private String sNoDataValueColor = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.no-data-value-color"); private String sChange = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.change"); private String sChoseOtherColor = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Choose-other-color-for-no-data-values"); private String sToggleTransparency = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Toggle-transparency-for-no-data-values"); private String sSelectColor = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Select-color"); private String sLayerName = I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Selected-Layer"); public RasterColorEditorDialog(PlugInContext context, RasterImageLayer actualLayer) { super(context.getWorkbenchFrame(), I18N.get("org.openjump.core.ui.plugin.raster.color.RasterColorEditorPlugIn.Raster-Color-Editor"), true); //$NON-NLS-1$ plugInContext = context; setLayer(actualLayer); setResizable(true); setSize(500, 350); GUIUtil.setLocation(this, new GUIUtil.Location(100, true, 100, true), plugInContext.getWorkbenchFrame()); try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } } public void setLayer(RasterImageLayer actualLayer) { this.layer = actualLayer; } void jbInit() throws Exception { setLayout(layout); add(okCancelPanel, BorderLayout.SOUTH); okCancelPanel.setOKPressed(false); okCancelPanel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { try { okCancelPanel_actionPerformed(e); } catch (NumberFormatException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NoninvertibleTransformException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); layerLabel = new JLabel(sLayerName + ": " + layer.getName()); layerLabel.setBorder(border); add(layerLabel, BorderLayout.NORTH); mainPanel.setBorder(border); mainPanel.setLayout(gridBagLayout); GridBagConstraints c = new GridBagConstraints(0, 0, 4, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(10, 10, 0, 10), 0, 0); colorScaleChooser = new JComboBox(colorTableList); colorScaleChooser.setSelectedIndex(0); String fieldName = sColorRange; //$NON-NLS-1$ colorScaleChooser .setToolTipText(sToolTip); //$NON-NLS-1$ colorScaleChooser.setBorder(borderRaised); mainPanel.add(colorScaleChooser, c); OpenJUMPSextanteRasterLayer ojraster = new OpenJUMPSextanteRasterLayer(); ojraster.create(layer); fromValue = new JTextField(Double.toString(ojraster.getMinValue()), 15); fromValueLabel = new JLabel(sFromValue); //$NON-NLS-1$ fromValue.setCaretPosition(0); fromValue.selectAll(); toValue = new JTextField(Double.toString(ojraster.getMaxValue()), 15); toValue.setCaretPosition(0); fromValue.selectAll(); toValueLabel = new JLabel(sToValue); //$NON-NLS-1$ panelSeparator.setSize(300, 50); NoDataColorPanel.setFillColor(Color.WHITE); NoDataColorPanel.setLineColor(Color.BLACK); NoDataColorPanel.setBorder(borderLowerered); NoDataColorPanel.setToolTipText(sNoDataValueColor); //$NON-NLS-1$ NoDataColorButton.setText(sChange); //$NON-NLS-1$ NoDataColorButton .setToolTipText(sChoseOtherColor); //$NON-NLS-1$ NoDataColorButton .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { changeButton_actionPerformed(e); } }); transparent.setToolTipText(sToggleTransparency); //$NON-NLS-1$ transparent.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { transparent_actionPerformed(e); } }); c.weightx = 1; c.gridx = 0; c.gridy = 1; c.gridwidth = 1; mainPanel.add(fromValueLabel, c); c.gridx = 0; c.gridy = 2; c.gridwidth = 1; mainPanel.add(fromValue, c); c.weightx = 1; c.gridx = 3; c.gridy = 1; c.gridwidth = 1; mainPanel.add(toValueLabel, c); c.gridx = 3; c.gridy = 2; c.gridwidth = 1; mainPanel.add(toValue, c); c.weightx = 1; c.weighty = 1; c.gridx = 0; c.gridy = 3; c.gridheight = 2; c.gridwidth = 4; c.ipady = 40; mainPanel.add(panelSeparator, c); /* * [sstein - 28.Sept.2010] since this stuff doesn't work yet we don't display it. * c.gridheight = 1; c.weightx = 0.5; c.gridy = 5; c.gridwidth = 1; c.ipady = 0; mainPanel.add(NodataColor, c); c.gridx = 1; c.gridwidth = 2; mainPanel.add(NoDataColorPanel, c); c.gridy = 6; mainPanel.add(NoDataColorButton, c); c.gridx = 0; mainPanel.add(transparent, c); */ add(mainPanel, BorderLayout.CENTER); } void okCancelPanel_actionPerformed(ActionEvent e) throws NumberFormatException, NoninvertibleTransformException { if (!okCancelPanel.wasOKPressed()) { setVisible(false); return; } if (okCancelPanel.wasOKPressed() && validateInput()) { switch (colorScaleChooser.getSelectedIndex()) { case 0: { valuesColors = null; break; } case 1: { valuesColors = new Color[] { Color.GREEN, Color.YELLOW, Color.RED }; break; } case 2: { valuesColors = new Color[] { Color.BLUE, Color.GREEN, Color.RED }; break; } case 3: { valuesColors = new Color[] { Color.RED, Color.BLUE }; break; } case 4: { valuesColors = new Color[] { Color.BLUE, Color.RED }; break; } case 5: { valuesColors = new Color[] { Color.WHITE, Color.BLACK }; break; } case 6: { valuesColors = new Color[] { Color.BLACK, Color.WHITE }; break; } case 7: { valuesColors = new Color[] { Color.decode("#9400D3"), //$NON-NLS-1$ Color.decode("#4B0082"), Color.BLUE, Color.GREEN, //$NON-NLS-1$ Color.YELLOW, Color.ORANGE, Color.RED }; break; } } RasterColorEditor colorEditor = new RasterColorEditor(layer); colorEditor.changeColors(plugInContext.getWorkbenchContext(), valuesColors, GUIUtil.alphaColor(NoDataColorPanel .getFillColor(), alpha), Float.parseFloat(fromValue .getText()), Float.parseFloat(toValue.getText())); setVisible(false); return; } else { plugInContext.getWorkbenchFrame().warnUser("min > max!"); //$NON-NLS-1$ return; } } private boolean validateInput() { return (Float.parseFloat(fromValue.getText()) < Float .parseFloat(toValue.getText())); } void changeButton_actionPerformed(ActionEvent e) { Color newColor = JColorChooser.showDialog(SwingUtilities .windowForComponent(this), sSelectColor , Color.WHITE); //$NON-NLS-1$ if (newColor == null) { return; } NoDataColorPanel.setFillColor(newColor); NoDataColorPanel.repaint(); } void transparent_actionPerformed(ActionEvent e) { if (transparent.isSelected()) { alpha = 0; enabled = false; } else { alpha = 255; enabled = true; } NoDataColorButton.setEnabled(enabled); NoDataColorPanel.setVisible(enabled); return; } }