X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenSequences.java;h=9d9fa81609aa1112b652cc45afa6d812e6ddae2b;hb=4851c84266e61a5be2244cb002fdd5f02f2a4140;hp=9a7afd2fe31e7ebca8c951218880cc7604c4907a;hpb=b169b1a49c078d123feb729db6acb9779f50e7d6;p=jalview.git diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 9a7afd2..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,31 +33,90 @@ 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); } @@ -65,11 +124,14 @@ public class HiddenSequences public Vector showAll() { Vector revealedSeqs = new Vector(); - 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) { - revealedSeqs.addElement(seq); - 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); + } } + } return revealedSeqs; } - public Hashtable getHiddenSequences() - { - return hiddenSequences; - } - 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 ++; } @@ -139,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