X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanel.java;h=befe375f2e7154c8fae8c99fa7063e257fe23c8e;hb=b1a74bd076c917d428002284a53a2c6f390226fb;hp=85c3d5e31865f164c191ea2d9d7881700ba517e3;hpb=1e1670fd938a340afae93bdf8703c5f45f0dc404;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanel.java b/forester/java/src/org/forester/archaeopteryx/TreePanel.java index 85c3d5e..befe375 100644 --- a/forester/java/src/org/forester/archaeopteryx/TreePanel.java +++ b/forester/java/src/org/forester/archaeopteryx/TreePanel.java @@ -346,10 +346,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final public void actionPerformed( final ActionEvent e ) { - int index; boolean done = false; final JMenuItem node_popup_menu_item = ( JMenuItem ) e.getSource(); - for( index = 0; ( index < _node_popup_menu_items.length ) && !done; index++ ) { + for( int index = 0; ( index < _node_popup_menu_items.length ) && !done; index++ ) { // NOTE: index corresponds to the indices of click-to options // in the control panel. if ( node_popup_menu_item == _node_popup_menu_items[ index ] ) { @@ -412,7 +411,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } setNodeInPreorderToNull(); _phylogeny.externalNodesHaveChanged(); - _phylogeny.hashIDs(); + _phylogeny.clearHashIdToNodeMap(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); setEdited( true ); @@ -465,25 +464,37 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return; } if ( node.getNodeData().isHasSequence() ) { - String name = ""; - if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) ) { - name = node.getNodeData().getSequence().getName(); - } - else if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getSymbol() ) ) { - name = node.getNodeData().getSequence().getSymbol(); + final String query = Blast.obtainQueryForBlast( node ); + boolean nucleotide = false; + if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getType() ) ) { + if ( !node.getNodeData().getSequence().getType().toLowerCase().equals( PhyloXmlUtil.SEQ_TYPE_PROTEIN ) ) { + nucleotide = true; + } } - else if ( node.getNodeData().getSequence().getAccession() != null ) { - name = node.getNodeData().getSequence().getAccession().getValue(); + else if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) { + nucleotide = !ForesterUtil.seqIsLikelyToBeAa( node.getNodeData().getSequence().getMolecularSequence() ); } - if ( !ForesterUtil.isEmpty( name ) ) { + if ( !ForesterUtil.isEmpty( query ) ) { + JApplet applet = null; + if ( isApplet() ) { + applet = obtainApplet(); + } try { - System.out.println( "trying: " + name ); - final Blast s = new Blast(); - s.go( name ); + Blast.openNcbiBlastWeb( query, nucleotide, applet, this ); } catch ( final Exception e ) { e.printStackTrace(); } + if ( Constants.ALLOW_DDBJ_BLAST ) { + try { + System.out.println( "trying: " + query ); + final Blast s = new Blast(); + s.ddbjBlast( query ); + } + catch ( final Exception e ) { + e.printStackTrace(); + } + } } } } @@ -533,7 +544,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( ( _phylogeny == null ) || _phylogeny.isEmpty() ) { return; } - int longest = 20; + int max_length = ForesterUtil.roundToInt( ( getSize().getWidth() - MOVE ) + * Constants.EXT_NODE_INFO_LENGTH_MAX_RATIO ); + if ( max_length < 40 ) { + max_length = 40; + } + int longest = 30; for( final PhylogenyNode node : _phylogeny.getExternalNodes() ) { int sum = 0; if ( node.isCollapse() ) { @@ -563,6 +579,11 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee .asSimpleText() + " " ); } + if ( getControlPanel().isShowDomainArchitectures() + && ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) { + sum += ( ( RenderableDomainArchitecture ) node.getNodeData().getSequence().getDomainArchitecture() ) + .getRenderingSize().getWidth(); + } } if ( node.getNodeData().isHasTaxonomy() ) { final Taxonomy tax = node.getNodeData().getTaxonomy(); @@ -584,21 +605,16 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee sum += getTreeFontSet()._fm_large.stringWidth( node.getNodeData().getBinaryCharacters() .getGainedCharactersAsStringBuffer().toString() ); } - if ( getControlPanel().isShowDomainArchitectures() && node.getNodeData().isHasSequence() - && ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) { - sum += ( ( RenderableDomainArchitecture ) node.getNodeData().getSequence().getDomainArchitecture() ) - .getRenderingSize().getWidth(); - } - if ( sum >= Constants.EXT_NODE_INFO_LENGTH_MAX ) { - setLongestExtNodeInfo( Constants.EXT_NODE_INFO_LENGTH_MAX ); + if ( sum >= max_length ) { + setLongestExtNodeInfo( max_length ); return; } if ( sum > longest ) { longest = sum; } } - if ( longest >= Constants.EXT_NODE_INFO_LENGTH_MAX ) { - setLongestExtNodeInfo( Constants.EXT_NODE_INFO_LENGTH_MAX ); + if ( longest >= max_length ) { + setLongestExtNodeInfo( max_length ); } else { setLongestExtNodeInfo( longest ); @@ -696,7 +712,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( !node.isExternal() && !node.isRoot() ) { final boolean collapse = !node.isCollapse(); AptxUtil.collapseSubtree( node, collapse ); - updateSetOfCollapsedExternalNodes( _phylogeny ); + updateSetOfCollapsedExternalNodes(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); @@ -715,7 +731,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } setWaitCursor(); AptxUtil.collapseSpeciesSpecificSubtrees( _phylogeny ); - updateSetOfCollapsedExternalNodes( _phylogeny ); + updateSetOfCollapsedExternalNodes(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); calculateLongestExtNodeInfo(); @@ -866,7 +882,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee setCopiedAndPastedNodes( null ); setCutOrCopiedTree( _phylogeny.copy( node ) ); _phylogeny.deleteSubtree( node, true ); - _phylogeny.hashIDs(); + _phylogeny.clearHashIdToNodeMap(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); setEdited( true ); @@ -932,7 +948,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _phylogeny.deleteSubtree( node, true ); } _phylogeny.externalNodesHaveChanged(); - _phylogeny.hashIDs(); + _phylogeny.clearHashIdToNodeMap(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); setEdited( true ); @@ -1441,10 +1457,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final private boolean isCanBlast( final PhylogenyNode node ) { - return ( node.getNodeData().isHasSequence() && ( ( ( node.getNodeData().getSequence().getAccession() != null ) && !ForesterUtil - .isEmpty( node.getNodeData().getSequence().getAccession().getValue() ) ) - || !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) || !ForesterUtil.isEmpty( node - .getNodeData().getSequence().getSymbol() ) ) ); + return ( node.getNodeData().isHasSequence() + && ( ( ( node.getNodeData().getSequence().getAccession() != null ) && !ForesterUtil.isEmpty( node + .getNodeData().getSequence().getAccession().getValue() ) ) + || !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) || !ForesterUtil + .isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) && Blast + .isContainsQueryForBlast( node ) ); } final boolean isCanCollapse() { @@ -1743,9 +1761,6 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _node_popup_menu_items[ i ].setEnabled( isCanOpenTaxWeb( node ) ); } else if ( title.equals( Configuration.clickto_options[ Configuration.blast ][ 0 ] ) ) { - if ( Constants.__RELEASE || Constants.__SNAPSHOT_RELEASE ) { - continue; - } _node_popup_menu_items[ i ].setEnabled( isCanBlast( node ) ); } else if ( title.equals( Configuration.clickto_options[ Configuration.delete_subtree_or_node ][ 0 ] ) ) { @@ -1786,7 +1801,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _node_popup_menu_items[ i ].setEnabled( isCanReroot() ); } else if ( title.equals( Configuration.clickto_options[ Configuration.collapse_uncollapse ][ 0 ] ) ) { - _node_popup_menu_items[ i ].setEnabled( isCanCollapse() ); + _node_popup_menu_items[ i ].setEnabled( ( isCanCollapse() && !node.isExternal() ) ); } else if ( title.equals( Configuration.clickto_options[ Configuration.color_subtree ][ 0 ] ) ) { _node_popup_menu_items[ i ].setEnabled( isCanColorSubtree() ); @@ -1794,6 +1809,12 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee else if ( title.equals( Configuration.clickto_options[ Configuration.subtree ][ 0 ] ) ) { _node_popup_menu_items[ i ].setEnabled( isCanSubtree( node ) ); } + else if ( title.equals( Configuration.clickto_options[ Configuration.swap ][ 0 ] ) ) { + _node_popup_menu_items[ i ].setEnabled( node.getNumberOfDescendants() == 2 ); + } + else if ( title.equals( Configuration.clickto_options[ Configuration.sort_descendents ][ 0 ] ) ) { + _node_popup_menu_items[ i ].setEnabled( node.getNumberOfDescendants() > 1 ); + } _node_popup_menu_items[ i ].addActionListener( this ); _node_popup_menu.add( _node_popup_menu_items[ i ] ); } @@ -2516,17 +2537,21 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee paintNodeBox( _root.getXcoord(), _root.getYcoord(), _root, g, to_pdf, to_graphics_file, isInFoundNodes( _root ) ); } - void updateSetOfCollapsedExternalNodes( final Phylogeny phy ) { + void updateSetOfCollapsedExternalNodes() { + final Phylogeny phy = getPhylogeny(); _collapsed_external_nodeid_set.clear(); - E: for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) { - final PhylogenyNode ext_node = it.next(); - PhylogenyNode n = ext_node; - while ( !n.isRoot() ) { - if ( n.isCollapse() ) { - _collapsed_external_nodeid_set.add( ext_node.getId() ); - continue E; + if ( phy != null ) { + E: for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) { + final PhylogenyNode ext_node = it.next(); + PhylogenyNode n = ext_node; + while ( !n.isRoot() ) { + if ( n.isCollapse() ) { + _collapsed_external_nodeid_set.add( ext_node.getId() ); + ext_node.setCollapse( true ); + continue E; + } + n = n.getParent(); } - n = n.getParent(); } } } @@ -3645,6 +3670,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final int graphics_file_height, final int graphics_file_x, final int graphics_file_y ) { + if ( ( _phylogeny == null ) || _phylogeny.isEmpty() ) { + return; + } if ( _control_panel.isShowSequenceRelations() ) { _query_sequence = _control_panel.getSelectedQuerySequence(); } @@ -4215,7 +4243,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getCopiedAndPastedNodes().addAll( node_ids ); setNodeInPreorderToNull(); _phylogeny.externalNodesHaveChanged(); - _phylogeny.hashIDs(); + _phylogeny.clearHashIdToNodeMap(); _phylogeny.recalculateNumberOfExternalDescendants( true ); resetNodeIdToDistToLeafMap(); setEdited( true ); @@ -4518,7 +4546,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } } if ( getMainPanel().getOptions().isAntialiasScreen() ) { - if ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR ) { + if ( ( getPhylogenyGraphicsType() == PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR ) + && !getMainPanel().getOptions().isShowDefaultNodeShapes() + && ( ( getControlPanel() != null ) && !getControlPanel().isShowDomainArchitectures() ) ) { _rendering_hints.put( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF ); } else { @@ -4912,9 +4942,24 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final void swap( final PhylogenyNode node ) { + if ( node.isExternal() || ( node.getNumberOfDescendants() < 2 ) ) { + return; + } + if ( node.getNumberOfDescendants() > 2 ) { + JOptionPane.showMessageDialog( this, + "Cannot swap descendants of nodes with more than 2 descendants", + "Cannot swap descendants", + JOptionPane.ERROR_MESSAGE ); + return; + } if ( !node.isExternal() ) { - _phylogeny.swapChildren( node ); + node.swapChildren(); setNodeInPreorderToNull(); + _phylogeny.externalNodesHaveChanged(); + _phylogeny.clearHashIdToNodeMap(); + _phylogeny.recalculateNumberOfExternalDescendants( true ); + resetNodeIdToDistToLeafMap(); + setEdited( true ); } repaint(); } @@ -4934,6 +4979,11 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } PhylogenyMethods.sortNodeDescendents( node, pri ); setNodeInPreorderToNull(); + _phylogeny.externalNodesHaveChanged(); + _phylogeny.clearHashIdToNodeMap(); + _phylogeny.recalculateNumberOfExternalDescendants( true ); + resetNodeIdToDistToLeafMap(); + setEdited( true ); } repaint(); }