2 * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
3 * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 package jalview.datamodel;
23 public class HiddenSequences
26 * holds a list of hidden sequences associated with an alignment.
28 public SequenceI[] hiddenSequences;
32 public HiddenSequences(AlignmentI al)
39 if (hiddenSequences == null)
44 for (int i = 0; i < hiddenSequences.length; i++)
46 if (hiddenSequences[i] != null)
58 for (int i = 0; i < hiddenSequences.length; i++)
60 if (hiddenSequences[i] != null
61 && hiddenSequences[i].getLength() > width)
63 width = hiddenSequences[i].getLength();
71 * Call this method if sequences are removed from the main alignment
73 public void adjustHeightSequenceDeleted(int seqIndex)
75 if (hiddenSequences == null)
80 int alHeight = alignment.getHeight();
82 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
83 int deletionIndex = adjustForHiddenSeqs(seqIndex);
85 for (int i = 0; i < hiddenSequences.length; i++)
87 if (hiddenSequences[i] == null)
92 if (i > deletionIndex)
94 tmp[i - 1] = hiddenSequences[i];
98 tmp[i] = hiddenSequences[i];
102 hiddenSequences = tmp;
107 * Call this method if sequences are added to or removed from the main
110 public void adjustHeightSequenceAdded()
112 if (hiddenSequences == null)
117 int alHeight = alignment.getHeight();
119 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
120 System.arraycopy(hiddenSequences, 0, tmp, 0, hiddenSequences.length);
121 hiddenSequences = tmp;
124 public void hideSequence(SequenceI sequence)
126 if (hiddenSequences == null)
128 hiddenSequences = new SequenceI[alignment.getHeight()];
131 int alignmentIndex = alignment.findIndex(sequence);
132 alignmentIndex = adjustForHiddenSeqs(alignmentIndex);
134 if (hiddenSequences[alignmentIndex] != null)
136 System.out.println("ERROR!!!!!!!!!!!");
139 hiddenSequences[alignmentIndex] = sequence;
141 alignment.deleteSequence(sequence);
144 public Vector showAll(Hashtable hiddenReps)
146 Vector revealedSeqs = new Vector();
147 for (int i = 0; i < hiddenSequences.length; i++)
149 if (hiddenSequences[i] != null)
151 Vector tmp = showSequence(i, hiddenReps);
152 for (int t = 0; t < tmp.size(); t++)
154 revealedSeqs.addElement(tmp.elementAt(t));
161 public Vector showSequence(int alignmentIndex, Hashtable hiddenReps)
163 Vector revealedSeqs = new Vector();
164 SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);
165 if (repSequence != null && hiddenReps != null
166 && hiddenReps.containsKey(repSequence))
168 hiddenReps.remove(repSequence);
169 revealedSeqs.addElement(repSequence);
172 int start = adjustForHiddenSeqs(alignmentIndex - 1);
173 int end = adjustForHiddenSeqs(alignmentIndex);
174 if (end >= hiddenSequences.length)
176 end = hiddenSequences.length - 1;
179 for (int index = end; index > start; index--)
181 SequenceI seq = hiddenSequences[index];
182 hiddenSequences[index] = null;
186 if (seq.getLength() > 0)
188 revealedSeqs.addElement(seq);
189 alignment.getSequences().insertElementAt(seq, alignmentIndex);
193 System.out.println(seq.getName()
194 + " has been deleted whilst hidden");
203 public SequenceI getHiddenSequence(int alignmentIndex)
205 return hiddenSequences[alignmentIndex];
208 public int findIndexWithoutHiddenSeqs(int alignmentIndex)
212 if (hiddenSequences.length <= alignmentIndex)
214 alignmentIndex = hiddenSequences.length - 1;
217 while (index <= alignmentIndex)
219 if (hiddenSequences[index] != null)
227 return (alignmentIndex - hiddenSeqs);
230 public int adjustForHiddenSeqs(int alignmentIndex)
233 int hSize = hiddenSequences.length;
234 while (index <= alignmentIndex && index < hSize)
236 if (hiddenSequences[index] != null)
244 return alignmentIndex;
247 public AlignmentI getFullAlignment()
249 int isize = hiddenSequences.length;
250 SequenceI[] seq = new Sequence[isize];
253 for (int i = 0; i < hiddenSequences.length; i++)
255 if (hiddenSequences[i] != null)
257 seq[i] = hiddenSequences[i];
261 seq[i] = alignment.getSequenceAt(index);
266 return new Alignment(seq);
269 public boolean isHidden(SequenceI seq)
271 for (int i = 0; i < hiddenSequences.length; i++)
273 if (hiddenSequences[i] != null && hiddenSequences[i] == seq)