JAL-2759 HiddenColumnsCursor tests
[jalview.git] / src / jalview / datamodel / HiddenColumnsCursor.java
index 9efcc0b..b40afdf 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.datamodel;
 
 import java.util.List;
@@ -7,9 +27,6 @@ public class HiddenColumnsCursor
   // absolute position of first hidden column
   private int firstColumn;
 
-  // absolute position of last hidden column
-  private int lastColumn;
-
   // index of last visited region
   private int regionIndex;
 
@@ -43,7 +60,6 @@ public class HiddenColumnsCursor
       {
         hiddenColumns = hiddenCols;
         firstColumn = hiddenColumns.get(0)[0];
-        lastColumn = hiddenColumns.get(hiddenColumns.size() - 1)[1];
         regionIndex = 0;
         hiddenSoFar = 0;
       }
@@ -130,17 +146,29 @@ public class HiddenColumnsCursor
     // column is before current region
     else if (column < hiddenColumns.get(index)[0])
     {
-      while ((index > 0) && (hiddenColumns.get(index)[1] > column))
+      // column is before or in the previous region
+      if ((index > 0) && (hiddenColumns.get(index - 1)[1] >= column))
       {
-        index--;
-        int[] region = hiddenColumns.get(index);
-        hiddenCount -= region[1] - region[0] + 1;
+        while ((index > 0) && (hiddenColumns.get(index)[1] > column))
+        {
+          index--;
+          int[] region = hiddenColumns.get(index);
+          hiddenCount -= region[1] - region[0] + 1;
+        }
       }
     }
     updateCursor(index, hiddenCount);
     return index;
   }
 
+  /**
+   * Get the number of hidden columns in regions before column i.e. excludes
+   * hidden columns in the region column is in, if any
+   * 
+   * @param column
+   *          index of column in visible alignment
+   * @return
+   */
   protected int getHiddenOffset(int column)
   {
     if (hiddenColumns == null)
@@ -169,7 +197,7 @@ public class HiddenColumnsCursor
         index++;
       }
     }
-    else if (index < hiddenColumns.size())
+    else
     {
       while ((index > 0)
               && (hiddenColumns.get(index - 1)[1] >= column + hiddenCount))