import org.forester.phylogeny.data.Confidence;
import org.forester.phylogeny.data.Event;
import org.forester.phylogeny.data.NodeData.NODE_DATA;
-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.NodeVisualData;
+import org.forester.phylogeny.data.NodeVisualData.NodeFill;
+import org.forester.phylogeny.data.NodeVisualData.NodeShape;
import org.forester.phylogeny.data.PhylogenyDataUtil;
import org.forester.phylogeny.data.PropertiesMap;
import org.forester.phylogeny.data.Property;
final int colorizations = TreePanelUtil.colorPhylogenyAccordingToRanks( _phylogeny, rank, this );
if ( colorizations > 0 ) {
_control_panel.setColorBranches( true );
- if ( _control_panel.getColorBranchesCb() != null ) {
- _control_panel.getColorBranchesCb().setSelected( true );
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ _control_panel.getUseVisualStylesCb().setSelected( true );
}
if ( _control_panel.getColorAccSpeciesCb() != null ) {
_control_panel.getColorAccSpeciesCb().setSelected( false );
AptxUtil.removeBranchColors( _phylogeny );
TreePanelUtil.colorPhylogenyAccordingToConfidenceValues( _phylogeny, this );
_control_panel.setColorBranches( true );
- if ( _control_panel.getColorBranchesCb() != null ) {
- _control_panel.getColorBranchesCb().setSelected( true );
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ _control_panel.getUseVisualStylesCb().setSelected( true );
}
setArrowCursor();
repaint();
}
final Color getGraphicsForNodeBoxWithColorForParentBranch( final PhylogenyNode node ) {
- if ( getControlPanel().isColorBranches() && ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
+ if ( getControlPanel().isUseVisualStyles() && ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
return ( PhylogenyMethods.getBranchColorValue( node ) );
}
else {
setWaitCursor();
TreePanelUtil.colorPhylogenyAccordingToExternalTaxonomy( _phylogeny, this );
_control_panel.setColorBranches( true );
- if ( _control_panel.getColorBranchesCb() != null ) {
- _control_panel.getColorBranchesCb().setSelected( true );
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ _control_panel.getUseVisualStylesCb().setSelected( true );
}
setEdited( true );
setArrowCursor();
&& !to_graphics_file && getCopiedAndPastedNodes().contains( node.getId() ) ) {
g.setColor( getTreeColorSet().getFoundColor0() );
}
- else if ( getControlPanel().isColorBranches() && ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
+ else if ( getControlPanel().isUseVisualStyles() && ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
g.setColor( PhylogenyMethods.getBranchColorValue( node ) );
}
else if ( to_pdf ) {
final PhylogenyNode node,
final List<PhylogenyNode> additional_nodes ) {
_control_panel.setColorBranches( true );
- if ( _control_panel.getColorBranchesCb() != null ) {
- _control_panel.getColorBranchesCb().setSelected( true );
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ _control_panel.getUseVisualStylesCb().setSelected( true );
}
if ( node != null ) {
for( final PreorderTreeIterator it = new PreorderTreeIterator( node ); it.hasNext(); ) {
repaint();
}
+ final private void colorizeNodes( final Color c,
+ final PhylogenyNode node,
+ final List<PhylogenyNode> additional_nodes ) {
+ _control_panel.setColorBranches( true );
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ _control_panel.getUseVisualStylesCb().setSelected( true );
+ }
+ if ( node != null ) {
+ colorizeNodesHelper( c, node );
+ }
+ if ( additional_nodes != null ) {
+ for( final PhylogenyNode n : additional_nodes ) {
+ colorizeNodesHelper( c, n );
+ }
+ }
+ repaint();
+ }
+
+ private final static void colorizeNodesHelper( final Color c, final PhylogenyNode node ) {
+ if ( node.getNodeData().getNodeVisualData() == null ) {
+ node.getNodeData().setNodeVisualData( new NodeVisualData() );
+ }
+ node.getNodeData().getNodeVisualData().setFontColor( new Color( c.getRed(), c.getGreen(), c.getBlue() ) );
+ }
+
final private void colorSubtree( final PhylogenyNode node ) {
if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) {
JOptionPane.showMessageDialog( this,
}
_color_chooser.setPreviewPanel( new JPanel() );
SubtreeColorizationActionListener al;
- if ( ( getFoundNodes0() != null ) && !getFoundNodes0().isEmpty() ) {
- final List<PhylogenyNode> additional_nodes = getFoundNodes0AsListOfPhylogenyNodes();
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ final List<PhylogenyNode> additional_nodes = getFoundNodesAsListOfPhylogenyNodes();
al = new SubtreeColorizationActionListener( _color_chooser, node, additional_nodes );
}
else {
dialog.setVisible( true );
}
+ private void colorNodeFont( final PhylogenyNode node ) {
+ _color_chooser.setPreviewPanel( new JPanel() );
+ NodeColorizationActionListener al;
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ final List<PhylogenyNode> additional_nodes = getFoundNodesAsListOfPhylogenyNodes();
+ al = new NodeColorizationActionListener( _color_chooser, node, additional_nodes );
+ }
+ else {
+ al = new NodeColorizationActionListener( _color_chooser, node );
+ }
+ final JDialog dialog = JColorChooser.createDialog( this, "Node colorization", true, _color_chooser, al, null );
+ dialog.setVisible( true );
+ }
+
+ private void changeNodeFont( final PhylogenyNode node ) {
+ final FontChooser fc = new FontChooser();
+ Font f = null;
+ if ( ( node.getNodeData().getNodeVisualData() != null ) && !node.getNodeData().getNodeVisualData().isEmpty() ) {
+ f = node.getNodeData().getNodeVisualData().getFont();
+ }
+ if ( f != null ) {
+ fc.setFont( f );
+ }
+ else {
+ fc.setFont( getMainPanel().getTreeFontSet().getLargeFont() );
+ }
+ fc.showDialog( this, "Select Font" );
+ if ( ( fc.getFont() != null ) && !ForesterUtil.isEmpty( fc.getFont().getFamily().trim() ) ) {
+ List<PhylogenyNode> nodes = new ArrayList<PhylogenyNode>();
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ nodes = getFoundNodesAsListOfPhylogenyNodes();
+ }
+ nodes.add( node );
+ for( final PhylogenyNode n : nodes ) {
+ if ( n.getNodeData().getNodeVisualData() == null ) {
+ n.getNodeData().setNodeVisualData( new NodeVisualData() );
+ }
+ final NodeVisualData vd = n.getNodeData().getNodeVisualData();
+ final Font ff = fc.getFont();
+ vd.setFontName( ff.getFamily().trim() );
+ int s = ff.getSize();
+ if ( s < 0 ) {
+ s = 0;
+ }
+ if ( s > Byte.MAX_VALUE ) {
+ s = Byte.MAX_VALUE;
+ }
+ vd.setFontSize( s );
+ vd.setFontStyle( ff.getStyle() );
+ }
+ if ( _control_panel.getUseVisualStylesCb() != null ) {
+ getControlPanel().getUseVisualStylesCb().setSelected( true );
+ }
+ }
+ repaint();
+ }
+
final private void copySubtree( final PhylogenyNode node ) {
if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) {
errorMessageNoCutCopyPasteInUnrootedDisplay();
return getMainPanel().getCutOrCopiedTree();
}
- private List<PhylogenyNode> getFoundNodes0AsListOfPhylogenyNodes() {
+ private List<PhylogenyNode> getFoundNodesAsListOfPhylogenyNodes() {
final List<PhylogenyNode> additional_nodes = new ArrayList<PhylogenyNode>();
- for( final Long id : getFoundNodes0() ) {
- additional_nodes.add( _phylogeny.getNode( id ) );
+ if ( getFoundNodes0() != null ) {
+ for( final Long id : getFoundNodes0() ) {
+ additional_nodes.add( _phylogeny.getNode( id ) );
+ }
}
- return additional_nodes;
- }
-
- private List<PhylogenyNode> getFoundNodes1AsListOfPhylogenyNodes() {
- final List<PhylogenyNode> additional_nodes = new ArrayList<PhylogenyNode>();
- for( final Long id : getFoundNodes1() ) {
- additional_nodes.add( _phylogeny.getNode( id ) );
+ if ( getFoundNodes1() != null ) {
+ for( final Long id : getFoundNodes1() ) {
+ if ( ( getFoundNodes0() == null ) || !getFoundNodes0().contains( id ) ) {
+ additional_nodes.add( _phylogeny.getNode( id ) );
+ }
+ }
}
return additional_nodes;
}
case COLOR_SUBTREE:
colorSubtree( node );
break;
+ case COLOR_NODE_FONT:
+ colorNodeFont( node );
+ break;
+ case CHANGE_NODE_FONT:
+ changeNodeFont( node );
+ break;
case OPEN_SEQ_WEB:
openSeqWeb( node );
break;
else if ( getControlPanel().isColorAccordingToTaxonomy() ) {
c = getTaxonomyBasedColor( node );
}
- else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isColorBranches()
+ else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isUseVisualStyles()
&& ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
c = PhylogenyMethods.getBranchColorValue( node );
}
_polygon.lineTo( node.getXcoord() + 1, node.getYcoord() - d );
_polygon.lineTo( node.getXcoord() + 1, node.getYcoord() + d );
_polygon.closePath();
- if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.SOLID ) {
+ if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.SOLID ) {
g.setColor( c );
g.fill( _polygon );
}
- else if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.NONE ) {
+ else if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.NONE ) {
g.setColor( getBackground() );
g.fill( _polygon );
g.setColor( c );
background,
outline_color );
}
- else if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.SOLID ) {
+ else if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.SOLID ) {
g.setColor( outline_color );
drawOvalFilled( x - half_box_size, y - half_box_size, box_size, box_size, g );
}
}
- else if ( getOptions().getDefaultNodeShape() == NodeVisualization.NodeShape.RECTANGLE ) {
- if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.GRADIENT ) {
+ else if ( getOptions().getDefaultNodeShape() == NodeVisualData.NodeShape.RECTANGLE ) {
+ if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.GRADIENT ) {
drawRectGradient( x - half_box_size, y - half_box_size, box_size, box_size, g, to_pdf ? Color.WHITE
: outline_color, to_pdf ? outline_color : getBackground(), outline_color );
}
- else if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.NONE ) {
+ else if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.NONE ) {
Color background = getBackground();
if ( to_pdf ) {
background = Color.WHITE;
background,
outline_color );
}
- else if ( getOptions().getDefaultNodeFill() == NodeVisualization.NodeFill.SOLID ) {
+ else if ( getOptions().getDefaultNodeFill() == NodeVisualData.NodeFill.SOLID ) {
g.setColor( outline_color );
drawRectFilled( x - half_box_size, y - half_box_size, box_size, box_size, g );
}
else if ( is_in_found_nodes ) {
g.setColor( getColorForFoundNode( node ) );
}
+ else if ( getControlPanel().isUseVisualStyles() && ( node.getNodeData().getNodeVisualData() != null )
+ && ( node.getNodeData().getNodeVisualData().getFontColor() != null ) ) {
+ g.setColor( node.getNodeData().getNodeVisualData().getFontColor() );
+ }
else if ( getControlPanel().isColorAccordingToTaxonomy() ) {
g.setColor( getTaxonomyBasedColor( node ) );
}
.getNodeData().getSequence().getAnnotations().isEmpty() ) ) ) {
g.setColor( calculateColorForAnnotation( node.getNodeData().getSequence().getAnnotations() ) );
}
- else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isColorBranches()
+ else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isUseVisualStyles()
&& ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
g.setColor( PhylogenyMethods.getBranchColorValue( node ) );
}
}
_sb.append( propertiesToString( node ) );
}
- g.setFont( getTreeFontSet().getLargeFont() );
+ if ( getControlPanel().isUseVisualStyles() && ( node.getNodeData().getNodeVisualData() != null ) ) {
+ final Font f = node.getNodeData().getNodeVisualData().getFont();
+ g.setFont( f != null ? f : getTreeFontSet().getLargeFont() );
+ }
+ else {
+ g.setFont( getTreeFontSet().getLargeFont() );
+ }
if ( is_in_found_nodes ) {
g.setFont( getTreeFontSet().getLargeFont().deriveFont( Font.BOLD ) );
}
else if ( getControlPanel().isColorAccordingToTaxonomy() ) {
g.setColor( getTaxonomyBasedColor( node ) );
}
- else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isColorBranches()
+ else if ( getOptions().isColorLabelsSameAsParentBranch() && getControlPanel().isUseVisualStyles()
&& ( PhylogenyMethods.getBranchColorValue( node ) != null ) ) {
g.setColor( PhylogenyMethods.getBranchColorValue( node ) );
}
private void showExtDescNodeData( final PhylogenyNode node ) {
final List<String> data = new ArrayList<String>();
final List<PhylogenyNode> nodes = node.getAllExternalDescendants();
- if ( ( getFoundNodes0() != null ) && !getFoundNodes0().isEmpty() ) {
- for( final PhylogenyNode n : getFoundNodes0AsListOfPhylogenyNodes() ) {
- if ( !nodes.contains( n ) ) {
- nodes.add( n );
- }
- }
- }
- if ( ( getFoundNodes1() != null ) && !getFoundNodes1().isEmpty() ) {
- for( final PhylogenyNode n : getFoundNodes1AsListOfPhylogenyNodes() ) {
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ for( final PhylogenyNode n : getFoundNodesAsListOfPhylogenyNodes() ) {
if ( !nodes.contains( n ) ) {
nodes.add( n );
}
}
}
}
+
+ final private class NodeColorizationActionListener implements ActionListener {
+
+ List<PhylogenyNode> _additional_nodes = null;
+ JColorChooser _chooser = null;
+ PhylogenyNode _node = null;
+
+ NodeColorizationActionListener( final JColorChooser chooser, final PhylogenyNode node ) {
+ _chooser = chooser;
+ _node = node;
+ }
+
+ NodeColorizationActionListener( 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 ) {
+ colorizeNodes( c, _node, _additional_nodes );
+ }
+ }
+ }
}