*/
public final class TreeFontSet {
- final static float SMALL_FONTS_BASE = 8;
- private final static String DEFAULT_FONT = "Verdana";
- private final static float FONT_SIZE_CHANGE_STEP = 1.0f;
- static final int BOLD_AND_ITALIC = Font.BOLD + Font.ITALIC;
+ final static float SMALL_FONTS_BASE = 8;
+ private final static String DEFAULT_FONT = "Verdana";
+ final static float FONT_SIZE_CHANGE_STEP = 1.0f;
+ static final int BOLD_AND_ITALIC = Font.BOLD + Font.ITALIC;
// the owner (needed to get font metrics)
private final MainPanel _owner;
// The fonts
private Font _large_font_system;
private Font _small_italic_font_system;
private Font _large_italic_font_system;
+ private Font _small_font_memory;
+ private Font _large_font_memory;
+ private Font _small_italic_font_memory;
+ private Font _large_italic_font_memory;
// Handy holders for font metrics
public FontMetrics _fm_small;
FontMetrics _fm_large;
FontMetrics _fm_large_italic;
FontMetrics _fm_large_italic_bold;
// hold font measurements
- int _small_max_descent = 0;
- int _small_max_ascent = 0;
+ int _small_max_descent = 0;
+ int _small_max_ascent = 0;
private final int _min;
private final int _max;
- private boolean _decreased_size_by_system = false;
-
+ private boolean _decreased_size_by_system = false;
+
TreeFontSet( final MainPanel owner ) {
_owner = owner;
_min = _owner.getConfiguration().getMinBaseFontSize();
return _small_font;
}
- public Font getSmallFontSystem() {
- return _small_font_system;
-
- }
-
void decreaseFontSize( final int min, final boolean decreased_size_by_system ) {
+ if ( decreased_size_by_system && !isDecreasedSizeBySystem() ) {
+ _small_font_memory = _small_font;
+ _large_font_memory = _large_font;
+ _small_italic_font_memory = _small_italic_font;
+ _large_italic_font_memory = _large_italic_font;
+ }
setDecreasedSizeBySystem( decreased_size_by_system );
if ( _large_font.getSize() >= min ) {
_small_font = _small_font.deriveFont( _small_font.getSize() - FONT_SIZE_CHANGE_STEP );
setupFontMetrics();
}
}
-
-
-
-
-
+
+ Font getLargeFontMemory() {
+ return _large_font_memory;
+ }
Font getBaseFont() {
return _base_font;
return _large_italic_font_system;
}
+ Font getSmallFontSystem() {
+ return _small_font_system;
+ }
+
Font getSmallItalicFont() {
return _small_italic_font;
}
setupFontMetrics();
}
+ boolean isDecreasedSizeBySystem() {
+ return _decreased_size_by_system;
+ }
+
void largeFonts() {
setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 12f );
_large_font_system = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), getBaseFont().getSize() );
_small_italic_font_system = new Font( getBaseFont().getFontName(), italic, small_size );
_large_italic_font_system = new Font( getBaseFont().getFontName(), italic, getBaseFont().getSize() );
+ _small_font_memory = _small_font;
+ _large_font_memory = _large_font;
+ _small_italic_font_memory = _small_italic_font;
+ _large_italic_font_memory = _large_italic_font;
setupFontMetrics();
}
+ private void setDecreasedSizeBySystem( final boolean decreased_size_by_system ) {
+ _decreased_size_by_system = decreased_size_by_system;
+ }
+
private void setupFontMetrics() {
_fm_small = _owner.getFontMetrics( _small_font );
_fm_large = _owner.getFontMetrics( _large_font );
_small_max_descent = _fm_small.getMaxDescent();
_small_max_ascent = _fm_small.getMaxAscent() + 1;
}
-
- boolean isDecreasedSizeBySystem() {
- return _decreased_size_by_system;
- }
-
- private void setDecreasedSizeBySystem( final boolean decreased_size_by_system ) {
- _decreased_size_by_system = decreased_size_by_system;
- }
}
requestFocusInWindow();
}
- public void checkForVectorProperties( final Phylogeny phy ) {
- final DescriptiveStatistics stats = new BasicDescriptiveStatistics();
- for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) {
- final PhylogenyNode node = iter.next();
- if ( node.getNodeData().getProperties() != null ) {
- final PropertiesMap pm = node.getNodeData().getProperties();
- final double[] vector = new double[ pm.getProperties().size() ];
- int counter = 0;
- for( final String ref : pm.getProperties().keySet() ) {
- if ( ref.startsWith( PhyloXmlUtil.VECTOR_PROPERTY_REF ) ) {
- final Property p = pm.getProperty( ref );
- final String value_str = p.getValue();
- final String index_str = ref
- .substring( PhyloXmlUtil.VECTOR_PROPERTY_REF.length(), ref.length() );
- double d = -100;
- try {
- d = Double.parseDouble( value_str );
- }
- catch ( final NumberFormatException e ) {
- JOptionPane.showMessageDialog( this, "Could not parse \"" + value_str
- + "\" into a decimal value", "Problem with Vector Data", JOptionPane.ERROR_MESSAGE );
- return;
- }
- int i = -1;
- try {
- i = Integer.parseInt( index_str );
- }
- catch ( final NumberFormatException e ) {
- JOptionPane.showMessageDialog( this,
- "Could not parse \"" + index_str
- + "\" into index for vector data",
- "Problem with Vector Data",
- JOptionPane.ERROR_MESSAGE );
- return;
- }
- if ( i < 0 ) {
- JOptionPane.showMessageDialog( this,
- "Attempt to use negative index for vector data",
- "Problem with Vector Data",
- JOptionPane.ERROR_MESSAGE );
- return;
- }
- vector[ i ] = d;
- ++counter;
- stats.addValue( d );
- }
- }
- final List<Double> vector_l = new ArrayList<Double>( counter );
- for( int i = 0; i < counter; ++i ) {
- vector_l.add( vector[ i ] );
- }
- node.getNodeData().setVector( vector_l );
- }
- }
- if ( stats.getN() > 0 ) {
- _statistics_for_vector_data = stats;
- }
- }
-
public synchronized Hashtable<String, BufferedImage> getImageMap() {
return getMainPanel().getImageMap();
}
}
}
- public final void setArrowCursor() {
- setCursor( ARROW_CURSOR );
- repaint();
- }
-
public final void setEdited( final boolean edited ) {
_edited = edited;
}
}
/**
+ * Set a phylogeny tree.
+ *
+ * @param t
+ * an instance of a Phylogeny
+ */
+ public final void setTree( final Phylogeny t ) {
+ setNodeInPreorderToNull();
+ _phylogeny = t;
+ }
+
+ public final void setWaitCursor() {
+ setCursor( WAIT_CURSOR );
+ repaint();
+ }
+
+ @Override
+ public void update( final Graphics g ) {
+ paint( g );
+ }
+
+ final void calcMaxDepth() {
+ if ( _phylogeny != null ) {
+ _circ_max_depth = PhylogenyMethods.calculateMaxDepth( _phylogeny );
+ }
+ }
+
+ /**
* Set parameters for printing the displayed tree
*
* @param x
* @param y
*/
- public final void setParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) {
+ final void calcParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) {
// updateStyle(); not needed?
if ( ( _phylogeny != null ) && !_phylogeny.isEmpty() ) {
initNodeData();
if ( recalc_longest_ext_node_info ) {
calculateLongestExtNodeInfo();
- while ( ( getLongestExtNodeInfo() > ( x * 0.67 ) ) && ( getTreeFontSet().getLargeFont().getSize() > 2 ) ) {
- getMainPanel().getTreeFontSet().decreaseFontSize( getConfiguration().getMinBaseFontSize(), true );
-
-
- calculateLongestExtNodeInfo();
+ if ( getOptions().isAllowFontSizeChange() ) {
+ if ( ( getLongestExtNodeInfo() > ( x * 0.6 ) )
+ && ( getTreeFontSet().getLargeFont().getSize() > 2 + TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) {
+ while ( ( getLongestExtNodeInfo() > ( x * 0.6 ) )
+ && ( getTreeFontSet().getLargeFont().getSize() > 2 ) ) {
+ getMainPanel().getTreeFontSet().decreaseFontSize( getConfiguration().getMinBaseFontSize(),
+ true );
+ calculateLongestExtNodeInfo();
+ }
+ }
+ else {
+ while ( ( getLongestExtNodeInfo() < ( x * 0.5 ) )
+ && ( getTreeFontSet().getLargeFont().getSize() <= getTreeFontSet().getLargeFontMemory()
+ .getSize() - TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) {
+ getMainPanel().getTreeFontSet().increaseFontSize();
+ calculateLongestExtNodeInfo();
+ }
+ }
}
}
int ext_nodes = _phylogeny.getRoot().getNumberOfExternalNodes();
_circ_max_depth = max_depth;
setUpUrtFactor();
//
- 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 ( 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();
+ // }
+ // }
}
}
//
}
}
- /**
- * Set a phylogeny tree.
- *
- * @param t
- * an instance of a Phylogeny
- */
- public final void setTree( final Phylogeny t ) {
- setNodeInPreorderToNull();
- _phylogeny = t;
- }
-
- public final void setWaitCursor() {
- setCursor( WAIT_CURSOR );
- repaint();
- }
-
- @Override
- public void update( final Graphics g ) {
- paint( g );
- }
-
- final void calcMaxDepth() {
- if ( _phylogeny != null ) {
- _circ_max_depth = PhylogenyMethods.calculateMaxDepth( _phylogeny );
- }
- }
-
final void calculateLongestExtNodeInfo() {
if ( ( _phylogeny == null ) || _phylogeny.isEmpty() ) {
return;
return c;
}
+ void checkForVectorProperties( final Phylogeny phy ) {
+ final DescriptiveStatistics stats = new BasicDescriptiveStatistics();
+ for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) {
+ final PhylogenyNode node = iter.next();
+ if ( node.getNodeData().getProperties() != null ) {
+ final PropertiesMap pm = node.getNodeData().getProperties();
+ final double[] vector = new double[ pm.getProperties().size() ];
+ int counter = 0;
+ for( final String ref : pm.getProperties().keySet() ) {
+ if ( ref.startsWith( PhyloXmlUtil.VECTOR_PROPERTY_REF ) ) {
+ final Property p = pm.getProperty( ref );
+ final String value_str = p.getValue();
+ final String index_str = ref
+ .substring( PhyloXmlUtil.VECTOR_PROPERTY_REF.length(), ref.length() );
+ double d = -100;
+ try {
+ d = Double.parseDouble( value_str );
+ }
+ catch ( final NumberFormatException e ) {
+ JOptionPane.showMessageDialog( this, "Could not parse \"" + value_str
+ + "\" into a decimal value", "Problem with Vector Data", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ int i = -1;
+ try {
+ i = Integer.parseInt( index_str );
+ }
+ catch ( final NumberFormatException e ) {
+ JOptionPane.showMessageDialog( this,
+ "Could not parse \"" + index_str
+ + "\" into index for vector data",
+ "Problem with Vector Data",
+ JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ if ( i < 0 ) {
+ JOptionPane.showMessageDialog( this,
+ "Attempt to use negative index for vector data",
+ "Problem with Vector Data",
+ JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ vector[ i ] = d;
+ ++counter;
+ stats.addValue( d );
+ }
+ }
+ final List<Double> vector_l = new ArrayList<Double>( counter );
+ for( int i = 0; i < counter; ++i ) {
+ vector_l.add( vector[ i ] );
+ }
+ node.getNodeData().setVector( vector_l );
+ }
+ }
+ if ( stats.getN() > 0 ) {
+ _statistics_for_vector_data = stats;
+ }
+ }
+
void clearCurrentExternalNodesDataBuffer() {
setCurrentExternalNodesDataBuffer( new StringBuilder() );
}
}
}
- private final int calcDynamicHidingFactor() {
- return ( int ) ( 0.5 + ( getTreeFontSet()._fm_large.getHeight() / ( 1.5 * getYdistance() ) ) );
- }
-
final void recalculateMaxDistanceToRoot() {
_max_distance_to_root = PhylogenyMethods.calculateMaxDistanceToRoot( getPhylogeny() );
}
}
}
+ final void setArrowCursor() {
+ setCursor( ARROW_CURSOR );
+ repaint();
+ }
+
final void setControlPanel( final ControlPanel atv_control ) {
_control_panel = atv_control;
}
}
}
+ private final int calcDynamicHidingFactor() {
+ return ( int ) ( 0.5 + ( getTreeFontSet()._fm_large.getHeight() / ( 1.5 * getYdistance() ) ) );
+ }
+
/**
* Calculate the length of the distance between the given node and its
* parent.
}
else if ( ( e.getKeyCode() == KeyEvent.VK_SUBTRACT ) || ( e.getKeyCode() == KeyEvent.VK_MINUS ) ) {
getMainPanel().getTreeFontSet().decreaseFontSize( 1, false );
-
-
getMainPanel().getControlPanel().displayedPhylogenyMightHaveChanged( true );
}
else if ( plusPressed( e.getKeyCode() ) ) {