/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.ui.filters.plugin.attribute;
import java.text.DecimalFormat;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.filters.plugin.attribute.AttributeEqualBuilder.EqualNumberFilter;
import org.gephi.filters.spi.FilterProperty;
import org.openide.util.WeakListeners;
/**
*
* @author Mathieu Bastian
*/
public class EqualNumberPanel extends javax.swing.JPanel implements ChangeListener {
private EqualNumberFilter filter;
public EqualNumberPanel() {
initComponents();
}
public void stateChanged(ChangeEvent evt) {
FilterProperty match = filter.getProperties()[1];
try {
match.setValue((Number) valueSpinner.getValue());
} catch (Exception e) {
e.printStackTrace();
}
}
public void setup(EqualNumberFilter f) {
this.filter = f;
new Thread(new Runnable() {
public void run() {
setToolTipText(filter.getName() + " '" + filter.getColumn().getTitle() + "'");
Number match = filter.getMatch();
Number stepSize = null;
final Comparable min = (Comparable) filter.getMinimun();
final Comparable max = (Comparable) filter.getMaximum();
switch (filter.getColumn().getType()) {
case DOUBLE:
match = (match != null ? match : new Double((Double) min));
stepSize = new Double(.1);
break;
case FLOAT:
match = (match != null ? match : new Float((Float) min));
stepSize = new Float(.1f);
break;
case LONG:
match = (match != null ? match : new Long((Long) min));
stepSize = new Long(1l);
break;
case INT:
match = (match != null ? match : new Integer((Integer) min));
stepSize = 1;
break;
default:
throw new IllegalArgumentException("Column must be number");
}
Number minNumber = (Number) min;
Number maxNumber = (Number) max;
if (match.doubleValue() < minNumber.doubleValue()) {
match = minNumber;
filter.getProperties()[1].setValue(minNumber);
} else if (match.doubleValue() > maxNumber.doubleValue()) {
match = maxNumber;
filter.getProperties()[1].setValue(maxNumber);
}
final SpinnerNumberModel model = new SpinnerNumberModel(match, min, max, stepSize);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (min.equals(Double.NEGATIVE_INFINITY) || min.equals(Integer.MIN_VALUE)) {
minLabel.setText("");
maxLabel.setText("");
} else {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(5);
minLabel.setText(df.format(min));
maxLabel.setText(df.format(max));
}
valueSpinner.setModel(model);
model.addChangeListener(WeakListeners.change(EqualNumberPanel.this, model));
}
});
}
}).start();
}
/** 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;
labelValue = new javax.swing.JLabel();
valueSpinner = new javax.swing.JSpinner();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
minLabel = new javax.swing.JLabel();
maxLabel = new javax.swing.JLabel();
setLayout(new java.awt.GridBagLayout());
labelValue.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.labelValue.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
add(labelValue, gridBagConstraints);
valueSpinner.setPreferredSize(new java.awt.Dimension(75, 20));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
add(valueSpinner, gridBagConstraints);
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 10));
jLabel1.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
add(jLabel1, gridBagConstraints);
jLabel2.setFont(new java.awt.Font("Tahoma", 0, 10));
jLabel2.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel2.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
add(jLabel2, gridBagConstraints);
minLabel.setFont(new java.awt.Font("Tahoma", 0, 10));
minLabel.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.minLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
add(minLabel, gridBagConstraints);
maxLabel.setFont(new java.awt.Font("Tahoma", 0, 10));
maxLabel.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.maxLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
add(maxLabel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel labelValue;
private javax.swing.JLabel maxLabel;
private javax.swing.JLabel minLabel;
private javax.swing.JSpinner valueSpinner;
// End of variables declaration//GEN-END:variables
}