/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cismap.commons.gui.options;
import org.jdom.Element;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
import java.awt.Color;
import javax.swing.JColorChooser;
import de.cismet.cismap.commons.gui.MappingComponent;
import de.cismet.cismap.commons.gui.piccolo.eventlistener.MetaSearchCreateSearchGeometryListener;
import de.cismet.cismap.commons.interaction.CismapBroker;
import de.cismet.lookupoptions.AbstractOptionsPanel;
import de.cismet.lookupoptions.OptionsPanelController;
import de.cismet.tools.configuration.NoWriteError;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
@ServiceProvider(service = OptionsPanelController.class)
public class SearchOptionsPanel extends AbstractOptionsPanel implements OptionsPanelController {
//~ Static fields/initializers ---------------------------------------------
private static final String OPTION_NAME = NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.OPTION_NAME");
private static final String CONFIGURATION = "SearchOptionsPanel";
private static final String CONF_HOLD_GEOMETRIES = "HoldGeometries";
private static final String CONF_GEOMETRY_COLOR = "GeometryColor";
private static final String CONF_GEOMETRY_TRANSPARENCY = "GeometryTransparency";
//~ Instance fields --------------------------------------------------------
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private boolean stillConfigured = false;
private boolean holdGeometries;
private float geometryTransparency;
private Color geometryColor;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSlider jSlider1;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates a new SearchOptionsPanel object.
*/
public SearchOptionsPanel() {
super(OPTION_NAME, CismapOptionsCategory.class);
initComponents();
}
//~ Methods ----------------------------------------------------------------
@Override
public int getOrder() {
return 1;
}
@Override
public void update() {
final MetaSearchCreateSearchGeometryListener listener = getListener();
if (listener != null) {
holdGeometries = listener.isHoldingGeometries();
geometryColor = listener.getSearchColor();
geometryTransparency = listener.getSearchTransparency();
}
jCheckBox1.setSelected(holdGeometries);
jPanel1.setBackground(geometryColor);
jSlider1.setValue((int)(geometryTransparency * 100f));
}
@Override
public void applyChanges() {
holdGeometries = jCheckBox1.isSelected();
geometryColor = jPanel1.getBackground();
geometryTransparency = jSlider1.getValue() / 100f;
final MetaSearchCreateSearchGeometryListener listener = getListener();
if (listener != null) {
listener.setHoldGeometries(holdGeometries);
listener.setSearchColor(geometryColor);
listener.setSearchTransparency(geometryTransparency);
}
}
@Override
public boolean isChanged() {
return (holdGeometries != jCheckBox1.isSelected())
|| (((geometryColor != null) ? geometryColor.getRGB() : null)
!= ((jPanel1.getBackground() != null) ? jPanel1.getBackground().getRGB() : null))
|| (geometryTransparency != (jSlider1.getValue() / 100f));
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private MetaSearchCreateSearchGeometryListener getListener() {
MetaSearchCreateSearchGeometryListener result = null;
if ((CismapBroker.getInstance() != null)
&& (CismapBroker.getInstance().getMappingComponent() != null)
&& (CismapBroker.getInstance().getMappingComponent().getInputListener(
MappingComponent.CREATE_SEARCH_POLYGON) != null)) {
result = (MetaSearchCreateSearchGeometryListener)CismapBroker.getInstance().getMappingComponent()
.getInputListener(MappingComponent.CREATE_SEARCH_POLYGON);
}
return result;
}
@Override
public void configure(final Element parent) {
if (!stillConfigured) {
if (log.isDebugEnabled()) {
log.debug("Configure SearchOptionsPanel");
}
try {
String elementHoldGeometries = "";
String elementGeometryColor = "";
String elementGeometryTransparency = "";
if (parent != null) {
final Element conf = parent.getChild(CONFIGURATION);
if (conf != null) {
elementHoldGeometries = conf.getChildText(CONF_HOLD_GEOMETRIES);
elementGeometryColor = conf.getChildText(CONF_GEOMETRY_COLOR);
elementGeometryTransparency = conf.getChildText(CONF_GEOMETRY_TRANSPARENCY);
}
}
holdGeometries = new Boolean(elementHoldGeometries);
try {
geometryColor = new Color(Integer.valueOf(elementGeometryColor));
} catch (NumberFormatException ex) {
geometryColor = Color.GREEN;
}
try {
geometryTransparency = Float.valueOf(elementGeometryTransparency);
} catch (NumberFormatException ex) {
geometryTransparency = 0.5f;
}
} catch (Exception ex) {
log.error("Fehler beim Konfigurieren des SearchOptionsPanel", ex);
}
// hier werden die Werte in der GUI gesetzt
jCheckBox1.setSelected(holdGeometries);
jPanel1.setBackground(geometryColor);
jSlider1.setValue((int)(geometryTransparency * 100f));
stillConfigured = true;
} else {
if (log.isDebugEnabled()) {
log.debug("skip Configure SearchOptionsPanel - still configured");
}
}
// Änderungen anwenden
applyChanges();
}
@Override
public Element getConfiguration() throws NoWriteError {
final Element conf = new Element(CONFIGURATION);
final Element holdSearchGeometriesElement = new Element(CONF_HOLD_GEOMETRIES);
final Element searchGeometryColorElement = new Element(CONF_GEOMETRY_COLOR);
final Element searchGeometryTransparencyElement = new Element(CONF_GEOMETRY_TRANSPARENCY);
holdSearchGeometriesElement.addContent(Boolean.toString(holdGeometries));
searchGeometryColorElement.addContent(String.valueOf((geometryColor != null) ? geometryColor.getRGB() : null));
searchGeometryTransparencyElement.addContent(String.valueOf(geometryTransparency));
conf.addContent(holdSearchGeometriesElement);
conf.addContent(searchGeometryColorElement);
conf.addContent(searchGeometryTransparencyElement);
return conf;
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
jCheckBox1 = new javax.swing.JCheckBox();
jButton1 = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
jSlider1 = new javax.swing.JSlider();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
setAlignmentY(0.0F);
setLayout(new java.awt.GridBagLayout());
jCheckBox1.setText(org.openide.util.NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.jCheckBox1.text")); // NOI18N
jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
jCheckBox1ActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.ipady = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(8, 5, 3, 5);
add(jCheckBox1, gridBagConstraints);
jButton1.setText(org.openide.util.NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.jButton1.text")); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 5);
add(jButton1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(jSeparator1, gridBagConstraints);
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel2.setText(org.openide.util.NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.jLabel2.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(3, 5, 3, 5);
add(jLabel2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 5);
add(jSlider1, gridBagConstraints);
jPanel1.setPreferredSize(new java.awt.Dimension(58, 29));
final javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(
0,
58,
Short.MAX_VALUE));
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(
0,
29,
Short.MAX_VALUE));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0);
add(jPanel1, gridBagConstraints);
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel1.setText(org.openide.util.NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(3, 5, 3, 5);
add(jLabel1, gridBagConstraints);
jLabel3.setPreferredSize(new java.awt.Dimension(50, 17));
final org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(
org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE,
jSlider1,
org.jdesktop.beansbinding.ELProperty.create("${value}%"),
jLabel3,
org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 0);
add(jLabel3, gridBagConstraints);
jLabel4.setText(org.openide.util.NbBundle.getMessage(
SearchOptionsPanel.class,
"SearchOptionsPanel.jLabel4.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
add(jLabel4, gridBagConstraints);
bindingGroup.bind();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void jCheckBox1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jCheckBox1ActionPerformed
// TODO add your handling code here:
} //GEN-LAST:event_jCheckBox1ActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void jButton1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton1ActionPerformed
final Color color = JColorChooser.showDialog(
this,
"Farbe der Such-Geometrien wählen.",
getColor());
if (color != null) {
setColor(color);
}
} //GEN-LAST:event_jButton1ActionPerformed
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private Color getColor() {
return jPanel1.getBackground();
}
/**
* DOCUMENT ME!
*
* @param newColor DOCUMENT ME!
*/
private void setColor(final Color newColor) {
if (log.isDebugEnabled()) {
log.debug("newColor: " + newColor);
}
jPanel1.setBackground(newColor);
}
@Override
public String getTooltip() {
return org.openide.util.NbBundle.getMessage(SearchOptionsPanel.class,
"SearchOptionsPanel.tooltip"); // NOI18N
}
}