001    package org.springframework.richclient.form.binding.swing;
002    
003    import org.springframework.binding.form.FormModel;
004    import org.springframework.richclient.form.binding.support.CustomBinding;
005    import org.springframework.richclient.components.SliderLabelFactory;
006    
007    import javax.swing.*;
008    import javax.swing.event.ChangeListener;
009    import javax.swing.event.ChangeEvent;
010    
011    public class SliderBinding extends CustomBinding
012    {
013    
014        private JSlider slider;
015        private boolean readOnly;
016    
017        private SliderLabelFactory sliderLabelFactory;
018        private int maxSpacing;
019    
020        /**
021         * Creates a new binding
022         *
023         * @param formModel
024         * @param formPropertyPath
025         */
026        public SliderBinding(FormModel formModel, String formPropertyPath)
027        {
028            super(formModel, formPropertyPath, Integer.class);
029            slider = new JSlider();
030            slider.addChangeListener(new ChangeListener()
031            {
032    
033                public void stateChanged(ChangeEvent e)
034                {
035                    controlValueChanged(slider.getValue());
036                }
037            });
038        }
039    
040        @Override
041        protected void valueModelChanged(Object newValue)
042        {
043            slider.setValue((Integer) newValue);
044            readOnlyChanged();
045    
046        }
047    
048        @Override
049        protected JComponent doBindControl()
050        {
051            if (sliderLabelFactory == null)
052            {
053                slider.createStandardLabels(maxSpacing);
054            }
055            else
056            {
057                slider.setLabelTable(sliderLabelFactory.getSliderLabels());
058            }
059            slider.setPaintLabels(true);
060            slider.setValue((Integer) getValue());
061            return slider;
062        }
063    
064        @Override
065        protected void enabledChanged()
066        {
067            this.slider.setEnabled(isEnabled());
068            readOnlyChanged();
069    
070        }
071    
072        @Override
073        protected void readOnlyChanged()
074        {
075            this.slider.setEnabled(isEnabled() && !isReadOnly() && !readOnly);
076        }
077    
078        /** Set the maximum value of the slider */
079        public void setMaxValue(int maxValue)
080        {
081            slider.setMaximum(maxValue);
082        }
083    
084        /** Set the minimum value of the slider */
085        public void setMinValue(int minValue)
086        {
087            slider.setMinimum(minValue);
088        }
089    
090        /** Set the major tick spacing of the slider */
091        public void setMajorTickSpacing(int spacing)
092        {
093            this.maxSpacing = spacing;
094            slider.setMajorTickSpacing(spacing);
095    
096        }
097    
098        /** Set the minor tick spacing of the slider */
099        public void setMinorTickSpacing(int spacing)
100        {
101            slider.setMinorTickSpacing(spacing);
102        }
103    
104        /** Set the factory for the custom labels */
105        public void setSliderLabelFactory(SliderLabelFactory sliderLabelFactory)
106        {
107            this.sliderLabelFactory = sliderLabelFactory;
108        }
109    
110    }