JAL-1551 formatting
[jalview.git] / src / jalview / appletgui / TreeCanvas.java
index f0e7b62..e8d8363 100755 (executable)
@@ -1,32 +1,52 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
- * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
  * 
- * This program 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 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
  * 
- * This program 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.
+ * 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.appletgui;
 
-import java.util.*;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import jalview.analysis.*;
-import jalview.datamodel.*;
-import jalview.schemes.*;
-import jalview.util.*;
+import jalview.analysis.Conservation;
+import jalview.analysis.NJTree;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.datamodel.SequenceNode;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.UserColourScheme;
+import jalview.util.Format;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Panel;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.ScrollPane;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
 
 public class TreeCanvas extends Panel implements MouseListener,
         MouseMotionListener
@@ -65,9 +85,12 @@ public class TreeCanvas extends Panel implements MouseListener,
 
   SequenceNode highlightNode;
 
-  public TreeCanvas(AlignViewport av, ScrollPane scroller)
+  AlignmentPanel ap;
+
+  public TreeCanvas(AlignmentPanel ap, ScrollPane scroller)
   {
-    this.av = av;
+    this.ap = ap;
+    this.av = ap.av;
     font = av.getFont();
     scrollPane = scroller;
     addMouseListener(this);
@@ -86,7 +109,7 @@ public class TreeCanvas extends Panel implements MouseListener,
       av.setSelectionGroup(selected);
     }
 
-    selected.setEndRes(av.alignment.getWidth() - 1);
+    selected.setEndRes(av.getAlignment().getWidth() - 1);
     selected.addOrRemove(sequence, true);
   }
 
@@ -142,7 +165,7 @@ public class TreeCanvas extends Panel implements MouseListener,
 
       if (node.element() instanceof SequenceI)
       {
-        SequenceI seq = (SequenceI) ((SequenceNode) node).element();
+        SequenceI seq = (SequenceI) node.element();
 
         if (av.getSequenceColour(seq) == Color.white)
         {
@@ -185,8 +208,7 @@ public class TreeCanvas extends Panel implements MouseListener,
       }
 
       String name = (markPlaceholders && node.isPlaceholder()) ? (PLACEHOLDER + node
-              .getName())
-              : node.getName();
+              .getName()) : node.getName();
       FontMetrics fm = g.getFontMetrics(font);
       int charWidth = fm.stringWidth(name) + 3;
       int charHeight = fm.getHeight();
@@ -194,13 +216,12 @@ public class TreeCanvas extends Panel implements MouseListener,
       Rectangle rect = new Rectangle(xend + 10, ypos - charHeight,
               charWidth, charHeight);
 
-      nameHash.put((SequenceI) node.element(), rect);
+      nameHash.put(node.element(), rect);
 
       // Colour selected leaves differently
       SequenceGroup selected = av.getSelectionGroup();
       if (selected != null
-              && selected.getSequences(null).contains(
-                      (SequenceI) node.element()))
+              && selected.getSequences(null).contains(node.element()))
       {
         g.setColor(Color.gray);
 
@@ -224,7 +245,7 @@ public class TreeCanvas extends Panel implements MouseListener,
       int xend = (int) (height * scale) + offx;
       int ypos = (int) (node.ycount * chunk) + offy;
 
-      g.setColor(((SequenceNode) node).color.darker());
+      g.setColor(node.color.darker());
 
       // Draw horizontal line
       g.drawLine(xstart, ypos, xend, ypos);
@@ -390,11 +411,13 @@ public class TreeCanvas extends Panel implements MouseListener,
     }
   }
 
+  @Override
   public void update(Graphics g)
   {
     paint(g);
   }
 
+  @Override
   public void paint(Graphics g)
   {
     if (tree == null)
@@ -406,7 +429,7 @@ public class TreeCanvas extends Panel implements MouseListener,
     {
       repaint();
     }
-    
+
     int width = scrollPane.getSize().width;
     int height = scrollPane.getSize().height;
     if (!fitToWindow)
@@ -436,12 +459,11 @@ public class TreeCanvas extends Panel implements MouseListener,
     g.fillRect(0, 0, width, height);
 
     labelLength = g.getFontMetrics(font).stringWidth(longestName) + 20; // 20
-                                                                        // allows
-                                                                        // for
-                                                                        // scrollbar
+    // allows
+    // for
+    // scrollbar
 
-    float wscale = (float) (width - labelLength - offx * 2)
-            / tree.getMaxHeight();
+    float wscale = (width - labelLength - offx * 2) / tree.getMaxHeight();
 
     SequenceNode top = tree.getTopNode();
 
@@ -465,26 +487,29 @@ public class TreeCanvas extends Panel implements MouseListener,
         g.setColor(Color.gray);
       }
 
-      int x = (int) (threshold
-              * (float) (getSize().width - labelLength - 2 * offx) + offx);
+      int x = (int) (threshold * (getSize().width - labelLength - 2 * offx) + offx);
 
       g.drawLine(x, 0, x, getSize().height);
     }
 
   }
 
+  @Override
   public void mouseReleased(MouseEvent e)
   {
   }
 
+  @Override
   public void mouseEntered(MouseEvent e)
   {
   }
 
+  @Override
   public void mouseExited(MouseEvent e)
   {
   }
 
+  @Override
   public void mouseClicked(MouseEvent evt)
   {
     if (highlightNode != null)
@@ -510,13 +535,16 @@ public class TreeCanvas extends Panel implements MouseListener,
 
       PaintRefresher.Refresh(this, av.getSequenceSetId());
       repaint();
+      av.sendSelection();
     }
   }
 
+  @Override
   public void mouseDragged(MouseEvent ect)
   {
   }
 
+  @Override
   public void mouseMoved(MouseEvent evt)
   {
     av.setCurrentTree(tree);
@@ -538,6 +566,7 @@ public class TreeCanvas extends Panel implements MouseListener,
     }
   }
 
+  @Override
   public void mousePressed(MouseEvent e)
   {
     av.setCurrentTree(tree);
@@ -552,6 +581,7 @@ public class TreeCanvas extends Panel implements MouseListener,
       treeSelectionChanged((Sequence) ob);
       PaintRefresher.Refresh(this, av.getSequenceSetId());
       repaint();
+      av.sendSelection();
       return;
     }
     else if (!(ob instanceof SequenceNode))
@@ -568,8 +598,8 @@ public class TreeCanvas extends Panel implements MouseListener,
         setColor(tree.getTopNode(), Color.black);
 
         av.setSelectionGroup(null);
-        av.alignment.deleteAllGroups();
-        av.sequenceColours = null;
+        av.getAlignment().deleteAllGroups();
+        av.clearSequenceColours();
 
         colourGroups();
 
@@ -586,12 +616,12 @@ public class TreeCanvas extends Panel implements MouseListener,
     for (int i = 0; i < tree.getGroups().size(); i++)
     {
 
-      Color col = new Color((int) (Math.random() * 255), (int) (Math
-              .random() * 255), (int) (Math.random() * 255));
+      Color col = new Color((int) (Math.random() * 255),
+              (int) (Math.random() * 255), (int) (Math.random() * 255));
       setColor((SequenceNode) tree.getGroups().elementAt(i), col.brighter());
 
-      Vector l = tree.findLeaves((SequenceNode) tree.getGroups().elementAt(
-              i), new Vector());
+      Vector l = tree.findLeaves(
+              (SequenceNode) tree.getGroups().elementAt(i), new Vector());
 
       Vector sequences = new Vector();
       for (int j = 0; j < l.size(); j++)
@@ -606,27 +636,34 @@ public class TreeCanvas extends Panel implements MouseListener,
 
       ColourSchemeI cs = null;
 
+      SequenceGroup sg = new SequenceGroup(sequences, "", cs, true, true,
+              false, 0, av.getAlignment().getWidth() - 1);
+
       if (av.getGlobalColourScheme() != null)
       {
         if (av.getGlobalColourScheme() instanceof UserColourScheme)
         {
-          cs = new UserColourScheme(((UserColourScheme) av
-                  .getGlobalColourScheme()).getColours());
+          cs = new UserColourScheme(
+                  ((UserColourScheme) av.getGlobalColourScheme())
+                          .getColours());
 
         }
         else
         {
-          cs = ColourSchemeProperty.getColour(sequences, av.alignment
-                  .getWidth(), ColourSchemeProperty.getColourName(av
-                  .getGlobalColourScheme()));
+          cs = ColourSchemeProperty.getColour(sg, ColourSchemeProperty
+                  .getColourName(av.getGlobalColourScheme()));
+        }
+        // cs is null if shading is an annotationColourGradient
+        if (cs != null)
+        {
+          cs.setThreshold(av.getGlobalColourScheme().getThreshold(),
+                  av.isIgnoreGapsConsensus());
         }
-
-        cs.setThreshold(av.getGlobalColourScheme().getThreshold(), av
-                .getIgnoreGapsConsensus());
       }
-
-      SequenceGroup sg = new SequenceGroup(sequences, "", cs, true, true,
-              false, 0, av.alignment.getWidth() - 1);
+      // TODO: cs used to be initialized with a sequence collection and
+      // recalcConservation called automatically
+      // instead we set it manually - recalc called after updateAnnotation
+      sg.cs = cs;
 
       sg.setName("JTreeGroup:" + sg.hashCode());
       sg.setIdColour(col);
@@ -634,20 +671,21 @@ public class TreeCanvas extends Panel implements MouseListener,
               && av.getGlobalColourScheme().conservationApplied())
       {
         Conservation c = new Conservation("Group",
-                ResidueProperties.propHash, 3, sg.getSequences(null), sg
-                        .getStartRes(), sg.getEndRes());
+                ResidueProperties.propHash, 3, sg.getSequences(null),
+                sg.getStartRes(), sg.getEndRes());
 
         c.calculate();
-        c.verdict(false, av.ConsPercGaps);
+        c.verdict(false, av.getConsPercGaps());
         cs.setConservation(c);
 
         sg.cs = cs;
 
       }
 
-      av.alignment.addGroup(sg);
+      av.getAlignment().addGroup(sg);
 
     }
+    ap.updateAnnotation();
 
   }