X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSlider.java;fp=src%2Fjalview%2Fgui%2FSlider.java;h=c8f673d5f66e30b2ca035a121280321a7f302cfd;hb=0c85e43a68ad2de5318b6e3f09bd743b7933a890;hp=0000000000000000000000000000000000000000;hpb=57a4549e0f95c10651db22e53dae9411e5e30c46;p=jalview.git diff --git a/src/jalview/gui/Slider.java b/src/jalview/gui/Slider.java new file mode 100644 index 0000000..c8f673d --- /dev/null +++ b/src/jalview/gui/Slider.java @@ -0,0 +1,115 @@ +package jalview.gui; + +import javax.swing.JSlider; + +/** + * A modified {@code javax.swing.JSlider} that + * + * + * @author gmcarstairs + */ +@SuppressWarnings("serial") +public class Slider extends JSlider +{ + /* + * 'true' value corresponding to zero on the slider + */ + private float trueMin; + + /* + * 'true' value corresponding to slider maximum + */ + private float trueMax; + + /* + * scaleFactor applied to true value range to give a + * slider range of 0 - 100 + */ + private float sliderScaleFactor; + + /** + * Constructor that rescales min - max to 0 - 100 for the slider + * + * @param min + * @param max + * @param value + */ + public Slider(float min, float max, float value) + { + super(); + setSliderModel(min, max, value); + } + + /** + * Sets the min-max range and current value of the slider, with rescaling from + * true values to slider range as required + * + * @param min + * @param max + * @param value + */ + public void setSliderModel(float min, float max, float value) + { + trueMin = min; + trueMax = max; + setMinimum(0); + sliderScaleFactor = 100f / (max - min); + int sliderMax = (int) ((max - min) * sliderScaleFactor); + int extent = 1; + setExtent(extent); + setMaximum(sliderMax + extent); + setSliderValue(value); + } + + /** + * Answers the value of the slider position (descaled to 'true' value) + * + * @return + */ + public float getSliderValue() + { + /* + * convert slider max to 'true max' in case of rounding errors + */ + int value = getValue(); + return value == getMaximum() ? trueMax + : value / sliderScaleFactor + trueMin; + } + + /** + * Sets the slider value (scaled from the true value to the slider range) + * + * @param value + */ + public void setSliderValue(float value) + { + setValue(Math.round((value - trueMin) * sliderScaleFactor)); + } + + /** + * Answers the value of the slider position as a percentage between minimum and + * maximum of its range + * + * @return + */ + public float getSliderPercentageValue() + { + return (getValue() - getMinimum()) * 100f + / (getMaximum() - getMinimum()); + } + + /** + * Sets the slider position for a given percentage value of its min-max range + * + * @param pct + */ + public void setSliderPercentageValue(float pct) + { + float pc = pct / 100f * getMaximum(); + setValue((int) pc); + } +}