1.1 compatible
[jalview.git] / src / jalview / datamodel / ColumnSelection.java
index ad66894..8c30d45 100644 (file)
@@ -18,6 +18,8 @@
  */\r
 package jalview.datamodel;\r
 \r
+import jalview.util.ShiftList;\r
+\r
 import java.util.*;\r
 \r
 /**\r
@@ -31,20 +33,21 @@ public class ColumnSelection
     Vector hiddenColumns;\r
 \r
     /**\r
-     * DOCUMENT ME!\r
+     * Add a column to the selection\r
      *\r
-     * @param col DOCUMENT ME!\r
+     * @param col index of column\r
      */\r
     public void addElement(int col)\r
     {\r
-        if (!selected.contains(new Integer(col)))\r
+        Integer column = new Integer(col);\r
+        if (!selected.contains(column))\r
         {\r
-            selected.addElement(new Integer(col));\r
+            selected.addElement(column);\r
         }\r
     }\r
 \r
     /**\r
-     * DOCUMENT ME!\r
+     * clears column selection\r
      */\r
     public void clear()\r
     {\r
@@ -52,9 +55,9 @@ public class ColumnSelection
     }\r
 \r
     /**\r
-     * DOCUMENT ME!\r
+     * removes col from selection\r
      *\r
-     * @param col DOCUMENT ME!\r
+     * @param col index of column to be removed\r
      */\r
     public void removeElement(int col)\r
     {\r
@@ -66,6 +69,11 @@ public class ColumnSelection
         }\r
     }\r
 \r
+    /**\r
+     * removes a range of columns from the selection\r
+     * @param start int - first column in range to be removed\r
+     * @param end int - last col\r
+     */\r
     public void removeElements(int start, int end)\r
     {\r
       Integer colInt;\r
@@ -78,18 +86,20 @@ public class ColumnSelection
         }\r
       }\r
     }\r
-\r
+    /**\r
+     *\r
+     * @return Vector containing selected columns as Integers\r
+     */\r
     public Vector getSelected()\r
     {\r
       return selected;\r
     }\r
 \r
     /**\r
-     * DOCUMENT ME!\r
      *\r
-     * @param col DOCUMENT ME!\r
+     * @param col index to search for in column selection\r
      *\r
-     * @return DOCUMENT ME!\r
+     * @return true if Integer(col) is in selection.\r
      */\r
     public boolean contains(int col)\r
     {\r
@@ -160,10 +170,10 @@ public class ColumnSelection
 \r
 \r
     /**\r
-     * DOCUMENT ME!\r
+     * propagate shift in alignment columns to column selection\r
      *\r
-     * @param start DOCUMENT ME!\r
-     * @param change DOCUMENT ME!\r
+     * @param start beginning of edit\r
+     * @param change shift in edit (-ve or +ve number of columns)\r
      */\r
     public void compensateForEdit(int start, int change)\r
     {\r
@@ -194,7 +204,19 @@ public class ColumnSelection
           }\r
         }\r
     }\r
-\r
+    public ShiftList compensateForEdits(ShiftList shiftrecord) {\r
+      if (shiftrecord!=null) {\r
+        Vector shifts = shiftrecord.shifts;\r
+        if (shifts!=null && shifts.size()>0) {\r
+          for (int i=0,j=shifts.size(); i<j; i++) {\r
+            int[] sh = (int[]) shifts.elementAt(i);\r
+            compensateForEdit(sh[0], sh[1]);\r
+          }\r
+        }\r
+        return shiftrecord.getInverse();\r
+      }\r
+      return null;\r
+    }\r
     /**\r
      * This Method is used to return all the HiddenColumn regions\r
      * less than the given index.\r
@@ -205,7 +227,11 @@ public class ColumnSelection
     {\r
       return hiddenColumns;\r
     }\r
-\r
+    /**\r
+     * Return absolute column index for a visible column index\r
+     * @param column int column index in alignment view\r
+     * @return alignment column index for column\r
+     */\r
     public int adjustForHiddenColumns(int column)\r
     {\r
       int result = column;\r
@@ -331,6 +357,7 @@ public class ColumnSelection
       }\r
 \r
       return alPos;\r
+\r
     }\r
 \r
     public void hideSelectedColumns()\r
@@ -405,7 +432,7 @@ public class ColumnSelection
         for (int i = 0; i < hiddenColumns.size(); i++)\r
         {\r
           int[] region = (int[]) hiddenColumns.elementAt(i);\r
-          for (int j = region[0]; j < region[1]; j++)\r
+          for (int j = region[0]; j < region[1]+1; j++)\r
           {\r
             addElement(j);\r
           }\r
@@ -422,7 +449,7 @@ public class ColumnSelection
         int [] region = (int[])hiddenColumns.elementAt(i);\r
         if( res == region[0])\r
         {\r
-          for (int j = region[0]; j < region[1]; j++)\r
+          for (int j = region[0]; j < region[1]+1; j++)\r
           {\r
             addElement(j);\r
           }\r
@@ -447,5 +474,37 @@ public class ColumnSelection
       }\r
       return true;\r
     }\r
+    /**\r
+     * Copy constructor\r
+     * @param copy\r
+     */\r
+    public ColumnSelection(ColumnSelection copy) {\r
+      if (copy!=null) {\r
+        if (copy.selected!=null) {\r
+          selected = new Vector();\r
+          for (int i=0,j=copy.selected.size(); i<j; i++) {\r
+            selected.setElementAt(((Integer) copy.selected.elementAt(i)), i);\r
+          }\r
+        }\r
+        if (copy.hiddenColumns!=null) {\r
+          hiddenColumns=new Vector();\r
+          for (int i=0,j=copy.hiddenColumns.size(); i<j; i++) {\r
+            int[] rh,cp;\r
+            rh = (int[])copy.hiddenColumns.elementAt(i);\r
+            if (rh!=null) {\r
+              cp = new int[rh.length];\r
+              System.arraycopy(rh, 0, cp, 0, rh.length);\r
+              hiddenColumns.setElementAt(cp, i);\r
+            }\r
+          }\r
+        }\r
+      }\r
+    }\r
 \r
+  /**\r
+   * ColumnSelection\r
+   */\r
+  public ColumnSelection()\r
+  {\r
+  }\r
 }\r