/*
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.ranking.plugin;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.ranking.api.Ranking;
import org.gephi.ranking.api.SizeTransformer;
import org.gephi.ranking.api.Transformer;
import org.gephi.ui.components.JRangeSlider;
import org.openide.util.NbPreferences;
/**
*
* @author Mathieu Bastian
*/
public class SizeTransformerPanel extends javax.swing.JPanel {
private static final int SLIDER_MAXIMUM = 100;
private SizeTransformer sizeTransformer;
private Ranking ranking;
public SizeTransformerPanel(Transformer transformer, Ranking ranking) {
initComponents();
final String MIN_SIZE = "SizeTransformerPanel_" + transformer.getClass().getSimpleName() + "_min";
final String MAX_SIZE = "SizeTransformerPanel_" + transformer.getClass().getSimpleName() + "_max";
sizeTransformer = (SizeTransformer) transformer;
this.ranking = ranking;
float minSizeStart = NbPreferences.forModule(SizeTransformerPanel.class).getFloat(MIN_SIZE, sizeTransformer.getMinSize());
float maxSizeStart = NbPreferences.forModule(SizeTransformerPanel.class).getFloat(MAX_SIZE, sizeTransformer.getMaxSize());
sizeTransformer.setMinSize(minSizeStart);
sizeTransformer.setMaxSize(maxSizeStart);
minSize.setValue(minSizeStart);
maxSize.setValue(maxSizeStart);
minSize.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
sizeTransformer.setMinSize((Float) minSize.getValue());
NbPreferences.forModule(SizeTransformerPanel.class).putFloat(MIN_SIZE, (Float) minSize.getValue());
}
});
maxSize.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
sizeTransformer.setMaxSize((Float) maxSize.getValue());
NbPreferences.forModule(SizeTransformerPanel.class).putFloat(MAX_SIZE, (Float) maxSize.getValue());
}
});
//Range
JRangeSlider slider = (JRangeSlider) rangeSlider;
slider.setMinimum(0);
slider.setMaximum(SLIDER_MAXIMUM);
slider.setValue(0);
slider.setUpperValue(SLIDER_MAXIMUM);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JRangeSlider source = (JRangeSlider) e.getSource();
if (!source.getValueIsAdjusting()) {
setRangeValues();
}
}
});
refreshRangeValues();
}
private void setRangeValues() {
JRangeSlider slider = (JRangeSlider) rangeSlider;
float low = slider.getValue() / 100f;
float high = slider.getUpperValue() / 100f;
sizeTransformer.setLowerBound(low);
sizeTransformer.setUpperBound(high);
lowerBoundLabel.setText(ranking.unNormalize(sizeTransformer.getLowerBound()).toString());
upperBoundLabel.setText(ranking.unNormalize(sizeTransformer.getUpperBound()).toString());
}
private void refreshRangeValues() {
JRangeSlider slider = (JRangeSlider) rangeSlider;
slider.setValue((int) (sizeTransformer.getLowerBound() * 100f));
slider.setUpperValue((int) (sizeTransformer.getUpperBound() * 100f));
lowerBoundLabel.setText(ranking.unNormalize(sizeTransformer.getLowerBound()).toString());
upperBoundLabel.setText(ranking.unNormalize(sizeTransformer.getUpperBound()).toString());
}
/** 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() {
labelMinSize = new javax.swing.JLabel();
minSize = new javax.swing.JSpinner();
labelMaxSize = new javax.swing.JLabel();
maxSize = new javax.swing.JSpinner();
labelRange = new javax.swing.JLabel();
rangeSlider = new JRangeSlider();
upperBoundLabel = new javax.swing.JLabel();
lowerBoundLabel = new javax.swing.JLabel();
setPreferredSize(new java.awt.Dimension(225, 114));
labelMinSize.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelMinSize.text")); // NOI18N
minSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f)));
labelMaxSize.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelMaxSize.text")); // NOI18N
maxSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(4.0f), Float.valueOf(0.5f), null, Float.valueOf(0.5f)));
labelRange.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelRange.text")); // NOI18N
rangeSlider.setFocusable(false);
rangeSlider.setOpaque(false);
upperBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10));
upperBoundLabel.setForeground(new java.awt.Color(102, 102, 102));
upperBoundLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
upperBoundLabel.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.upperBoundLabel.text")); // NOI18N
lowerBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10));
lowerBoundLabel.setForeground(new java.awt.Color(102, 102, 102));
lowerBoundLabel.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.lowerBoundLabel.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(labelMinSize)
.addGap(8, 8, 8)
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(labelMaxSize)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(labelRange)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(rangeSlider, 0, 0, Short.MAX_VALUE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(lowerBoundLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(upperBoundLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelMinSize)
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelMaxSize)
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelRange, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(rangeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lowerBoundLabel)
.addComponent(upperBoundLabel))
.addContainerGap(23, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel labelMaxSize;
private javax.swing.JLabel labelMinSize;
private javax.swing.JLabel labelRange;
private javax.swing.JLabel lowerBoundLabel;
private javax.swing.JSpinner maxSize;
private javax.swing.JSpinner minSize;
private javax.swing.JSlider rangeSlider;
private javax.swing.JLabel upperBoundLabel;
// End of variables declaration//GEN-END:variables
}