X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanel.java;h=b561ac2bec38e05b048a56083c20ab9dc4933e76;hb=6be89aad9f2003c1b2bb4a9e6581ac3537d556c2;hp=9d29d9dab1ff9bb2e7171c44af3b2df8523ea101;hpb=4e202b796a689419621ddc2c3934797c39af9026;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanel.java b/forester/java/src/org/forester/archaeopteryx/TreePanel.java index 9d29d9d..b561ac2 100644 --- a/forester/java/src/org/forester/archaeopteryx/TreePanel.java +++ b/forester/java/src/org/forester/archaeopteryx/TreePanel.java @@ -109,6 +109,7 @@ import org.forester.phylogeny.data.NodeVisualization; import org.forester.phylogeny.data.NodeVisualization.NodeFill; import org.forester.phylogeny.data.NodeVisualization.NodeShape; import org.forester.phylogeny.data.PhylogenyData; +import org.forester.phylogeny.data.PhylogenyDataUtil; import org.forester.phylogeny.data.PropertiesMap; import org.forester.phylogeny.data.Property; import org.forester.phylogeny.data.Sequence; @@ -267,7 +268,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _main_panel = tjp; _configuration = configuration; _phylogeny = t; - _phy_has_branch_lengths = ForesterUtil.isHasAtLeastOneBranchLengthLargerThanZero( _phylogeny ); + _phy_has_branch_lengths = AptxUtil.isHasAtLeastOneBranchLengthLargerThanZero( _phylogeny ); init(); // if ( !_phylogeny.isEmpty() ) { _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -408,7 +409,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { phy.addAsChild( node ); } - _nodes_in_preorder = null; + setNodeInPreorderToNull(); _phylogeny.externalNodesHaveChanged(); _phylogeny.hashIDs(); _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -664,7 +665,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee // Look in species hash Color c = getControlPanel().getSpeciesColors().get( species ); if ( c == null ) { - c = Util.calculateColorFromString( species ); + c = AptxUtil.calculateColorFromString( species ); getControlPanel().getSpeciesColors().put( species, c ); } return c; @@ -693,12 +694,13 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } if ( !node.isExternal() && !node.isRoot() ) { final boolean collapse = !node.isCollapse(); - Util.collapseSubtree( node, collapse ); + AptxUtil.collapseSubtree( node, collapse ); updateSetOfCollapsedExternalNodes( _phylogeny ); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); - _nodes_in_preorder = null; + setNodeInPreorderToNull(); + _control_panel.displayedPhylogenyMightHaveChanged( true ); resetPreferredSize(); updateOvSizes(); _main_panel.adjustJScrollPane(); @@ -711,12 +713,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } setWaitCursor(); - Util.collapseSpeciesSpecificSubtrees( _phylogeny ); + AptxUtil.collapseSpeciesSpecificSubtrees( _phylogeny ); updateSetOfCollapsedExternalNodes( _phylogeny ); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); - _nodes_in_preorder = null; + setNodeInPreorderToNull(); resetPreferredSize(); _main_panel.adjustJScrollPane(); setArrowCursor(); @@ -767,8 +769,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } setWaitCursor(); - Util.removeBranchColors( _phylogeny ); - Util.colorPhylogenyAccordingToConfidenceValues( _phylogeny, this ); + AptxUtil.removeBranchColors( _phylogeny ); + AptxUtil.colorPhylogenyAccordingToConfidenceValues( _phylogeny, this ); _control_panel.setColorBranches( true ); if ( _control_panel.getColorBranchesCb() != null ) { _control_panel.getColorBranchesCb().setSelected( true ); @@ -782,8 +784,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } setWaitCursor(); - Util.removeBranchColors( _phylogeny ); - final int colorizations = Util.colorPhylogenyAccordingToRanks( _phylogeny, rank, this ); + AptxUtil.removeBranchColors( _phylogeny ); + final int colorizations = AptxUtil.colorPhylogenyAccordingToRanks( _phylogeny, rank, this ); if ( colorizations > 0 ) { _control_panel.setColorBranches( true ); if ( _control_panel.getColorBranchesCb() != null ) { @@ -827,7 +829,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee errorMessageNoCutCopyPasteInUnrootedDisplay(); return; } - _nodes_in_preorder = null; + setNodeInPreorderToNull(); setCutOrCopiedTree( _phylogeny.copy( node ) ); final List nodes = PhylogenyMethods.getAllDescendants( node ); final Set node_ids = new HashSet( nodes.size() ); @@ -859,7 +861,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( r != JOptionPane.OK_OPTION ) { return; } - _nodes_in_preorder = null; + setNodeInPreorderToNull(); setCopiedAndPastedNodes( null ); setCutOrCopiedTree( _phylogeny.copy( node ) ); _phylogeny.deleteSubtree( node, true ); @@ -914,7 +916,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee null, options, options[ 2 ] ); - _nodes_in_preorder = null; + setNodeInPreorderToNull(); boolean node_only = true; if ( r == 1 ) { node_only = false; @@ -1315,6 +1317,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee case EDIT_NODE_DATA: showNodeEditFrame( node ); break; + case SORT_DESCENDENTS: + sortDescendants( node ); + break; default: throw new IllegalArgumentException( "unknown action: " + action ); } @@ -1342,7 +1347,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } setWaitCursor(); - Util.inferCommonPartOfScientificNames( _phylogeny ); + AptxUtil.inferCommonPartOfScientificNames( _phylogeny ); setArrowCursor(); repaint(); } @@ -1804,7 +1809,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee JOptionPane.WARNING_MESSAGE ); return; } - _nodes_in_preorder = null; + setNodeInPreorderToNull(); setWaitCursor(); PhylogenyMethods.midpointRoot( _phylogeny ); resetNodeIdToDistToLeafMap(); @@ -2117,7 +2122,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee uri_str = url + URLEncoder.encode( seq.getAccession().getValue(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } if ( !ForesterUtil.isEmpty( uri_str ) ) { @@ -2126,14 +2131,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( isApplet() ) { applet = obtainApplet(); } - Util.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_seq" ); + AptxUtil.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_seq" ); } catch ( final IOException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } catch ( final URISyntaxException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2157,7 +2162,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee uri_str = weblink.getUrl() + URLEncoder.encode( tax.getIdentifier().getValue(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2167,7 +2172,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee uri_str = new URI( tax.getIdentifier().getValue() ).toString(); } catch ( final URISyntaxException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); uri_str = null; e.printStackTrace(); } @@ -2178,7 +2183,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee + URLEncoder.encode( tax.getScientificName(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2188,7 +2193,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee + URLEncoder.encode( tax.getTaxonomyCode(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2198,7 +2203,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee + URLEncoder.encode( tax.getCommonName(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2208,14 +2213,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( isApplet() ) { applet = obtainApplet(); } - Util.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_tax" ); + AptxUtil.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_tax" ); } catch ( final IOException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } catch ( final URISyntaxException e ) { - Util.showErrorMessage( this, e.toString() ); + AptxUtil.showErrorMessage( this, e.toString() ); e.printStackTrace(); } } @@ -2510,7 +2515,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee paintNodeBox( _root.getXcoord(), _root.getYcoord(), _root, g, to_pdf, to_graphics_file, isInFoundNodes( _root ) ); } - private void updateSetOfCollapsedExternalNodes( final Phylogeny phy ) { + void updateSetOfCollapsedExternalNodes( final Phylogeny phy ) { _collapsed_external_nodeid_set.clear(); E: for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) { final PhylogenyNode ext_node = it.next(); @@ -2704,36 +2709,45 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final PhylogenyNode node, final boolean to_pdf, final boolean to_graphics_file ) { - String conf_str = ""; final List confidences = node.getBranchData().getConfidences(); - if ( confidences.size() == 1 ) { - final double value = node.getBranchData().getConfidence( 0 ).getValue(); - if ( ( value == Confidence.CONFIDENCE_DEFAULT_VALUE ) || ( value < getOptions().getMinConfidenceValue() ) ) { - return; - } - conf_str = FORMATTER_CONFIDENCE.format( value ); - } - else if ( confidences.size() > 1 ) { - boolean one_ok = false; - boolean not_first = false; - Collections.sort( confidences ); - final StringBuilder sb = new StringBuilder(); - for( final Confidence confidence : confidences ) { - final double value = confidence.getValue(); - if ( value != Confidence.CONFIDENCE_DEFAULT_VALUE ) { - if ( value >= getOptions().getMinConfidenceValue() ) { - one_ok = true; - } - if ( not_first ) { - sb.append( "/" ); - } - else { - not_first = true; + // if ( confidences.size() == 1 ) { + // final double value = node.getBranchData().getConfidence( 0 ).getValue(); + // if ( ( value == Confidence.CONFIDENCE_DEFAULT_VALUE ) || ( value < getOptions().getMinConfidenceValue() ) ) { + // return; + // } + // conf_str = FORMATTER_CONFIDENCE.format( value ); + // } + // else if ( confidences.size() > 1 ) { + boolean one_ok = false; + boolean not_first = false; + Collections.sort( confidences ); + final StringBuilder sb = new StringBuilder(); + String conf_str = ""; + for( final Confidence confidence : confidences ) { + final double value = confidence.getValue(); + if ( value != Confidence.CONFIDENCE_DEFAULT_VALUE ) { + if ( value >= getOptions().getMinConfidenceValue() ) { + one_ok = true; + } + if ( not_first ) { + sb.append( "/" ); + } + else { + not_first = true; + } + sb.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( value, getOptions() + .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) ); + if ( getOptions().isShowConfidenceStddev() ) { + if ( confidence.getStandardDeviation() != Confidence.CONFIDENCE_DEFAULT_VALUE ) { + sb.append( "(" ); + sb.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence.getStandardDeviation(), + getOptions() + .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) ); + sb.append( ")" ); } - sb.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( value, getOptions() - .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) ); } } + //} if ( one_ok ) { conf_str = sb.toString(); } @@ -2828,7 +2842,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() ) { outline_color = Color.BLACK; } - else if ( getControlPanel().isEvents() && Util.isHasAssignedEvent( node ) ) { + else if ( getControlPanel().isEvents() && AptxUtil.isHasAssignedEvent( node ) ) { final Event event = node.getNodeData().getEvent(); if ( event.isDuplication() ) { outline_color = getTreeColorSet().getDuplicationBoxColor(); @@ -2927,7 +2941,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( getOptions().isShowBranchLengthValues() && ( ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR ) || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE ) ) - && ( !node.isRoot() ) && ( node.getDistanceToParent() != PhylogenyNode.DISTANCE_DEFAULT ) ) { + && ( !node.isRoot() ) && ( node.getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) ) { paintBranchLength( g, node, to_pdf, to_graphics_file ); } if ( !getControlPanel().isShowInternalData() && !node.isExternal() && !node.isCollapse() ) { @@ -3168,11 +3182,25 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else { sb.append( " " ); } - sb.append( properties.getProperty( ref ).asText() ); + final Property p = properties.getProperty( ref ); + sb.append( getPartAfterColon( p.getRef() ) ); + sb.append( "=" ); + sb.append( p.getValue() ); + if ( !ForesterUtil.isEmpty( p.getUnit() ) ) { + sb.append( getPartAfterColon( p.getUnit() ) ); + } } return sb; } + final private static String getPartAfterColon( final String s ) { + final int i = s.indexOf( ':' ); + if ( ( i < 1 ) || ( i == ( s.length() - 1 ) ) ) { + return s; + } + return s.substring( i + 1, s.length() ); + } + private double drawTaxonomyImage( final double x, final double y, final PhylogenyNode node, final Graphics2D g ) { final List us = new ArrayList(); for( final Taxonomy t : node.getNodeData().getTaxonomies() ) { @@ -3420,7 +3448,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee ++_external_node_index; } // Confidence values - if ( getControlPanel().isShowBootstrapValues() + if ( getControlPanel().isShowConfidenceValues() && !node.isExternal() && !node.isRoot() && ( ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) @@ -3523,28 +3551,34 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } catch ( final ClassCastException cce ) { cce.printStackTrace(); - return; - } - rds.setRenderingHeight( 6 ); - int x = 0; - 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() + " " ); + if ( rds != null ) { + rds.setRenderingHeight( 6 ); + int x = 0; + if ( getControlPanel().isShowTaxonomyCode() + && ( !ForesterUtil.isEmpty( PhylogenyMethods.getSpecies( node ) ) ) ) { + x += getTreeFontSet()._fm_large_italic.stringWidth( PhylogenyMethods.getSpecies( node ) + " " ); + } + if ( getControlPanel().isShowGeneNames() + && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) ) ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getName() + " " ); + } + if ( getControlPanel().isShowGeneSymbols() + && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getSymbol() ) ) ) { + x += getTreeFontSet()._fm_large + .stringWidth( node.getNodeData().getSequence().getSymbol() + " " ); + } + if ( getControlPanel().isShowSequenceAcc() + && ( node.getNodeData().getSequence().getAccession() != null ) ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getAccession() + .toString() + + " " ); + } + if ( getControlPanel().isShowNodeNames() && ( node.getName().length() > 0 ) ) { + x += getTreeFontSet()._fm_large.stringWidth( node.getName() + " " ); + } + rds.render( node.getXcoord() + x, node.getYcoord() - 3, g, this, to_pdf ); } - rds.render( node.getXcoord() + x, node.getYcoord() - 3, g, this, to_pdf ); } } ////////////// @@ -3553,18 +3587,20 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final RenderableVector rv = RenderableVector.createInstance( node.getNodeData().getVector(), getStatisticsForExpressionValues(), getConfiguration() ); - int x = 0; - PhylogenyNode my_node = node; - if ( !getControlPanel().isDrawPhylogram() ) { - my_node = getPhylogeny().getFirstExternalNode(); - } - if ( getControlPanel().isShowTaxonomyCode() && ( PhylogenyMethods.getSpecies( my_node ).length() > 0 ) ) { - x += getTreeFontSet()._fm_large_italic.stringWidth( PhylogenyMethods.getSpecies( my_node ) + " " ); - } - if ( getControlPanel().isShowNodeNames() && ( my_node.getName().length() > 0 ) ) { - x += getTreeFontSet()._fm_large.stringWidth( my_node.getName() + " " ); + if ( rv != null ) { + int x = 0; + PhylogenyNode my_node = node; + if ( !getControlPanel().isDrawPhylogram() ) { + my_node = getPhylogeny().getFirstExternalNode(); + } + if ( getControlPanel().isShowTaxonomyCode() && ( PhylogenyMethods.getSpecies( my_node ).length() > 0 ) ) { + x += getTreeFontSet()._fm_large_italic.stringWidth( PhylogenyMethods.getSpecies( my_node ) + " " ); + } + if ( getControlPanel().isShowNodeNames() && ( my_node.getName().length() > 0 ) ) { + x += getTreeFontSet()._fm_large.stringWidth( my_node.getName() + " " ); + } + rv.render( my_node.getXcoord() + x, node.getYcoord() - 5, g, this, to_pdf ); } - rv.render( my_node.getXcoord() + x, node.getYcoord() - 5, g, this, to_pdf ); } ////////////// } @@ -4176,7 +4212,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } node_ids.add( node.getId() ); getCopiedAndPastedNodes().addAll( node_ids ); - _nodes_in_preorder = null; + setNodeInPreorderToNull(); _phylogeny.externalNodesHaveChanged(); _phylogeny.hashIDs(); _phylogeny.recalculateNumberOfExternalDescendants( true ); @@ -4252,7 +4288,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getPhylogeny().reRoot( node ); getPhylogeny().recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); - _nodes_in_preorder = null; + setNodeInPreorderToNull(); resetPreferredSize(); getMainPanel().adjustJScrollPane(); repaint(); @@ -4391,7 +4427,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee * @param x * @param y */ - final void setParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) { + public final void setParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) { // updateStyle(); not needed? if ( ( _phylogeny != null ) && !_phylogeny.isEmpty() ) { initNodeData(); @@ -4512,10 +4548,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee * an instance of a Phylogeny */ public final void setTree( final Phylogeny t ) { - _nodes_in_preorder = null; + setNodeInPreorderToNull(); _phylogeny = t; } + final void setNodeInPreorderToNull() { + _nodes_in_preorder = null; + } + final void setTreeFile( final File treefile ) { _treefile = treefile; } @@ -4723,6 +4763,26 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee .append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence.getValue(), getOptions() .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) ); + if ( confidence.getStandardDeviation() != Confidence.CONFIDENCE_DEFAULT_VALUE ) { + _popup_buffer.append( " (sd=" ); + _popup_buffer.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence + .getStandardDeviation(), getOptions() + .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) ); + _popup_buffer.append( ")" ); + } + } + } + if ( node.getNodeData().isHasProperties() ) { + final PropertiesMap properties = node.getNodeData().getProperties(); + for( final String ref : properties.getPropertyRefs() ) { + _popup_buffer.append( "\n" ); + final Property p = properties.getProperty( ref ); + _popup_buffer.append( getPartAfterColon( p.getRef() ) ); + _popup_buffer.append( "=" ); + _popup_buffer.append( p.getValue() ); + if ( !ForesterUtil.isEmpty( p.getUnit() ) ) { + _popup_buffer.append( getPartAfterColon( p.getUnit() ) ); + } } } if ( _popup_buffer.length() > 0 ) { @@ -4802,7 +4862,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee JOptionPane.WARNING_MESSAGE ); return; } - _nodes_in_preorder = null; + setNodeInPreorderToNull(); if ( !node.isExternal() && !node.isRoot() && ( _subtree_index <= ( TreePanel.MAX_SUBTREES - 1 ) ) ) { _sub_phylogenies[ _subtree_index ] = _phylogeny; _sub_phylogenies_temp_roots[ _subtree_index ] = node; @@ -4839,7 +4899,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final void superTree() { - _nodes_in_preorder = null; + setNodeInPreorderToNull(); final PhylogenyNode temp_root = _sub_phylogenies_temp_roots[ _subtree_index - 1 ]; for( final PhylogenyNode n : temp_root.getDescendants() ) { n.setParent( temp_root ); @@ -4853,11 +4913,21 @@ 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; + setNodeInPreorderToNull(); } repaint(); } - + + + final void sortDescendants( final PhylogenyNode node ) { + if ( !node.isExternal() ) { + PhylogenyMethods.sortNodeDescendents( node ); + setNodeInPreorderToNull(); + } + repaint(); + } + + final private void switchDisplaygetPhylogenyGraphicsType() { switch ( getPhylogenyGraphicsType() ) { case RECTANGULAR: @@ -4924,7 +4994,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } setWaitCursor(); - Util.colorPhylogenyAccordingToExternalTaxonomy( _phylogeny, this ); + AptxUtil.colorPhylogenyAccordingToExternalTaxonomy( _phylogeny, this ); _control_panel.setColorBranches( true ); if ( _control_panel.getColorBranchesCb() != null ) { _control_panel.getColorBranchesCb().setSelected( true );