X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenSequences.java;h=9d9fa81609aa1112b652cc45afa6d812e6ddae2b;hb=a2aa22698dd5bbcfb8578fb39c8a4e8025ac243b;hp=36c64989e80d9c9d85c6cb72bf10af213eac988c;hpb=32c056ffe34e60a1fde83bf4061af6e82d41f958;p=jalview.git diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 36c6498..9d9fa81 100755 --- a/src/jalview/datamodel/HiddenSequences.java +++ b/src/jalview/datamodel/HiddenSequences.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 @@ -23,7 +23,7 @@ import java.util.*; public class HiddenSequences { - Hashtable hiddenSequences; + public SequenceI [] hiddenSequences; AlignmentI alignment; public HiddenSequences(AlignmentI al) @@ -33,43 +33,112 @@ public class HiddenSequences public int getSize() { - return hiddenSequences == null ? 0 : hiddenSequences.size(); + if(hiddenSequences==null) + { + return 0; + } + int count = 0; + for(int i=0; iwidth) + width = hiddenSequences[i].getLength(); + + return width; + } + + /** + * Call this method if sequences are removed from the + * main alignment + */ + public void adjustHeightSequenceDeleted(int seqIndex) + { + if(hiddenSequences==null) { - SequenceI seq = (SequenceI)en.nextElement(); - if(seq.getLength()>width) - width = seq.getLength(); + return; } - return width; + + int alHeight = alignment.getHeight(); + + SequenceI [] tmp = new SequenceI [alHeight + getSize()]; + int deletionIndex = adjustForHiddenSeqs(seqIndex); + + for (int i = 0; i < hiddenSequences.length; i++) + { + if(hiddenSequences[i]==null) + continue; + + if (i > deletionIndex) + tmp[i-1] = hiddenSequences[i]; + else + tmp[i] = hiddenSequences[i]; + } + + hiddenSequences = tmp; + + } + + /** + * Call this method if sequences are added to or removed from the + * main alignment + */ + public void adjustHeightSequenceAdded() + { + if(hiddenSequences==null) + { + return; + } + + int alHeight = alignment.getHeight(); + + SequenceI [] tmp = new SequenceI [alHeight + getSize()]; + System.arraycopy(hiddenSequences,0,tmp,0,hiddenSequences.length); + hiddenSequences = tmp; } + public void hideSequence(SequenceI sequence) { if(hiddenSequences==null) - hiddenSequences = new Hashtable(); + hiddenSequences = new SequenceI[alignment.getHeight()]; int alignmentIndex = alignment.findIndex(sequence); alignmentIndex = adjustForHiddenSeqs(alignmentIndex); - hiddenSequences.put(new Integer(alignmentIndex), sequence); + if(hiddenSequences[alignmentIndex]!=null) + System.out.println("ERROR!!!!!!!!!!!"); + + hiddenSequences[alignmentIndex] = sequence; alignment.deleteSequence(sequence); } - public void showAll() + public Vector showAll() { - for(int i=0; i=hiddenSequences.length) + end = hiddenSequences.length-1; for(int index = end; index > start; index--) { - SequenceI seq = (SequenceI)hiddenSequences.remove(new Integer( - index)); + SequenceI seq = hiddenSequences[index]; + hiddenSequences[index] = null; if(seq!=null) { - alignment.getSequences().insertElementAt(seq, alignmentIndex); - if(repSequence!=null) - { - repSequence.showHiddenSequence(seq); - } + if(seq.getLength()>0) + { + revealedSeqs.addElement(seq); + alignment.getSequences().insertElementAt(seq, alignmentIndex); + } + else + System.out.println(seq.getName()+" has been deleted whilst hidden"); + + if (repSequence != null) + { + repSequence.showHiddenSequence(seq); + } } + } - } - public Hashtable getHiddenSequences() - { - return hiddenSequences; + return revealedSeqs; } public SequenceI getHiddenSequence(int alignmentIndex) { - return (SequenceI)hiddenSequences.get(new Integer(alignmentIndex)); + return hiddenSequences[alignmentIndex]; } public int findIndexWithoutHiddenSeqs(int alignmentIndex) { int index = 0; int hiddenSeqs = 0; + if(hiddenSequences.length<=alignmentIndex) + alignmentIndex = hiddenSequences.length-1; + while(index <= alignmentIndex) { - if(hiddenSequences.containsKey(new Integer(index))) + if(hiddenSequences[index]!=null) { hiddenSeqs ++; } @@ -128,40 +207,35 @@ public class HiddenSequences public int adjustForHiddenSeqs(int alignmentIndex) { int index = 0; - while(index <= alignmentIndex) + int hSize = hiddenSequences.length; + while(index <= alignmentIndex && index