Set wrapped mode even if false
[jalview.git] / src / jalview / gui / AlignViewport.java
index 1970181..fde4d90 100755 (executable)
@@ -121,6 +121,20 @@ public class AlignViewport
         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
@@ -873,41 +887,6 @@ public class AlignViewport
         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
@@ -1126,12 +1105,9 @@ public class AlignViewport
       if (colSel.size() < 1)\r
         return;\r
 \r
-      while (colSel.size() > 0)\r
-      {\r
-        int column = ( (Integer) colSel.getSelected().firstElement()).intValue();\r
-        colSel.hideColumns(column);\r
-      }\r
+      colSel.hideSelectedColumns();\r
       setSelectionGroup(null);\r
+\r
       hasHiddenColumns = true;\r
     }\r
 \r
@@ -1139,14 +1115,9 @@ public class AlignViewport
     public void hideColumns(int start, int end)\r
     {\r
       if(start==end)\r
-        end++;\r
-\r
-      for(int i=start; i<end; i++)\r
-      {\r
-        colSel.addElement(i);\r
-        colSel.hideColumns(i);\r
-      }\r
-\r
+        colSel.hideColumns(start);\r
+      else\r
+        colSel.hideColumns(start, end);\r
       setSelectionGroup(null);\r
       hasHiddenColumns = true;\r
     }\r
@@ -1171,7 +1142,7 @@ public class AlignViewport
     public void showColumn(int col)\r
     {\r
       colSel.revealHiddenColumns(col);\r
-      if(colSel.size()<1)\r
+      if(colSel.getHiddenColumns()==null)\r
         hasHiddenColumns = false;\r
     }\r
 \r
@@ -1212,7 +1183,99 @@ public class AlignViewport
       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