/* * 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); } }