JAL-4134 allow tree groups to be stored/recovered on contact matrix for groupwise...
[jalview.git] / src / jalview / gui / AnnotationPanel.java
index b68ff01..3aacb07 100755 (executable)
@@ -41,6 +41,7 @@ import java.awt.event.MouseWheelListener;
 import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Collections;
 import java.util.List;
 
@@ -56,6 +57,7 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.ContactListI;
+import jalview.datamodel.ContactMatrixI;
 import jalview.datamodel.ContactRange;
 import jalview.datamodel.GraphLine;
 import jalview.datamodel.HiddenColumns;
@@ -603,6 +605,26 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
         {
           GraphLine thr = aa[graphStretch].getThreshold();
           int currentX = getColumnForXPos(evt.getX());
+          ContactMatrixI matrix = av.getContactMatrix(aa[graphStretch]);
+          if (matrix!=null)
+          {
+            if (matrix.hasGroups())
+            {
+            SequenceI rseq = aa[graphStretch].sequenceRef;
+            BitSet grp = matrix.getGroupsFor(currentX);
+            ColumnSelection cs = av.getColumnSelection();
+            HiddenColumns hc = av.getAlignment().getHiddenColumns();
+            for (int p=grp.nextSetBit(0); p>=0; p = grp.nextSetBit(p+1))
+            {
+              int offp = (rseq!=null) ? rseq.findIndex(rseq.getStart()-1+p) : p;
+              
+              if (!av.hasHiddenColumns() || hc.isVisible(offp))
+              { 
+                av.getColumnSelection().addElement(offp);
+              }
+            }
+          } else 
+          {
           ContactListI forCurrentX = av.getContactList(aa[graphStretch],
                   currentX);
           if (forCurrentX != null)
@@ -662,9 +684,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
                 }
               }
             }
+            }
           }
         }
-      }
+      }}
     }
     else
     {