X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTreeCanvas.java;h=149a5879a6ad28f503b3b364e52225d958adca19;hb=65d6d09cd08743d481d39521bb0298ea683888f8;hp=e1881776959dbb3d98ac3682bbfab0f8630e02b5;hpb=7ab5d6b0ba5fec1ea4a4239e79c476d841622485;p=jalview.git diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index e188177..149a587 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,48 @@ */ 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.Colour; +import jalview.schemes.ColourSchemeI; +import jalview.schemes.ColourSchemeProperty; +import jalview.schemes.ResidueProperties; +import jalview.schemes.UserColourScheme; +import jalview.structure.SelectionSource; +import jalview.util.ColorUtils; +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 +70,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 +239,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) { @@ -216,7 +247,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } else { - g.setColor(av.getSequenceColour(seq).darker()); + g.setColor(ColorUtils.getColor(av.getSequenceColour(seq)) + .darker()); } } else @@ -258,14 +290,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 +321,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 +524,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, new Colour(c)); } } } @@ -516,6 +548,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 +583,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 +638,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param g * DOCUMENT ME! */ + @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -647,6 +682,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param fontSize * DOCUMENT ME! */ + @Override public void setFont(Font font) { this.font = font; @@ -682,8 +718,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 +743,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 +755,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseReleased(MouseEvent e) { } @@ -730,6 +766,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseEntered(MouseEvent e) { } @@ -740,6 +777,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mouseExited(MouseEvent e) { } @@ -750,14 +788,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, - "Select Sub-Tree Colour", highlightNode.color); + MessageManager.getString("label.select_subtree_colour"), + highlightNode.color); if (col != null) { setColor(highlightNode, col); @@ -788,6 +828,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseMoved(MouseEvent evt) { av.setCurrentTree(tree); @@ -813,6 +854,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } } + @Override public void mouseDragged(MouseEvent ect) { } @@ -823,6 +865,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, * @param e * DOCUMENT ME! */ + @Override public void mousePressed(MouseEvent e) { av.setCurrentTree(tree); @@ -854,11 +897,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 +968,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 +991,44 @@ 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, + new Colour(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 +1077,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } else { - return new AlignmentPanel[] - { ap }; + return new AlignmentPanel[] { ap }; } } }