X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanel.java;h=6ce838e058b818da8046d9d5b9b3eae3e01fa68f;hb=cc09a4de53fe2c95d71a0c93d6f894db2c845491;hp=c020b28de7b0b599f4c5fdfad2b4f2e25fd6c541;hpb=eee996a6476a1e3d84c07f8f690dcde3ff4b2ef5;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanel.java b/forester/java/src/org/forester/archaeopteryx/TreePanel.java index c020b28..6ce838e 100644 --- a/forester/java/src/org/forester/archaeopteryx/TreePanel.java +++ b/forester/java/src/org/forester/archaeopteryx/TreePanel.java @@ -95,6 +95,8 @@ import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION; import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE; import org.forester.archaeopteryx.phylogeny.data.RenderableDomainArchitecture; import org.forester.archaeopteryx.phylogeny.data.RenderableVector; +import org.forester.archaeopteryx.tools.Blast; +import org.forester.archaeopteryx.tools.ImageLoader; import org.forester.io.parsers.phyloxml.PhyloXmlUtil; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyMethods; @@ -134,16 +136,15 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee private final static int EURO_D = 10; private final static String NODE_POPMENU_NODE_CLIENT_PROPERTY = "node"; private final static int MIN_ROOT_LENGTH = 3; - private final static int BOX_SIZE = 4; - private final static int HALF_BOX_SIZE = TreePanel.BOX_SIZE / 2; private final static int MAX_SUBTREES = 100; private final static int MAX_NODE_FRAMES = 10; private final static int MOVE = 20; private final static NumberFormat FORMATTER_CONFIDENCE; private final static NumberFormat FORMATTER_BRANCH_LENGTH; private final static int WIGGLE = 2; - private final static int HALF_BOX_SIZE_PLUS_WIGGLE = HALF_BOX_SIZE + WIGGLE; + private final int _half_box_size_plus_wiggle; private final static int LIMIT_FOR_HQ_RENDERING = 1000; + private final static int CONFIDENCE_LEFT_MARGIN = 4; // TODO "rendering_hints" was static before. Need to make sure everything is OK with it not // being static anymore (02/20/2009). private final RenderingHints _rendering_hints = new RenderingHints( RenderingHints.KEY_RENDERING, @@ -215,6 +216,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee private boolean _edited = false; private Popup _node_desc_popup; private JTextArea _rollover_popup; + private final int _box_size; + private final int _half_box_size; //private final short _skip_counter = 0; private final StringBuffer _popup_buffer = new StringBuffer(); final private static Font POPUP_FONT = new Font( Configuration.getDefaultFontFamilyName(), @@ -227,6 +230,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee false ); // expression values menu: private DescriptiveStatistics _statistics_for_vector_data; + private PhylogenyNode[] _nodes_in_preorder = null; // private Image offscreenImage; // private Graphics offscreenGraphics; // private Dimension offscreenDimension; @@ -262,6 +266,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _configuration = configuration; _phylogeny = t; _phy_has_branch_lengths = ForesterUtil.isHasAtLeastOneBranchLengthLargerThanZero( _phylogeny ); + _box_size = tjp.getOptions().getDefaultNodeBoxSize(); + _half_box_size = tjp.getOptions().getDefaultNodeBoxSize() / 2; + _half_box_size_plus_wiggle = _half_box_size + WIGGLE; init(); // if ( !_phylogeny.isEmpty() ) { _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -402,6 +409,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { phy.addAsChild( node ); } + _nodes_in_preorder = null; _phylogeny.externalNodesHaveChanged(); _phylogeny.hashIDs(); _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -687,6 +695,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); + _nodes_in_preorder = null; resetPreferredSize(); updateOvSizes(); _main_panel.adjustJScrollPane(); @@ -703,6 +712,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); + _nodes_in_preorder = null; resetPreferredSize(); _main_panel.adjustJScrollPane(); setArrowCursor(); @@ -767,6 +777,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee errorMessageNoCutCopyPasteInUnrootedDisplay(); return; } + _nodes_in_preorder = null; setCutOrCopiedTree( _phylogeny.copy( node ) ); final List nodes = PhylogenyMethods.getAllDescendants( node ); final Set node_ids = new HashSet( nodes.size() ); @@ -798,6 +809,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( r != JOptionPane.OK_OPTION ) { return; } + _nodes_in_preorder = null; setCopiedAndPastedNodes( null ); setCutOrCopiedTree( _phylogeny.copy( node ) ); _phylogeny.deleteSubtree( node, true ); @@ -852,6 +864,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee null, options, options[ 2 ] ); + _nodes_in_preorder = null; boolean node_only = true; if ( r == 1 ) { node_only = false; @@ -930,6 +943,54 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee g.fill( _rectangle ); } + //TODO FIXME + final private void drawRectGradient( final double x, + final double y, + final double width, + final double heigth, + final Graphics2D g, + final Color color_1, + final Color color_2, + final Color color_border ) { + _rectangle.setFrame( x, y, width, heigth ); + g.setPaint( new GradientPaint( ( float ) x, + ( float ) y, + color_1, + ( float ) ( x + width ), + ( float ) ( y + heigth ), + color_2, + false ) ); + g.fill( _rectangle ); + if ( color_border != null ) { + g.setPaint( color_border ); + g.draw( _rectangle ); + } + } + + //TODO FIXME + final private void drawOvalGradient( final double x, + final double y, + final double width, + final double heigth, + final Graphics2D g, + final Color color_1, + final Color color_2, + final Color color_border ) { + _ellipse.setFrame( x, y, width, heigth ); + g.setPaint( new GradientPaint( ( float ) x, + ( float ) y, + color_1, + ( float ) ( x + width ), + ( float ) ( y + heigth ), + color_2, + false ) ); + g.fill( _ellipse ); + if ( color_border != null ) { + g.setPaint( color_border ); + g.draw( _ellipse ); + } + } + final private void errorMessageNoCutCopyPasteInUnrootedDisplay() { JOptionPane.showMessageDialog( this, "Cannot cut, copy, paste, add, or delete subtrees/nodes in unrooted display", @@ -951,10 +1012,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee for( final PhylogenyNodeIterator iter = _phylogeny.iteratorPostorder(); iter.hasNext(); ) { final PhylogenyNode node = iter.next(); if ( ( _phylogeny.isRooted() || !node.isRoot() || ( node.getNumberOfDescendants() > 2 ) ) - && ( ( node.getXcoord() - HALF_BOX_SIZE_PLUS_WIGGLE ) <= x ) - && ( ( node.getXcoord() + HALF_BOX_SIZE_PLUS_WIGGLE ) >= x ) - && ( ( node.getYcoord() - HALF_BOX_SIZE_PLUS_WIGGLE ) <= y ) - && ( ( node.getYcoord() + HALF_BOX_SIZE_PLUS_WIGGLE ) >= y ) ) { + && ( ( node.getXcoord() - _half_box_size_plus_wiggle ) <= x ) + && ( ( node.getXcoord() + _half_box_size_plus_wiggle ) >= x ) + && ( ( node.getYcoord() - _half_box_size_plus_wiggle ) <= y ) + && ( ( node.getYcoord() + _half_box_size_plus_wiggle ) >= y ) ) { return node; } } @@ -1089,7 +1150,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee * * @return a pointer to the phylogeny */ - final Phylogeny getPhylogeny() { + public final Phylogeny getPhylogeny() { return _phylogeny; } @@ -1694,6 +1755,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee JOptionPane.WARNING_MESSAGE ); return; } + _nodes_in_preorder = null; setWaitCursor(); PhylogenyMethods.midpointRoot( _phylogeny ); resetNodeIdToDistToLeafMap(); @@ -2274,40 +2336,40 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) ) { boolean draw_vertical = true; final PhylogenyNode parent = node.getParent(); - if ( ( ( getOptions().isShowNodeBoxes() && !to_pdf && !to_graphics_file ) || ( ( getControlPanel() + if ( ( ( ( getOptions().getDefaultNodeShape() != Options.NodeShape.NONE ) && !to_pdf && !to_graphics_file ) || ( ( getControlPanel() .isEvents() ) && ( parent != null ) && parent.isHasAssignedEvent() ) ) && ( _phylogeny.isRooted() || !( ( parent != null ) && parent.isRoot() ) ) && !( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() && !parent .isDuplication() ) ) { if ( ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE ) && ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) ) { - if ( Math.abs( y2 - y1 ) <= TreePanel.HALF_BOX_SIZE ) { + if ( Math.abs( y2 - y1 ) <= _half_box_size ) { draw_vertical = false; } else { if ( y1 < y2 ) { - y1 += TreePanel.HALF_BOX_SIZE; + y1 += _half_box_size; } else { if ( !to_pdf ) { - y1 -= TreePanel.HALF_BOX_SIZE + 1; + y1 -= _half_box_size + 1; } else { - y1 -= TreePanel.HALF_BOX_SIZE; + y1 -= _half_box_size; } } } } - if ( ( x2 - x1 ) <= TreePanel.HALF_BOX_SIZE ) { + if ( ( x2 - x1 ) <= _half_box_size ) { draw_horizontal = false; } else if ( !draw_vertical ) { - x1a += TreePanel.HALF_BOX_SIZE; + x1a += _half_box_size; } - if ( ( ( x2 - x1a ) > TreePanel.HALF_BOX_SIZE ) + if ( ( ( x2 - x1a ) > _half_box_size ) && !( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() && !node .isDuplication() ) ) { - x2a -= TreePanel.HALF_BOX_SIZE; + x2a -= _half_box_size; } } if ( draw_vertical ) { @@ -2404,7 +2466,11 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee g.draw( _arc ); } } - paintNodeBox( x2, y2, node, g, to_pdf, to_graphics_file, isInFoundNodes( node ) ); + //TODO new ***** + if ( node.isExternal() ) { + //TODO new ***** + paintNodeBox( x2, y2, node, g, to_pdf, to_graphics_file, isInFoundNodes( node ) ); + } } final void paintCircular( final Phylogeny phy, @@ -2419,7 +2485,6 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _root = phy.getRoot(); _root.setXcoord( center_x ); _root.setYcoord( center_y ); - paintNodeBox( _root.getXcoord(), _root.getYcoord(), _root, g, to_pdf, to_graphics_file, isInFoundNodes( _root ) ); final boolean radial_labels = getOptions().getNodeLabelDirection() == NODE_LABEL_DIRECTION.RADIAL; double current_angle = starting_angle; int i = 0; @@ -2432,6 +2497,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee current_angle += ( TWO_PI / _circ_num_ext_nodes ); } paintCirculars( phy.getRoot(), phy, center_x, center_y, radius, radial_labels, g, to_pdf, to_graphics_file ); + paintNodeBox( _root.getXcoord(), _root.getYcoord(), _root, g, to_pdf, to_graphics_file, isInFoundNodes( _root ) ); } final void paintCircularLite( final Phylogeny phy, @@ -2466,7 +2532,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final boolean to_graphics_file ) { if ( n.isExternal() ) { if ( !_urt_nodeid_angle_map.containsKey( n.getId() ) ) { - System.out.println( "no " + n + ", fucker!" );//TODO + System.out.println( "no " + n + ", ERROR!" );//TODO } return _urt_nodeid_angle_map.get( n.getId() ); } @@ -2554,15 +2620,15 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { d = ( Math.log10( d ) * _y_distance ) / 2.5; } - if ( d < BOX_SIZE ) { - d = BOX_SIZE; + if ( d < _box_size ) { + d = _box_size; } _polygon.reset(); - _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() - TreePanel.BOX_SIZE ), + _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() - _box_size ), ForesterUtil.roundToInt( node.getYcoord() ) ); - _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + TreePanel.BOX_SIZE ), + _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + _box_size ), ForesterUtil.roundToInt( node.getYcoord() - d ) ); - _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + TreePanel.BOX_SIZE ), + _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + _box_size ), ForesterUtil.roundToInt( node.getYcoord() + d ) ); g.fillPolygon( _polygon ); paintNodeData( g, node, to_graphics_file, to_pdf, is_in_found_nodes ); @@ -2656,7 +2722,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final private void paintFoundNode( final int x, final int y, final Graphics2D g ) { g.setColor( getTreeColorSet().getFoundColor() ); - g.fillRect( x - TreePanel.HALF_BOX_SIZE, y - TreePanel.HALF_BOX_SIZE, TreePanel.BOX_SIZE, TreePanel.BOX_SIZE ); + g.fillRect( x - _half_box_size, y - _half_box_size, _box_size, _box_size ); } final private void paintGainedAndLostCharacters( final Graphics2D g, @@ -2731,15 +2797,33 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { assignGraphicsForNodeBoxWithColorForParentBranch( node, g ); } - if ( ( getOptions().isShowNodeBoxes() && !to_pdf && !to_graphics_file ) + if ( ( ( getOptions().getDefaultNodeShape() != Options.NodeShape.NONE ) && !to_pdf && !to_graphics_file ) || ( getControlPanel().isEvents() && node.isHasAssignedEvent() ) ) { if ( to_pdf || to_graphics_file ) { if ( node.isDuplication() || !getOptions().isPrintBlackAndWhite() ) { - drawOvalFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g ); + //TODO FIXME + //drawOvalFilled( x - _half_box_size, y - _half_box_size, _box_size, _box_size, g ); + drawOvalGradient( x - _half_box_size, + y - _half_box_size, + _box_size, + _box_size, + g, + Color.BLACK, + g.getColor(), + g.getColor() ); } } else { - drawRectFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g ); + //TODO FIXME + //drawRectFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g ); + drawOvalGradient( x - _half_box_size, + y - _half_box_size, + _box_size, + _box_size, + g, + Color.BLACK, + g.getColor(), + g.getColor() ); } } } @@ -2769,7 +2853,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee && node.getNodeData().isHasTaxonomy() && ( ( node.getNodeData().getTaxonomy().getUris() != null ) && !node.getNodeData().getTaxonomy() .getUris().isEmpty() ) ) { - x += drawTaxonomyImage( node.getXcoord() + 2 + TreePanel.HALF_BOX_SIZE, node.getYcoord(), node, g ); + x += drawTaxonomyImage( node.getXcoord() + 2 + _half_box_size, node.getYcoord(), node, g ); } if ( ( getControlPanel().isShowTaxonomyCode() || getControlPanel().isShowTaxonomyScientificNames() || getControlPanel() .isShowTaxonomyCommonNames() ) && node.getNodeData().isHasTaxonomy() ) { @@ -2838,21 +2922,20 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( !node.isExternal() && ( node.getNumberOfDescendants() == 1 ) ) { down_shift_factor = 1; } + final double pos_x = node.getXcoord() + x + 2 + _half_box_size; + final double pos_y = ( node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ) ); + final String sb_str = _sb.toString(); // GUILHEM_BEG ______________ - final double posX = node.getXcoord() + x + 2 + TreePanel.HALF_BOX_SIZE; - final double posY = ( node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ) ); - final int CONFIDENCE_LEFT_MARGIN = 4; - final String sNodeText = _sb.toString(); if ( _control_panel.isShowSequenceRelations() && node.getNodeData().isHasSequence() && ( _query_sequence != null ) ) { int nodeTextBoundsWidth = 0; - if ( sNodeText.length() > 0 ) { - final Rectangle2D node_text_bounds = new TextLayout( sNodeText, g.getFont(), _frc ).getBounds(); //would like to remove this 'new', but how... + if ( sb_str.length() > 0 ) { + final Rectangle2D node_text_bounds = new TextLayout( sb_str, g.getFont(), _frc ).getBounds(); //would like to remove this 'new', but how... nodeTextBoundsWidth = ( int ) node_text_bounds.getWidth(); } if ( node.getNodeData().getSequence().equals( _query_sequence ) ) { if ( nodeTextBoundsWidth > 0 ) { // invert font color and background color to show that this is the query sequence - g.fillRect( ( int ) posX - 1, ( int ) posY - 8, nodeTextBoundsWidth + 5, 11 ); + g.fillRect( ( int ) pos_x - 1, ( int ) pos_y - 8, nodeTextBoundsWidth + 5, 11 ); g.setColor( getTreeColorSet().getBackgroundColor() ); } } @@ -2864,20 +2947,20 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee && seqRelation.getType().equals( getControlPanel().getSequenceRelationTypeBox() .getSelectedItem() ); if ( fGotRelationWithQuery ) { // we will underline the text to show that this sequence is ortholog to the query - final double linePosX = node.getXcoord() + 2 + TreePanel.HALF_BOX_SIZE; + final double linePosX = node.getXcoord() + 2 + _half_box_size; final String sConfidence = ( !getControlPanel().isShowSequenceRelationConfidence() || ( seqRelation .getConfidence() == null ) ) ? null : " (" + seqRelation.getConfidence().getValue() + ")"; if ( sConfidence != null ) { - double confidenceX = posX; - if ( sNodeText.length() > 0 ) { - confidenceX += new TextLayout( sNodeText, g.getFont(), _frc ).getBounds().getWidth() + double confidenceX = pos_x; + if ( sb_str.length() > 0 ) { + confidenceX += new TextLayout( sb_str, g.getFont(), _frc ).getBounds().getWidth() + CONFIDENCE_LEFT_MARGIN; } if ( confidenceX > linePosX ) { // let's only display confidence value if we are already displaying at least one of Prot/Gene Name and Taxonomy Code final int confidenceWidth = ( int ) new TextLayout( sConfidence, g.getFont(), _frc ) .getBounds().getWidth(); - TreePanel.drawString( sConfidence, confidenceX, posY, g ); + TreePanel.drawString( sConfidence, confidenceX, pos_y, g ); x += CONFIDENCE_LEFT_MARGIN + confidenceWidth; } } @@ -2889,16 +2972,16 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { nodeTextBoundsWidth += 2; } - g.drawLine( ( int ) linePosX + 1, 3 + ( int ) posY, ( int ) linePosX + x - + nodeTextBoundsWidth, 3 + ( int ) posY ); + g.drawLine( ( int ) linePosX + 1, 3 + ( int ) pos_y, ( int ) linePosX + x + + nodeTextBoundsWidth, 3 + ( int ) pos_y ); break; } } } } } - if ( sNodeText.length() > 0 ) { - TreePanel.drawString( sNodeText, posX, posY, g ); + if ( sb_str.length() > 0 ) { + TreePanel.drawString( sb_str, pos_x, pos_y, g ); } // GUILHEM_END _____________ // COMMENTED_OUT_BY_GUILHEM_BEG _______________ @@ -2922,7 +3005,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee g.setColor( calculateColorForAnnotation( ann ) ); } final String ann_str = ann.asSimpleText().toString(); - TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + TreePanel.HALF_BOX_SIZE, node.getYcoord() + TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + _half_box_size, node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g ); _sb.setLength( 0 ); _sb.append( ann_str ); @@ -2943,7 +3026,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } if ( getControlPanel().isShowBinaryCharacters() ) { TreePanel.drawString( node.getNodeData().getBinaryCharacters().getPresentCharactersAsStringBuffer() - .toString(), node.getXcoord() + x + 1 + TreePanel.HALF_BOX_SIZE, node.getYcoord() + .toString(), node.getXcoord() + x + 1 + _half_box_size, node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g ); paintGainedAndLostCharacters( g, node, node.getNodeData().getBinaryCharacters() .getGainedCharactersAsStringBuffer().toString(), node.getNodeData().getBinaryCharacters() @@ -2962,12 +3045,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final double mean = ForesterUtil.round( sum / count, 1 ); TreePanel.drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount() + " [" - + mean + "]", node.getXcoord() + x + 4 + TreePanel.HALF_BOX_SIZE, node.getYcoord() + + mean + "]", node.getXcoord() + x + 4 + _half_box_size, node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g ); } else { TreePanel.drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount(), - node.getXcoord() + x + 4 + TreePanel.HALF_BOX_SIZE, + node.getXcoord() + x + 4 + _half_box_size, node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g ); @@ -3298,6 +3381,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee child_node.setYcoord( y2 ); y2 += _y_distance * child_node.getNumberOfExternalNodes(); } + //TODO new ***** + paintNodeBox( node.getXcoord(), node.getYcoord(), node, g, to_pdf, to_graphics_file, isInFoundNodes( node ) ); + //TODO new ***** } if ( dynamically_hide && !is_in_found_nodes @@ -3336,6 +3422,17 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( getControlPanel().isShowTaxonomyCode() && ( PhylogenyMethods.getSpecies( node ).length() > 0 ) ) { x += getTreeFontSet()._fm_large_italic.stringWidth( PhylogenyMethods.getSpecies( node ) + " " ); } + if ( getControlPanel().isShowGeneNames() ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getName() + " " ); + } + if ( getControlPanel().isShowGeneSymbols() ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getSymbol() + " " ); + } + if ( getControlPanel().isShowSequenceAcc() ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getAccession() + .toString() + + " " ); + } if ( getControlPanel().isShowNodeNames() && ( node.getName().length() > 0 ) ) { x += getTreeFontSet()._fm_large.stringWidth( node.getName() + " " ); } @@ -3403,10 +3500,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final int graphics_file_height, final int graphics_file_x, final int graphics_file_y ) { - /* GUILHEM_BEG */ - // System.out.println( "p" + ( xxx++ ) ); - _query_sequence = _control_panel.getSelectedQuerySequence(); - /* GUILHEM_END */ + if ( _control_panel.isShowSequenceRelations() ) { + _query_sequence = _control_panel.getSelectedQuerySequence(); + } // Color the background if ( !to_pdf ) { final Rectangle r = getVisibleRect(); @@ -3469,9 +3565,20 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getControlPanel().setDynamicHidingIsOn( false ); } } - final PhylogenyNodeIterator it; - for( it = _phylogeny.iteratorPreorder(); it.hasNext(); ) { - paintNodeRectangular( g, it.next(), to_pdf, getControlPanel().isDynamicallyHideData() + if ( _nodes_in_preorder == null ) { + _nodes_in_preorder = new PhylogenyNode[ _phylogeny.getNodeCount() ]; + int i = 0; + for( final PhylogenyNodeIterator it = _phylogeny.iteratorPreorder(); it.hasNext(); ) { + _nodes_in_preorder[ i++ ] = it.next(); + } + } + //final PhylogenyNodeIterator it; + //for( it = _phylogeny.iteratorPreorder(); it.hasNext(); ) { + // paintNodeRectangular( g, it.next(), to_pdf, getControlPanel().isDynamicallyHideData() + // && ( dynamic_hiding_factor > 1 ), dynamic_hiding_factor, to_graphics_file ); + //} + for( int i = 0; i < _nodes_in_preorder.length; ++i ) { + paintNodeRectangular( g, _nodes_in_preorder[ i ], to_pdf, getControlPanel().isDynamicallyHideData() && ( dynamic_hiding_factor > 1 ), dynamic_hiding_factor, to_graphics_file ); } if ( getOptions().isShowScale() && getControlPanel().isDrawPhylogram() && ( getScaleDistance() > 0.0 ) ) { @@ -3592,9 +3699,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee .setXSecondary( ( float ) ( getVisibleRect().x + getOvXPosition() + ( MOVE / ( getVisibleRect().width / getOvRectangle() .getWidth() ) ) ) ); _phylogeny.getRoot().setYSecondary( ( getVisibleRect().y + getOvYStart() ) ); - final PhylogenyNodeIterator it; - for( it = _phylogeny.iteratorPreorder(); it.hasNext(); ) { - paintNodeLite( g, it.next() ); + //final PhylogenyNodeIterator it; + //for( it = _phylogeny.iteratorPreorder(); it.hasNext(); ) { + // paintNodeLite( g, it.next() ); + //} + for( int i = 0; i < _nodes_in_preorder.length; ++i ) { + paintNodeLite( g, _nodes_in_preorder[ i ] ); } paintOvRectangle( g ); } @@ -3683,7 +3793,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { g.setColor( getTreeColorSet().getTaxonomyColor() ); } - final double start_x = node.getXcoord() + 3 + TreePanel.HALF_BOX_SIZE + x_shift; + final double start_x = node.getXcoord() + 3 + _half_box_size + x_shift; final double start_y = node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / ( node.getNumberOfDescendants() == 1 ? 1 : 3.0 ) ); _sb.setLength( 0 ); @@ -3740,8 +3850,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final String label = _sb.toString(); /* GUILHEM_BEG */ - if ( ( label.length() > 0 ) && ( node.getNodeData().isHasSequence() ) - && node.getNodeData().getSequence().equals( _query_sequence ) ) { + if ( _control_panel.isShowSequenceRelations() && ( label.length() > 0 ) + && ( node.getNodeData().isHasSequence() ) && node.getNodeData().getSequence().equals( _query_sequence ) ) { // invert font color and background color to show that this is the query sequence final Rectangle2D nodeTextBounds = new TextLayout( label, g.getFont(), new FontRenderContext( null, false, @@ -3782,7 +3892,6 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( n.isRoot() ) { n.setXcoord( getWidth() / 2 ); n.setYcoord( getHeight() / 2 ); - paintNodeBox( n.getXcoord(), n.getYcoord(), n, g, to_pdf, to_graphics_file, isInFoundNodes( n ) ); } if ( n.isExternal() ) { paintNodeDataUnrootedCirc( g, @@ -3835,11 +3944,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final float new_y = ( float ) ( y + Math.sin( mid_angle ) * length ); desc.setXcoord( new_x ); desc.setYcoord( new_y ); - paintNodeBox( new_x, new_y, desc, g, to_pdf, to_graphics_file, isInFoundNodes( desc ) ); paintUnrooted( desc, current_angle, current_angle + arc_size, radial_labels, g, to_pdf, to_graphics_file ); current_angle += arc_size; assignGraphicsForBranchWithColorForParentBranch( desc, false, g, to_pdf, to_graphics_file ); drawLine( x, y, new_x, new_y, g ); + paintNodeBox( new_x, new_y, desc, g, to_pdf, to_graphics_file, isInFoundNodes( desc ) ); + } + if ( n.isRoot() ) { + paintNodeBox( n.getXcoord(), n.getYcoord(), n, g, to_pdf, to_graphics_file, isInFoundNodes( n ) ); } } @@ -3956,6 +4068,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } node_ids.add( node.getId() ); getCopiedAndPastedNodes().addAll( node_ids ); + _nodes_in_preorder = null; _phylogeny.externalNodesHaveChanged(); _phylogeny.hashIDs(); _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -4031,6 +4144,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getPhylogeny().reRoot( node ); getPhylogeny().recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); + _nodes_in_preorder = null; resetPreferredSize(); getMainPanel().adjustJScrollPane(); repaint(); @@ -4074,7 +4188,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee setPreferredSize( new Dimension( x, y ) ); } - final void setArrowCursor() { + public final void setArrowCursor() { setCursor( ARROW_CURSOR ); repaint(); } @@ -4091,7 +4205,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getMainPanel().setCutOrCopiedTree( cut_or_copied_tree ); } - final void setEdited( final boolean edited ) { + public final void setEdited( final boolean edited ) { _edited = edited; } @@ -4289,7 +4403,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee * @param t * an instance of a Phylogeny */ - final void setTree( final Phylogeny t ) { + public final void setTree( final Phylogeny t ) { + _nodes_in_preorder = null; _phylogeny = t; } @@ -4323,7 +4438,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _urt_factor_ov = urt_factor_ov; } - final void setWaitCursor() { + public final void setWaitCursor() { setCursor( WAIT_CURSOR ); repaint(); } @@ -4579,6 +4694,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee JOptionPane.WARNING_MESSAGE ); return; } + _nodes_in_preorder = null; if ( !node.isExternal() && !node.isRoot() && ( _subtree_index <= ( TreePanel.MAX_SUBTREES - 1 ) ) ) { _sub_phylogenies[ _subtree_index ] = _phylogeny; _sub_phylogenies_temp_roots[ _subtree_index ] = node; @@ -4615,6 +4731,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final void superTree() { + _nodes_in_preorder = null; final PhylogenyNode temp_root = _sub_phylogenies_temp_roots[ _subtree_index - 1 ]; for( final PhylogenyNode n : temp_root.getDescendants() ) { n.setParent( temp_root ); @@ -4628,6 +4745,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final void swap( final PhylogenyNode node ) { if ( !node.isExternal() ) { _phylogeny.swapChildren( node ); + _nodes_in_preorder = null; } repaint(); } @@ -4841,11 +4959,11 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } } - synchronized void setImageMap( final Hashtable image_map ) { + public synchronized void setImageMap( final Hashtable image_map ) { getMainPanel().setImageMap( image_map ); } - synchronized Hashtable getImageMap() { + public synchronized Hashtable getImageMap() { return getMainPanel().getImageMap(); } }