X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FRedundancyPanel.java;h=ec896d596f591b07148f892554478e05e3750da8;hb=7a102b1d0f6fde3df2d8c79d6e51edd9529bfd29;hp=78d842450b161d11cacf8f114cc20de3b1d49764;hpb=df9b85c1cf39894039018499fe802406cc37f209;p=jalview.git diff --git a/src/jalview/gui/RedundancyPanel.java b/src/jalview/gui/RedundancyPanel.java index 78d8424..ec896d5 100755 --- a/src/jalview/gui/RedundancyPanel.java +++ b/src/jalview/gui/RedundancyPanel.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -19,15 +19,16 @@ package jalview.gui; import jalview.datamodel.*; - import jalview.jbgui.*; +import jalview.util.Comparison; +import jalview.commands.*; import java.awt.event.*; import java.util.*; import javax.swing.event.*; -import jalview.util.Comparison; + import javax.swing.*; @@ -43,9 +44,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable AlignmentPanel ap; Stack historyList = new Stack(); // simpler than synching with alignFrame. float [] redundancy; - Vector originalSequences; - Hashtable originalColours; + SequenceI [] originalSequences; JInternalFrame frame; + Vector redundantSeqs; /** * Creates a new RedundancyPanel object. @@ -53,10 +54,11 @@ public class RedundancyPanel extends GSliderPanel implements Runnable * @param ap DOCUMENT ME! * @param af DOCUMENT ME! */ - public RedundancyPanel(AlignmentPanel ap, AlignFrame af) + public RedundancyPanel(final AlignmentPanel ap, AlignFrame af) { this.ap = ap; this.af = af; + redundantSeqs = new Vector(); slider.addChangeListener(new ChangeListener() { @@ -69,7 +71,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable applyButton.setText("Remove"); allGroupsCheck.setVisible(false); - slider.setMinimum(60); + slider.setMinimum(0); slider.setMaximum(100); slider.setValue(100); @@ -84,7 +86,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable { public void internalFrameClosing(InternalFrameEvent evt) { - resetColours(); + ap.idPanel.idCanvas.setHighlighted(null); } } ); @@ -116,63 +118,66 @@ public class RedundancyPanel extends GSliderPanel implements Runnable validate(); - Vector sel = new Vector(); + String[] omitHidden = null; + SequenceGroup sg = ap.av.getSelectionGroup(); int height; - originalSequences = new Vector(); - originalColours = new Hashtable(); + + int start, end; if ( (sg != null) && (sg.getSize(false) >= 1)) { - height = sg.getSize(false); - for (int i = 0; i < sg.getSize(false); i++) - { - sel.addElement(sg.getSequenceAt(i)); - } + originalSequences = sg.getSequencesInOrder(ap.av.alignment); + start = sg.getStartRes(); + end = sg.getEndRes(); } else { - height = ap.av.alignment.getHeight(); - for (int i = 0; i < ap.av.alignment.getHeight(); i++) - { - sel.addElement(ap.av.alignment.getSequenceAt(i)); - } + originalSequences = ap.av.alignment.getSequencesArray(); + start = 0; + end = ap.av.alignment.getWidth(); } + height = originalSequences.length; + redundancy = new float[height]; for (int i = 0; i < height; i++) { redundancy[i] = 0f; } + if (ap.av.hasHiddenColumns) + { + omitHidden = ap.av.getViewAsString(sg!=null); + } + // long start = System.currentTimeMillis(); float pid; - SequenceI seqi, seqj; - for (int i = 0; i < sel.size(); i++) + String seqi, seqj; + for (int i = 0; i < height; i++) { - originalSequences.addElement(sel.elementAt(i)); - originalColours.put(sel.elementAt(i), - ((SequenceI) sel.elementAt(i)).getColor()); for (int j = 0; j < i; j++) { if(i==j) continue; - seqi = (SequenceI) sel.elementAt(i); - seqj = (SequenceI) sel.elementAt(j); - - if (sg != null) - pid = Comparison.PID( seqi, - seqj, - sg.getStartRes(), sg.getEndRes()); + if(omitHidden==null) + { + seqi = originalSequences[i].getSequence(start, end); + seqj = originalSequences[j].getSequence(start, end); + } else - pid = Comparison.PID( seqi, seqj ); + { + seqi = omitHidden[i]; + seqj = omitHidden[j]; + } + pid = Comparison.PID( seqi, seqj ); - if(seqj.getLength() < seqi.getLength()) + if(seqj.length() < seqi.length()) redundancy[j] = Math.max(pid, redundancy[j]); else redundancy[i] = Math.max(pid, redundancy[i]); @@ -180,7 +185,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable } } - progress.setIndeterminate(false); progress.setVisible(false); progress = null; @@ -191,7 +195,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable valueField.setVisible(true); validate(); - // System.out.println("blob done "+ (System.currentTimeMillis()-start)); + // System.out.println((System.currentTimeMillis()-start)); } void sliderValueChanged() @@ -204,13 +208,13 @@ public class RedundancyPanel extends GSliderPanel implements Runnable for(int i=0; i redundancy[i]) - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.white); - else - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.red); - } + redundantSeqs.remove(originalSequences[i]); + else if(!redundantSeqs.contains(originalSequences[i])) + redundantSeqs.add(originalSequences[i]); - PaintRefresher.Refresh(null,ap.av.alignment); + } + ap.idPanel.idCanvas.setHighlighted(redundantSeqs); } /** @@ -220,16 +224,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable */ public void applyButton_actionPerformed(ActionEvent e) { - historyList.push(new HistoryItem("Remove redundancy", - ap.av.alignment, HistoryItem.HIDE)); - - if ((historyList.size() == 1) || - !af.historyList.contains(historyList.firstElement())) - { - af.addHistoryItem((HistoryItem) historyList.firstElement()); - af.updateEditMenuBar(); - } - Vector del = new Vector(); undoButton.setEnabled(true); @@ -241,43 +235,51 @@ public class RedundancyPanel extends GSliderPanel implements Runnable { if (value <= redundancy[i]) { - SequenceI seq = (SequenceI) originalSequences.elementAt(i); - ap.av.alignment.deleteSequence(seq); - del.add(seq); - if (sg != null) - { - sg.deleteSequence(seq, false); - } + del.addElement(originalSequences[i]); } } - // 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 < j; i++) + SequenceI [] deleted = new SequenceI[del.size()]; + + int width = 0; + for (int i = 0; i < del.size(); i++) + { + deleted[i] = (SequenceI)del.elementAt(i); + if(deleted[i].getLength()>width) + width = deleted[i].getLength(); + } + + EditCommand cut = new EditCommand("Remove Redundancy", + EditCommand.CUT, deleted,0,width,ap.av.alignment); + + for (int i = 0; i < del.size(); i++) + { + ap.av.alignment.deleteSequence( deleted[i] ); + PaintRefresher.Refresh(this, + ap.av.getSequenceSetId(), + true, + true); + if (sg != null) { - SequenceI sq = (SequenceI) del.elementAt(i); - sq.deleteChars(0, sq.getLength()); + sg.deleteSequence(deleted[i], false); } - } + } - ap.av.firePropertyChange("alignment", null, ap.av.getAlignment().getSequences()); - af.updateEditMenuBar(); - } + historyList.push(cut); + + ap.alignFrame.addHistoryItem(cut); + + ap.av.firePropertyChange("alignment", null, ap.av.getAlignment().getSequences()); + } - void resetColours() - { - for(int i=0; i