package fr.umlv.uidemo.slider;

import javax.swing.*;
import javax.swing.event.ChangeListener;

/**
 * @author Remi Forax
 *
 */
public class SliderSpinerAdapterExample {

  static class SliderSpinerAdapter implements BoundedRangeModel {
    
    public SliderSpinerAdapter(SpinnerNumberModel model) {
      this.model=model;
    }

    public int getExtent() {
      return model.getStepSize().intValue();
    }

    public int getMaximum() {
      return ((Number)model.getMaximum()).intValue();
    }

    public int getMinimum() {
      return ((Number)model.getMinimum()).intValue();
    }

    public int getValue() {
      return model.getNumber().intValue();
    }

    public boolean getValueIsAdjusting() {
      return isAdjusting;
    }

    public void setExtent(int newExtent) {
      throw new UnsupportedOperationException();
    }

    public void setMaximum(int newMaximum) {
      throw new UnsupportedOperationException();
    }

    public void setMinimum(int newMinimum) {
      throw new UnsupportedOperationException();
    }

    public void setValue(int newValue) {
      model.setValue(new Integer(newValue));
    }

    public void setRangeProperties(int value, int extent, int min, int max, boolean adjusting) {
      throw new UnsupportedOperationException();
    }

    public void setValueIsAdjusting(boolean isAdjusting) {
      this.isAdjusting=isAdjusting;
    }

    public void addChangeListener(ChangeListener l) {
      model.addChangeListener(l);
    }

    public void removeChangeListener(ChangeListener l) {
      model.removeChangeListener(l);
    }
    
    private boolean isAdjusting;
    private final SpinnerNumberModel model;
  }

  public static void main(String[] args) {
    
    SpinnerNumberModel spinnerModel=new SpinnerNumberModel(0,0,100,1);
    BoundedRangeModel sliderModel=new SliderSpinerAdapter(spinnerModel); 
    
    JSlider slider=new JSlider(sliderModel);
    JSpinner spinner=new JSpinner(spinnerModel);
    
    JPanel panel=new JPanel();
    panel.add(slider);
    panel.add(spinner);
    
    JFrame frame=new JFrame("SliderSpinerAdapterExample");
    frame.setContentPane(panel);
    frame.pack();
    frame.show();
  }
}
