X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTreeCanvas.java;h=f21c5e75a916068a7538fd66fdeecf67a80c75a7;hb=7c25229cd1f73806388e1d08f3f67f05cd332133;hp=c5650f5a973013c65c436c11991d76b7bd60a390;hpb=aced09c4feeaf3406269442c14e54abeeb4cad81;p=jalview.git diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index c5650f5..f21c5e7 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-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,17 +20,46 @@ */ 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.ToolTipManager; /** * DOCUMENT ME! @@ -39,7 +68,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 +237,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 +287,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 +318,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 +521,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 +545,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 +580,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 +635,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param g * DOCUMENT ME! */ + @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -647,6 +679,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param fontSize * DOCUMENT ME! */ + @Override public void setFont(Font font) { this.font = font; @@ -682,8 +715,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(); @@ -708,7 +740,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()); } @@ -720,6 +752,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseReleased(MouseEvent e) { } @@ -730,6 +763,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseEntered(MouseEvent e) { } @@ -740,6 +774,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseExited(MouseEvent e) { } @@ -750,14 +785,16 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseClicked(MouseEvent evt) { if (highlightNode != null) { - if (SwingUtilities.isRightMouseButton(evt)) + if (evt.isPopupTrigger()) { Color col = JColorChooser.showDialog(this, - MessageManager.getString("label.select_subtree_colour"), highlightNode.color); + MessageManager.getString("label.select_subtree_colour"), + highlightNode.color); if (col != null) { setColor(highlightNode, col); @@ -788,6 +825,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseMoved(MouseEvent evt) { av.setCurrentTree(tree); @@ -813,6 +851,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseDragged(MouseEvent ect) { } @@ -823,6 +862,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mousePressed(MouseEvent e) { av.setCurrentTree(tree); @@ -854,11 +894,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(); } @@ -916,13 +965,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 @@ -938,14 +988,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(); + + } + } } @@ -994,8 +1073,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } else { - return new AlignmentPanel[] - { ap }; + return new AlignmentPanel[] { ap }; } } }