getting of external node data
[jalview.git] / forester / java / src / org / forester / archaeopteryx / MainFrame.java
index 13426a3..ac08d25 100644 (file)
@@ -24,6 +24,8 @@
 
 package org.forester.archaeopteryx;
 
+import java.awt.Color;
+import java.awt.Component;
 import java.awt.Container;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -41,54 +43,68 @@ import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JRadioButtonMenuItem;
+import javax.swing.SwingUtilities;
 
 import org.forester.archaeopteryx.Options.CLADOGRAM_TYPE;
 import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION;
 import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE;
+import org.forester.archaeopteryx.tools.InferenceManager;
+import org.forester.archaeopteryx.tools.ProcessPool;
+import org.forester.archaeopteryx.tools.ProcessRunning;
 import org.forester.phylogeny.Phylogeny;
+import org.forester.phylogeny.PhylogenyNodeI.NH_CONVERSION_SUPPORT_VALUE_STYLE;
+import org.forester.phylogeny.data.NodeVisualization.NodeFill;
+import org.forester.phylogeny.data.NodeVisualization.NodeShape;
 import org.forester.util.ForesterConstants;
 import org.forester.util.ForesterUtil;
 
 public abstract class MainFrame extends JFrame implements ActionListener {
 
-    static final String       USE_MOUSEWHEEL_SHIFT_TO_ROTATE     = "In this display type, use mousewheel + Shift to rotate [or A and S]";
-    static final String       PHYLOXML_REF_TOOL_TIP              = Constants.PHYLOXML_REFERENCE;                                                                                                                                       //TODO //FIXME
-    static final String       APTX_REF_TOOL_TIP                  = Constants.APTX_REFERENCE;
-    private static final long serialVersionUID                   = 3655000897845508358L;
-    final static Font         menu_font                          = new Font( Configuration.getDefaultFontFamilyName(),
-                                                                             Font.PLAIN,
-                                                                             10 );
-    static final String       TYPE_MENU_HEADER                   = "Type";
-    static final String       RECTANGULAR_TYPE_CBMI_LABEL        = "Rectangular";
-    static final String       EURO_TYPE_CBMI_LABEL               = "Euro Type";
-    static final String       CURVED_TYPE_CBMI_LABEL             = "Curved";
-    static final String       TRIANGULAR_TYPE_CBMI_LABEL         = "Triangular";
-    static final String       CONVEX_TYPE_CBMI_LABEL             = "Convex";
-    static final String       ROUNDED_TYPE_CBMI_LABEL            = "Rounded";
-    static final String       UNROOTED_TYPE_CBMI_LABEL           = "Unrooted (alpha)";                                                                                                                                                 //TODO
-    static final String       CIRCULAR_TYPE_CBMI_LABEL           = "Circular (alpha)";                                                                                                                                                 //TODO
-    static final String       OPTIONS_HEADER                     = "Options";
-    static final String       SEARCH_SUBHEADER                   = "Search:";
-    static final String       DISPLAY_SUBHEADER                  = "Display:";
-    static final String       SEARCH_TERMS_ONLY_LABEL            = "Match Complete Terms Only";
-    static final String       SEARCH_CASE_SENSITIVE_LABEL        = "Case Sensitive";
-    static final String       INVERSE_SEARCH_RESULT_LABEL        = "Negate Result";
-    static final String       DISPLAY_BRANCH_LENGTH_VALUES_LABEL = "Display Branch Length Values";
-    static final String       DISPLAY_SCALE_LABEL                = "Display Scale";
-    static final String       NON_LINED_UP_CLADOGRAMS_LABEL      = "Non-Lined Up Cladograms";
-    static final String       UNIFORM_CLADOGRAMS_LABEL           = "Total Node Sum Dependent Cladograms";
-    static final String       LABEL_DIRECTION_LABEL              = "Radial Labels";
-    static final String       LABEL_DIRECTION_TIP                = "To use radial node labels in radial and unrooted display types";
-    static final String       SCREEN_ANTIALIAS_LABEL             = "Antialias";
-    static final String       COLOR_LABELS_LABEL                 = "Colorize Labels Same as Parent Branch";
-    static final String       BG_GRAD_LABEL                      = "Background Color Gradient";
-    static final String       DISPLAY_NODE_BOXES_LABEL           = "Display Node Boxes";
-    static final String       SHOW_OVERVIEW_LABEL                = "Show Overview";
-    static final String       FONT_SIZE_MENU_LABEL               = "Font Size";
-    static final String       NONUNIFORM_CLADOGRAMS_LABEL        = "External Node Sum Dependent Cladograms";
-    static final String       SHOW_DOMAIN_LABELS_LABEL           = "Show Domain Labels";
-    static final String       COLOR_LABELS_TIP                   = "To use parent branch colors for node labels as well, need to turn off taxonomy dependent colorization and turn on branch colorization for this to become apparent";
-    static final String       ABBREV_SN_LABEL                    = "Abbreviate Scientific Taxonomic Names";
+    static final String       USE_MOUSEWHEEL_SHIFT_TO_ROTATE          = "In this display type, use mousewheel + Shift to rotate [or A and S]";
+    static final String       PHYLOXML_REF_TOOL_TIP                   = Constants.PHYLOXML_REFERENCE;                                                                                                                                       //TODO //FIXME
+    static final String       APTX_REF_TOOL_TIP                       = Constants.APTX_REFERENCE;
+    private static final long serialVersionUID                        = 3655000897845508358L;
+    final static Font         menu_font                               = new Font( Configuration.getDefaultFontFamilyName(),
+                                                                                  Font.PLAIN,
+                                                                                  10 );
+    static final String       TYPE_MENU_HEADER                        = "Type";
+    static final String       RECTANGULAR_TYPE_CBMI_LABEL             = "Rectangular";
+    static final String       EURO_TYPE_CBMI_LABEL                    = "Euro Type";
+    static final String       CURVED_TYPE_CBMI_LABEL                  = "Curved";
+    static final String       TRIANGULAR_TYPE_CBMI_LABEL              = "Triangular";
+    static final String       CONVEX_TYPE_CBMI_LABEL                  = "Convex";
+    static final String       ROUNDED_TYPE_CBMI_LABEL                 = "Rounded";
+    static final String       UNROOTED_TYPE_CBMI_LABEL                = "Unrooted (alpha)";                                                                                                                                                 //TODO
+    static final String       CIRCULAR_TYPE_CBMI_LABEL                = "Circular (alpha)";                                                                                                                                                 //TODO
+    static final String       OPTIONS_HEADER                          = "Options";
+    static final String       SEARCH_SUBHEADER                        = "Search:";
+    static final String       DISPLAY_SUBHEADER                       = "Display:";
+    static final String       SEARCH_TERMS_ONLY_LABEL                 = "Match Complete Terms Only";
+    static final String       SEARCH_CASE_SENSITIVE_LABEL             = "Case Sensitive";
+    static final String       INVERSE_SEARCH_RESULT_LABEL             = "Negate Result";
+    static final String       DISPLAY_BRANCH_LENGTH_VALUES_LABEL      = "Display Branch Length Values";
+    static final String       DISPLAY_SCALE_LABEL                     = "Display Scale";
+    static final String       NON_LINED_UP_CLADOGRAMS_LABEL           = "Non-Lined Up Cladograms";
+    static final String       UNIFORM_CLADOGRAMS_LABEL                = "Total Node Sum Dependent Cladograms";
+    static final String       LABEL_DIRECTION_LABEL                   = "Radial Labels";
+    static final String       LABEL_DIRECTION_TIP                     = "To use radial node labels in radial and unrooted display types";
+    static final String       SCREEN_ANTIALIAS_LABEL                  = "Antialias";
+    static final String       COLOR_LABELS_LABEL                      = "Colorize Labels Same as Parent Branch";
+    static final String       BG_GRAD_LABEL                           = "Background Color Gradient";
+    static final String       DISPLAY_NODE_BOXES_LABEL                = "Show Node Shapes";
+    static final String       SHOW_OVERVIEW_LABEL                     = "Show Overview";
+    static final String       FONT_SIZE_MENU_LABEL                    = "Font Size";
+    static final String       NONUNIFORM_CLADOGRAMS_LABEL             = "External Node Sum Dependent Cladograms";
+    static final String       SHOW_DOMAIN_LABELS_LABEL                = "Show Domain Labels";
+    static final String       COLOR_LABELS_TIP                        = "To use parent branch colors for node labels as well, need to turn off taxonomy dependent colorization and turn on branch colorization for this to become apparent";
+    static final String       ABBREV_SN_LABEL                         = "Abbreviate Scientific Taxonomic Names";
+    static final String       TAXONOMY_COLORIZE_NODE_SHAPES_LABEL     = "Colorize Node Shapes According to Taxonomy";
+    static final String       CYCLE_NODE_SHAPE_LABEL                  = "Cycle Node Shapes";
+    static final String       CYCLE_NODE_FILL_LABEL                   = "Cycle Node Fill Type";
+    static final String       CHOOSE_NODE_SIZE_LABEL                  = "Choose Node Shape Size";
+    static final String       SHOW_CONF_STDDEV_LABEL                  = "Show Confidence Standard Deviations";
+    static final String       USE_BRACKETS_FOR_CONF_IN_NH_LABEL       = "Use Brackets for Confidence Values";
+    static final String       USE_INTERNAL_NAMES_FOR_CONF_IN_NH_LABEL = "Use Internal Node Names for Confidence Values";
     JMenuBar                  _jmenubar;
     JMenu                     _file_jmenu;
     JMenu                     _tools_menu;
@@ -109,10 +125,12 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     JMenuItem                 _midpoint_root_item;
     JMenuItem                 _taxcolor_item;
     JMenuItem                 _confcolor_item;
+    JMenuItem                 _color_rank_jmi;
     JMenuItem                 _infer_common_sn_names_item;
     JMenuItem                 _collapse_species_specific_subtrees;
-    JMenuItem                 _collapse_below_threshold;                                                                                                                                                                               //TODO implememt me
+    JMenuItem                 _collapse_below_threshold;                                                                                                                                                                                    //TODO implememt me
     JMenuItem                 _obtain_detailed_taxonomic_information_jmi;
+    JMenuItem                 _obtain_detailed_taxonomic_information_deleting_jmi;
     JMenuItem                 _obtain_uniprot_seq_information_jmi;
     JMenuItem                 _move_node_names_to_tax_sn_jmi;
     JMenuItem                 _move_node_names_to_seq_names_jmi;
@@ -131,18 +149,23 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     // _  screen display
     JCheckBoxMenuItem         _screen_antialias_cbmi;
     JCheckBoxMenuItem         _background_gradient_cbmi;
-    JCheckBoxMenuItem         _show_node_boxes_cbmi;
     JRadioButtonMenuItem      _non_lined_up_cladograms_rbmi;
     JRadioButtonMenuItem      _uniform_cladograms_rbmi;
     JRadioButtonMenuItem      _ext_node_dependent_cladogram_rbmi;
     JCheckBoxMenuItem         _show_branch_length_values_cbmi;
-    JCheckBoxMenuItem         _show_scale_cbmi;                                                                                                                                                                                        //TODO fix me
+    JCheckBoxMenuItem         _show_scale_cbmi;                                                                                                                                                                                             //TODO fix me
     JCheckBoxMenuItem         _show_overview_cbmi;
     JCheckBoxMenuItem         _show_domain_labels;
     JCheckBoxMenuItem         _abbreviate_scientific_names;
     JCheckBoxMenuItem         _color_labels_same_as_parent_branch;
     JMenuItem                 _overview_placment_mi;
     JMenuItem                 _choose_minimal_confidence_mi;
+    JCheckBoxMenuItem         _show_default_node_shapes_cbmi;
+    JMenuItem                 _cycle_node_shape_mi;
+    JMenuItem                 _cycle_node_fill_mi;
+    JMenuItem                 _choose_node_size_mi;
+    JCheckBoxMenuItem         _taxonomy_colorize_node_shapes_cbmi;
+    JCheckBoxMenuItem         _show_confidence_stddev_cbmi;
     // _  print
     JCheckBoxMenuItem         _graphics_export_visible_only_cbmi;
     JCheckBoxMenuItem         _antialias_print_cbmi;
@@ -155,6 +178,8 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     JCheckBoxMenuItem         _internal_number_are_confidence_for_nh_parsing_cbmi;
     JCheckBoxMenuItem         _extract_pfam_style_tax_codes_cbmi;
     JCheckBoxMenuItem         _replace_underscores_cbmi;
+    JCheckBoxMenuItem         _use_brackets_for_conf_in_nh_export_cbmi;
+    JCheckBoxMenuItem         _use_internal_names_for_conf_in_nh_export_cbmi;
     // _  search
     JCheckBoxMenuItem         _search_case_senstive_cbmi;
     JCheckBoxMenuItem         _search_whole_words_only_cbmi;
@@ -182,6 +207,8 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     JMenuItem                 _phyloxml_website_item;
     JMenuItem                 _phyloxml_ref_item;
     JMenuItem                 _aptx_ref_item;
+    // process menu:
+    JMenu                     _process_menu;
     // Handy pointers to child components:
     MainPanel                 _mainpanel;
     Container                 _contentpane;
@@ -189,9 +216,15 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     Configuration             _configuration;
     JMenuItem                 _remove_branch_color_item;
     Options                   _options;
+    InferenceManager          _inference_manager;
+    final ProcessPool         _process_pool;
 
     MainFrame() {
-        // Empty constructor.
+        _process_pool = ProcessPool.createInstance();
+    }
+
+    public ProcessPool getProcessPool() {
+        return _process_pool;
     }
 
     /**
@@ -219,6 +252,9 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         else if ( o == _confcolor_item ) {
             confColor();
         }
+        else if ( o == _color_rank_jmi ) {
+            colorRank();
+        }
         else if ( o == _infer_common_sn_names_item ) {
             if ( isSubtreeDisplayed() ) {
                 return;
@@ -301,9 +337,18 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         else if ( o == _choose_minimal_confidence_mi ) {
             chooseMinimalConfidence();
         }
+        else if ( o == _choose_node_size_mi ) {
+            chooseNodeSize( getOptions(), this );
+        }
         else if ( o == _overview_placment_mi ) {
             MainFrame.cycleOverview( getOptions(), getCurrentTreePanel() );
         }
+        else if ( o == _cycle_node_fill_mi ) {
+            MainFrame.cycleNodeFill( getOptions(), getCurrentTreePanel() );
+        }
+        else if ( o == _cycle_node_shape_mi ) {
+            MainFrame.cycleNodeShape( getOptions(), getCurrentTreePanel() );
+        }
         else if ( o == _screen_antialias_cbmi ) {
             updateOptions( getOptions() );
             updateScreenTextAntialias( getMainPanel().getTreePanels() );
@@ -320,7 +365,10 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         else if ( o == _color_labels_same_as_parent_branch ) {
             updateOptions( getOptions() );
         }
-        else if ( o == _show_node_boxes_cbmi ) {
+        else if ( o == _show_default_node_shapes_cbmi ) {
+            updateOptions( getOptions() );
+        }
+        else if ( o == _taxonomy_colorize_node_shapes_cbmi ) {
             updateOptions( getOptions() );
         }
         else if ( o == _non_lined_up_cladograms_rbmi ) {
@@ -353,6 +401,21 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         else if ( o == _show_branch_length_values_cbmi ) {
             updateOptions( getOptions() );
         }
+        else if ( o == _show_confidence_stddev_cbmi ) {
+            updateOptions( getOptions() );
+        }
+        else if ( o == _use_brackets_for_conf_in_nh_export_cbmi ) {
+            if ( _use_brackets_for_conf_in_nh_export_cbmi.isSelected() ) {
+                _use_internal_names_for_conf_in_nh_export_cbmi.setSelected( false );
+            }
+            updateOptions( getOptions() );
+        }
+        else if ( o == _use_internal_names_for_conf_in_nh_export_cbmi ) {
+            if ( _use_internal_names_for_conf_in_nh_export_cbmi.isSelected() ) {
+                _use_brackets_for_conf_in_nh_export_cbmi.setSelected( false );
+            }
+            updateOptions( getOptions() );
+        }
         else if ( o == _label_direction_cbmi ) {
             updateOptions( getOptions() );
         }
@@ -375,7 +438,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
         else if ( o == _website_item ) {
             try {
-                Util.openWebsite( Constants.APTX_WEB_SITE, is_applet, applet );
+                AptxUtil.openWebsite( Constants.APTX_WEB_SITE, is_applet, applet );
             }
             catch ( final IOException e1 ) {
                 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
@@ -383,7 +446,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
         else if ( o == _phyloxml_website_item ) {
             try {
-                Util.openWebsite( Constants.PHYLOXML_WEB_SITE, is_applet, applet );
+                AptxUtil.openWebsite( Constants.PHYLOXML_WEB_SITE, is_applet, applet );
             }
             catch ( final IOException e1 ) {
                 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
@@ -391,7 +454,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
         else if ( o == _aptx_ref_item ) {
             try {
-                Util.openWebsite( Constants.APTX_REFERENCE_URL, is_applet, applet );
+                AptxUtil.openWebsite( Constants.APTX_REFERENCE_URL, is_applet, applet );
             }
             catch ( final IOException e1 ) {
                 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
@@ -399,7 +462,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
         else if ( o == _phyloxml_ref_item ) {
             try {
-                Util.openWebsite( Constants.PHYLOXML_REFERENCE_URL, is_applet, applet );
+                AptxUtil.openWebsite( Constants.PHYLOXML_REFERENCE_URL, is_applet, applet );
             }
             catch ( final IOException e1 ) {
                 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
@@ -485,6 +548,43 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         _jmenubar.add( _help_jmenu );
     }
 
+    public void updateProcessMenu() {
+        // In general Swing is not thread safe.
+        // See "Swing's Threading Policy".
+        SwingUtilities.invokeLater( new Runnable() {
+
+            public void run() {
+                doUpdateProcessMenu();
+            }
+        } );
+    }
+
+    private void doUpdateProcessMenu() {
+        if ( _process_pool.size() > 0 ) {
+            if ( _process_menu == null ) {
+                _process_menu = createMenu( "", getConfiguration() );
+                _process_menu.setForeground( Color.RED );
+            }
+            _process_menu.removeAll();
+            final String text = "processes running: " + _process_pool.size();
+            _process_menu.setText( text );
+            _jmenubar.add( _process_menu );
+            for( int i = 0; i < _process_pool.size(); ++i ) {
+                final ProcessRunning p = _process_pool.getProcessByIndex( i );
+                _process_menu.add( customizeJMenuItem( new JMenuItem( p.getName() + " [" + p.getStart() + "]" ) ) );
+            }
+        }
+        else {
+            if ( _process_menu != null ) {
+                _process_menu.removeAll();
+                _jmenubar.remove( _process_menu );
+            }
+        }
+        _jmenubar.validate();
+        _jmenubar.repaint();
+        repaint();
+    }
+
     void buildTypeMenu() {
         _type_menu = createMenu( TYPE_MENU_HEADER, getConfiguration() );
         _type_menu.add( _rectangular_type_cbmi = new JCheckBoxMenuItem( MainFrame.RECTANGULAR_TYPE_CBMI_LABEL ) );
@@ -563,6 +663,40 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
     }
 
+    static void chooseNodeSize( final Options options, final Component parent ) {
+        final String s = ( String ) JOptionPane.showInputDialog( parent,
+                                                                 "Please enter the default size for node shapes.\n"
+                                                                         + "[current value: "
+                                                                         + options.getDefaultNodeShapeSize() + "]\n",
+                                                                 "Node Shape Size",
+                                                                 JOptionPane.QUESTION_MESSAGE,
+                                                                 null,
+                                                                 null,
+                                                                 options.getDefaultNodeShapeSize() );
+        if ( !ForesterUtil.isEmpty( s ) ) {
+            boolean success = true;
+            double m = 0.0;
+            final String m_str = s.trim();
+            if ( !ForesterUtil.isEmpty( m_str ) ) {
+                try {
+                    m = Double.parseDouble( m_str );
+                }
+                catch ( final Exception ex ) {
+                    success = false;
+                }
+            }
+            else {
+                success = false;
+            }
+            if ( success && ( m >= 0.0 ) ) {
+                final short size = ForesterUtil.roundToShort( m );
+                if ( size >= 0.0 ) {
+                    options.setDefaultNodeShapeSize( size );
+                }
+            }
+        }
+    }
+
     void close() {
         removeTextFrame();
         if ( _mainpanel != null ) {
@@ -581,6 +715,23 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
     }
 
+    void colorRank() {
+        if ( _mainpanel.getCurrentTreePanel() != null ) {
+            final String[] ranks = AptxUtil.getAllPossibleRanks();
+            final String rank = ( String ) JOptionPane
+                    .showInputDialog( this,
+                                      "What rank should the colorization be based on",
+                                      "Rank Selection",
+                                      JOptionPane.QUESTION_MESSAGE,
+                                      null,
+                                      ranks,
+                                      null );
+            if ( !ForesterUtil.isEmpty( rank ) ) {
+                _mainpanel.getCurrentTreePanel().colorRank( rank );
+            }
+        }
+    }
+
     void customizeCheckBoxMenuItem( final JCheckBoxMenuItem item, final boolean is_selected ) {
         if ( item != null ) {
             item.setFont( MainFrame.menu_font );
@@ -593,7 +744,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
     }
 
-    void customizeJMenuItem( final JMenuItem jmi ) {
+    JMenuItem customizeJMenuItem( final JMenuItem jmi ) {
         if ( jmi != null ) {
             jmi.setFont( MainFrame.menu_font );
             if ( !getConfiguration().isUseNativeUI() ) {
@@ -602,6 +753,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
             }
             jmi.addActionListener( this );
         }
+        return jmi;
     }
 
     void customizeRadioButtonMenuItem( final JRadioButtonMenuItem item, final boolean is_selected ) {
@@ -675,7 +827,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         return _label_direction_cbmi;
     }
 
-    MainPanel getMainPanel() {
+    public MainPanel getMainPanel() {
         return _mainpanel;
     }
 
@@ -683,7 +835,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         return _jmenubar;
     }
 
-    Options getOptions() {
+    public Options getOptions() {
         return _options;
     }
 
@@ -732,7 +884,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
 
     private void removeBranchColors() {
         if ( getMainPanel().getCurrentPhylogeny() != null ) {
-            Util.removeBranchColors( getMainPanel().getCurrentPhylogeny() );
+            AptxUtil.removeBranchColors( getMainPanel().getCurrentPhylogeny() );
         }
     }
 
@@ -751,6 +903,14 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         _options = options;
     }
 
+    void setInferenceManager( final InferenceManager i ) {
+        _inference_manager = i;
+    }
+
+    public InferenceManager getInferenceManager() {
+        return _inference_manager;
+    }
+
     void setSelectedTypeInTypeMenu( final PHYLOGENY_GRAPHICS_TYPE type ) {
         setTypeMenuToAllUnselected();
         switch ( type ) {
@@ -850,7 +1010,10 @@ public abstract class MainFrame extends JFrame implements ActionListener {
                 && _abbreviate_scientific_names.isSelected() );
         options.setColorLabelsSameAsParentBranch( ( _color_labels_same_as_parent_branch != null )
                 && _color_labels_same_as_parent_branch.isSelected() );
-        options.setShowNodeBoxes( ( _show_node_boxes_cbmi != null ) && _show_node_boxes_cbmi.isSelected() );
+        options.setShowDefaultNodeShapes( ( _show_default_node_shapes_cbmi != null )
+                && _show_default_node_shapes_cbmi.isSelected() );
+        options.setTaxonomyColorizeNodeShapes( ( _taxonomy_colorize_node_shapes_cbmi != null )
+                && _taxonomy_colorize_node_shapes_cbmi.isSelected() );
         if ( ( _non_lined_up_cladograms_rbmi != null ) && ( _non_lined_up_cladograms_rbmi.isSelected() ) ) {
             options.setCladogramType( CLADOGRAM_TYPE.NON_LINED_UP );
         }
@@ -874,6 +1037,8 @@ public abstract class MainFrame extends JFrame implements ActionListener {
             }
         }
         options.setShowOverview( ( _show_overview_cbmi != null ) && _show_overview_cbmi.isSelected() );
+        options.setShowConfidenceStddev( ( _show_confidence_stddev_cbmi != null )
+                && _show_confidence_stddev_cbmi.isSelected() );
         if ( ( _show_branch_length_values_cbmi != null ) && _show_branch_length_values_cbmi.isEnabled() ) {
             options.setShowBranchLengthValues( _show_branch_length_values_cbmi.isSelected() );
         }
@@ -882,6 +1047,17 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         options.setGraphicsExportUsingActualSize( ( _graphics_export_using_actual_size_cbmi != null )
                 && ( _graphics_export_using_actual_size_cbmi.isSelected() ) );
         options.setAntialiasPrint( ( _antialias_print_cbmi != null ) && _antialias_print_cbmi.isSelected() );
+        if ( ( _use_brackets_for_conf_in_nh_export_cbmi != null )
+                && _use_brackets_for_conf_in_nh_export_cbmi.isSelected() ) {
+            options.setNhConversionSupportValueStyle( NH_CONVERSION_SUPPORT_VALUE_STYLE.IN_SQUARE_BRACKETS );
+        }
+        else if ( ( _use_internal_names_for_conf_in_nh_export_cbmi != null )
+                && _use_internal_names_for_conf_in_nh_export_cbmi.isSelected() ) {
+            options.setNhConversionSupportValueStyle( NH_CONVERSION_SUPPORT_VALUE_STYLE.AS_INTERNAL_NODE_NAMES );
+        }
+        else {
+            options.setNhConversionSupportValueStyle( NH_CONVERSION_SUPPORT_VALUE_STYLE.NONE );
+        }
         options.setPrintBlackAndWhite( ( _print_black_and_white_cbmi != null )
                 && _print_black_and_white_cbmi.isSelected() );
         options.setInternalNumberAreConfidenceForNhParsing( ( _internal_number_are_confidence_for_nh_parsing_cbmi != null )
@@ -939,25 +1115,27 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty() ) {
             return;
         }
-        _textframe = TextFrame.instantiate( Util.crateBasicInformation( _mainpanel.getCurrentPhylogeny() ) );
+        _textframe = TextFrame.instantiate( AptxUtil.createBasicInformation( _mainpanel.getCurrentPhylogeny() ) );
     }
 
     void viewAsNexus() {
         removeTextFrame();
         if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty()
-                || ( _mainpanel.getCurrentPhylogeny().getNumberOfExternalNodes() > 10000 ) ) {
+                || ( _mainpanel.getCurrentPhylogeny().getNumberOfExternalNodes() > 20000 ) ) {
             return;
         }
-        _textframe = TextFrame.instantiate( _mainpanel.getCurrentPhylogeny().toNexus() );
+        _textframe = TextFrame.instantiate( _mainpanel.getCurrentPhylogeny().toNexus( getOptions()
+                .getNhConversionSupportValueStyle() ) );
     }
 
     void viewAsNH() {
         removeTextFrame();
         if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty()
-                || ( _mainpanel.getCurrentPhylogeny().getNumberOfExternalNodes() > 10000 ) ) {
+                || ( _mainpanel.getCurrentPhylogeny().getNumberOfExternalNodes() > 20000 ) ) {
             return;
         }
-        _textframe = TextFrame.instantiate( _mainpanel.getCurrentPhylogeny().toNewHampshire( false ) );
+        _textframe = TextFrame.instantiate( _mainpanel.getCurrentPhylogeny()
+                .toNewHampshire( false, getOptions().getNhConversionSupportValueStyle() ) );
     }
 
     void viewAsNHX() {
@@ -982,10 +1160,11 @@ public abstract class MainFrame extends JFrame implements ActionListener {
      */
     static void about() {
         final StringBuffer about = new StringBuffer( "Archaeopteryx\nVersion " + Constants.VERSION + "\n" );
-        about.append( "Copyright (C) 2007-2011 Christian Zmasek\n" );
+        about.append( "Copyright (C) 2007-2012 Christian M. Zmasek\n" );
         about.append( "All Rights Reserved\n" );
         about.append( "License: GNU Lesser General Public License (LGPL)\n" );
         about.append( "Last modified: " + Constants.PRG_DATE + "\n" );
+        about.append( "Based on: " + ForesterUtil.getForesterLibraryInformation() + "\n" );
         about.append( "phyloXML version : " + ForesterConstants.PHYLO_XML_VERSION + "\n" );
         about.append( "phyloXML location: " + ForesterConstants.PHYLO_XML_LOCATION + "\n" );
         if ( !ForesterUtil.isEmpty( ForesterUtil.JAVA_VERSION ) && !ForesterUtil.isEmpty( ForesterUtil.JAVA_VENDOR ) ) {
@@ -1052,7 +1231,38 @@ public abstract class MainFrame extends JFrame implements ActionListener {
             default:
                 throw new RuntimeException( "unknown placement: " + op.getOvPlacement() );
         }
-        tree_panel.updateOvSettings();
+        if ( tree_panel != null ) {
+            tree_panel.updateOvSettings();
+        }
+    }
+
+    static void cycleNodeFill( final Options op, final TreePanel tree_panel ) {
+        switch ( op.getDefaultNodeFill() ) {
+            case GRADIENT:
+                op.setDefaultNodeFill( NodeFill.SOLID );
+                break;
+            case NONE:
+                op.setDefaultNodeFill( NodeFill.GRADIENT );
+                break;
+            case SOLID:
+                op.setDefaultNodeFill( NodeFill.NONE );
+                break;
+            default:
+                throw new RuntimeException( "unknown fill: " + op.getDefaultNodeFill() );
+        }
+    }
+
+    static void cycleNodeShape( final Options op, final TreePanel tree_panel ) {
+        switch ( op.getDefaultNodeShape() ) {
+            case CIRCLE:
+                op.setDefaultNodeShape( NodeShape.RECTANGLE );
+                break;
+            case RECTANGLE:
+                op.setDefaultNodeShape( NodeShape.CIRCLE );
+                break;
+            default:
+                throw new RuntimeException( "unknown shape: " + op.getDefaultNodeShape() );
+        }
     }
 
     static void help( final Map<String, WebLink> weblinks ) {
@@ -1153,12 +1363,32 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         TextFrame.instantiate( sb.toString() );
     }
 
-    static void setOvPlacementColorChooseMenuItem( final JMenuItem mi, final TreePanel tree_panel ) {
-        if ( ( tree_panel != null ) && ( tree_panel.getTreeColorSet() != null ) ) {
-            mi.setText( "Overview Placement... (current: " + tree_panel.getOptions().getOvPlacement() + ")" );
+    static void setOvPlacementColorChooseMenuItem( final JMenuItem mi, final Options options ) {
+        if ( ( options != null ) && ( options.getOvPlacement() != null ) ) {
+            mi.setText( "Cycle Overview Placement... (current: " + options.getOvPlacement() + ")" );
         }
         else {
-            mi.setText( "Overview Placement..." );
+            mi.setText( "Cycle Overview Placement..." );
+        }
+    }
+
+    static void setCycleNodeFillMenuItem( final JMenuItem mi, final Options options ) {
+        if ( ( options != null ) && ( options.getDefaultNodeFill() != null ) ) {
+            mi.setText( "Cycle Node Shape Fill Type... (current: "
+                    + options.getDefaultNodeFill().toString().toLowerCase() + ")" );
+        }
+        else {
+            mi.setText( "Cycle Node Shape Fill Type..." );
+        }
+    }
+
+    static void setCycleNodeShapeMenuItem( final JMenuItem mi, final Options options ) {
+        if ( ( options != null ) && ( options.getDefaultNodeShape() != null ) ) {
+            mi.setText( "Cycle Node Shape Fill Type... (current: "
+                    + options.getDefaultNodeShape().toString().toLowerCase() + ")" );
+        }
+        else {
+            mi.setText( "Cycle Node Shape Fill Type..." );
         }
     }
 
@@ -1179,7 +1409,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         if ( ( current_tree_panel == null ) || ( current_tree_panel.getPhylogeny() == null ) ) {
             mi.setEnabled( true );
         }
-        else if ( ForesterUtil.isHasAtLeastOneBranchWithSupportValues( current_tree_panel.getPhylogeny() ) ) {
+        else if ( AptxUtil.isHasAtLeastOneBranchWithSupportValues( current_tree_panel.getPhylogeny() ) ) {
             mi.setEnabled( true );
         }
         else {
@@ -1188,6 +1418,10 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         mi.setText( "Enter Min Confidence Value... (current: " + options.getMinConfidenceValue() + ")" );
     }
 
+    static void setTextNodeSizeMenuItem( final JMenuItem mi, final Options options ) {
+        mi.setText( "Enter Default Node Shape Size... (current: " + options.getDefaultNodeShapeSize() + ")" );
+    }
+
     static void updateOptionsMenuDependingOnPhylogenyType( final MainPanel main_panel,
                                                            final JCheckBoxMenuItem scale,
                                                            final JCheckBoxMenuItem branch_lengths,