protected JCheckBox seqAssociated = new JCheckBox();
+ protected JCheckBox percentThreshold = new JCheckBox();
+
protected JSlider slider = new JSlider();
protected JTextField thresholdValue = new JTextField(20);
*/
private Map<AlignmentAnnotation, String> annotationLabels;
- private boolean enableSeqAss = false;
-
private AlignmentAnnotation currentAnnotation;
/**
* Constructor
*
- * @param av
- * @param ap
+ * @param viewport
+ * @param alignPanel
*/
- public AnnotationRowFilter(AlignViewport av, final AlignmentPanel ap)
+ public AnnotationRowFilter(AlignViewport viewport, final AlignmentPanel alignPanel)
{
- this.av = av;
- this.ap = ap;
+ this.av = viewport;
+ this.ap = alignPanel;
thresholdValue.addFocusListener(new FocusAdapter()
{
@Override
{
if (!adjusting)
{
- thresholdValue.setText((slider.getValue() / 1000f) + "");
+ setThresholdValueText();
valueChanged(!sliderDragging);
}
}
});
}
+ /**
+ * update the text field from the threshold slider. preserves state of
+ * 'adjusting' so safe to call in init.
+ */
+ protected void setThresholdValueText()
+ {
+ boolean oldadj = adjusting;
+ adjusting = true;
+ if (percentThreshold.isSelected())
+ {
+ thresholdValue.setText("" + (slider.getValue() - slider.getMinimum())
+ * 100f / (slider.getMaximum() - slider.getMinimum()));
+ }
+ else
+ {
+ thresholdValue.setText((slider.getValue() / 1000f) + "");
+ }
+ adjusting = oldadj;
+ }
protected void addSliderMouseListeners()
{
});
}
- /**
- * Builds and returns a list of menu items (display text) for choice of
- * annotation. Also builds maps between annotations, their positions in the
- * list, and their display labels in the list.
- *
- * @param isSeqAssociated
- * @return
- */
+/**
+ * Builds and returns a list of menu items (display text) for choice of
+ * annotation. Also builds maps between annotations, their positions in the
+ * list, and their display labels in the list.
+ *
+ * @param isSeqAssociated
+ * @return
+ */
public Vector<String> getAnnotationItems(boolean isSeqAssociated)
{
annotationLabels = new HashMap<AlignmentAnnotation, String>();
Vector<String> list = new Vector<String>();
int index = 1;
int[] anmap = new int[av.getAlignment().getAlignmentAnnotation().length];
+ seqAssociated.setEnabled(false);
for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)
{
AlignmentAnnotation annotation = av.getAlignment()
}
else
{
- enableSeqAss = true;
+ seqAssociated.setEnabled(true);
}
String label = annotation.label;
// add associated sequence ID if available
return selectedThresholdItem;
}
- public void modelChanged()
- {
- seqAssociated.setEnabled(enableSeqAss);
- }
-
public void ok_actionPerformed()
{
try
try
{
float f = Float.parseFloat(thresholdValue.getText());
- slider.setValue((int) (f * 1000));
+ if (percentThreshold.isSelected())
+ {
+ slider.setValue(slider.getMinimum()
+ + ((int) ((f / 100f) * (slider.getMaximum() - slider
+ .getMinimum()))));
+ }
+ else
+ {
+ slider.setValue((int) (f * 1000));
+ }
updateView();
} catch (NumberFormatException ex)
{
}
}
+ protected void percentageValue_actionPerformed()
+ {
+ setThresholdValueText();
+ }
+
protected void thresholdIsMin_actionPerformed()
{
updateView();
{
adjusting = true;
String cursel = (String) anns.getSelectedItem();
- boolean isvalid = false, isseqs = seqAssociated.isSelected();
+ boolean isvalid = false;
+ boolean isseqs = seqAssociated.isSelected();
anns.removeAllItems();
for (String anitem : getAnnotationItems(seqAssociated.isSelected()))
{
}
anns.addItem(anitem);
}
- adjusting = false;
if (isvalid)
{
anns.setSelectedItem(cursel);
anns.setSelectedIndex(0);
}
}
+ adjusting = false;
+
+ updateView();
}
protected void propagateSeqAssociatedThreshold(boolean allAnnotation,
}
}
- protected AlignmentAnnotation getCurrentAnnotation()
+ public AlignmentAnnotation getCurrentAnnotation()
{
return currentAnnotation;
}
- protected void setCurrentAnnotation(AlignmentAnnotation currentAnnotation)
+ protected void setCurrentAnnotation(AlignmentAnnotation annotation)
{
- this.currentAnnotation = currentAnnotation;
+ this.currentAnnotation = annotation;
}
protected abstract void valueChanged(boolean updateAllAnnotation);
}
});
+ percentThreshold.setText(MessageManager.getString("label.as_percentage"));
+ percentThreshold.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (!adjusting)
+ {
+ percentageValue_actionPerformed();
+ }
+ }
+ });
slider.setPaintLabels(false);
slider.setPaintTicks(true);
slider.setBackground(Color.white);