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 }