Invert column selection
[jalview.git] / src / jalview / gui / AlignViewport.java
index f8be001..2dd5fda 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
@@ -1147,6 +1161,22 @@ public class AlignViewport
       }\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
@@ -1188,13 +1218,13 @@ public class AlignViewport
         iSize = selectionGroup.getSize(false);\r
         seqs = selectionGroup.getSequencesInOrder(alignment);\r
         start = selectionGroup.getStartRes();\r
-        end = selectionGroup.getEndRes()+1;\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();\r
+        end = alignment.getWidth()-1;\r
       }\r
       SeqCigar[] selseqs = new SeqCigar[iSize];\r
       for(i=0; i<iSize; i++)\r
@@ -1202,13 +1232,9 @@ public class AlignViewport
         selseqs[i] = new SeqCigar(seqs[i], start, end);\r
       }\r
       selection=new CigarArray(selseqs);\r
-\r
-      int[] hiddenregions = null;\r
-      char[] hr_ops = null;\r
+      // now construct the CigarArray operations\r
       if (hasHiddenColumns) {\r
-        Vector _hiddenregions = new Vector();\r
         Vector regions = colSel.getHiddenColumns();\r
-        int blockStart = start, blockEnd=end;\r
         int [] region;\r
         int hideStart, hideEnd;\r
         int last=start;\r
@@ -1250,7 +1276,22 @@ public class AlignViewport
       }\r
       return selection;\r
     }\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