package jalview.gui; import jalview.jbgui.*; import jalview.datamodel.*; import java.awt.event.*; import java.util.*; import javax.swing.event.*; public class RedundancyPanel extends GSliderPanel { AlignFrame af; AlignmentPanel ap; Stack historyList = new Stack(); // simpler than synching with alignFrame. public RedundancyPanel(AlignmentPanel ap, AlignFrame af) { this.ap = ap; this.af = af; label.setText("Enter the redundancy threshold"); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent evt) { valueField.setText(slider.getValue() + ""); } }); slider.setMinimum(0); slider.setMaximum(100); slider.setValue(100); } public void applyButton_actionPerformed(ActionEvent e) { float threshold = slider.getValue(); Vector del; historyList.push(new HistoryItem("Remove redundancy (" + threshold + "%)", ap.av.alignment, HistoryItem.HIDE)); undoButton.setEnabled(true); SequenceGroup sg = ap.av.getSelectionGroup(); if (sg != null && sg.getSize() >= 1) { del = ap.av.alignment.removeRedundancy(threshold, sg.sequences); for (int i = 0; i < del.size(); i++) { if (sg.sequences.contains( (SequenceI) del.elementAt(i))) { sg.deleteSequence( (SequenceI) del.elementAt(i)); } } } else { Vector s = new Vector(); int i = 0; while (i < ap.av.alignment.getHeight()) { s.addElement(ap.av.alignment.getSequenceAt(i)); i++; } del = ap.av.alignment.removeRedundancy(threshold, s); } // This has to be done before the restoreHistoryItem method of alignFrame will // actually restore these sequences. if (del.size()>0) for (int i=0,j=del.size(); i