in progress
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 3 Jun 2011 23:09:58 +0000 (23:09 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 3 Jun 2011 23:09:58 +0000 (23:09 +0000)
forester/java/src/org/forester/archaeopteryx/ArchaeopteryxE.java
forester/java/src/org/forester/archaeopteryx/MainFrame.java
forester/java/src/org/forester/archaeopteryx/MainFrameApplet.java
forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java
forester/java/src/org/forester/archaeopteryx/Options.java
forester/java/src/org/forester/archaeopteryx/TreePanel.java

index d6d842b..9e483b7 100644 (file)
@@ -389,7 +389,7 @@ public class ArchaeopteryxE extends JApplet implements ActionListener {
         customizeJMenuItem( _choose_minimal_confidence_mi );
         customizeJMenuItem( _switch_colors_mi );
         customizeJMenuItem( _overview_placment_mi );
-        customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().isShowNodeBoxes() );
+        customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().getDefaultNodeShape() );
         customizeCheckBoxMenuItem( _label_direction_cbmi,
                                    getOptions().getNodeLabelDirection() == NODE_LABEL_DIRECTION.RADIAL );
         customizeCheckBoxMenuItem( _screen_antialias_cbmi, getOptions().isAntialiasScreen() );
index 13426a3..d1ad9b4 100644 (file)
@@ -850,7 +850,9 @@ 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() );
+        //TODO FIXME ~~
+        //options.setShowNodeBoxes( ( _show_node_boxes_cbmi != null ) && _show_node_boxes_cbmi.isSelected() );
+      //TODO FIXME ~~
         if ( ( _non_lined_up_cladograms_rbmi != null ) && ( _non_lined_up_cladograms_rbmi.isSelected() ) ) {
             options.setCladogramType( CLADOGRAM_TYPE.NON_LINED_UP );
         }
index 0b89e48..6a63002 100644 (file)
@@ -208,7 +208,7 @@ public final class MainFrameApplet extends MainFrame {
         customizeJMenuItem( _switch_colors_mi );
         customizeJMenuItem( _choose_minimal_confidence_mi );
         customizeJMenuItem( _overview_placment_mi );
-        customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().isShowNodeBoxes() );
+        customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().getDefaultNodeShape() );
         customizeCheckBoxMenuItem( _color_labels_same_as_parent_branch, getOptions().isColorLabelsSameAsParentBranch() );
         customizeCheckBoxMenuItem( _screen_antialias_cbmi, getOptions().isAntialiasScreen() );
         customizeCheckBoxMenuItem( _background_gradient_cbmi, getOptions().isBackgroundColorGradient() );
index b1dda81..c721023 100644 (file)
@@ -762,7 +762,9 @@ public final class MainFrameApplication extends MainFrame {
         customizeJMenuItem( _print_size_mi );
         customizeJMenuItem( _choose_pdf_width_mi );
         customizeJMenuItem( _overview_placment_mi );
-        customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().isShowNodeBoxes() );
+        //TODO FIXME ~~
+        //customizeCheckBoxMenuItem( _show_node_boxes_cbmi, getOptions().getDefaultNodeShape() );
+      //TODO FIXME ~~
         customizeCheckBoxMenuItem( _color_labels_same_as_parent_branch, getOptions().isColorLabelsSameAsParentBranch() );
         customizeCheckBoxMenuItem( _screen_antialias_cbmi, getOptions().isAntialiasScreen() );
         customizeCheckBoxMenuItem( _background_gradient_cbmi, getOptions().isBackgroundColorGradient() );
index babf160..84f42f8 100644 (file)
@@ -35,7 +35,7 @@ import org.forester.util.ForesterUtil;
 final public class Options {
 
     static final double             MIN_CONFIDENCE_DEFAULT = 0.0;
-    private boolean                 _show_node_boxes;
+    private NodeShape                 _default_node_shape;
     private boolean                 _show_branch_length_values;
     private boolean                 _internal_number_are_confidence_for_nh_parsing;
     private boolean                 _show_scale;
@@ -68,6 +68,14 @@ final public class Options {
     private boolean                 _show_domain_labels;
     private boolean                 _color_labels_same_as_parent_branch;
     private boolean                 _abbreviate_scientific_names;
+    
+    enum NodeShape {
+        NONE, 
+        CIRCLE_WITH_GRADIENT,
+        CIRCLE_SOLID,
+        RECTANGLE_WITH_GRADIENT,
+        RECTANGLE_SOLID;
+    }
 
     private Options() {
         init();
@@ -122,7 +130,7 @@ final public class Options {
     }
 
     final private void init() {
-        _show_node_boxes = false;
+        _default_node_shape = NodeShape.RECTANGLE_WITH_GRADIENT;
         _show_branch_length_values = false;
         _internal_number_are_confidence_for_nh_parsing = false;
         _show_scale = false;
@@ -231,8 +239,8 @@ final public class Options {
         return _show_branch_length_values;
     }
 
-    final boolean isShowNodeBoxes() {
-        return _show_node_boxes;
+    final NodeShape getDefaultNodeShape() {
+        return _default_node_shape;
     }
 
     final boolean isShowOverview() {
@@ -365,8 +373,8 @@ final public class Options {
         _show_branch_length_values = show_branch_length_values;
     }
 
-    final void setShowNodeBoxes( final boolean show_node_boxes ) {
-        _show_node_boxes = show_node_boxes;
+    final void setDefaultNodeShape( final NodeShape default_node_shape ) {
+        _default_node_shape = default_node_shape;
     }
 
     final void setShowOverview( final boolean show_overview ) {
@@ -475,7 +483,11 @@ final public class Options {
     }
 
     boolean isAllowMagnificationOfTaxonomyImages() {
-        // TODO Auto-generated method stub
         return true;
     }
+
+   int getDefaultNodeBoxSize() {
+        // TODO make variable ~~
+        return 8;
+    }
 }
index 00620cc..f5f3da6 100644 (file)
@@ -136,15 +136,13 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
     private final static int                EURO_D                            = 10;
     private final static String             NODE_POPMENU_NODE_CLIENT_PROPERTY = "node";
     private final static int                MIN_ROOT_LENGTH                   = 3;
-    private final static int                BOX_SIZE                          = 4;
-    private final static int                HALF_BOX_SIZE                     = TreePanel.BOX_SIZE / 2;
     private final static int                MAX_SUBTREES                      = 100;
     private final static int                MAX_NODE_FRAMES                   = 10;
     private final static int                MOVE                              = 20;
     private final static NumberFormat       FORMATTER_CONFIDENCE;
     private final static NumberFormat       FORMATTER_BRANCH_LENGTH;
     private final static int                WIGGLE                            = 2;
-    private final static int                HALF_BOX_SIZE_PLUS_WIGGLE         = HALF_BOX_SIZE + WIGGLE;
+    private int                _half_box_size_plus_wiggle;
     private final static int                LIMIT_FOR_HQ_RENDERING            = 1000;
     private final static int                CONFIDENCE_LEFT_MARGIN            = 4;
     // TODO "rendering_hints" was static before. Need to make sure everything is OK with it not
@@ -218,6 +216,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
     private boolean                         _edited                           = false;
     private Popup                           _node_desc_popup;
     private JTextArea                       _rollover_popup;
+    private int                _box_size  ;                       
+    private int                _half_box_size;
     //private final short                     _skip_counter                     = 0;
     private final StringBuffer              _popup_buffer                     = new StringBuffer();
     final private static Font               POPUP_FONT                        = new Font( Configuration.getDefaultFontFamilyName(),
@@ -266,6 +266,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         _configuration = configuration;
         _phylogeny = t;
         _phy_has_branch_lengths = ForesterUtil.isHasAtLeastOneBranchLengthLargerThanZero( _phylogeny );
+        _box_size                          = tjp.getOptions().getDefaultNodeBoxSize();
+        _half_box_size                     = tjp.getOptions().getDefaultNodeBoxSize() / 2;
+
+        _half_box_size_plus_wiggle         = _half_box_size + WIGGLE;
         init();
         // if ( !_phylogeny.isEmpty() ) {
         _phylogeny.recalculateNumberOfExternalDescendants( true );
@@ -939,6 +943,44 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         _rectangle.setFrame( x, y, width, heigth );
         g.fill( _rectangle );
     }
+    
+    //TODO FIXME
+    final private void drawRectGradient( final double x,
+                                         final double y,
+                                         final double width,
+                                         final double heigth,
+                                         final Graphics2D g,
+                                         final Color color_1,
+                                         final Color color_2,
+                                         final Color color_border ) {
+        _rectangle.setFrame( x, y, width, heigth );
+        g.setPaint( new GradientPaint(( float )x, ( float )y, color_1, ( float ) (x +width), ( float )( y+heigth), color_2,
+                                      false) );
+        g.fill( _rectangle );
+        if ( color_border != null ) {
+            g.setPaint( color_border );
+            g.draw( _rectangle );
+        }
+    }
+    
+    //TODO FIXME
+    final private void drawOvalGradient( final double x,
+                                         final double y,
+                                         final double width,
+                                         final double heigth,
+                                         final Graphics2D g,
+                                         final Color color_1,
+                                         final Color color_2,
+                                         final Color color_border ) {
+        _ellipse.setFrame( x, y, width, heigth );
+        g.setPaint( new GradientPaint(( float )x, ( float )y, color_1, ( float ) (x +width), ( float )( y+heigth), color_2,
+                                      false) );
+        g.fill( _ellipse );
+        if ( color_border != null ) {
+            g.setPaint( color_border );
+            g.draw( _ellipse );
+        }
+    }
 
     final private void errorMessageNoCutCopyPasteInUnrootedDisplay() {
         JOptionPane.showMessageDialog( this,
@@ -961,10 +1003,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         for( final PhylogenyNodeIterator iter = _phylogeny.iteratorPostorder(); iter.hasNext(); ) {
             final PhylogenyNode node = iter.next();
             if ( ( _phylogeny.isRooted() || !node.isRoot() || ( node.getNumberOfDescendants() > 2 ) )
-                    && ( ( node.getXcoord() - HALF_BOX_SIZE_PLUS_WIGGLE ) <= x )
-                    && ( ( node.getXcoord() + HALF_BOX_SIZE_PLUS_WIGGLE ) >= x )
-                    && ( ( node.getYcoord() - HALF_BOX_SIZE_PLUS_WIGGLE ) <= y )
-                    && ( ( node.getYcoord() + HALF_BOX_SIZE_PLUS_WIGGLE ) >= y ) ) {
+                    && ( ( node.getXcoord() - _half_box_size_plus_wiggle ) <= x )
+                    && ( ( node.getXcoord() + _half_box_size_plus_wiggle ) >= x )
+                    && ( ( node.getYcoord() - _half_box_size_plus_wiggle ) <= y )
+                    && ( ( node.getYcoord() + _half_box_size_plus_wiggle ) >= y ) ) {
                 return node;
             }
         }
@@ -2285,40 +2327,40 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                     || ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) ) {
                 boolean draw_vertical = true;
                 final PhylogenyNode parent = node.getParent();
-                if ( ( ( getOptions().isShowNodeBoxes() && !to_pdf && !to_graphics_file ) || ( ( getControlPanel()
+                if ( ( ( getOptions().getDefaultNodeShape() != Options.NodeShape.NONE && !to_pdf && !to_graphics_file ) || ( ( getControlPanel()
                         .isEvents() ) && ( parent != null ) && parent.isHasAssignedEvent() ) )
                         && ( _phylogeny.isRooted() || !( ( parent != null ) && parent.isRoot() ) )
                         && !( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() && !parent
                                 .isDuplication() ) ) {
                     if ( ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE )
                             && ( getPhylogenyGraphicsType() != PHYLOGENY_GRAPHICS_TYPE.ROUNDED ) ) {
-                        if ( Math.abs( y2 - y1 ) <= TreePanel.HALF_BOX_SIZE ) {
+                        if ( Math.abs( y2 - y1 ) <= _half_box_size ) {
                             draw_vertical = false;
                         }
                         else {
                             if ( y1 < y2 ) {
-                                y1 += TreePanel.HALF_BOX_SIZE;
+                                y1 += _half_box_size;
                             }
                             else {
                                 if ( !to_pdf ) {
-                                    y1 -= TreePanel.HALF_BOX_SIZE + 1;
+                                    y1 -= _half_box_size + 1;
                                 }
                                 else {
-                                    y1 -= TreePanel.HALF_BOX_SIZE;
+                                    y1 -= _half_box_size;
                                 }
                             }
                         }
                     }
-                    if ( ( x2 - x1 ) <= TreePanel.HALF_BOX_SIZE ) {
+                    if ( ( x2 - x1 ) <= _half_box_size ) {
                         draw_horizontal = false;
                     }
                     else if ( !draw_vertical ) {
-                        x1a += TreePanel.HALF_BOX_SIZE;
+                        x1a += _half_box_size;
                     }
-                    if ( ( ( x2 - x1a ) > TreePanel.HALF_BOX_SIZE )
+                    if ( ( ( x2 - x1a ) > _half_box_size )
                             && !( ( to_pdf || to_graphics_file ) && getOptions().isPrintBlackAndWhite() && !node
                                     .isDuplication() ) ) {
-                        x2a -= TreePanel.HALF_BOX_SIZE;
+                        x2a -= _half_box_size;
                     }
                 }
                 if ( draw_vertical ) {
@@ -2477,7 +2519,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                                          final boolean to_graphics_file ) {
         if ( n.isExternal() ) {
             if ( !_urt_nodeid_angle_map.containsKey( n.getId() ) ) {
-                System.out.println( "no " + n + ", fucker!" );//TODO
+                System.out.println( "no " + n + ", ERROR!" );//TODO
             }
             return _urt_nodeid_angle_map.get( n.getId() );
         }
@@ -2565,15 +2607,15 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         else {
             d = ( Math.log10( d ) * _y_distance ) / 2.5;
         }
-        if ( d < BOX_SIZE ) {
-            d = BOX_SIZE;
+        if ( d < _box_size ) {
+            d = _box_size;
         }
         _polygon.reset();
-        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() - TreePanel.BOX_SIZE ),
+        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() - _box_size ),
                            ForesterUtil.roundToInt( node.getYcoord() ) );
-        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + TreePanel.BOX_SIZE ),
+        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + _box_size ),
                            ForesterUtil.roundToInt( node.getYcoord() - d ) );
-        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + TreePanel.BOX_SIZE ),
+        _polygon.addPoint( ForesterUtil.roundToInt( node.getXcoord() + _box_size ),
                            ForesterUtil.roundToInt( node.getYcoord() + d ) );
         g.fillPolygon( _polygon );
         paintNodeData( g, node, to_graphics_file, to_pdf, is_in_found_nodes );
@@ -2667,7 +2709,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
 
     final private void paintFoundNode( final int x, final int y, final Graphics2D g ) {
         g.setColor( getTreeColorSet().getFoundColor() );
-        g.fillRect( x - TreePanel.HALF_BOX_SIZE, y - TreePanel.HALF_BOX_SIZE, TreePanel.BOX_SIZE, TreePanel.BOX_SIZE );
+        g.fillRect( x - _half_box_size, y - _half_box_size, _box_size, _box_size );
     }
 
     final private void paintGainedAndLostCharacters( final Graphics2D g,
@@ -2742,15 +2784,19 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             else {
                 assignGraphicsForNodeBoxWithColorForParentBranch( node, g );
             }
-            if ( ( getOptions().isShowNodeBoxes() && !to_pdf && !to_graphics_file )
+            if ( ( getOptions().getDefaultNodeShape() != Options.NodeShape.NONE && !to_pdf && !to_graphics_file )
                     || ( getControlPanel().isEvents() && node.isHasAssignedEvent() ) ) {
                 if ( to_pdf || to_graphics_file ) {
                     if ( node.isDuplication() || !getOptions().isPrintBlackAndWhite() ) {
-                        drawOvalFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g );
+                        drawOvalFilled( x - _half_box_size, y - _half_box_size, _box_size, _box_size, g );
                     }
                 }
                 else {
-                    drawRectFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g );
+                    //TODO FIXME
+                    //drawRectFilled( x - HALF_BOX_SIZE, y - HALF_BOX_SIZE, BOX_SIZE, BOX_SIZE, g );
+                    drawOvalGradient( x - _half_box_size, y - _half_box_size, _box_size, _box_size, g
+                                      ,Color.BLACK,
+                                       g.getColor(), g.getColor()); 
                 }
             }
         }
@@ -2780,7 +2826,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 && node.getNodeData().isHasTaxonomy()
                 && ( ( node.getNodeData().getTaxonomy().getUris() != null ) && !node.getNodeData().getTaxonomy()
                         .getUris().isEmpty() ) ) {
-            x += drawTaxonomyImage( node.getXcoord() + 2 + TreePanel.HALF_BOX_SIZE, node.getYcoord(), node, g );
+            x += drawTaxonomyImage( node.getXcoord() + 2 + _half_box_size, node.getYcoord(), node, g );
         }
         if ( ( getControlPanel().isShowTaxonomyCode() || getControlPanel().isShowTaxonomyScientificNames() || getControlPanel()
                 .isShowTaxonomyCommonNames() ) && node.getNodeData().isHasTaxonomy() ) {
@@ -2849,7 +2895,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         if ( !node.isExternal() && ( node.getNumberOfDescendants() == 1 ) ) {
             down_shift_factor = 1;
         }
-        final double pos_x = node.getXcoord() + x + 2 + TreePanel.HALF_BOX_SIZE;
+        final double pos_x = node.getXcoord() + x + 2 + _half_box_size;
         final double pos_y = ( node.getYcoord() + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ) );
         final String sb_str = _sb.toString();
         // GUILHEM_BEG ______________
@@ -2874,7 +2920,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                             && seqRelation.getType().equals( getControlPanel().getSequenceRelationTypeBox()
                                     .getSelectedItem() );
                     if ( fGotRelationWithQuery ) { // we will underline the text to show that this sequence is ortholog to the query
-                        final double linePosX = node.getXcoord() + 2 + TreePanel.HALF_BOX_SIZE;
+                        final double linePosX = node.getXcoord() + 2 + _half_box_size;
                         final String sConfidence = ( !getControlPanel().isShowSequenceRelationConfidence() || ( seqRelation
                                 .getConfidence() == null ) ) ? null : " (" + seqRelation.getConfidence().getValue()
                                 + ")";
@@ -2932,7 +2978,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 g.setColor( calculateColorForAnnotation( ann ) );
             }
             final String ann_str = ann.asSimpleText().toString();
-            TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + TreePanel.HALF_BOX_SIZE, node.getYcoord()
+            TreePanel.drawString( ann_str, node.getXcoord() + x + 3 + _half_box_size, node.getYcoord()
                     + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g );
             _sb.setLength( 0 );
             _sb.append( ann_str );
@@ -2953,7 +2999,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 }
                 if ( getControlPanel().isShowBinaryCharacters() ) {
                     TreePanel.drawString( node.getNodeData().getBinaryCharacters().getPresentCharactersAsStringBuffer()
-                            .toString(), node.getXcoord() + x + 1 + TreePanel.HALF_BOX_SIZE, node.getYcoord()
+                            .toString(), node.getXcoord() + x + 1 + _half_box_size, node.getYcoord()
                             + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g );
                     paintGainedAndLostCharacters( g, node, node.getNodeData().getBinaryCharacters()
                             .getGainedCharactersAsStringBuffer().toString(), node.getNodeData().getBinaryCharacters()
@@ -2972,12 +3018,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                         }
                         final double mean = ForesterUtil.round( sum / count, 1 );
                         TreePanel.drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount() + " ["
-                                + mean + "]", node.getXcoord() + x + 4 + TreePanel.HALF_BOX_SIZE, node.getYcoord()
+                                + mean + "]", node.getXcoord() + x + 4 + _half_box_size, node.getYcoord()
                                 + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ), g );
                     }
                     else {
                         TreePanel.drawString( " " + node.getNodeData().getBinaryCharacters().getPresentCount(),
-                                              node.getXcoord() + x + 4 + TreePanel.HALF_BOX_SIZE,
+                                              node.getXcoord() + x + 4 + _half_box_size,
                                               node.getYcoord()
                                                       + ( getTreeFontSet()._fm_large.getAscent() / down_shift_factor ),
                                               g );
@@ -3717,7 +3763,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         else {
             g.setColor( getTreeColorSet().getTaxonomyColor() );
         }
-        final double start_x = node.getXcoord() + 3 + TreePanel.HALF_BOX_SIZE + x_shift;
+        final double start_x = node.getXcoord() + 3 + _half_box_size + x_shift;
         final double start_y = node.getYcoord()
                 + ( getTreeFontSet()._fm_large.getAscent() / ( node.getNumberOfDescendants() == 1 ? 1 : 3.0 ) );
         _sb.setLength( 0 );
@@ -4616,6 +4662,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                                            JOptionPane.WARNING_MESSAGE );
             return;
         }
+        _nodes_in_preorder = null;
         if ( !node.isExternal() && !node.isRoot() && ( _subtree_index <= ( TreePanel.MAX_SUBTREES - 1 ) ) ) {
             _sub_phylogenies[ _subtree_index ] = _phylogeny;
             _sub_phylogenies_temp_roots[ _subtree_index ] = node;
@@ -4635,6 +4682,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
     }
 
     final private static Phylogeny subTree( final PhylogenyNode new_root, final Phylogeny source_phy ) {
+        
         final Phylogeny new_phy = new Phylogeny();
         new_phy.setRooted( true );
         new_phy.setName( source_phy.getName() );
@@ -4652,6 +4700,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
     }
 
     final void superTree() {
+        _nodes_in_preorder = null;
         final PhylogenyNode temp_root = _sub_phylogenies_temp_roots[ _subtree_index - 1 ];
         for( final PhylogenyNode n : temp_root.getDescendants() ) {
             n.setParent( temp_root );