X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTreeCanvas.java;h=8fdb7ca6fb2cb9a7b05f417ca9bab3697e06eac3;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=37bb6e9b7ecdc70fb292f6a96c02dfd40c4fce43;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index 37bb6e9..8fdb7ca 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -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 2.9.0b2) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -20,17 +20,47 @@ */ package jalview.gui; -import java.util.*; - -import java.awt.*; -import java.awt.event.*; -import java.awt.print.*; -import javax.swing.*; - -import jalview.analysis.*; -import jalview.datamodel.*; -import jalview.schemes.*; -import jalview.util.*; +import jalview.analysis.Conservation; +import jalview.analysis.NJTree; +import jalview.api.AlignViewportI; +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.structure.SelectionSource; +import jalview.util.Format; +import jalview.util.MappingUtils; +import jalview.util.MessageManager; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import javax.swing.JColorChooser; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; /** * DOCUMENT ME! @@ -39,7 +69,7 @@ import jalview.util.*; * @version $Revision$ */ public class TreeCanvas extends JPanel implements MouseListener, Runnable, - Printable, MouseMotionListener + Printable, MouseMotionListener, SelectionSource { /** DOCUMENT ME!! */ public static final String PLACEHOLDER = " * "; @@ -208,7 +238,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (node.element() instanceof SequenceI) { - SequenceI seq = (SequenceI) ((SequenceNode) node).element(); + SequenceI seq = (SequenceI) node.element(); if (av.getSequenceColour(seq) == Color.white) { @@ -258,14 +288,13 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Rectangle rect = new Rectangle(xend + 10, ypos - charHeight / 2, 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); @@ -290,7 +319,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, 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); @@ -493,7 +522,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); } } } @@ -516,6 +546,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } // put printing in a thread to avoid painting problems + @Override public void run() { PrinterJob printJob = PrinterJob.getPrinterJob(); @@ -550,6 +581,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @throws PrinterException * DOCUMENT ME! */ + @Override public int print(Graphics pg, PageFormat pf, int pi) throws PrinterException { @@ -604,6 +636,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param g * DOCUMENT ME! */ + @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -611,7 +644,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (tree == null) { - g.drawString(MessageManager.getString("label.calculating_tree") + "....", 20, getHeight() / 2); + g.drawString(MessageManager.getString("label.calculating_tree") + + "....", 20, getHeight() / 2); } else { @@ -646,6 +680,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param fontSize * DOCUMENT ME! */ + @Override public void setFont(Font font) { this.font = font; @@ -671,9 +706,9 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, g2.fillRect(0, 0, width, height); g2.setFont(font); - if (longestName==null || tree ==null) + if (longestName == null || tree == null) { - g2.drawString("Calculating tree.",20,20); + g2.drawString("Calculating tree.", 20, 20); } offy = font.getSize() + 10; @@ -681,8 +716,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, labelLength = fm.stringWidth(longestName) + 20; // 20 allows for scrollbar - float wscale = (float) (width - labelLength - (offx * 2)) - / tree.getMaxHeight(); + float wscale = (width - labelLength - (offx * 2)) / tree.getMaxHeight(); SequenceNode top = tree.getTopNode(); @@ -707,7 +741,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, g2.setColor(Color.gray); } - int x = (int) ((threshold * (float) (getWidth() - labelLength - (2 * offx))) + offx); + int x = (int) ((threshold * (getWidth() - labelLength - (2 * offx))) + offx); g2.drawLine(x, 0, x, getHeight()); } @@ -719,6 +753,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseReleased(MouseEvent e) { } @@ -729,6 +764,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseEntered(MouseEvent e) { } @@ -739,6 +775,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseExited(MouseEvent e) { } @@ -749,6 +786,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseClicked(MouseEvent evt) { if (highlightNode != null) @@ -756,7 +794,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (SwingUtilities.isRightMouseButton(evt)) { Color col = JColorChooser.showDialog(this, - "Select Sub-Tree Colour", highlightNode.color); + MessageManager.getString("label.select_subtree_colour"), + highlightNode.color); if (col != null) { setColor(highlightNode, col); @@ -787,6 +826,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseMoved(MouseEvent evt) { av.setCurrentTree(tree); @@ -796,7 +836,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (ob instanceof SequenceNode) { highlightNode = (SequenceNode) ob; - this.setToolTipText("" + MessageManager.getString("label.highlightnode")); + this.setToolTipText("" + + MessageManager.getString("label.highlightnode")); repaint(); } @@ -811,6 +852,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseDragged(MouseEvent ect) { } @@ -821,6 +863,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mousePressed(MouseEvent e) { av.setCurrentTree(tree); @@ -852,11 +895,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 (aps[a].av.getCodingComplement() != null) + { + aps[a].av.getCodingComplement().setSelectionGroup(null); + aps[a].av.getCodingComplement().getAlignment() + .deleteAllGroups(); + aps[a].av.getCodingComplement().clearSequenceColours(); + } } colourGroups(); } @@ -914,13 +966,14 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (cs != null) { cs.setThreshold(av.getGlobalColourScheme().getThreshold(), - av.getIgnoreGapsConsensus()); + av.isIgnoreGapsConsensus()); } } sg.cs = cs; // sg.recalcConservation(); sg.setName("JTreeGroup:" + sg.hashCode()); sg.setIdColour(col); + for (int a = 0; a < aps.length; a++) { if (aps[a].av.getGlobalColourScheme() != null @@ -936,14 +989,43 @@ 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? + final AlignViewportI codingComplement = aps[a].av + .getCodingComplement(); + if (codingComplement != null) + { + 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. + + // notify the panel(s) to redo any group specific stuff. for (int a = 0; a < aps.length; a++) { aps[a].updateAnnotation(); // TODO: JAL-868 - need to ensure view colour change message is broadcast // to any Jmols listening in + final AlignViewportI codingComplement = aps[a].av + .getCodingComplement(); + if (codingComplement != null) + { + ((AlignViewport) codingComplement).getAlignPanel() + .updateAnnotation(); + + } + } } @@ -992,8 +1074,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } else { - return new AlignmentPanel[] - { ap }; + return new AlignmentPanel[] { ap }; } } }