package chatty.gui.components.settings;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* A slider that shows the currently selected value and implements the
* LongSetting interface.
*
* @author tduva
*/
public class SliderLongSetting extends JPanel implements LongSetting {
private final JSlider slider;
private long value = 0;
private final JLabel valueLabel;
private final static String LABEL_PREFIX = "<html><body style='"
+ "width: 30px;"
+ "text-align: right;"
+ "border: 1px solid #AAAAAA;"
+ "margin-left: 4px;"
+ "padding-right: 2px;"
+ "'>";
public SliderLongSetting(int orientation, int min, int max, int presetValue) {
slider = new JSlider(orientation, min, max, presetValue);
this.value = value;
valueLabel = new JLabel(LABEL_PREFIX);
valueLabel.setMinimumSize(valueLabel.getPreferredSize());
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
value = slider.getValue();
updateLabel();
}
});
add(slider);
add(valueLabel);
}
@Override
public Long getSettingValue() {
return value;
}
@Override
public void setSettingValue(Long value) {
slider.setValue(value.intValue());
this.value = value;
updateLabel();
}
private void updateLabel() {
valueLabel.setText(LABEL_PREFIX+new Long(value).toString());
}
public void setMajorTickSpacing(int value) {
slider.setMajorTickSpacing(value);
}
public void setMinorTickSpacing(int value) {
slider.setMinorTickSpacing(value);
}
public void setPaintLabels(boolean value) {
slider.setPaintLabels(value);
}
public void setPaintTicks(boolean value) {
slider.setPaintTicks(value);
}
}