JAL-2349 store/restore mappable contact matrix in project and fix up interactive...
[jalview.git] / src / jalview / renderer / ContactGeometry.java
index 2eb325c..ad741ff 100644 (file)
@@ -78,33 +78,38 @@ public class ContactGeometry
    * @return true if the range on the matrix specified by ci intersects with selected columns in the ContactListI's reference frame.
    */
   
-  boolean intersects(contactInterval ci,ColumnSelection columnSelection, HiddenColumns hiddenColumns,  boolean visibleOnly) {
+  boolean intersects(contactInterval ci, ColumnSelection columnSelection,
+          HiddenColumns hiddenColumns, boolean visibleOnly)
+  {
     boolean rowsel = false;
-    final int[] mappedRange = contacts.getMappedPositionsFor(ci.cStart, ci.cEnd);
-    if (mappedRange==null)
+    final int[] mappedRange = contacts.getMappedPositionsFor(ci.cStart,
+            ci.cEnd);
+    if (mappedRange == null)
     {
       return false;
     }
-    boolean containsHidden=false;
-    if (visibleOnly && hiddenColumns!=null && hiddenColumns.hasHiddenColumns())
+    for (int p = 0; p < mappedRange.length && !rowsel; p += 2)
     {
-      // TODO: turn into function on hiddenColumns and create test !!
-      Iterator<int[]> viscont = hiddenColumns
-              .getVisContigsIterator(mappedRange[0], mappedRange[1], false);
-      containsHidden = !viscont.hasNext();
-      if (!containsHidden)
+      boolean containsHidden = false;
+      if (visibleOnly && hiddenColumns != null
+              && hiddenColumns.hasHiddenColumns())
       {
-        for (int[] interval=viscont.next();viscont.hasNext();
-        rowsel |= columnSelection.intersects(interval[0],interval[1]))
-          ;
+        // TODO: turn into function on hiddenColumns and create test !!
+        Iterator<int[]> viscont = hiddenColumns.getVisContigsIterator(
+                mappedRange[p], mappedRange[p + 1], false);
+        containsHidden = !viscont.hasNext();
+        if (!containsHidden)
+        {
+          for (int[] interval = viscont.next(); viscont
+                  .hasNext(); rowsel |= columnSelection
+                          .intersects(interval[p], interval[p + 1]))
+            ;
+        }
       }
-    }
-    else
-    {
-      // if containsHidden is true mappedRange is not visible
-      if (containsHidden)
+      else
       {
-        rowsel = columnSelection.intersects(mappedRange[0], mappedRange[1]);
+        rowsel = columnSelection.intersects(mappedRange[p],
+                mappedRange[p + 1]);
       }
     }
     return rowsel;