in progress
[jalview.git] / forester / java / src / org / forester / archaeopteryx / ControlPanel.java
index d3b56e2..b58411b 100644 (file)
@@ -4,7 +4,7 @@
 //
 // Copyright (C) 2008-2009 Christian M. Zmasek
 // Copyright (C) 2008-2009 Burnham Institute for Medical Research
-// 
+//
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
@@ -14,7 +14,7 @@
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 // Lesser General Public License for more details.
-// 
+//
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
@@ -61,9 +61,11 @@ import org.forester.archaeopteryx.Options.CLADOGRAM_TYPE;
 import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE;
 import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyMethods;
+import org.forester.phylogeny.PhylogenyMethods.DESCENDANT_SORT_PRIORITY;
 import org.forester.phylogeny.PhylogenyNode;
 import org.forester.phylogeny.data.Sequence;
 import org.forester.phylogeny.data.SequenceRelation;
+import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
 import org.forester.util.ForesterUtil;
 
 final class ControlPanel extends JPanel implements ActionListener {
@@ -109,6 +111,7 @@ final class ControlPanel extends JPanel implements ActionListener {
     private JComboBox            _show_sequence_relations;
     private JComboBox            _sequence_relation_type_box;
     private JCheckBox            _show_vector_data_cb;
+    private JCheckBox            _show_properties_cb;
     private JLabel               _click_to_label;
     private JLabel               _zoom_label;
     private JLabel               _domain_display_label;
@@ -123,6 +126,7 @@ final class ControlPanel extends JPanel implements ActionListener {
     private int                  _subtree_cb_item;
     private int                  _color_subtree_cb_item;
     private int                  _open_seq_web_item;
+    private int                  _sort_descendents_item;
     private int                  _open_tax_web_item;
     private int                  _cut_subtree_item;
     private int                  _copy_subtree_item;
@@ -172,6 +176,7 @@ final class ControlPanel extends JPanel implements ActionListener {
     /**
      * Handle an action.
      */
+    @Override
     public void actionPerformed( final ActionEvent e ) {
         try {
             final TreePanel tp = getMainPanel().getCurrentTreePanel();
@@ -236,8 +241,23 @@ final class ControlPanel extends JPanel implements ActionListener {
                     showWhole();
                 }
                 else if ( e.getSource() == _order ) {
-                    tp.getPhylogeny().orderAppearance( _order_of_appearance );
+                    DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
+                    if ( ( !isShowTaxonomyScientificNames() && !isShowTaxonomyCode() && !isShowTaxonomyCommonNames() ) ) {
+                        if ( ( isShowSequenceAcc() || isShowGeneNames() || isShowGeneSymbols() ) ) {
+                            pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
+                        }
+                        else if ( isShowNodeNames() ) {
+                            pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
+                        }
+                    }
+                    PhylogenyMethods.orderAppearance( tp.getPhylogeny().getRoot(), _order_of_appearance, true, pri );
                     _order_of_appearance = !_order_of_appearance;
+                    tp.setNodeInPreorderToNull();
+                    tp.getPhylogeny().externalNodesHaveChanged();
+                    tp.getPhylogeny().hashIDs();
+                    tp.getPhylogeny().recalculateNumberOfExternalDescendants( true );
+                    tp.resetNodeIdToDistToLeafMap();
+                    tp.setEdited( true );
                     displayedPhylogenyMightHaveChanged( false );
                 }
                 else if ( e.getSource() == _uncollapse_all ) {
@@ -273,10 +293,10 @@ final class ControlPanel extends JPanel implements ActionListener {
             tp.requestFocus();
         }
         catch ( final Exception ex ) {
-            Util.unexpectedException( ex );
+            AptxUtil.unexpectedException( ex );
         }
         catch ( final Error err ) {
-            Util.unexpectedError( err );
+            AptxUtil.unexpectedError( err );
         }
     }
 
@@ -328,7 +348,7 @@ final class ControlPanel extends JPanel implements ActionListener {
         _zoom_in_y.setToolTipText( "To zoom in vertically [Shift+Up]" );
         _zoom_out_x.setToolTipText( "To zoom out horizontally [Shift+Left]" );
         _zoom_out_y.setToolTipText( "To zoom out vertically [Shift+Down]" );
-        if ( getConfiguration().isUseNativeUI() && Util.isMac() ) {
+        if ( getConfiguration().isUseNativeUI() && AptxUtil.isMac() ) {
             _zoom_out_x.setPreferredSize( new Dimension( 55, 10 ) );
             _zoom_in_x.setPreferredSize( new Dimension( 55, 10 ) );
         }
@@ -395,11 +415,6 @@ final class ControlPanel extends JPanel implements ActionListener {
                 addJCheckBox( _show_node_names, ch_panel );
                 add( ch_panel );
                 break;
-            case Configuration.show_tax_code:
-                _show_taxo_code = new JCheckBox( title );
-                addJCheckBox( _show_taxo_code, ch_panel );
-                add( ch_panel );
-                break;
             case Configuration.show_taxonomy_scientific_names:
                 _show_taxo_scientific_names = new JCheckBox( title );
                 addJCheckBox( _show_taxo_scientific_names, ch_panel );
@@ -410,6 +425,11 @@ final class ControlPanel extends JPanel implements ActionListener {
                 addJCheckBox( _show_taxo_common_names, ch_panel );
                 add( ch_panel );
                 break;
+            case Configuration.show_tax_code:
+                _show_taxo_code = new JCheckBox( title );
+                addJCheckBox( _show_taxo_code, ch_panel );
+                add( ch_panel );
+                break;
             case Configuration.show_taxonomy_images:
                 _show_taxo_images_cb = new JCheckBox( title );
                 addJCheckBox( _show_taxo_images_cb, ch_panel );
@@ -494,6 +514,11 @@ final class ControlPanel extends JPanel implements ActionListener {
                 addJCheckBox( _show_vector_data_cb, ch_panel );
                 add( ch_panel );
                 break;
+            case Configuration.show_properties:
+                _show_properties_cb = new JCheckBox( title );
+                addJCheckBox( _show_properties_cb, ch_panel );
+                add( ch_panel );
+                break;
             default:
                 throw new RuntimeException( "unknown checkbox: " + which );
         }
@@ -586,10 +611,10 @@ final class ControlPanel extends JPanel implements ActionListener {
         add( horizGrid );
         add( getSequenceRelationBox() );
         if ( _configuration.doDisplayOption( Configuration.show_relation_confidence ) ) {
-            addCheckbox( Configuration.show_relation_confidence, _configuration
-                    .getDisplayTitle( Configuration.show_relation_confidence ) );
-            setCheckbox( Configuration.show_relation_confidence, _configuration
-                    .doCheckOption( Configuration.show_relation_confidence ) );
+            addCheckbox( Configuration.show_relation_confidence,
+                         _configuration.getDisplayTitle( Configuration.show_relation_confidence ) );
+            setCheckbox( Configuration.show_relation_confidence,
+                         _configuration.doCheckOption( Configuration.show_relation_confidence ) );
         }
     }// addSequenceRelationBlock
 
@@ -644,6 +669,10 @@ final class ControlPanel extends JPanel implements ActionListener {
         return _color_branches_cb;
     }
 
+    public JCheckBox getColorAccSpeciesCb() {
+        return _color_acc_species;
+    }
+
     Configuration getConfiguration() {
         return _configuration;
     }
@@ -799,7 +828,7 @@ final class ControlPanel extends JPanel implements ActionListener {
         return ( ( _show_binary_characters != null ) && _show_binary_characters.isSelected() );
     }
 
-    boolean isShowBootstrapValues() {
+    boolean isShowConfidenceValues() {
         return ( ( getWriteConfidenceCb() != null ) && getWriteConfidenceCb().isSelected() );
     }
 
@@ -815,6 +844,10 @@ final class ControlPanel extends JPanel implements ActionListener {
         return ( ( _show_vector_data_cb != null ) && _show_vector_data_cb.isSelected() );
     }
 
+    public boolean isShowProperties() {
+        return ( ( _show_properties_cb != null ) && _show_properties_cb.isSelected() );
+    }
+
     boolean isShowGeneSymbols() {
         return ( ( _show_gene_symbols != null ) && _show_gene_symbols.isSelected() );
     }
@@ -827,10 +860,6 @@ final class ControlPanel extends JPanel implements ActionListener {
         return ( ( _show_node_names != null ) && _show_node_names.isSelected() );
     }
 
-    boolean isShowProperty() {
-        return ( ( _show_annotation != null ) && _show_annotation.isSelected() );
-    }
-
     boolean isShowSequenceAcc() {
         return ( ( _show_sequence_acc != null ) && _show_sequence_acc.isSelected() );
     }
@@ -989,11 +1018,6 @@ final class ControlPanel extends JPanel implements ActionListener {
                     _show_node_names.setSelected( state );
                 }
                 break;
-            case Configuration.show_tax_code:
-                if ( _show_taxo_code != null ) {
-                    _show_taxo_code.setSelected( state );
-                }
-                break;
             case Configuration.show_taxonomy_scientific_names:
                 if ( _show_taxo_scientific_names != null ) {
                     _show_taxo_scientific_names.setSelected( state );
@@ -1004,6 +1028,11 @@ final class ControlPanel extends JPanel implements ActionListener {
                     _show_taxo_common_names.setSelected( state );
                 }
                 break;
+            case Configuration.show_tax_code:
+                if ( _show_taxo_code != null ) {
+                    _show_taxo_code.setSelected( state );
+                }
+                break;
             case Configuration.show_taxonomy_images:
                 if ( _show_taxo_images_cb != null ) {
                     _show_taxo_images_cb.setSelected( state );
@@ -1064,6 +1093,11 @@ final class ControlPanel extends JPanel implements ActionListener {
                     _show_vector_data_cb.setSelected( state );
                 }
                 break;
+            case Configuration.show_properties:
+                if ( _show_properties_cb != null ) {
+                    _show_properties_cb.setSelected( state );
+                }
+                break;
             case Configuration.show_sequence_acc:
                 if ( _show_sequence_acc != null ) {
                     _show_sequence_acc.setSelected( state );
@@ -1124,10 +1158,11 @@ final class ControlPanel extends JPanel implements ActionListener {
         else if ( action == _open_seq_web_item ) {
             setActionWhenNodeClicked( NodeClickAction.OPEN_SEQ_WEB );
         }
+        else if ( action == _sort_descendents_item ) {
+            setActionWhenNodeClicked( NodeClickAction.SORT_DESCENDENTS );
+        }
         else if ( action == _blast_item ) {
-            if ( !Constants.__RELEASE && !Constants.__SNAPSHOT_RELEASE ) {
-                setActionWhenNodeClicked( NodeClickAction.BLAST );
-            }
+            setActionWhenNodeClicked( NodeClickAction.BLAST );
         }
         else if ( action == _open_tax_web_item ) {
             setActionWhenNodeClicked( NodeClickAction.OPEN_TAX_WEB );
@@ -1258,8 +1293,8 @@ final class ControlPanel extends JPanel implements ActionListener {
         int cb_index = 0;
         if ( _configuration.doDisplayClickToOption( Configuration.display_node_data ) ) {
             _show_data_item = cb_index;
-            addClickToOption( Configuration.display_node_data, _configuration
-                    .getClickToTitle( Configuration.display_node_data ) );
+            addClickToOption( Configuration.display_node_data,
+                              _configuration.getClickToTitle( Configuration.display_node_data ) );
             if ( default_option == Configuration.display_node_data ) {
                 selected_index = cb_index;
             }
@@ -1267,8 +1302,8 @@ final class ControlPanel extends JPanel implements ActionListener {
         }
         if ( _configuration.doDisplayClickToOption( Configuration.collapse_uncollapse ) ) {
             _collapse_cb_item = cb_index;
-            addClickToOption( Configuration.collapse_uncollapse, _configuration
-                    .getClickToTitle( Configuration.collapse_uncollapse ) );
+            addClickToOption( Configuration.collapse_uncollapse,
+                              _configuration.getClickToTitle( Configuration.collapse_uncollapse ) );
             if ( default_option == Configuration.collapse_uncollapse ) {
                 selected_index = cb_index;
             }
@@ -1298,6 +1333,15 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             cb_index++;
         }
+        if ( _configuration.doDisplayClickToOption( Configuration.sort_descendents ) ) {
+            _sort_descendents_item = cb_index;
+            addClickToOption( Configuration.sort_descendents,
+                              _configuration.getClickToTitle( Configuration.sort_descendents ) );
+            if ( default_option == Configuration.sort_descendents ) {
+                selected_index = cb_index;
+            }
+            cb_index++;
+        }
         if ( _configuration.doDisplayClickToOption( Configuration.color_subtree ) ) {
             _color_subtree_cb_item = cb_index;
             addClickToOption( Configuration.color_subtree, _configuration.getClickToTitle( Configuration.color_subtree ) );
@@ -1322,6 +1366,14 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             cb_index++;
         }
+        if ( _configuration.doDisplayClickToOption( Configuration.blast ) ) {
+            _blast_item = cb_index;
+            addClickToOption( Configuration.blast, _configuration.getClickToTitle( Configuration.blast ) );
+            if ( default_option == Configuration.blast ) {
+                selected_index = cb_index;
+            }
+            cb_index++;
+        }
         if ( getOptions().isEditable() ) {
             if ( _configuration.doDisplayClickToOption( Configuration.cut_subtree ) ) {
                 _cut_subtree_item = cb_index;
@@ -1333,8 +1385,8 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             if ( _configuration.doDisplayClickToOption( Configuration.copy_subtree ) ) {
                 _copy_subtree_item = cb_index;
-                addClickToOption( Configuration.copy_subtree, _configuration
-                        .getClickToTitle( Configuration.copy_subtree ) );
+                addClickToOption( Configuration.copy_subtree,
+                                  _configuration.getClickToTitle( Configuration.copy_subtree ) );
                 if ( default_option == Configuration.copy_subtree ) {
                     selected_index = cb_index;
                 }
@@ -1342,8 +1394,8 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             if ( _configuration.doDisplayClickToOption( Configuration.paste_subtree ) ) {
                 _paste_subtree_item = cb_index;
-                addClickToOption( Configuration.paste_subtree, _configuration
-                        .getClickToTitle( Configuration.paste_subtree ) );
+                addClickToOption( Configuration.paste_subtree,
+                                  _configuration.getClickToTitle( Configuration.paste_subtree ) );
                 if ( default_option == Configuration.paste_subtree ) {
                     selected_index = cb_index;
                 }
@@ -1351,8 +1403,8 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             if ( _configuration.doDisplayClickToOption( Configuration.delete_subtree_or_node ) ) {
                 _delete_node_or_subtree_item = cb_index;
-                addClickToOption( Configuration.delete_subtree_or_node, _configuration
-                        .getClickToTitle( Configuration.delete_subtree_or_node ) );
+                addClickToOption( Configuration.delete_subtree_or_node,
+                                  _configuration.getClickToTitle( Configuration.delete_subtree_or_node ) );
                 if ( default_option == Configuration.delete_subtree_or_node ) {
                     selected_index = cb_index;
                 }
@@ -1360,8 +1412,8 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             if ( _configuration.doDisplayClickToOption( Configuration.add_new_node ) ) {
                 _add_new_node_item = cb_index;
-                addClickToOption( Configuration.add_new_node, _configuration
-                        .getClickToTitle( Configuration.add_new_node ) );
+                addClickToOption( Configuration.add_new_node,
+                                  _configuration.getClickToTitle( Configuration.add_new_node ) );
                 if ( default_option == Configuration.add_new_node ) {
                     selected_index = cb_index;
                 }
@@ -1369,23 +1421,13 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             if ( _configuration.doDisplayClickToOption( Configuration.edit_node_data ) ) {
                 _edit_node_data_item = cb_index;
-                addClickToOption( Configuration.edit_node_data, _configuration
-                        .getClickToTitle( Configuration.edit_node_data ) );
+                addClickToOption( Configuration.edit_node_data,
+                                  _configuration.getClickToTitle( Configuration.edit_node_data ) );
                 if ( default_option == Configuration.edit_node_data ) {
                     selected_index = cb_index;
                 }
                 cb_index++;
             }
-            if ( !Constants.__RELEASE && !Constants.__SNAPSHOT_RELEASE ) {
-                if ( _configuration.doDisplayClickToOption( Configuration.blast ) ) {
-                    _blast_item = cb_index;
-                    addClickToOption( Configuration.blast, _configuration.getClickToTitle( Configuration.blast ) );
-                    if ( default_option == Configuration.blast ) {
-                        selected_index = cb_index;
-                    }
-                    cb_index++;
-                }
-            }
         }
         // Set default selection and its action
         _click_to_combobox.setSelectedIndex( selected_index );
@@ -1452,38 +1494,38 @@ final class ControlPanel extends JPanel implements ActionListener {
 
     private void setupDisplayCheckboxes() {
         if ( _configuration.doDisplayOption( Configuration.display_as_phylogram ) ) {
-            addCheckbox( Configuration.display_as_phylogram, _configuration
-                    .getDisplayTitle( Configuration.display_as_phylogram ) );
-            setCheckbox( Configuration.display_as_phylogram, _configuration
-                    .doCheckOption( Configuration.display_as_phylogram ) );
+            addCheckbox( Configuration.display_as_phylogram,
+                         _configuration.getDisplayTitle( Configuration.display_as_phylogram ) );
+            setCheckbox( Configuration.display_as_phylogram,
+                         _configuration.doCheckOption( Configuration.display_as_phylogram ) );
         }
         if ( _configuration.doDisplayOption( Configuration.dynamically_hide_data ) ) {
-            addCheckbox( Configuration.dynamically_hide_data, _configuration
-                    .getDisplayTitle( Configuration.dynamically_hide_data ) );
-            setCheckbox( Configuration.dynamically_hide_data, _configuration
-                    .doCheckOption( Configuration.dynamically_hide_data ) );
+            addCheckbox( Configuration.dynamically_hide_data,
+                         _configuration.getDisplayTitle( Configuration.dynamically_hide_data ) );
+            setCheckbox( Configuration.dynamically_hide_data,
+                         _configuration.doCheckOption( Configuration.dynamically_hide_data ) );
         }
         if ( _configuration.doDisplayOption( Configuration.node_data_popup ) ) {
             addCheckbox( Configuration.node_data_popup, _configuration.getDisplayTitle( Configuration.node_data_popup ) );
             setCheckbox( Configuration.node_data_popup, _configuration.doCheckOption( Configuration.node_data_popup ) );
         }
         if ( _configuration.doDisplayOption( Configuration.display_internal_data ) ) {
-            addCheckbox( Configuration.display_internal_data, _configuration
-                    .getDisplayTitle( Configuration.display_internal_data ) );
-            setCheckbox( Configuration.display_internal_data, _configuration
-                    .doCheckOption( Configuration.display_internal_data ) );
+            addCheckbox( Configuration.display_internal_data,
+                         _configuration.getDisplayTitle( Configuration.display_internal_data ) );
+            setCheckbox( Configuration.display_internal_data,
+                         _configuration.doCheckOption( Configuration.display_internal_data ) );
         }
         if ( _configuration.doDisplayOption( Configuration.color_according_to_species ) ) {
-            addCheckbox( Configuration.color_according_to_species, _configuration
-                    .getDisplayTitle( Configuration.color_according_to_species ) );
-            setCheckbox( Configuration.color_according_to_species, _configuration
-                    .doCheckOption( Configuration.color_according_to_species ) );
+            addCheckbox( Configuration.color_according_to_species,
+                         _configuration.getDisplayTitle( Configuration.color_according_to_species ) );
+            setCheckbox( Configuration.color_according_to_species,
+                         _configuration.doCheckOption( Configuration.color_according_to_species ) );
         }
         if ( _configuration.doDisplayOption( Configuration.color_according_to_annotation ) ) {
-            addCheckbox( Configuration.color_according_to_annotation, _configuration
-                    .getDisplayTitle( Configuration.color_according_to_annotation ) );
-            setCheckbox( Configuration.color_according_to_annotation, _configuration
-                    .doCheckOption( Configuration.color_according_to_annotation ) );
+            addCheckbox( Configuration.color_according_to_annotation,
+                         _configuration.getDisplayTitle( Configuration.color_according_to_annotation ) );
+            setCheckbox( Configuration.color_according_to_annotation,
+                         _configuration.doCheckOption( Configuration.color_according_to_annotation ) );
         }
         if ( _configuration.doDisplayOption( Configuration.color_branches ) ) {
             addCheckbox( Configuration.color_branches, _configuration.getDisplayTitle( Configuration.color_branches ) );
@@ -1508,76 +1550,80 @@ final class ControlPanel extends JPanel implements ActionListener {
             setCheckbox( Configuration.show_tax_code, _configuration.doCheckOption( Configuration.show_tax_code ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_taxonomy_scientific_names ) ) {
-            addCheckbox( Configuration.show_taxonomy_scientific_names, _configuration
-                    .getDisplayTitle( Configuration.show_taxonomy_scientific_names ) );
-            setCheckbox( Configuration.show_taxonomy_scientific_names, _configuration
-                    .doCheckOption( Configuration.show_taxonomy_scientific_names ) );
+            addCheckbox( Configuration.show_taxonomy_scientific_names,
+                         _configuration.getDisplayTitle( Configuration.show_taxonomy_scientific_names ) );
+            setCheckbox( Configuration.show_taxonomy_scientific_names,
+                         _configuration.doCheckOption( Configuration.show_taxonomy_scientific_names ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_taxonomy_common_names ) ) {
-            addCheckbox( Configuration.show_taxonomy_common_names, _configuration
-                    .getDisplayTitle( Configuration.show_taxonomy_common_names ) );
-            setCheckbox( Configuration.show_taxonomy_common_names, _configuration
-                    .doCheckOption( Configuration.show_taxonomy_common_names ) );
+            addCheckbox( Configuration.show_taxonomy_common_names,
+                         _configuration.getDisplayTitle( Configuration.show_taxonomy_common_names ) );
+            setCheckbox( Configuration.show_taxonomy_common_names,
+                         _configuration.doCheckOption( Configuration.show_taxonomy_common_names ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_taxonomy_images ) ) {
-            addCheckbox( Configuration.show_taxonomy_images, _configuration
-                    .getDisplayTitle( Configuration.show_taxonomy_images ) );
-            setCheckbox( Configuration.show_taxonomy_images, _configuration
-                    .doCheckOption( Configuration.show_taxonomy_images ) );
+            addCheckbox( Configuration.show_taxonomy_images,
+                         _configuration.getDisplayTitle( Configuration.show_taxonomy_images ) );
+            setCheckbox( Configuration.show_taxonomy_images,
+                         _configuration.doCheckOption( Configuration.show_taxonomy_images ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_gene_symbols ) ) {
-            addCheckbox( Configuration.show_gene_symbols, _configuration
-                    .getDisplayTitle( Configuration.show_gene_symbols ) );
-            setCheckbox( Configuration.show_gene_symbols, _configuration
-                    .doCheckOption( Configuration.show_gene_symbols ) );
+            addCheckbox( Configuration.show_gene_symbols,
+                         _configuration.getDisplayTitle( Configuration.show_gene_symbols ) );
+            setCheckbox( Configuration.show_gene_symbols,
+                         _configuration.doCheckOption( Configuration.show_gene_symbols ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_gene_names ) ) {
             addCheckbox( Configuration.show_gene_names, _configuration.getDisplayTitle( Configuration.show_gene_names ) );
             setCheckbox( Configuration.show_gene_names, _configuration.doCheckOption( Configuration.show_gene_names ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_sequence_acc ) ) {
-            addCheckbox( Configuration.show_sequence_acc, _configuration
-                    .getDisplayTitle( Configuration.show_sequence_acc ) );
-            setCheckbox( Configuration.show_sequence_acc, _configuration
-                    .doCheckOption( Configuration.show_sequence_acc ) );
+            addCheckbox( Configuration.show_sequence_acc,
+                         _configuration.getDisplayTitle( Configuration.show_sequence_acc ) );
+            setCheckbox( Configuration.show_sequence_acc,
+                         _configuration.doCheckOption( Configuration.show_sequence_acc ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_annotation ) ) {
             addCheckbox( Configuration.show_annotation, _configuration.getDisplayTitle( Configuration.show_annotation ) );
             setCheckbox( Configuration.show_annotation, _configuration.doCheckOption( Configuration.show_annotation ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_binary_characters ) ) {
-            addCheckbox( Configuration.show_binary_characters, _configuration
-                    .getDisplayTitle( Configuration.show_binary_characters ) );
-            setCheckbox( Configuration.show_binary_characters, _configuration
-                    .doCheckOption( Configuration.show_binary_characters ) );
+            addCheckbox( Configuration.show_binary_characters,
+                         _configuration.getDisplayTitle( Configuration.show_binary_characters ) );
+            setCheckbox( Configuration.show_binary_characters,
+                         _configuration.doCheckOption( Configuration.show_binary_characters ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_binary_character_counts ) ) {
-            addCheckbox( Configuration.show_binary_character_counts, _configuration
-                    .getDisplayTitle( Configuration.show_binary_character_counts ) );
-            setCheckbox( Configuration.show_binary_character_counts, _configuration
-                    .doCheckOption( Configuration.show_binary_character_counts ) );
+            addCheckbox( Configuration.show_binary_character_counts,
+                         _configuration.getDisplayTitle( Configuration.show_binary_character_counts ) );
+            setCheckbox( Configuration.show_binary_character_counts,
+                         _configuration.doCheckOption( Configuration.show_binary_character_counts ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_domain_architectures ) ) {
-            addCheckbox( Configuration.show_domain_architectures, _configuration
-                    .getDisplayTitle( Configuration.show_domain_architectures ) );
-            setCheckbox( Configuration.show_domain_architectures, _configuration
-                    .doCheckOption( Configuration.show_domain_architectures ) );
+            addCheckbox( Configuration.show_domain_architectures,
+                         _configuration.getDisplayTitle( Configuration.show_domain_architectures ) );
+            setCheckbox( Configuration.show_domain_architectures,
+                         _configuration.doCheckOption( Configuration.show_domain_architectures ) );
         }
         if ( _configuration.doDisplayOption( Configuration.write_confidence_values ) ) {
-            addCheckbox( Configuration.write_confidence_values, _configuration
-                    .getDisplayTitle( Configuration.write_confidence_values ) );
-            setCheckbox( Configuration.write_confidence_values, _configuration
-                    .doCheckOption( Configuration.write_confidence_values ) );
+            addCheckbox( Configuration.write_confidence_values,
+                         _configuration.getDisplayTitle( Configuration.write_confidence_values ) );
+            setCheckbox( Configuration.write_confidence_values,
+                         _configuration.doCheckOption( Configuration.write_confidence_values ) );
         }
         if ( _configuration.doDisplayOption( Configuration.write_events ) ) {
             addCheckbox( Configuration.write_events, _configuration.getDisplayTitle( Configuration.write_events ) );
             setCheckbox( Configuration.write_events, _configuration.doCheckOption( Configuration.write_events ) );
         }
         if ( _configuration.doDisplayOption( Configuration.show_vector_data ) ) {
-            addCheckbox( Configuration.show_vector_data, _configuration
-                    .getDisplayTitle( Configuration.show_vector_data ) );
+            addCheckbox( Configuration.show_vector_data,
+                         _configuration.getDisplayTitle( Configuration.show_vector_data ) );
             setCheckbox( Configuration.show_vector_data, _configuration.doCheckOption( Configuration.show_vector_data ) );
         }
+        if ( _configuration.doDisplayOption( Configuration.show_properties ) ) {
+            addCheckbox( Configuration.show_properties, _configuration.getDisplayTitle( Configuration.show_properties ) );
+            setCheckbox( Configuration.show_properties, _configuration.doCheckOption( Configuration.show_properties ) );
+        }
     }
 
     void setupSearchTools() {
@@ -1669,7 +1715,8 @@ final class ControlPanel extends JPanel implements ActionListener {
         if ( _mainpanel.getCurrentScrollPane() == null ) {
             return;
         }
-        displayedPhylogenyMightHaveChanged( false );
+        getCurrentTreePanel().updateSetOfCollapsedExternalNodes();
+        displayedPhylogenyMightHaveChanged( true );
         _mainpanel.getCurrentTreePanel().updateOvSettings();
         _mainpanel.getCurrentTreePanel().validate();
         _mainpanel.validate();
@@ -1694,8 +1741,9 @@ final class ControlPanel extends JPanel implements ActionListener {
         for( final TreePanel tree_panel : _mainpanel.getTreePanels() ) {
             if ( tree_panel != null ) {
                 tree_panel.validate();
-                tree_panel.setParametersForPainting( _mainpanel.getSizeOfViewport().width, _mainpanel
-                        .getSizeOfViewport().height, true );
+                tree_panel.setParametersForPainting( _mainpanel.getSizeOfViewport().width,
+                                                     _mainpanel.getSizeOfViewport().height,
+                                                     true );
                 tree_panel.resetPreferredSize();
                 tree_panel.repaint();
             }
@@ -1763,8 +1811,15 @@ final class ControlPanel extends JPanel implements ActionListener {
     void uncollapseAll( final TreePanel tp ) {
         final Phylogeny t = tp.getPhylogeny();
         if ( ( t != null ) && !t.isEmpty() ) {
-            t.setAllNodesToNotCollapse();
+            for( final PhylogenyNodeIterator iter = t.iteratorPreorder(); iter.hasNext(); ) {
+                final PhylogenyNode node = iter.next();
+                node.setCollapse( false );
+            }
+            tp.resetNodeIdToDistToLeafMap();
+            tp.updateSetOfCollapsedExternalNodes();
             t.recalculateNumberOfExternalDescendants( false );
+            tp.setNodeInPreorderToNull();
+            t.hashIDs();
             showWhole();
         }
     }
@@ -1900,6 +1955,7 @@ final class ControlPanel extends JPanel implements ActionListener {
         PASTE_SUBTREE,
         ADD_NEW_NODE,
         EDIT_NODE_DATA,
+        SORT_DESCENDENTS,
         BLAST;
     }
 }