Merge commit
[jalview.git] / src / jalview / gui / TreeCanvas.java
index 61d7d7e..1bce84b 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -22,6 +22,7 @@ package jalview.gui;
 
 import jalview.analysis.Conservation;
 import jalview.analysis.NJTree;
+import jalview.api.AlignViewportI;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
@@ -30,7 +31,9 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.UserColourScheme;
+import jalview.structure.SelectionSource;
 import jalview.util.Format;
+import jalview.util.MappingUtils;
 import jalview.util.MessageManager;
 
 import java.awt.Color;
@@ -66,7 +69,7 @@ import javax.swing.ToolTipManager;
  * @version $Revision$
  */
 public class TreeCanvas extends JPanel implements MouseListener, Runnable,
-        Printable, MouseMotionListener
+        Printable, MouseMotionListener, SelectionSource
 {
   /** DOCUMENT ME!! */
   public static final String PLACEHOLDER = " * ";
@@ -520,7 +523,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
         {
           for (int a = 0; a < aps.length; a++)
           {
-            aps[a].av.setSequenceColour((SequenceI) node.element(), c);
+            final SequenceI seq = (SequenceI) node.element();
+            aps[a].av.setSequenceColour(seq, c);
           }
         }
       }
@@ -881,12 +885,20 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
 
         AlignmentPanel[] aps = getAssociatedPanels();
 
+        // TODO push calls below into a single AlignViewportI method?
+        // see also AlignViewController.deleteGroups
         for (int a = 0; a < aps.length; a++)
         {
           aps[a].av.setSelectionGroup(null);
           aps[a].av.getAlignment().deleteAllGroups();
           aps[a].av.clearSequenceColours();
         }
+        if (av.getCodingComplement() != null)
+        {
+          av.getCodingComplement().setSelectionGroup(null);
+          av.getCodingComplement().getAlignment().deleteAllGroups();
+          av.getCodingComplement().clearSequenceColours();
+        }
         colourGroups();
       }
 
@@ -950,6 +962,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
       // sg.recalcConservation();
       sg.setName("JTreeGroup:" + sg.hashCode());
       sg.setIdColour(col);
+
       for (int a = 0; a < aps.length; a++)
       {
         if (aps[a].av.getGlobalColourScheme() != null
@@ -966,7 +979,25 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
 
         aps[a].av.getAlignment().addGroup(new SequenceGroup(sg));
       }
+
+      // TODO can we push all of the below into AlignViewportI?
+      av.getAlignment().addGroup(sg);
+      final AlignViewportI codingComplement = av.getCodingComplement();
+      if (codingComplement != null)
+      {
+        SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup(sg, av,
+                codingComplement);
+        if (mappedGroup.getSequences().size() > 0)
+        {
+          codingComplement.getAlignment().addGroup(mappedGroup);
+          for (SequenceI seq : mappedGroup.getSequences())
+          {
+            codingComplement.setSequenceColour(seq, col.brighter());
+          }
+        }
+      }
     }
+
     // notify the panel to redo any group specific stuff.
     for (int a = 0; a < aps.length; a++)
     {
@@ -975,6 +1006,13 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
       // to any Jmols listening in
     }
 
+    if (av.getCodingComplement() != null)
+    {
+      ((AlignViewport) av.getCodingComplement()).getAlignPanel().updateAnnotation();
+      /*
+       * idPanel. repaint ()
+       */
+    }
   }
 
   /**