boolean scaleRightWrapped = true;\r
boolean hasHiddenColumns = false;\r
boolean hasHiddenRows = false;\r
+ boolean showHiddenMarkers = true;\r
\r
boolean cursorMode = false;\r
\r
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
return isDataset;\r
}\r
\r
- public void hideSequence(SequenceI seq)\r
+\r
+ public void hideSelectedColumns()\r
{\r
- alignment.getHiddenSequences().hideSequence(seq);\r
+ if (colSel.size() < 1)\r
+ return;\r
+\r
+ colSel.hideSelectedColumns();\r
+ setSelectionGroup(null);\r
+\r
+ hasHiddenColumns = true;\r
+ }\r
+\r
+\r
+ public void hideColumns(int start, int end)\r
+ {\r
+ if(start==end)\r
+ colSel.hideColumns(start);\r
+ else\r
+ colSel.hideColumns(start, end);\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
\r
+ public void showColumn(int col)\r
+ {\r
+ colSel.revealHiddenColumns(col);\r
+ if(colSel.getHiddenColumns()==null)\r
+ hasHiddenColumns = false;\r
+ }\r
+\r
+ public void showAllHiddenColumns()\r
+ {\r
+ colSel.revealAllHiddenColumns();\r
+ hasHiddenColumns = false;\r
+ }\r
+\r
public void showAllHiddenSeqs()\r
{\r
- alignment.getHiddenSequences().showAll();\r
- hasHiddenRows = false;\r
+ if(alignment.getHiddenSequences().getSize()>0)\r
+ {\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
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 selected area as text, as\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 String [] getSelectionAsString()\r
+ public String [] getViewAsString(boolean selectedRegionOnly)\r
{\r
String [] selection = null;\r
SequenceI [] seqs= null;\r
int i, iSize;\r
int start = 0, end = 0;\r
- if(selectionGroup!=null)\r
+ if(selectedRegionOnly && selectionGroup!=null)\r
{\r
iSize = selectionGroup.getSize(false);\r
seqs = selectionGroup.getSequencesInOrder(alignment);\r
{\r
selection[i] = seqs[i].getSequence(start, end);\r
}\r
-\r
- // System.out.println(seqs[i].getName()+"\t"+ selection[i]);\r
}\r
\r
return selection;\r
}\r
+\r
+ public boolean getShowHiddenMarkers()\r
+ {\r
+ return showHiddenMarkers;\r
+ }\r
+\r
+ public void setShowHiddenMarkers(boolean show)\r
+ {\r
+ showHiddenMarkers = show;\r
+ }\r
}\r