import org.forester.phylogeny.data.Confidence;
import org.forester.phylogeny.data.DomainArchitecture;
import org.forester.phylogeny.data.Event;
-import org.forester.phylogeny.data.NodeData.NODE_DATA;
+import org.forester.phylogeny.data.NodeDataField;
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;
+import org.forester.phylogeny.data.ProteinDomain;
import org.forester.phylogeny.data.Sequence;
import org.forester.phylogeny.data.SequenceRelation;
import org.forester.phylogeny.data.Taxonomy;
public final class TreePanel extends JPanel implements ActionListener, MouseWheelListener, Printable {
+ public final static boolean SPECIAL_DOMAIN_COLORING = true;
final static Cursor ARROW_CURSOR = Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR );
final static Cursor CUT_CURSOR = Cursor.getPredefinedCursor( Cursor.CROSSHAIR_CURSOR );
final static Cursor HAND_CURSOR = Cursor.getPredefinedCursor( Cursor.HAND_CURSOR );
12 );
private static final float ROUNDED_D = 8;
private final static long serialVersionUID = -978349745916505029L;
+ private static final BasicStroke STROKE_0025 = new BasicStroke( 0.025f );
private static final BasicStroke STROKE_005 = new BasicStroke( 0.05f );
private static final BasicStroke STROKE_01 = new BasicStroke( 0.1f );
private static final BasicStroke STROKE_025 = new BasicStroke( 0.25f );
private static final BasicStroke STROKE_2 = new BasicStroke( 2f );
private static final double TWO_PI = 2 * Math.PI;
private final static int WIGGLE = 2;
- private static final String SHOW_ONLY_THIS_CONF_TYPE = "posterior probability"; //TODO remove me
+ private static final String SHOW_ONLY_THIS_CONF_TYPE = null; //TODO remove me
HashMap<Long, Short> _nodeid_dist_to_leaf = new HashMap<Long, Short>();
final private Arc2D _arc = new Arc2D.Double();
private AffineTransform _at;
calculateScaleDistance();
FORMATTER_CONFIDENCE.setMaximumFractionDigits( configuration.getNumberOfDigitsAfterCommaForConfidenceValues() );
FORMATTER_BRANCH_LENGTH.setMaximumFractionDigits( configuration
- .getNumberOfDigitsAfterCommaForBranchLengthValues() );
+ .getNumberOfDigitsAfterCommaForBranchLengthValues() );
}
@Override
}
/**
- * Get a pointer to the phylogeny
- *
+ * Get a pointer to the phylogeny
+ *
* @return a pointer to the phylogeny
*/
public final Phylogeny getPhylogeny() {
/**
* Set a phylogeny tree.
- *
+ *
* @param t
* an instance of a Phylogeny
*/
/**
* Set parameters for printing the displayed tree
- *
+ *
*/
- final void calcParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) {
+ final void calcParametersForPainting( final int x, final int y ) {
// updateStyle(); not needed?
if ( ( _phylogeny != null ) && !_phylogeny.isEmpty() ) {
initNodeData();
- if ( recalc_longest_ext_node_info ) {
- calculateLongestExtNodeInfo();
- if ( getOptions().isAllowFontSizeChange() ) {
- if ( ( getLongestExtNodeInfo() > ( x * 0.6 ) )
- && ( getTreeFontSet().getLargeFont().getSize() > ( 2 + TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) ) {
- while ( ( getLongestExtNodeInfo() > ( x * 0.7 ) )
- && ( getTreeFontSet().getLargeFont().getSize() > 2 ) ) {
- getMainPanel().getTreeFontSet().decreaseFontSize( getConfiguration().getMinBaseFontSize(),
- true );
- calculateLongestExtNodeInfo();
- }
- }
- else {
- while ( ( getLongestExtNodeInfo() < ( x * 0.6 ) )
- && ( getTreeFontSet().getLargeFont().getSize() <= ( getTreeFontSet()
- .getLargeFontMemory().getSize() - TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) ) {
- getMainPanel().getTreeFontSet().increaseFontSize();
- calculateLongestExtNodeInfo();
- }
- }
+ calculateLongestExtNodeInfo();
+ if ( ( getLongestExtNodeInfo() > ( x * 0.6 ) )
+ && ( getTreeFontSet().getLargeFont().getSize() > ( 2 + TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) ) {
+ while ( ( getLongestExtNodeInfo() > ( x * 0.7 ) ) && ( getTreeFontSet().getLargeFont().getSize() > 2 ) ) {
+ getMainPanel().getTreeFontSet().decreaseFontSize( getConfiguration().getMinBaseFontSize(), true );
+ calculateLongestExtNodeInfo();
}
- _length_of_longest_text = calcLengthOfLongestText();
}
+ else {
+ while ( ( getLongestExtNodeInfo() < ( x * 0.6 ) )
+ && ( getTreeFontSet().getLargeFont().getSize() <= ( getTreeFontSet().getLargeFontMemory()
+ .getSize() - TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) ) {
+ getMainPanel().getTreeFontSet().increaseFontSize();
+ calculateLongestExtNodeInfo();
+ }
+ }
+ //_length_of_longest_text = calcLengthOfLongestText();
int ext_nodes = _phylogeny.getRoot().getNumberOfExternalNodes();
final int max_depth = PhylogenyMethods.calculateMaxDepth( _phylogeny );
if ( ext_nodes == 1 ) {
_circ_max_depth = max_depth;
setUpUrtFactor();
//
- if ( getOptions().isAllowFontSizeChange() ) {
- if ( ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.UNROOTED )
- && ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) ) {
- // int dynamic_hiding_factor = calcDynamicHidingFactor();
- // if ( dynamic_hiding_factor > 1 ) {
- // while ( dynamic_hiding_factor > 1
- // && getTreeFontSet()._fm_large.getHeight() > TreeFontSet.SMALL_FONTS_BASE ) {
- // getTreeFontSet().decreaseFontSize( 1, true );
- // dynamic_hiding_factor = calcDynamicHidingFactor();
- // }
- // }
- // else if ( getTreeFontSet().isDecreasedSizeBySystem() ) {
- // while ( dynamic_hiding_factor < 1 && getTreeFontSet()._fm_large.getHeight() < 12 ) {
- // getTreeFontSet().increaseFontSize();
- // dynamic_hiding_factor = calcDynamicHidingFactor();
- // }
- // }
- }
+ if ( ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.UNROOTED )
+ && ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) ) {
+ // int dynamic_hiding_factor = calcDynamicHidingFactor();
+ // if ( dynamic_hiding_factor > 1 ) {
+ // while ( dynamic_hiding_factor > 1
+ // && getTreeFontSet()._fm_large.getHeight() > TreeFontSet.SMALL_FONTS_BASE ) {
+ // getTreeFontSet().decreaseFontSize( 1, true );
+ // dynamic_hiding_factor = calcDynamicHidingFactor();
+ // }
+ // }
+ // else if ( getTreeFontSet().isDecreasedSizeBySystem() ) {
+ // while ( dynamic_hiding_factor < 1 && getTreeFontSet()._fm_large.getHeight() < 12 ) {
+ // getTreeFontSet().increaseFontSize();
+ // dynamic_hiding_factor = calcDynamicHidingFactor();
+ // }
+ // }
}
//
}
return;
}
int max_length = ForesterUtil.roundToInt( ( getSize().getWidth() - MOVE )
- * Constants.EXT_NODE_INFO_LENGTH_MAX_RATIO );
+ * Constants.EXT_NODE_INFO_LENGTH_MAX_RATIO );
if ( max_length < 40 ) {
max_length = 40;
}
}
if ( getControlPanel().isShowBinaryCharacters() && node.getNodeData().isHasBinaryCharacters() ) {
sum += getFontMetricsForLargeDefaultFont().stringWidth( node.getNodeData().getBinaryCharacters()
- .getGainedCharactersAsStringBuffer().toString() );
+ .getGainedCharactersAsStringBuffer().toString() );
}
if ( getControlPanel().isShowVectorData() && ( node.getNodeData().getVector() != null )
&& ( node.getNodeData().getVector().size() > 0 ) ) {
}
if ( getControlPanel().isShowDomainArchitectures() && node.getNodeData().isHasSequence()
&& ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) {
- // FIXME
+ // FIXME
// TODO this might need some clean up
final DomainArchitecture d = node.getNodeData().getSequence().getDomainArchitecture();
sum += ( ( _domain_structure_width / ( ( RenderableDomainArchitecture ) d ).getOriginalSize()
if ( getControlPanel().isShowMolSequences() && ( node.getNodeData().isHasSequence() )
&& ( node.getNodeData().getSequence().isMolecularSequenceAligned() )
&& ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) ) {
- // FIXME
+ // FIXME
sum += RenderableMsaSequence.DEFAULT_WIDTH + 30;
}
if ( sum >= max_length ) {
_longest_ext_node_info = max_length;
- return;
+ // return; //FIXME why?
}
if ( sum > longest ) {
longest = sum;
else {
_longest_ext_node_info = longest;
}
+ _length_of_longest_text = calcLengthOfLongestText();
}
final void calculateScaleDistance() {
}
catch ( final NumberFormatException e ) {
JOptionPane.showMessageDialog( this, "Could not parse \"" + value_str
- + "\" into a decimal value", "Problem with Vector Data", JOptionPane.ERROR_MESSAGE );
+ + "\" into a decimal value", "Problem with Vector Data", JOptionPane.ERROR_MESSAGE );
return;
}
int i = -1;
catch ( final NumberFormatException e ) {
JOptionPane.showMessageDialog( this,
"Could not parse \"" + index_str
- + "\" into index for vector data",
+ + "\" into index for vector data",
"Problem with Vector Data",
JOptionPane.ERROR_MESSAGE );
return;
/**
* Collapse the tree from the given node
- *
+ *
* @param node
* a PhylogenyNode
*/
repaint();
}
- final void decreaseDomainStructureEvalueThreshold() {
+ final void decreaseDomainStructureEvalueThresholdExp() {
if ( _domain_structure_e_value_thr_exp > -20 ) {
_domain_structure_e_value_thr_exp -= 1;
}
/**
* Find the node, if any, at the given location
- *
+ *
* @param x
* @param y
* @return pointer to the node at x,y, null if not found
return _current_external_nodes_data_buffer_change_counter;
}
- final int getDomainStructureEvalueThreshold() {
+ final int getDomainStructureEvalueThresholdExp() {
return _domain_structure_e_value_thr_exp;
}
}
final Color getTaxonomyBasedColor( final PhylogenyNode node ) {
- if ( node.getNodeData().isHasTaxonomy() ) {
+ if ( node.isExternal() && node.getNodeData().isHasTaxonomy() ) {
return calculateTaxonomyBasedColor( node.getNodeData().getTaxonomy() );
}
// return non-colorized color
return _y_distance;
}
- final void increaseDomainStructureEvalueThreshold() {
+ final void increaseDomainStructureEvalueThresholdExp() {
if ( _domain_structure_e_value_thr_exp < 3 ) {
_domain_structure_e_value_thr_exp += 1;
}
&& ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) {
RenderableDomainArchitecture rds = null;
if ( !( node.getNodeData().getSequence().getDomainArchitecture() instanceof RenderableDomainArchitecture ) ) {
- rds = new RenderableDomainArchitecture( node.getNodeData().getSequence().getDomainArchitecture() );
+ if ( SPECIAL_DOMAIN_COLORING ) {
+ rds = new RenderableDomainArchitecture( node.getNodeData().getSequence()
+ .getDomainArchitecture(), node.getName() );
+ }
+ else {
+ rds = new RenderableDomainArchitecture( node.getNodeData().getSequence()
+ .getDomainArchitecture() );
+ }
node.getNodeData().getSequence().setDomainArchitecture( rds );
}
else {
return ( ( e.getX() > ( getVisibleRect().x + getOvXPosition() + 1 ) )
&& ( e.getX() < ( ( getVisibleRect().x + getOvXPosition() + getOvMaxWidth() ) - 1 ) )
&& ( e.getY() > ( getVisibleRect().y + getOvYPosition() + 1 ) ) && ( e.getY() < ( ( getVisibleRect().y
- + getOvYPosition() + getOvMaxHeight() ) - 1 ) ) );
+ + getOvYPosition() + getOvMaxHeight() ) - 1 ) ) );
}
final boolean inOvRectangle( final MouseEvent e ) {
return ( ( e.getX() >= ( getOvRectangle().getX() - 1 ) )
&& ( e.getX() <= ( getOvRectangle().getX() + getOvRectangle().getWidth() + 1 ) )
&& ( e.getY() >= ( getOvRectangle().getY() - 1 ) ) && ( e.getY() <= ( getOvRectangle().getY()
- + getOvRectangle().getHeight() + 1 ) ) );
+ + getOvRectangle().getHeight() + 1 ) ) );
}
final boolean isApplet() {
y = max_y;
}
getMainPanel().getCurrentScrollPane().getViewport()
- .setViewPosition( new Point( ForesterUtil.roundToInt( x ), ForesterUtil.roundToInt( y ) ) );
+ .setViewPosition( new Point( ForesterUtil.roundToInt( x ), ForesterUtil.roundToInt( y ) ) );
setInOvRect( true );
repaint();
}
if ( isInFoundNodes( c ) || isInCurrentExternalNodes( c ) ) {
g.setColor( getColorForFoundNode( c ) );
drawRectFilled( c.getXSecondary() - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, c.getYSecondary()
- - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, OVERVIEW_FOUND_NODE_BOX_SIZE, OVERVIEW_FOUND_NODE_BOX_SIZE, g );
+ - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, OVERVIEW_FOUND_NODE_BOX_SIZE, OVERVIEW_FOUND_NODE_BOX_SIZE, g );
}
}
else {
if ( !to_graphics_file ) {
g.setPaint( new GradientPaint( r.x, r.y, getTreeColorSet().getBackgroundColor(), r.x, r.y
- + r.height, getTreeColorSet().getBackgroundColorGradientBottom() ) );
+ + r.height, getTreeColorSet().getBackgroundColorGradientBottom() ) );
g.fill( r );
}
else {
}
// Position starting Y of tree
_phylogeny.getRoot().setYcoord( ( getYdistance() * _phylogeny.getRoot().getNumberOfExternalNodes() )
- + ( TreePanel.MOVE / 2.0f ) );
+ + ( TreePanel.MOVE / 2.0f ) );
final int dynamic_hiding_factor = calcDynamicHidingFactor();
if ( getControlPanel().isDynamicallyHideData() ) {
if ( dynamic_hiding_factor > 1 ) {
_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 );
- //}
+ final boolean disallow_shortcutting = ( dynamic_hiding_factor < 40 )
+ || getControlPanel().isUseVisualStyles() || getOptions().isShowDefaultNodeShapesForMarkedNodes()
+ || ( ( getFoundNodes0() != null ) && !getFoundNodes0().isEmpty() )
+ || ( ( getFoundNodes1() != null ) && !getFoundNodes1().isEmpty() )
+ || ( ( getCurrentExternalNodes() != null ) && !getCurrentExternalNodes().isEmpty() )
+ || to_graphics_file || to_pdf;
for( final PhylogenyNode element : _nodes_in_preorder ) {
- paintNodeRectangular( g, element, to_pdf, getControlPanel().isDynamicallyHideData()
- && ( dynamic_hiding_factor > 1 ), dynamic_hiding_factor, to_graphics_file );
+ paintNodeRectangular( g,
+ element,
+ to_pdf,
+ getControlPanel().isDynamicallyHideData() && ( dynamic_hiding_factor > 1 ),
+ dynamic_hiding_factor,
+ to_graphics_file,
+ disallow_shortcutting );
}
if ( getOptions().isShowScale() && getControlPanel().isDrawPhylogram() && ( getScaleDistance() > 0.0 ) ) {
if ( !( to_graphics_file || to_pdf ) ) {
y_pos + radius_ov,
( int ) ( radius_ov - ( getLongestExtNodeInfo() / ( getVisibleRect().width / getOvRectangle()
.getWidth() ) ) ),
- g );
+ g );
g.setTransform( _at );
paintOvRectangle( g );
}
x = TreePanel.MOVE
+ getLongestExtNodeInfo()
+ ForesterUtil
- .roundToInt( ( getXcorrectionFactor() * getPhylogeny().getHeight() ) + getXdistance() );
+ .roundToInt( ( getXcorrectionFactor() * getPhylogeny().getHeight() ) + getXdistance() );
}
else {
if ( !isNonLinedUpCladogram() && !isUniformBranchLengthsForCladogram() ) {
x = TreePanel.MOVE
+ getLongestExtNodeInfo()
+ ForesterUtil.roundToInt( getXdistance()
- * ( getPhylogeny().getRoot().getNumberOfExternalNodes() + 2 ) );
+ * ( getPhylogeny().getRoot().getNumberOfExternalNodes() + 2 ) );
}
else {
x = TreePanel.MOVE
+ getLongestExtNodeInfo()
+ ForesterUtil.roundToInt( getXdistance()
- * ( PhylogenyMethods.calculateMaxDepth( getPhylogeny() ) + 1 ) );
+ * ( PhylogenyMethods.calculateMaxDepth( getPhylogeny() ) + 1 ) );
}
}
setPreferredSize( new Dimension( x, y ) );
final void sortDescendants( final PhylogenyNode node ) {
if ( !node.isExternal() ) {
- DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
- if ( ( !getControlPanel().isShowTaxonomyScientificNames() && !getControlPanel().isShowTaxonomyCode() && !getControlPanel()
- .isShowTaxonomyCommonNames() ) ) {
- if ( ( getControlPanel().isShowSequenceAcc() || getControlPanel().isShowSeqNames() || getControlPanel()
- .isShowSeqSymbols() ) ) {
- pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
- }
- else if ( getControlPanel().isShowNodeNames() ) {
- pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
- }
+ DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
+ if ( getControlPanel().isShowTaxonomyScientificNames() || getControlPanel().isShowTaxonomyCode() ) {
+ pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
+ }
+ else if ( getControlPanel().isShowSeqNames() || getControlPanel().isShowSeqSymbols()
+ || getControlPanel().isShowGeneNames() ) {
+ pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
}
PhylogenyMethods.sortNodeDescendents( node, pri );
setNodeInPreorderToNull();
/**
* Calculate the length of the distance between the given node and its
* parent.
- *
+ *
* @param node
* @param ext_node_x
* @factor
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();
- }
+ List<PhylogenyNode> nodes = new ArrayList<PhylogenyNode>();
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ nodes = getFoundNodesAsListOfPhylogenyNodes();
+ }
+ if ( !nodes.contains( node ) ) {
nodes.add( node );
+ }
+ final int count = nodes.size();
+ String title = "Change the font for ";
+ if ( count == 1 ) {
+ title += "one node";
+ }
+ else {
+ title += ( count + " nodes" );
+ }
+ fc.showDialog( this, title );
+ if ( ( fc.getFont() != null ) && !ForesterUtil.isEmpty( fc.getFont().getFamily().trim() ) ) {
for( final PhylogenyNode n : nodes ) {
if ( n.getNodeData().getNodeVisualData() == null ) {
n.getNodeData().setNodeVisualData( new NodeVisualData() );
getControlPanel().getUseVisualStylesCb().setSelected( true );
}
}
+ setEdited( true );
repaint();
}
+ private void colorNodeFont( final PhylogenyNode node ) {
+ _color_chooser.setPreviewPanel( new JPanel() );
+ NodeColorizationActionListener al;
+ int count = 1;
+ if ( ( getFoundNodes0() != null ) || ( getFoundNodes1() != null ) ) {
+ final List<PhylogenyNode> additional_nodes = getFoundNodesAsListOfPhylogenyNodes();
+ al = new NodeColorizationActionListener( _color_chooser, node, additional_nodes );
+ count = additional_nodes.size();
+ if ( !additional_nodes.contains( node ) ) {
+ count++;
+ }
+ }
+ else {
+ al = new NodeColorizationActionListener( _color_chooser, node );
+ }
+ String title = "Change the (node and font) color for ";
+ if ( count == 1 ) {
+ title += "one node";
+ }
+ else {
+ title += ( count + " nodes" );
+ }
+ final JDialog dialog = JColorChooser.createDialog( this, title, true, _color_chooser, al, null );
+ setEdited( true );
+ dialog.setVisible( true );
+ }
+
final private void colorizeNodes( final Color c,
final PhylogenyNode node,
final List<PhylogenyNode> additional_nodes ) {
repaint();
}
- 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 );
- }
-
final private void colorSubtree( final PhylogenyNode node ) {
if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) {
JOptionPane.showMessageDialog( this,
}
final JDialog dialog = JColorChooser
.createDialog( this, "Subtree colorization", true, _color_chooser, al, null );
+ setEdited( true );
dialog.setVisible( true );
}
return ( ( x >= ( getOvVirtualRectangle().x - 1 ) )
&& ( x <= ( getOvVirtualRectangle().x + getOvVirtualRectangle().width + 1 ) )
&& ( y >= ( getOvVirtualRectangle().y - 1 ) ) && ( y <= ( getOvVirtualRectangle().y
- + getOvVirtualRectangle().height + 1 ) ) );
+ + getOvVirtualRectangle().height + 1 ) ) );
}
final private boolean inOvVirtualRectangle( final MouseEvent e ) {
&& ( ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) )
|| ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getTaxonomyCode() ) )
|| ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getCommonName() ) ) || ( ( node
- .getNodeData().getTaxonomy().getIdentifier() != null ) && !ForesterUtil.isEmpty( node
- .getNodeData().getTaxonomy().getIdentifier().getValue() ) ) ) ) {
+ .getNodeData().getTaxonomy().getIdentifier() != null ) && !ForesterUtil.isEmpty( node
+ .getNodeData().getTaxonomy().getIdentifier().getValue() ) ) ) ) {
return true;
}
else {
}
return ( ( node.getYcoord() < ( getVisibleRect().getMinY() - y_dist ) )
|| ( node.getYcoord() > ( getVisibleRect().getMaxY() + y_dist ) ) || ( ( node.getParent() != null ) && ( node
- .getParent().getXcoord() > getVisibleRect().getMaxX() ) ) );
+ .getParent().getXcoord() > getVisibleRect().getMaxX() ) ) );
}
final private boolean isNodeDataInvisibleUnrootedCirc( final PhylogenyNode node ) {
return ( ( node.getYcoord() < ( getVisibleRect().getMinY() - 20 ) )
|| ( node.getYcoord() > ( getVisibleRect().getMaxY() + 20 ) )
|| ( node.getXcoord() < ( getVisibleRect().getMinX() - 20 ) ) || ( node.getXcoord() > ( getVisibleRect()
- .getMaxX() + 20 ) ) );
+ .getMaxX() + 20 ) ) );
}
final private boolean isNonLinedUpCladogram() {
else {
_node_popup_menu_items[ i ].setEnabled( false );
}
- //
+ }
+ else if ( title.startsWith( Configuration.clickto_options[ Configuration.get_ext_desc_data ][ 0 ] ) ) {
+ _node_popup_menu_items[ i ]
+ .setText( Configuration.clickto_options[ Configuration.get_ext_desc_data ][ 0 ] + ": "
+ + getOptions().getExtDescNodeDataToReturn().toString() );
}
else if ( title.equals( Configuration.clickto_options[ Configuration.open_tax_web ][ 0 ] ) ) {
_node_popup_menu_items[ i ].setEnabled( isCanOpenTaxWeb( node ) );
}
private final String obtainTitleForExtDescNodeData() {
- switch ( getOptions().getExtDescNodeDataToReturn() ) {
- case NODE_NAME:
- return "Node Names";
- case GENE_NAME:
- return "Gene Names";
- case SEQUENCE_NAME:
- return "Sequence Names";
- case SEQUENCE_SYMBOL:
- return "Sequence Symbols";
- case SEQUENCE_MOL_SEQ:
- return "Molecular Sequences";
- case SEQUENCE_MOL_SEQ_FASTA:
- return "Molecular Sequences (Fasta)";
- case SEQUENCE_ACC:
- return "Sequence Accessors";
- case TAXONOMY_SCIENTIFIC_NAME:
- return "Scientific Names";
- case TAXONOMY_CODE:
- return "Taxonomy Codes";
- case TAXONOMY_COMM0N_NAME:
- return "Taxonomy Common Names";
- case UNKNOWN:
- return "User Selected Data";
- default:
- throw new IllegalArgumentException( "unknown data element: "
- + getOptions().getExtDescNodeDataToReturn() );
- }
+ return getOptions().getExtDescNodeDataToReturn().toString();
}
final private void openPdbWeb( final PhylogenyNode node ) {
AptxUtil.launchWebBrowser( new URI( uri_str ),
isApplet(),
isApplet() ? obtainApplet() : null,
- "_aptx_seq" );
+ "_aptx_seq" );
}
catch ( final IOException e ) {
AptxUtil.showErrorMessage( this, e.toString() );
AptxUtil.launchWebBrowser( new URI( uri_str ),
isApplet(),
isApplet() ? obtainApplet() : null,
- "_aptx_seq" );
+ "_aptx_seq" );
}
catch ( final IOException e ) {
AptxUtil.showErrorMessage( this, e.toString() );
AptxUtil.launchWebBrowser( new URI( uri_str ),
isApplet(),
isApplet() ? obtainApplet() : null,
- "_aptx_tax" );
+ "_aptx_tax" );
}
catch ( final IOException e ) {
AptxUtil.showErrorMessage( this, e.toString() );
if ( !node.isRoot() ) {
if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE ) {
TreePanel.drawString( FORMATTER_BRANCH_LENGTH.format( node.getDistanceToParent() ), node.getParent()
- .getXcoord() + EURO_D, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
+ .getXcoord() + EURO_D, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
}
else if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) {
TreePanel.drawString( FORMATTER_BRANCH_LENGTH.format( node.getDistanceToParent() ), node.getParent()
- .getXcoord() + ROUNDED_D, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
+ .getXcoord() + ROUNDED_D, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
}
else {
TreePanel.drawString( FORMATTER_BRANCH_LENGTH.format( node.getDistanceToParent() ), node.getParent()
- .getXcoord() + 3, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
+ .getXcoord() + 3, node.getYcoord() - getTreeFontSet().getSmallMaxDescent(), g );
}
}
else {
TreePanel.drawString( FORMATTER_BRANCH_LENGTH.format( node.getDistanceToParent() ), 3, node.getYcoord()
- - getTreeFontSet().getSmallMaxDescent(), g );
+ - getTreeFontSet().getSmallMaxDescent(), g );
}
}
final float dx = x2 - x1;
final float dy = y2 - y1;
_cubic_curve.setCurve( x1, y1, x1 + ( dx * 0.4f ), y1 + ( dy * 0.2f ), x1 + ( dx * 0.6f ), y1
- + ( dy * 0.8f ), x2, y2 );
+ + ( dy * 0.8f ), x2, y2 );
( g ).draw( _cubic_curve );
}
else {
/**
* Paint a branch which consists of a vertical and a horizontal bar
- * @param is_ind_found_nodes
+ * @param is_ind_found_nodes
*/
final private void paintBranchRectangular( final Graphics2D g,
final float x1,
final float dx = x2 - x1;
final float dy = y2 - y1;
_cubic_curve.setCurve( x1, y1, x1 + ( dx * 0.4f ), y1 + ( dy * 0.2f ), x1 + ( dx * 0.6f ), y1
- + ( dy * 0.8f ), x2, y2 );
+ + ( dy * 0.8f ), x2, y2 );
g.draw( _cubic_curve );
}
else {
not_first = true;
}
sb.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( value, getOptions()
- .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
+ .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
if ( getOptions().isShowConfidenceStddev() ) {
if ( confidence.getStandardDeviation() != Confidence.CONFIDENCE_DEFAULT_VALUE ) {
sb.append( "(" );
sb.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence
- .getStandardDeviation(), getOptions()
- .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
+ .getStandardDeviation(), getOptions()
+ .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
sb.append( ")" );
}
}
final String conf_str = sb.toString();
TreePanel.drawString( conf_str,
parent_x
- + ( ( x - parent_x - getTreeFontSet().getFontMetricsSmall()
- .stringWidth( conf_str ) ) / 2 ),
- ( node.getYcoord() + getTreeFontSet().getSmallMaxAscent() ) - 1,
- g );
+ + ( ( x - parent_x - getTreeFontSet().getFontMetricsSmall()
+ .stringWidth( conf_str ) ) / 2 ),
+ ( node.getYcoord() + getTreeFontSet().getSmallMaxAscent() ) - 1,
+ g );
}
}
g.setColor( Color.BLUE );
}
TreePanel
- .drawString( gained,
- parent_x
- + ( ( x - parent_x - getFontMetricsForLargeDefaultFont().stringWidth( gained ) ) / 2 ),
- ( node.getYcoord() - getFontMetricsForLargeDefaultFont().getMaxDescent() ),
- g );
+ .drawString( gained,
+ parent_x
+ + ( ( x - parent_x - getFontMetricsForLargeDefaultFont().stringWidth( gained ) ) / 2 ),
+ ( node.getYcoord() - getFontMetricsForLargeDefaultFont().getMaxDescent() ),
+ g );
g.setColor( getTreeColorSet().getLostCharactersColor() );
TreePanel
- .drawString( lost,
- parent_x
- + ( ( x - parent_x - getFontMetricsForLargeDefaultFont().stringWidth( lost ) ) / 2 ),
- ( node.getYcoord() + getFontMetricsForLargeDefaultFont().getMaxAscent() ),
- g );
+ .drawString( lost,
+ parent_x
+ + ( ( x - parent_x - getFontMetricsForLargeDefaultFont().stringWidth( lost ) ) / 2 ),
+ ( node.getYcoord() + getFontMetricsForLargeDefaultFont().getMaxAscent() ),
+ g );
}
}
/**
* Draw a box at the indicated node.
- *
+ *
* @param x
* @param y
* @param node
if ( ( isInFoundNodes( node ) || isInCurrentExternalNodes( node ) )
|| ( getOptions().isShowDefaultNodeShapesExternal() && node.isExternal() )
|| ( getOptions().isShowDefaultNodeShapesInternal() && node.isInternal() )
- || ( getControlPanel().isUseVisualStyles() && ( ( node.getNodeData().getNodeVisualData() != null ) && ( ( node
- .getNodeData().getNodeVisualData().getNodeColor() != null )
- || ( node.getNodeData().getNodeVisualData().getSize() != NodeVisualData.DEFAULT_SIZE )
- || ( node.getNodeData().getNodeVisualData().getFillType() != NodeFill.DEFAULT ) || ( node
- .getNodeData().getNodeVisualData().getShape() != NodeShape.DEFAULT ) ) ) )
- || ( getControlPanel().isEvents() && node.isHasAssignedEvent() && ( node.getNodeData().getEvent()
- .isDuplication()
- || node.getNodeData().getEvent().isSpeciation() || node.getNodeData().getEvent()
- .isSpeciationOrDuplication() ) ) ) {
+ || ( getOptions().isShowDefaultNodeShapesForMarkedNodes()
+ && ( node.getNodeData().getNodeVisualData() != null ) && ( !node.getNodeData()
+ .getNodeVisualData().isEmpty() ) )
+ || ( getControlPanel().isUseVisualStyles() && ( ( node.getNodeData().getNodeVisualData() != null ) && ( ( node
+ .getNodeData().getNodeVisualData().getNodeColor() != null )
+ || ( node.getNodeData().getNodeVisualData().getSize() != NodeVisualData.DEFAULT_SIZE )
+ || ( node.getNodeData().getNodeVisualData().getFillType() != NodeFill.DEFAULT ) || ( node
+ .getNodeData().getNodeVisualData().getShape() != NodeShape.DEFAULT ) ) ) )
+ || ( getControlPanel().isEvents() && node.isHasAssignedEvent() && ( node.getNodeData().getEvent()
+ .isDuplication()
+ || node.getNodeData().getEvent().isSpeciation() || node.getNodeData().getEvent()
+ .isSpeciationOrDuplication() ) ) ) {
NodeVisualData vis = null;
if ( getControlPanel().isUseVisualStyles() && ( node.getNodeData().getNodeVisualData() != null )
&& ( !node.getNodeData().getNodeVisualData().isEmpty() ) ) {
if ( getControlPanel().isWriteBranchLengthValues()
&& ( ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR )
|| ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE ) )
- && ( !node.isRoot() ) && ( node.getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) ) {
+ && ( !node.isRoot() ) && ( node.getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) ) {
paintBranchLength( g, node, to_pdf, to_graphics_file );
}
if ( !getControlPanel().isShowInternalData() && !node.isExternal() && !node.isCollapse() ) {
final boolean fGotRelationWithQuery = ( seqRelation.getRef0().isEqual( _query_sequence ) || seqRelation
.getRef1().isEqual( _query_sequence ) )
&& seqRelation.getType().equals( getControlPanel().getSequenceRelationTypeBox()
- .getSelectedItem() );
+ .getSelectedItem() );
if ( fGotRelationWithQuery ) { // we will underline the text to show that this sequence is ortholog to the query
final double linePosX = node.getXcoord() + 2 + half_box_size;
final String sConfidence = ( !getControlPanel().isShowSequenceRelationConfidence() || ( seqRelation
.getConfidence() == null ) ) ? null : " (" + seqRelation.getConfidence().getValue()
- + ")";
+ + ")";
if ( sConfidence != null ) {
float 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
+ 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();
+ .getBounds().getWidth();
TreePanel.drawString( sConfidence, confidenceX, pos_y, g );
x += CONFIDENCE_LEFT_MARGIN + confidenceWidth;
}
nodeTextBoundsWidth += 2;
}
g.drawLine( ( int ) linePosX + 1, 3 + ( int ) pos_y, ( int ) linePosX + x
- + nodeTextBoundsWidth, 3 + ( int ) pos_y );
+ + nodeTextBoundsWidth, 3 + ( int ) pos_y );
break;
}
}
}
final String ann_str = TreePanelUtil.createAnnotationString( ann, getOptions().isShowAnnotationRefSource() );
TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + half_box_size, node.getYcoord()
- + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ), g );
+ + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ), g );
_sb.setLength( 0 );
_sb.append( ann_str );
if ( _sb.length() > 0 ) {
}
if ( getControlPanel().isShowBinaryCharacters() ) {
TreePanel.drawString( node.getNodeData().getBinaryCharacters().getPresentCharactersAsStringBuffer()
- .toString(), node.getXcoord() + x + 1 + half_box_size, node.getYcoord()
- + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ), g );
+ .toString(), node.getXcoord() + x + 1 + half_box_size, node.getYcoord()
+ + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ), g );
paintGainedAndLostCharacters( g, node, node.getNodeData().getBinaryCharacters()
- .getGainedCharactersAsStringBuffer().toString(), node.getNodeData().getBinaryCharacters()
- .getLostCharactersAsStringBuffer().toString() );
+ .getGainedCharactersAsStringBuffer().toString(), node.getNodeData().getBinaryCharacters()
+ .getLostCharactersAsStringBuffer().toString() );
}
else {
TreePanel
- .drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount(),
- node.getXcoord() + x + 4 + half_box_size,
- node.getYcoord()
- + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ),
- g );
+ .drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount(),
+ node.getXcoord() + x + 4 + half_box_size,
+ node.getYcoord()
+ + ( getFontMetricsForLargeDefaultFont().getAscent() / down_shift_factor ),
+ g );
paintGainedAndLostCharacters( g, node, "+"
+ node.getNodeData().getBinaryCharacters().getGainedCount(), "-"
- + node.getNodeData().getBinaryCharacters().getLostCount() );
+ + node.getNodeData().getBinaryCharacters().getLostCount() );
}
}
}
if ( isInFoundNodes( node ) || isInCurrentExternalNodes( node ) ) {
g.setColor( getColorForFoundNode( node ) );
drawRectFilled( node.getXSecondary() - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, node.getYSecondary()
- - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, OVERVIEW_FOUND_NODE_BOX_SIZE, OVERVIEW_FOUND_NODE_BOX_SIZE, g );
+ - OVERVIEW_FOUND_NODE_BOX_SIZE_HALF, OVERVIEW_FOUND_NODE_BOX_SIZE, OVERVIEW_FOUND_NODE_BOX_SIZE, g );
}
float new_x = 0;
if ( !node.isExternal() && !node.isCollapse() ) {
final boolean to_pdf,
final boolean dynamically_hide,
final int dynamic_hiding_factor,
- final boolean to_graphics_file ) {
+ final boolean to_graphics_file,
+ final boolean disallow_shortcutting ) {
final boolean is_in_found_nodes = isInFoundNodes( node ) || isInCurrentExternalNodes( node );
if ( node.isCollapse() ) {
if ( ( !node.isRoot() && !node.getParent().isCollapse() ) ) {
&& !node.isRoot()
&& ( ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED )
|| ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR ) || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE ) )
- && node.getBranchData().isHasConfidences() ) {
+ && node.getBranchData().isHasConfidences() ) {
paintConfidenceValues( g, node, to_pdf, to_graphics_file );
}
// Draw a line to root:
}
float new_x = 0;
float new_x_min = Float.MAX_VALUE;
- final boolean disallow_shortcutting = ( dynamic_hiding_factor < 40 );
float min_dist = 1.5f;
if ( !disallow_shortcutting ) {
if ( dynamic_hiding_factor > 4000 ) {
final float diff_y = node.getYcoord() - y2;
final float diff_x = node.getXcoord() - new_x;
if ( disallow_shortcutting || ( diff_y > min_dist ) || ( diff_y < -min_dist ) || ( diff_x > min_dist )
- || ( diff_x < -min_dist ) || to_graphics_file || to_pdf ) {
+ || ( diff_x < -min_dist ) ) {
paintBranchRectangular( g,
node.getXcoord(),
new_x,
}
paintNodeBox( node.getXcoord(), node.getYcoord(), node, g, to_pdf, to_graphics_file );
}
+ if ( getControlPanel().isShowMolSequences() && ( node.getNodeData().isHasSequence() )
+ && ( node.getNodeData().getSequence().isMolecularSequenceAligned() )
+ && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) ) {
+ paintMolecularSequences( g, node, to_pdf );
+ }
if ( dynamically_hide
&& !is_in_found_nodes
&& ( ( node.isExternal() && ( ( _external_node_index % dynamic_hiding_factor ) != 1 ) ) || ( !node
.isExternal() && ( ( new_x_min < 20 ) || ( ( _y_distance * node.getNumberOfExternalNodes() ) < getFontMetricsForLargeDefaultFont()
- .getHeight() ) ) ) ) ) {
+ .getHeight() ) ) ) ) ) {
return;
}
final int x = paintNodeData( g, node, to_graphics_file, to_pdf, is_in_found_nodes );
if ( getOptions().isRightLineUpDomains() ) {
rds.render( ( float ) ( ( getMaxDistanceToRoot() * getXcorrectionFactor() )
+ _length_of_longest_text + ( ( _longest_domain - rds.getTotalLength() ) * rds
- .getRenderingFactorWidth() ) ), node.getYcoord() - ( h / 2.0f ), g, this, to_pdf );
+ .getRenderingFactorWidth() ) ), node.getYcoord() - ( h / 2.0f ), g, this, to_pdf );
}
else {
rds.render( ( float ) ( ( getMaxDistanceToRoot() * getXcorrectionFactor() ) + _length_of_longest_text ),
else {
if ( getOptions().isRightLineUpDomains() ) {
rds.render( ( ( getPhylogeny().getFirstExternalNode().getXcoord() + _length_of_longest_text ) - 20 )
- + ( ( _longest_domain - rds.getTotalLength() ) * rds
- .getRenderingFactorWidth() ),
- node.getYcoord() - ( h / 2.0f ),
- g,
- this,
- to_pdf );
+ + ( ( _longest_domain - rds.getTotalLength() ) * rds
+ .getRenderingFactorWidth() ),
+ node.getYcoord() - ( h / 2.0f ),
+ g,
+ this,
+ to_pdf );
}
else {
rds.render( getPhylogeny().getFirstExternalNode().getXcoord() + _length_of_longest_text,
}
}
}
- if ( getControlPanel().isShowMolSequences() && ( node.getNodeData().isHasSequence() )
- && ( node.getNodeData().getSequence().isMolecularSequenceAligned() )
- && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) ) {
- final RenderableMsaSequence rs = RenderableMsaSequence.createInstance( node.getNodeData().getSequence()
- .getMolecularSequence(), node.getNodeData().getSequence().getType(), getConfiguration() );
- if ( rs != null ) {
- final int default_height = 7;
- float y = getYdistance();
- if ( getControlPanel().isDynamicallyHideData() ) {
- y = getTreeFontSet().getFontMetricsLarge().getHeight();
- }
- final int h = y < default_height ? ForesterUtil.roundToInt( y ) : default_height;
- rs.setRenderingHeight( h > 1 ? h : 2 );
- if ( getControlPanel().isDrawPhylogram() ) {
- rs.render( ( float ) ( ( getMaxDistanceToRoot() * getXcorrectionFactor() ) + _length_of_longest_text ),
- node.getYcoord() - ( h / 2.0f ),
- g,
- this,
- to_pdf );
- }
- else {
- rs.render( getPhylogeny().getFirstExternalNode().getXcoord() + _length_of_longest_text,
- node.getYcoord() - ( h / 2.0f ),
- g,
- this,
- to_pdf );
- }
+
+ //if ( getControlPanel().isShowMolSequences() && ( node.getNodeData().isHasSequence() )
+ // && ( node.getNodeData().getSequence().isMolecularSequenceAligned() )
+ // && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) ) {
+ // paintMolecularSequences( g, node, to_pdf );
+ //}
+ }
+
+ private void paintMolecularSequences( final Graphics2D g, final PhylogenyNode node, final boolean to_pdf ) {
+ final RenderableMsaSequence rs = RenderableMsaSequence.createInstance( node.getNodeData().getSequence()
+ .getMolecularSequence(), node.getNodeData().getSequence().getType(), getConfiguration() );
+ if ( rs != null ) {
+ final int default_height = 8;
+ float y = getYdistance();
+
+ final int h = ( y / 2) < default_height ? ForesterUtil.roundToInt( y * 2 ) : default_height;
+ rs.setRenderingHeight( h > 1 ? h : 1 );
+
+ if ( getControlPanel().isDrawPhylogram() ) {
+ rs.render( ( float ) ( ( getMaxDistanceToRoot() * getXcorrectionFactor() ) + _length_of_longest_text ),
+ node.getYcoord() - ( h / 2.0f ),
+ g,
+ this,
+ to_pdf );
+ }
+ else {
+ rs.render( getPhylogeny().getFirstExternalNode().getXcoord() + _length_of_longest_text,
+ node.getYcoord() - ( h / 2.0f ),
+ g,
+ this,
+ to_pdf );
}
}
}
final private void paintPhylogenyLite( final Graphics2D g ) {
_phylogeny
- .getRoot()
- .setXSecondary( ( float ) ( getVisibleRect().x + getOvXPosition() + ( MOVE / ( getVisibleRect().width / getOvRectangle()
- .getWidth() ) ) ) );
+ .getRoot()
+ .setXSecondary( ( float ) ( getVisibleRect().x + getOvXPosition() + ( MOVE / ( getVisibleRect().width / getOvRectangle()
+ .getWidth() ) ) ) );
_phylogeny.getRoot().setYSecondary( ( getVisibleRect().y + getOvYStart() ) );
final Stroke s = g.getStroke();
g.setStroke( STROKE_05 );
/**
* Paint the root branch. (Differs from others because it will always be a
* single horizontal line).
- * @param to_graphics_file
- *
+ * @param to_graphics_file
+ *
* @return new x1 value
*/
final private void paintRootBranch( final Graphics2D g,
final Rectangle2D nodeTextBounds = new TextLayout( label, g.getFont(), new FontRenderContext( null,
false,
false ) )
- .getBounds();
+ .getBounds();
g.fillRect( ( int ) start_x - 1, ( int ) start_y - 8, ( int ) nodeTextBounds.getWidth() + 4, 11 );
g.setColor( getTreeColorSet().getBackgroundColor() );
}
}
private final void setupStroke( final Graphics2D g ) {
+ if ( getYdistance() < 0.0001 ) {
+ g.setStroke( STROKE_0025 );
+ }
if ( getYdistance() < 0.001 ) {
g.setStroke( STROKE_005 );
}
else if ( getYdistance() < 2 ) {
g.setStroke( STROKE_075 );
}
- else if ( getYdistance() < 20 ) {
+ else if ( ( getYdistance() < 20 ) || !getConfiguration().isAllowThickStrokes() ) {
g.setStroke( STROKE_1 );
}
else {
data.add( n.getNodeData().getSequence().getSymbol() );
}
break;
- case SEQUENCE_MOL_SEQ:
- if ( n.getNodeData().isHasSequence()
- && !ForesterUtil.isEmpty( n.getNodeData().getSequence().getMolecularSequence() ) ) {
- data.add( n.getNodeData().getSequence().getMolecularSequence() );
- }
- break;
case SEQUENCE_MOL_SEQ_FASTA:
final StringBuilder sb = new StringBuilder();
if ( n.getNodeData().isHasSequence()
ann_str = ann.toString();
}
sb.append( SequenceWriter.toFasta( ann_str, n.getNodeData().getSequence()
- .getMolecularSequence(), 60 ) );
+ .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() ) ) {
data.add( n.getNodeData().getTaxonomy().getTaxonomyCode() );
}
break;
+ case DOMAINS_ALL:
+ case DOMAINS_COLLAPSED_PER_PROTEIN:
+ if ( n.getNodeData().isHasSequence()
+ && ( n.getNodeData().getSequence().getDomainArchitecture() != null ) ) {
+ final DomainArchitecture da = n.getNodeData().getSequence().getDomainArchitecture();
+ final Set<String> s = new HashSet<String>();
+ for( int i = 0; i < da.getDomains().size(); ++i ) {
+ final ProteinDomain d = da.getDomain( i );
+ if ( d.getConfidence() <= Math.pow( 10, getDomainStructureEvalueThresholdExp() ) ) {
+ final String name = d.getName();
+ if ( !( s.contains( name ) ) ) {
+ data.add( name );
+ if ( getOptions().getExtDescNodeDataToReturn() == NodeDataField.DOMAINS_COLLAPSED_PER_PROTEIN ) {
+ s.add( name );
+ }
+ }
+ }
+ }
+ }
+ break;
+ case SEQ_ANNOTATIONS:
+ if ( n.getNodeData().isHasSequence() ) {
+ if ( n.getNodeData().isHasSequence()
+ && ( n.getNodeData().getSequence().getAnnotations() != null ) ) {
+ final SortedSet<Annotation> a = n.getNodeData().getSequence().getAnnotations();
+ for( int i = 0; i < a.size(); ++i ) {
+ data.add( n.getNodeData().getSequence().getAnnotation( i ).toString() );
+ }
+ }
+ }
+ break;
+ case GO_TERM_IDS:
+ if ( n.getNodeData().isHasSequence() ) {
+ if ( n.getNodeData().isHasSequence()
+ && ( n.getNodeData().getSequence().getAnnotations() != null ) ) {
+ final SortedSet<Annotation> a = n.getNodeData().getSequence().getAnnotations();
+ for( int i = 0; i < a.size(); ++i ) {
+ final Annotation ann = n.getNodeData().getSequence().getAnnotation( i );
+ final String ref = ann.getRef();
+ if ( ref.toUpperCase().startsWith( "GO:" ) ) {
+ data.add( ref );
+ }
+ }
+ }
+ }
+ break;
case UNKNOWN:
TreePanelUtil.showExtDescNodeDataUserSelectedHelper( getControlPanel(), n, data );
break;
}
} // for loop
final StringBuilder sb = new StringBuilder();
- final int size = TreePanelUtil.makeSB( data, getOptions(), sb );
+ final int size = TreePanelUtil.nodeDataIntoStringBuffer( data, getOptions(), sb );
if ( ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE )
|| ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.BUFFER_ONLY ) ) {
if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE ) {
else if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.WINODW ) {
if ( sb.length() < 1 ) {
TreePanelUtil.showInformationMessage( this, "No Appropriate Data (" + obtainTitleForExtDescNodeData()
- + ")", "Descendants of selected node do not contain selected data" );
+ + ")", "Descendants of selected node do not contain selected data" );
clearCurrentExternalNodesDataBuffer();
}
else {
setCurrentExternalNodesDataBuffer( sb );
String title;
if ( ( getFoundNodes0() != null ) && !getFoundNodes0().isEmpty() ) {
- title = ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
+ title = ( getOptions().getExtDescNodeDataToReturn() == NodeDataField.UNKNOWN ? "Data"
: obtainTitleForExtDescNodeData() )
+ " for "
+ data.size()
+ size;
}
else {
- title = ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
+ title = ( getOptions().getExtDescNodeDataToReturn() == NodeDataField.UNKNOWN ? "Data"
: obtainTitleForExtDescNodeData() )
+ " for "
+ data.size()
try {
if ( ( node.getName().length() > 0 )
|| ( 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() ) {
+ .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 ) {
_popup_buffer.append( "] " );
}
_popup_buffer
- .append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence.getValue(),
- getOptions()
- .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
+ .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() ) ) );
+ .getStandardDeviation(), getOptions()
+ .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
_popup_buffer.append( ")" );
}
}
if ( _popup_buffer.length() > 0 ) {
if ( !getConfiguration().isUseNativeUI() ) {
_rollover_popup
- .setBorder( BorderFactory.createLineBorder( getTreeColorSet().getBranchColor() ) );
+ .setBorder( BorderFactory.createLineBorder( getTreeColorSet().getBranchColor() ) );
_rollover_popup.setBackground( getTreeColorSet().getBackgroundColor() );
if ( isInFoundNodes0( node ) && !isInFoundNodes1( node ) ) {
_rollover_popup.setForeground( getTreeColorSet().getFoundColor0() );
_rollover_popup,
e.getLocationOnScreen().x + 10,
e.getLocationOnScreen().y
- - ( lines * 20 ) );
+ - ( lines * 20 ) );
_node_desc_popup.show();
}
}
if ( getMainPanel().getMainFrame() == null ) {
// Must be "E" applet version.
( ( ArchaeopteryxE ) ( ( MainPanelApplets ) getMainPanel() ).getApplet() )
- .setSelectedTypeInTypeMenu( getPhylogenyGraphicsType() );
+ .setSelectedTypeInTypeMenu( getPhylogenyGraphicsType() );
}
else {
getMainPanel().getMainFrame().setSelectedTypeInTypeMenu( getPhylogenyGraphicsType() );