setAlignment(al);\r
init();\r
}\r
+ /**\r
+ * Create a new AlignViewport with hidden regions\r
+ * @param al AlignmentI\r
+ * @param hiddenColumns ColumnSelection\r
+ */\r
+ public AlignViewport(AlignmentI al, ColumnSelection hiddenColumns) {\r
+ setAlignment(al);\r
+ if (hiddenColumns!=null) {\r
+ this.colSel = hiddenColumns;\r
+ if (hiddenColumns.getHiddenColumns() != null)\r
+ hasHiddenColumns = true;\r
+ }\r
+ init();\r
+ }\r
\r
void init()\r
{\r
return increment;\r
}\r
\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param y DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public int getIndex(int y)\r
- {\r
- int y1 = 0;\r
- int starty = getStartSeq();\r
- int endy = getEndSeq();\r
-\r
- for (int i = starty; i <= endy; i++)\r
- {\r
- if ((i < alignment.getHeight()) &&\r
- (alignment.getSequenceAt(i) != null))\r
- {\r
- int y2 = y1 + getCharHeight();\r
-\r
- if ((y >= y1) && (y <= y2))\r
- {\r
- return i;\r
- }\r
-\r
- y1 = y2;\r
- }\r
- else\r
- {\r
- return -1;\r
- }\r
- }\r
-\r
- return -1;\r
- }\r
\r
/**\r
* DOCUMENT ME!\r
colSel.hideColumns(start);\r
else\r
colSel.hideColumns(start, end);\r
- setSelectionGroup(null);\r
+\r
hasHiddenColumns = true;\r
}\r
\r
+ public void hideAllSelectedSeqs()\r
+ {\r
+ if (selectionGroup == null)\r
+ return;\r
+\r
+ SequenceI[] seqs = selectionGroup.getSequencesInOrder(alignment);\r
+\r
+ for (int i = 0; i < seqs.length; i++)\r
+ {\r
+ alignment.getHiddenSequences().hideSequence(seqs[i]);\r
+ }\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
+ hasHiddenRows = true;\r
+ setSelectionGroup(null);\r
+ }\r
+\r
public void hideSequence(SequenceI seq)\r
{\r
if(seq!=null)\r
{\r
alignment.getHiddenSequences().hideSequence(seq);\r
hasHiddenRows = true;\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
}\r
}\r
\r
public void showSequence(int index)\r
{\r
- alignment.getHiddenSequences().showSequence(index);\r
+ Vector tmp = alignment.getHiddenSequences().showSequence(index);\r
+ if(tmp.size()>0)\r
+ {\r
+ if(selectionGroup==null)\r
+ {\r
+ selectionGroup = new SequenceGroup();\r
+ selectionGroup.setEndRes(alignment.getWidth()-1);\r
+ }\r
+\r
+ for (int t = 0; t < tmp.size(); t++)\r
+ {\r
+ selectionGroup.addSequence(\r
+ (SequenceI) tmp.elementAt(t), false\r
+ );\r
+ }\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
+ }\r
\r
if(alignment.getHiddenSequences().getSize()<1)\r
hasHiddenRows = false;\r
{\r
if(alignment.getHiddenSequences().getSize()>0)\r
{\r
- alignment.getHiddenSequences().showAll();\r
+ if(selectionGroup==null)\r
+ {\r
+ selectionGroup = new SequenceGroup();\r
+ selectionGroup.setEndRes(alignment.getWidth()-1);\r
+ }\r
+ Vector tmp = alignment.getHiddenSequences().showAll();\r
+ for(int t=0; t<tmp.size(); t++)\r
+ {\r
+ selectionGroup.addSequence(\r
+ (SequenceI)tmp.elementAt(t), false\r
+ );\r
+ }\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
hasHiddenRows = false;\r
}\r
}\r
\r
+ public void invertColumnSelection()\r
+ {\r
+ int column;\r
+ for(int i=0; i<alignment.getWidth(); i++)\r
+ {\r
+ column = i;\r
+\r
+ if(colSel.contains(column))\r
+ colSel.removeElement(column);\r
+ else\r
+ colSel.addElement(column);\r
+\r
+ }\r
+\r
+ }\r
+\r
public int adjustForHiddenSeqs(int alignmentIndex)\r
{\r
return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex);\r
return sequences;\r
}\r
\r
+ /**\r
+ * This method returns the visible alignment as text, as\r
+ * seen on the GUI, ie if columns are hidden they will not\r
+ * be returned in the result.\r
+ * Use this for calculating trees, PCA, redundancy etc on views\r
+ * which contain hidden columns.\r
+ * @return String[]\r
+ */\r
+ public jalview.datamodel.CigarArray getViewAsCigars(boolean selectedRegionOnly)\r
+ {\r
+ CigarArray selection=null;\r
+ SequenceI [] seqs= null;\r
+ int i, iSize;\r
+ int start = 0, end = 0;\r
+ if(selectedRegionOnly && selectionGroup!=null)\r
+ {\r
+ iSize = selectionGroup.getSize(false);\r
+ seqs = selectionGroup.getSequencesInOrder(alignment);\r
+ start = selectionGroup.getStartRes();\r
+ end = selectionGroup.getEndRes(); // inclusive for start and end in SeqCigar constructor\r
+ }\r
+ else\r
+ {\r
+ iSize = alignment.getHeight();\r
+ seqs = alignment.getSequencesArray();\r
+ end = alignment.getWidth()-1;\r
+ }\r
+ SeqCigar[] selseqs = new SeqCigar[iSize];\r
+ for(i=0; i<iSize; i++)\r
+ {\r
+ selseqs[i] = new SeqCigar(seqs[i], start, end);\r
+ }\r
+ selection=new CigarArray(selseqs);\r
+ // now construct the CigarArray operations\r
+ if (hasHiddenColumns) {\r
+ Vector regions = colSel.getHiddenColumns();\r
+ int [] region;\r
+ int hideStart, hideEnd;\r
+ int last=start;\r
+ for (int j = 0; last<end & j < regions.size(); j++)\r
+ {\r
+ region = (int[]) regions.elementAt(j);\r
+ hideStart = region[0];\r
+ hideEnd = region[1];\r
+ // edit hidden regions to selection range\r
+ if(hideStart<last) {\r
+ if (hideEnd > last)\r
+ {\r
+ hideStart = last;\r
+ } else\r
+ continue;\r
+ }\r
\r
+ if (hideStart>end)\r
+ break;\r
+\r
+ if (hideEnd>end)\r
+ hideEnd=end;\r
+\r
+ if (hideStart>hideEnd)\r
+ break;\r
+ /**\r
+ * form operations...\r
+ */\r
+ if (last<hideStart)\r
+ selection.addOperation(CigarArray.M, hideStart-last);\r
+ selection.addOperation(CigarArray.D, 1+hideEnd-hideStart);\r
+ last = hideEnd+1;\r
+ }\r
+ // Final match if necessary.\r
+ if (last<end)\r
+ selection.addOperation(CigarArray.M, end-last);\r
+ } else {\r
+ selection.addOperation(CigarArray.M, end-start);\r
+ }\r
+ return selection;\r
+ }\r
+ /**\r
+ * return a compact representation of the current alignment selection to\r
+ * pass to an analysis function\r
+ * @param selectedOnly boolean true to just return the selected view\r
+ * @return AlignmentView\r
+ */\r
+ jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly) {\r
+ // JBPNote:\r
+ // this is here because the AlignmentView constructor modifies the CigarArray\r
+ // object. Refactoring of Cigar and alignment view representation should\r
+ // be done to remove redundancy.\r
+ CigarArray aligview = getViewAsCigars(selectedOnly);\r
+ if (aligview!=null)\r
+ return new AlignmentView(aligview);\r
+ return null;\r
+ }\r
/**\r
* This method returns the visible alignment as text, as\r
* seen on the GUI, ie if columns are hidden they will not\r