+\r
+ public String[] getVisibleSequenceStrings(int start, int end, SequenceI[] seqs) {\r
+ int i,iSize=seqs.length;\r
+ String selection[] = new String[iSize];\r
+ if (hiddenColumns!=null && hiddenColumns.size()>0)\r
+ {\r
+ for (i=0; i<iSize; i++) {\r
+ StringBuffer visibleSeq = new StringBuffer();\r
+ Vector regions = getHiddenColumns();\r
+\r
+ int blockStart = start, blockEnd=end;\r
+ int [] region;\r
+ int hideStart, hideEnd;\r
+\r
+ for (int j = 0; j < regions.size(); j++)\r
+ {\r
+ region = (int[]) regions.elementAt(j);\r
+ hideStart = region[0];\r
+ hideEnd = region[1];\r
+\r
+ if(hideStart < start)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ blockStart = Math.min(blockStart, hideEnd+1);\r
+ blockEnd = Math.min(blockEnd, hideStart);\r
+\r
+ if(blockStart>blockEnd)\r
+ {\r
+ break;\r
+ }\r
+\r
+\r
+ visibleSeq.append(seqs[i].getSequence(blockStart, blockEnd));\r
+\r
+ blockStart = hideEnd+1;\r
+ blockEnd = end;\r
+ }\r
+\r
+ if(end>blockStart)\r
+ visibleSeq.append(seqs[i].getSequence(blockStart, end));\r
+\r
+ selection[i] = visibleSeq.toString();\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for(i=0; i<iSize; i++)\r
+ {\r
+ selection[i] = seqs[i].getSequenceAsString(start, end);\r
+ }\r
+ }\r
+\r
+ return selection;\r
+ }\r
+ /**\r
+ * return all visible segments between the given start and end boundaries\r
+ *\r
+ * @param start (first column inclusive from 0)\r
+ * @param end (last column - not inclusive)\r
+ * @return int[] {i_start, i_end, ..} where intervals lie in start<=i_start<=i_end<end\r
+ */\r
+ public int[] getVisibleContigs(int start, int end) {\r
+ if (hiddenColumns!=null && hiddenColumns.size()>0)\r
+ {\r
+ Vector visiblecontigs=new Vector();\r
+ Vector regions = getHiddenColumns();\r
+\r
+ int vstart = start;\r
+ int [] region;\r
+ int hideStart, hideEnd;\r
+\r
+ for (int j = 0; vstart<end && j < regions.size(); j++)\r
+ {\r
+ region = (int[]) regions.elementAt(j);\r
+ hideStart = region[0];\r
+ hideEnd = region[1];\r
+\r
+ if(hideEnd < vstart)\r
+ {\r
+ continue;\r
+ }\r
+ if (hideStart>vstart) {\r
+ visiblecontigs.addElement(new int[] {vstart, hideStart-1});\r
+ }\r
+ vstart=hideEnd+1;\r
+ }\r
+\r
+ if(vstart<end)\r
+ visiblecontigs.addElement(new int[] { vstart, end-1});\r
+ int[] vcontigs = new int[visiblecontigs.size()*2];\r
+ for (int i=0,j=visiblecontigs.size(); i<j; i++) {\r
+ int [] vc = (int[]) visiblecontigs.elementAt(i);\r
+ visiblecontigs.setElementAt(null, i);\r
+ vcontigs[i*2] = vc[0];\r
+ vcontigs[i*2+1] = vc[1];\r
+ }\r
+ visiblecontigs.removeAllElements();\r
+ return vcontigs;\r
+ }\r
+ else\r
+ {\r
+ return new int[] { start, end-1 };\r
+ }\r
+ }\r