/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jada.ngeditor.guiviews.editors;
import de.lessvoid.nifty.tools.SizeValue;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author cris
*/
public class ValueEditor extends javax.swing.JPanel implements ChangeListener{
private SizeValue value = SizeValue.px(0);
private boolean percent = false;
/**
* Creates new form ValueEditor
*/
public ValueEditor(SizeValue value) {
initComponents();
this.setValue(value);
this.jSpinner1.addChangeListener(this);
}
public ValueEditor() {
initComponents();
this.setValue(value);
this.jSpinner1.addChangeListener(this);
}
public final void setValue(SizeValue newValue){
SizeValue old = value;
this.value = newValue;
this.firePropertyChange("value", old, newValue);
this.initSliders();
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
this.jSpinner1.setEnabled(enabled);
this.jSlider1.setEnabled(enabled);
}
public SizeValue getValue(){
return this.value;
}
/**
* 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() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
jSlider1 = new javax.swing.JSlider();
jSpinner1 = new javax.swing.JSpinner();
setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 10, 5));
jSlider1.setMajorTickSpacing(50);
jSlider1.setMinorTickSpacing(5);
jSlider1.setPaintLabels(true);
jSlider1.setPaintTicks(true);
jSlider1.setPreferredSize(new java.awt.Dimension(300, 45));
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSpinner1, org.jdesktop.beansbinding.ELProperty.create("${value}"), jSlider1, org.jdesktop.beansbinding.BeanProperty.create("value"), "");
bindingGroup.addBinding(binding);
add(jSlider1);
jSpinner1.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
jSpinner1.setPreferredSize(new java.awt.Dimension(51, 20));
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSlider1, org.jdesktop.beansbinding.ELProperty.create("${value}"), jSpinner1, org.jdesktop.beansbinding.BeanProperty.create("value"));
bindingGroup.addBinding(binding);
add(jSpinner1);
bindingGroup.bind();
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JSlider jSlider1;
private javax.swing.JSpinner jSpinner1;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
private void initSliders() {
if(this.value.isPercent()){
this.jSlider1.setMaximum(100);
this.jSlider1.setMajorTickSpacing(500);
this.jSlider1.setMinorTickSpacing(5);
this.jSlider1.setMajorTickSpacing(10);
jSlider1.setLabelTable(jSlider1.createStandardLabels(10));
this.jSlider1.setValue(this.value.getValueAsInt(100));
this.jSpinner1.getModel().setValue(this.value.getValueAsInt(100));
SpinnerNumberModel model = (SpinnerNumberModel) this.jSpinner1.getModel();
model.setValue(this.value.getValueAsInt(100));
model.setMaximum(new Integer(100));
this.percent = true;
}else if(this.value.isPixel()){
this.jSlider1.setMajorTickSpacing(500);
this.jSlider1.setMinorTickSpacing(200);
this.jSlider1.setMaximum(2000);
jSlider1.setLabelTable(jSlider1.createStandardLabels(250));
this.jSlider1.setValue(this.value.getValueAsInt(100));
SpinnerNumberModel model = (SpinnerNumberModel) this.jSpinner1.getModel();
model.setValue(this.value.getValueAsInt(100));
model.setMaximum(new Integer(2000));
this.percent = false;
}
}
@Override
public void stateChanged(ChangeEvent e) {
Integer val = (Integer) jSpinner1.getValue();
SizeValue temp = this.value;
this.value = percent ? SizeValue.percent(val.intValue()) : SizeValue.px(val.intValue()) ;
this.firePropertyChange("value", temp, this.value);
}
}