X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationRowFilter.java;fp=src%2Fjalview%2Fgui%2FAnnotationRowFilter.java;h=6f72e10a7a790cba0cff2ad9811e01fc6d88cf99;hb=0c85e43a68ad2de5318b6e3f09bd743b7933a890;hp=f13cb10579c79b4690885d4000b059e23723ca7c;hpb=57a4549e0f95c10651db22e53dae9411e5e30c46;p=jalview.git diff --git a/src/jalview/gui/AnnotationRowFilter.java b/src/jalview/gui/AnnotationRowFilter.java index f13cb10..6f72e10 100644 --- a/src/jalview/gui/AnnotationRowFilter.java +++ b/src/jalview/gui/AnnotationRowFilter.java @@ -35,6 +35,8 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.math.BigDecimal; +import java.math.MathContext; import java.util.HashMap; import java.util.Map; import java.util.Vector; @@ -44,7 +46,6 @@ import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JInternalFrame; import javax.swing.JPanel; -import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -52,6 +53,10 @@ import javax.swing.event.ChangeListener; @SuppressWarnings("serial") public abstract class AnnotationRowFilter extends JPanel { + private static final String TWO_DP = "%.2f"; + + private final static MathContext FOUR_SIG_FIG = new MathContext(4); + protected AlignViewport av; protected AlignmentPanel ap; @@ -64,7 +69,7 @@ public abstract class AnnotationRowFilter extends JPanel protected JCheckBox percentThreshold = new JCheckBox(); - protected JSlider slider = new JSlider(); + protected Slider slider; protected JTextField thresholdValue = new JTextField(20); @@ -103,6 +108,8 @@ public abstract class AnnotationRowFilter extends JPanel { this.av = viewport; this.ap = alignPanel; + this.slider = new Slider(0f, 100f, 50f); + thresholdValue.addFocusListener(new FocusAdapter() { @Override @@ -140,16 +147,62 @@ public abstract class AnnotationRowFilter extends JPanel adjusting = true; if (percentThreshold.isSelected()) { - thresholdValue.setText("" + (slider.getValue() - slider.getMinimum()) - * 100f / (slider.getMaximum() - slider.getMinimum())); + thresholdValue + .setText(String.format(TWO_DP, getSliderPercentageValue())); } else { - thresholdValue.setText((slider.getValue() / 1000f) + ""); + /* + * round to 4 significant digits without trailing zeroes + */ + float f = getSliderValue(); + BigDecimal formatted = new BigDecimal(f).round(FOUR_SIG_FIG) + .stripTrailingZeros(); + thresholdValue.setText(formatted.toPlainString()); } adjusting = oldadj; } + /** + * Answers the value of the slider position (descaled to 'true' value) + * + * @return + */ + protected float getSliderValue() + { + return slider.getSliderValue(); + } + + /** + * Sets the slider value (scaled from the true value to the slider range) + * + * @param value + */ + protected void setSliderValue(float value) + { + slider.setSliderValue(value); + } + /** + * Answers the value of the slider position as a percentage between minimum and + * maximum of its range + * + * @return + */ + protected float getSliderPercentageValue() + { + return slider.getSliderPercentageValue(); + } + + /** + * Sets the slider position for a given percentage value of its min-max range + * + * @param pct + */ + protected void setSliderPercentageValue(float pct) + { + slider.setSliderPercentageValue(pct); + } + protected void addSliderMouseListeners() { @@ -290,6 +343,10 @@ public abstract class AnnotationRowFilter extends JPanel updateView(); } + /** + * Updates the slider position, and the display, for an update in the slider's + * text input field + */ protected void thresholdValue_actionPerformed() { try @@ -297,12 +354,11 @@ public abstract class AnnotationRowFilter extends JPanel float f = Float.parseFloat(thresholdValue.getText()); if (percentThreshold.isSelected()) { - slider.setValue(slider.getMinimum() + ((int) ((f / 100f) - * (slider.getMaximum() - slider.getMinimum())))); + setSliderPercentageValue(f); } else { - slider.setValue((int) (f * 1000)); + setSliderValue(f); } updateView(); } catch (NumberFormatException ex) @@ -528,4 +584,23 @@ public abstract class AnnotationRowFilter extends JPanel valueChanged(true); } } + + /** + * 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 + */ + protected void setSliderModel(float min, float max, float value) + { + slider.setSliderModel(min, max, value); + + /* + * tick mark every 10th position + */ + slider.setMajorTickSpacing( + (slider.getMaximum() - slider.getMinimum()) / 10); + } }