import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map.Entry;
import java.util.Set;
+import java.util.SortedMap;
import java.util.SortedSet;
+import java.util.TreeMap;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
if ( getControlPanel().isShowAnnotation()
&& ( node.getNodeData().getSequence().getAnnotations() != null )
&& !node.getNodeData().getSequence().getAnnotations().isEmpty() ) {
- sum += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getSequence().getAnnotation( 0 )
- .asSimpleText()
+ sum += getTreeFontSet()._fm_large.stringWidth( TreePanelUtil.createAnnotationString( node
+ .getNodeData().getSequence().getAnnotations(), getOptions().isShowAnnotationRefSource() )
+ " " );
}
if ( getControlPanel().isShowDomainArchitectures()
}
if ( c == null ) {
if ( !ForesterUtil.isEmpty( tax.getTaxonomyCode() ) ) {
- c = AptxUtil.calculateColorFromString( tax.getTaxonomyCode() );
+ c = TreePanelUtil.calculateColorFromString( tax.getTaxonomyCode(), true );
getControlPanel().getSpeciesColors().put( tax.getTaxonomyCode(), c );
}
else {
- c = AptxUtil.calculateColorFromString( tax.getScientificName() );
+ c = TreePanelUtil.calculateColorFromString( tax.getScientificName(), true );
getControlPanel().getSpeciesColors().put( tax.getScientificName(), c );
}
}
}
if ( !node.isExternal() && !node.isRoot() ) {
final boolean collapse = !node.isCollapse();
- AptxUtil.collapseSubtree( node, collapse );
+ TreePanelUtil.collapseSubtree( node, collapse );
updateSetOfCollapsedExternalNodes();
_phylogeny.recalculateNumberOfExternalDescendants( true );
resetNodeIdToDistToLeafMap();
return;
}
setWaitCursor();
- AptxUtil.collapseSpeciesSpecificSubtrees( _phylogeny );
+ TreePanelUtil.collapseSpeciesSpecificSubtrees( _phylogeny );
updateSetOfCollapsedExternalNodes();
_phylogeny.recalculateNumberOfExternalDescendants( true );
resetNodeIdToDistToLeafMap();
}
setWaitCursor();
AptxUtil.removeBranchColors( _phylogeny );
- final int colorizations = AptxUtil.colorPhylogenyAccordingToRanks( _phylogeny, rank, this );
+ final int colorizations = TreePanelUtil.colorPhylogenyAccordingToRanks( _phylogeny, rank, this );
if ( colorizations > 0 ) {
_control_panel.setColorBranches( true );
if ( _control_panel.getColorBranchesCb() != null ) {
}
setWaitCursor();
AptxUtil.removeBranchColors( _phylogeny );
- AptxUtil.colorPhylogenyAccordingToConfidenceValues( _phylogeny, this );
+ TreePanelUtil.colorPhylogenyAccordingToConfidenceValues( _phylogeny, this );
_control_panel.setColorBranches( true );
if ( _control_panel.getColorBranchesCb() != null ) {
_control_panel.getColorBranchesCb().setSelected( true );
_sub_phylogenies[ _subtree_index ] = _phylogeny;
_sub_phylogenies_temp_roots[ _subtree_index ] = node;
++_subtree_index;
- _phylogeny = subTree( node, _phylogeny );
+ _phylogeny = TreePanelUtil.subTree( node, _phylogeny );
updateSubSuperTreeButton();
}
else if ( node.isRoot() && isCurrentTreeIsSubtree() ) {
return;
}
setWaitCursor();
- AptxUtil.colorPhylogenyAccordingToExternalTaxonomy( _phylogeny, this );
+ TreePanelUtil.colorPhylogenyAccordingToExternalTaxonomy( _phylogeny, this );
_control_panel.setColorBranches( true );
if ( _control_panel.getColorBranchesCb() != null ) {
_control_panel.getColorBranchesCb().setSelected( true );
if ( getControlPanel().isColorAccordingToAnnotation() && ( getControlPanel().getAnnotationColors() != null ) ) {
final StringBuilder sb = new StringBuilder();
for( final Annotation a : ann ) {
- sb.append( !ForesterUtil.isEmpty( a.getRef() ) ? a.getRef() : a.getDesc() );
+ sb.append( !ForesterUtil.isEmpty( a.getRefValue() ) ? a.getRefValue() : a.getDesc() );
}
final String ann_str = sb.toString();
if ( !ForesterUtil.isEmpty( ann_str ) ) {
c = getControlPanel().getAnnotationColors().get( ann_str );
if ( c == null ) {
- c = AptxUtil.calculateColorFromString( ann_str );
+ c = TreePanelUtil.calculateColorFromString( ann_str, false );
getControlPanel().getAnnotationColors().put( ann_str, c );
}
if ( c == null ) {
JOptionPane.WARNING_MESSAGE );
}
- final private void colorizeSubtree( final Color c, final PhylogenyNode node ) {
- if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) {
- JOptionPane.showMessageDialog( this,
- "Cannot colorize subtree in unrooted display type",
- "Attempt to colorize subtree in unrooted display",
- JOptionPane.WARNING_MESSAGE );
- return;
- }
+ final private void colorizeSubtree( final Color c,
+ final PhylogenyNode node,
+ final List<PhylogenyNode> additional_nodes ) {
_control_panel.setColorBranches( true );
if ( _control_panel.getColorBranchesCb() != null ) {
_control_panel.getColorBranchesCb().setSelected( true );
}
- for( final PreorderTreeIterator it = new PreorderTreeIterator( node ); it.hasNext(); ) {
- it.next().getBranchData().setBranchColor( new BranchColor( c ) );
+ if ( node != null ) {
+ for( final PreorderTreeIterator it = new PreorderTreeIterator( node ); it.hasNext(); ) {
+ it.next().getBranchData().setBranchColor( new BranchColor( c ) );
+ }
+ }
+ if ( additional_nodes != null ) {
+ for( final PhylogenyNode n : additional_nodes ) {
+ n.getBranchData().setBranchColor( new BranchColor( c ) );
+ }
}
repaint();
}
final private void colorSubtree( final PhylogenyNode node ) {
- Color intitial_color = null;
- if ( getControlPanel().isColorBranches() && ( PhylogenyMethods.getBranchColorValue( node ) != null )
- && ( ( ( !node.isRoot() && ( node.getParent().getNumberOfDescendants() < 3 ) ) ) || ( node.isRoot() ) ) ) {
- intitial_color = PhylogenyMethods.getBranchColorValue( node );
+ if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) {
+ JOptionPane.showMessageDialog( this,
+ "Cannot colorize subtree in unrooted display type",
+ "Attempt to colorize subtree in unrooted display",
+ JOptionPane.WARNING_MESSAGE );
+ return;
+ }
+ _color_chooser.setPreviewPanel( new JPanel() );
+ SubtreeColorizationActionListener al;
+ if ( ( getFoundNodes() != null ) && !getFoundNodes().isEmpty() ) {
+ final List<PhylogenyNode> additional_nodes = new ArrayList<PhylogenyNode>();
+ for( final Long id : getFoundNodes() ) {
+ additional_nodes.add( _phylogeny.getNode( id ) );
+ }
+ al = new SubtreeColorizationActionListener( _color_chooser, node, additional_nodes );
}
else {
- intitial_color = getTreeColorSet().getBranchColor();
+ al = new SubtreeColorizationActionListener( _color_chooser, node );
}
- _color_chooser.setColor( intitial_color );
- _color_chooser.setPreviewPanel( new JPanel() );
final JDialog dialog = JColorChooser
- .createDialog( this,
- "Subtree colorization",
- true,
- _color_chooser,
- new SubtreeColorizationActionListener( _color_chooser, node ),
- null );
+ .createDialog( this, "Subtree colorization", true, _color_chooser, al, null );
dialog.setVisible( true );
}
repaint();
}
- private String createAnnotationString( final SortedSet<Annotation> ann ) {
- final StringBuilder sb = new StringBuilder();
- boolean first = true;
- for( final Annotation a : ann ) {
- if ( !first ) {
- sb.append( "+" );
- }
- else {
- first = false;
- }
- sb.append( a.asSimpleText() );
- }
- final String ann_str = sb.toString();
- return ann_str;
- }
-
final private String createASimpleTextRepresentationOfANode( final PhylogenyNode node ) {
final String tax = PhylogenyMethods.getSpecies( node );
String label = node.getName();
return "Scientific Names";
case TAXONOMY_CODE:
return "Taxonomy Codes";
+ case TAXONOMY_COMM0N_NAME:
+ return "Taxonomy Common Names";
case UNKNOWN:
return "User Selected Data";
default:
cannotOpenBrowserWarningMessage( "sequence" );
return;
}
- final String uri_str = AptxUtil.createUriForSeqWeb( node, getConfiguration(), this );
+ final String uri_str = TreePanelUtil.createUriForSeqWeb( node, getConfiguration(), this );
if ( !ForesterUtil.isEmpty( uri_str ) ) {
try {
AptxUtil.launchWebBrowser( new URI( uri_str ),
if ( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() ) {
outline_color = Color.BLACK;
}
- else if ( getControlPanel().isEvents() && AptxUtil.isHasAssignedEvent( node ) ) {
+ else if ( getControlPanel().isEvents() && TreePanelUtil.isHasAssignedEvent( node ) ) {
final Event event = node.getNodeData().getEvent();
if ( event.isDuplication() ) {
outline_color = getTreeColorSet().getDuplicationBoxColor();
else if ( getControlPanel().isColorAccordingToAnnotation() ) {
g.setColor( calculateColorForAnnotation( ann ) );
}
- final String ann_str = createAnnotationString( ann );
+ final String ann_str = TreePanelUtil.createAnnotationString( ann, getOptions().isShowAnnotationRefSource() );
TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + half_box_size, node.getYcoord()
+ ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g );
_sb.setLength( 0 );
.getAccession().toString()
+ " " );
}
+ if ( getControlPanel().isShowAnnotation()
+ && ( node.getNodeData().getSequence().getAnnotations() != null )
+ && ( !node.getNodeData().getSequence().getAnnotations().isEmpty() ) ) {
+ x += getTreeFontSet()._fm_large.stringWidth( TreePanelUtil.createAnnotationString( node
+ .getNodeData().getSequence().getAnnotations(), getOptions()
+ .isShowAnnotationRefSource() )
+ + " " );
+ }
}
if ( getControlPanel().isShowNodeNames() && !ForesterUtil.isEmpty( node.getName() ) ) {
x += getTreeFontSet()._fm_large.stringWidth( node.getName() + " " );
final float y = getVisibleRect().y + getOvYPosition() + ( getOvMaxHeight() / y_ratio );
g.setColor( getTreeColorSet().getFoundColor() );
getOvRectangle().setRect( x, y, width, height );
+ final Stroke s = g.getStroke();
+ g.setStroke( STROKE_1 );
if ( ( width < 6 ) && ( height < 6 ) ) {
drawRectFilled( x, y, 6, 6, g );
getOvVirtualRectangle().setRect( x, y, 6, 6 );
}
getOvVirtualRectangle().setRect( x, y, width, height );
}
+ g.setStroke( s );
}
final private void paintPhylogenyLite( final Graphics2D g ) {
else {
g.setColor( getTreeColorSet().getBranchLengthColor() );
}
+ final Stroke s = g.getStroke();
+ g.setStroke( STROKE_1 );
drawLine( x1, y1, x1, y2, g );
drawLine( x2, y1, x2, y2, g );
drawLine( x1, y3, x2, y3, g );
if ( getScaleLabel() != null ) {
g.drawString( getScaleLabel(), ( x1 + 2 ), y3 - 2 );
}
+ g.setStroke( s );
}
final private int paintTaxonomy( final Graphics2D g,
sb.append( " " );
}
final Property p = properties.getProperty( ref );
- sb.append( getPartAfterColon( p.getRef() ) );
+ sb.append( TreePanelUtil.getPartAfterColon( p.getRef() ) );
sb.append( "=" );
sb.append( p.getValue() );
if ( !ForesterUtil.isEmpty( p.getUnit() ) ) {
- sb.append( getPartAfterColon( p.getUnit() ) );
+ sb.append( TreePanelUtil.getPartAfterColon( p.getUnit() ) );
}
}
return sb;
final StringBuilder sb = new StringBuilder();
if ( n.getNodeData().isHasSequence()
&& !ForesterUtil.isEmpty( n.getNodeData().getSequence().getMolecularSequence() ) ) {
+ final StringBuilder ann = new StringBuilder();
+ if ( !ForesterUtil.isEmpty( n.getName() ) ) {
+ ann.append( n.getName() );
+ ann.append( "|" );
+ }
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getSequence().getSymbol() ) ) {
+ ann.append( "SYM=" );
+ ann.append( n.getNodeData().getSequence().getSymbol() );
+ ann.append( "|" );
+ }
if ( !ForesterUtil.isEmpty( n.getNodeData().getSequence().getName() ) ) {
- sb.append( SequenceWriter.toFasta( n.getNodeData().getSequence().getName(), n.getNodeData()
- .getSequence().getMolecularSequence(), 60 ) );
+ ann.append( "NAME=" );
+ ann.append( n.getNodeData().getSequence().getName() );
+ ann.append( "|" );
}
- else {
- sb.append( SequenceWriter.toFasta( n.getName(), n.getNodeData().getSequence()
- .getMolecularSequence(), 60 ) );
+ if ( n.getNodeData().getSequence().getAccession() != null ) {
+ ann.append( "ACC=" );
+ ann.append( n.getNodeData().getSequence().getAccession().asText() );
+ ann.append( "|" );
}
+ if ( n.getNodeData().isHasTaxonomy() ) {
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) {
+ ann.append( "TAXID=" );
+ ann.append( n.getNodeData().getTaxonomy().getTaxonomyCode() );
+ ann.append( "|" );
+ }
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
+ ann.append( "SN=" );
+ ann.append( n.getNodeData().getTaxonomy().getScientificName() );
+ ann.append( "|" );
+ }
+ }
+ String ann_str = ann.toString().trim();
+ if ( ann_str.endsWith( "|" ) ) {
+ ann_str = ann_str.substring( 0, ann_str.length() - 1 );
+ }
+ sb.append( SequenceWriter.toFasta( ann_str, n.getNodeData().getSequence()
+ .getMolecularSequence(), 60 ) );
data.add( sb.toString() );
}
break;
data.add( n.getNodeData().getTaxonomy().getScientificName() );
}
break;
+ case TAXONOMY_COMM0N_NAME:
+ if ( n.getNodeData().isHasTaxonomy()
+ && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getCommonName() ) ) {
+ data.add( n.getNodeData().getTaxonomy().getCommonName() );
+ }
+ break;
case TAXONOMY_CODE:
if ( n.getNodeData().isHasTaxonomy()
&& !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) {
}
break;
case UNKNOWN:
- AptxUtil.showExtDescNodeDataUserSelectedHelper( getControlPanel(), n, data );
+ TreePanelUtil.showExtDescNodeDataUserSelectedHelper( getControlPanel(), n, data );
break;
default:
throw new IllegalArgumentException( "unknown data element: "
+ getOptions().getExtDescNodeDataToReturn() );
}
} // for loop
+ final StringBuilder sb = new StringBuilder();
+ final int size = makeSB( data, getOptions(), sb );
if ( ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE )
|| ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.BUFFER_ONLY ) ) {
- final StringBuilder sb = new StringBuilder();
- for( final String d : data ) {
- if ( !ForesterUtil.isEmpty( d ) ) {
- if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE ) {
- System.out.println( d );
- }
- sb.append( d );
- sb.append( ForesterUtil.LINE_SEPARATOR );
- }
+ if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE ) {
+ System.out.println( sb );
}
if ( sb.length() < 1 ) {
clearCurrentExternalNodesDataBuffer();
}
}
else if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.WINODW ) {
- final StringBuilder sb = new StringBuilder();
- for( final String d : data ) {
- if ( !ForesterUtil.isEmpty( d ) ) {
- sb.append( d );
- sb.append( ForesterUtil.LINE_SEPARATOR );
- }
- }
if ( sb.length() < 1 ) {
- AptxUtil.showInformationMessage( this,
- "No Appropriate Data (" + obtainTitleForExtDescNodeData() + ")",
- "Descendants of selected node do not contain selected data" );
+ TreePanelUtil.showInformationMessage( this, "No Appropriate Data (" + obtainTitleForExtDescNodeData()
+ + ")", "Descendants of selected node do not contain selected data" );
clearCurrentExternalNodesDataBuffer();
}
else {
setCurrentExternalNodesDataBuffer( sb );
- final String title = "External Descendants "
- + ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
- : obtainTitleForExtDescNodeData() ) + " (" + data.size() + "/"
- + node.getNumberOfExternalNodes() + ") For Node " + node;
+ final String title = ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
+ : obtainTitleForExtDescNodeData() )
+ + " for "
+ + data.size()
+ + "/"
+ + node.getNumberOfExternalNodes()
+ + " external descendats of node "
+ + node
+ + ", unique entries: " + size;
final String s = sb.toString().trim();
if ( getMainPanel().getMainFrame() == null ) {
// Must be "E" applet version.
}
}
+ private int makeSB( final List<String> data, final Options optz, final StringBuilder sb ) {
+ final SortedMap<String, Integer> map = new TreeMap<String, Integer>();
+ if ( ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ )
+ && ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ_FASTA ) ) {
+ for( final String d : data ) {
+ if ( !ForesterUtil.isEmpty( d ) ) {
+ if ( map.containsKey( d ) ) {
+ map.put( d, map.get( d ) + 1 );
+ }
+ else {
+ map.put( d, 1 );
+ }
+ }
+ }
+ }
+ int size = 0;
+ if ( ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ )
+ && ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ_FASTA ) ) {
+ for( final Entry<String, Integer> e : map.entrySet() ) {
+ final String v = e.getKey();
+ final Object c = e.getValue();
+ sb.append( v );
+ sb.append( "\t" );
+ sb.append( c );
+ sb.append( ForesterUtil.LINE_SEPARATOR );
+ }
+ size = map.size();
+ }
+ else {
+ for( final String d : data ) {
+ if ( !ForesterUtil.isEmpty( d ) ) {
+ sb.append( d );
+ sb.append( ForesterUtil.LINE_SEPARATOR );
+ }
+ }
+ size = data.size();
+ }
+ return size;
+ }
+
final private void showNodeDataPopup( final MouseEvent e, final PhylogenyNode node ) {
try {
if ( ( node.getName().length() > 0 )
- || ( node.getNodeData().isHasTaxonomy() && !isTaxonomyEmpty( node.getNodeData().getTaxonomy() ) )
- || ( node.getNodeData().isHasSequence() && !isSequenceEmpty( node.getNodeData().getSequence() ) )
- || ( node.getNodeData().isHasDate() ) || ( node.getNodeData().isHasDistribution() )
- || node.getBranchData().isHasConfidences() ) {
+ || ( node.getNodeData().isHasTaxonomy() && !TreePanelUtil.isTaxonomyEmpty( node.getNodeData()
+ .getTaxonomy() ) )
+ || ( node.getNodeData().isHasSequence() && !TreePanelUtil.isSequenceEmpty( node.getNodeData()
+ .getSequence() ) ) || ( node.getNodeData().isHasDate() )
+ || ( node.getNodeData().isHasDistribution() ) || node.getBranchData().isHasConfidences() ) {
_popup_buffer.setLength( 0 );
short lines = 0;
if ( node.getName().length() > 0 ) {
lines++;
_popup_buffer.append( node.getName() );
}
- if ( node.getNodeData().isHasTaxonomy() && !isTaxonomyEmpty( node.getNodeData().getTaxonomy() ) ) {
+ if ( node.getNodeData().isHasTaxonomy()
+ && !TreePanelUtil.isTaxonomyEmpty( node.getNodeData().getTaxonomy() ) ) {
lines++;
boolean enc_data = false;
final Taxonomy tax = node.getNodeData().getTaxonomy();
}
}
}
- if ( node.getNodeData().isHasSequence() && !isSequenceEmpty( node.getNodeData().getSequence() ) ) {
+ if ( node.getNodeData().isHasSequence()
+ && !TreePanelUtil.isSequenceEmpty( node.getNodeData().getSequence() ) ) {
lines++;
boolean enc_data = false;
if ( _popup_buffer.length() > 0 ) {
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( TreePanelUtil.getPartAfterColon( p.getRef() ) );
_popup_buffer.append( "=" );
_popup_buffer.append( p.getValue() );
if ( !ForesterUtil.isEmpty( p.getUnit() ) ) {
- _popup_buffer.append( getPartAfterColon( p.getUnit() ) );
+ _popup_buffer.append( TreePanelUtil.getPartAfterColon( p.getUnit() ) );
}
}
}
}
}
- final private static void drawString( final int i, final double x, final double y, final Graphics2D g ) {
- g.drawString( String.valueOf( i ), ( int ) ( x + 0.5 ), ( int ) ( y + 0.5 ) );
- }
-
final private static void drawString( final String str, final double x, final double y, final Graphics2D g ) {
g.drawString( str, ( int ) ( x + 0.5 ), ( int ) ( y + 0.5 ) );
}
- 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() );
- }
-
- final private static boolean isSequenceEmpty( final Sequence seq ) {
- return ( seq.getAccession() == null ) && ForesterUtil.isEmpty( seq.getName() )
- && ForesterUtil.isEmpty( seq.getSymbol() );
- }
-
- final private static boolean isTaxonomyEmpty( final Taxonomy tax ) {
- return ( ( tax.getIdentifier() == null ) && ForesterUtil.isEmpty( tax.getTaxonomyCode() )
- && ForesterUtil.isEmpty( tax.getCommonName() ) && ForesterUtil.isEmpty( tax.getScientificName() ) && tax
- .getSynonyms().isEmpty() );
- }
-
final private static boolean plusPressed( final int key_code ) {
return ( ( key_code == KeyEvent.VK_ADD ) || ( key_code == KeyEvent.VK_PLUS )
|| ( key_code == KeyEvent.VK_EQUALS ) || ( key_code == KeyEvent.VK_SEMICOLON ) || ( key_code == KeyEvent.VK_1 ) );
}
- final private static Phylogeny subTree( final PhylogenyNode new_root, final Phylogeny source_phy ) {
- final Phylogeny new_phy = new Phylogeny();
- new_phy.setRooted( true );
- new_phy.setName( source_phy.getName() );
- new_phy.setDescription( source_phy.getDescription() );
- new_phy.setType( source_phy.getType() );
- new_phy.setDistanceUnit( source_phy.getDistanceUnit() );
- new_phy.setConfidence( source_phy.getConfidence() );
- new_phy.setIdentifier( source_phy.getIdentifier() );
- new_phy.setRoot( new_root.copyNodeDataShallow() );
- int i = 0;
- for( final PhylogenyNode n : new_root.getDescendants() ) {
- new_phy.getRoot().setChildNode( i++, n );
- }
- return new_phy;
- }
-
final private class SubtreeColorizationActionListener implements ActionListener {
- JColorChooser _chooser;
- PhylogenyNode _node;
+ JColorChooser _chooser = null;
+ PhylogenyNode _node = null;
+ List<PhylogenyNode> _additional_nodes = null;
SubtreeColorizationActionListener( final JColorChooser chooser, final PhylogenyNode node ) {
_chooser = chooser;
_node = node;
}
+ SubtreeColorizationActionListener( final JColorChooser chooser,
+ final PhylogenyNode node,
+ final List<PhylogenyNode> additional_nodes ) {
+ _chooser = chooser;
+ _node = node;
+ _additional_nodes = additional_nodes;
+ }
+
@Override
public void actionPerformed( final ActionEvent e ) {
final Color c = _chooser.getColor();
if ( c != null ) {
- colorizeSubtree( c, _node );
+ colorizeSubtree( c, _node, _additional_nodes );
}
}
}