+ }\r
+ _contentpane.repaint();\r
+ }\r
+\r
+ void writeToFile( final Phylogeny t ) {\r
+ if ( t == null ) {\r
+ return;\r
+ }\r
+ String initial_filename = null;\r
+ if ( getMainPanel().getCurrentTreePanel().getTreeFile() != null ) {\r
+ try {\r
+ initial_filename = getMainPanel().getCurrentTreePanel().getTreeFile().getCanonicalPath();\r
+ }\r
+ catch ( final IOException e ) {\r
+ initial_filename = null;\r
+ }\r
+ }\r
+ if ( !ForesterUtil.isEmpty( initial_filename ) ) {\r
+ _save_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ }\r
+ else {\r
+ _save_filechooser.setSelectedFile( new File( "" ) );\r
+ }\r
+ final File my_dir = getCurrentDir();\r
+ if ( my_dir != null ) {\r
+ _save_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = _save_filechooser.showSaveDialog( _contentpane );\r
+ final File file = _save_filechooser.getSelectedFile();\r
+ setCurrentDir( _save_filechooser.getCurrentDirectory() );\r
+ boolean exception = false;\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( this,\r
+ file + " already exists.\nOverwrite?",\r
+ "Overwrite?",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.QUESTION_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return;\r
+ }\r
+ else {\r
+ final File to = new File( file.getAbsoluteFile().toString() + Constants.BACKUP_FILE_SUFFIX );\r
+ try {\r
+ ForesterUtil.copyFile( file, to );\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to create backup copy " + to,\r
+ "Failed to Create Backup Copy",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ try {\r
+ file.delete();\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to delete: " + file,\r
+ "Failed to Delete",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ }\r
+ }\r
+ if ( _save_filechooser.getFileFilter() == MainFrame.nhfilter ) {\r
+ exception = writeAsNewHampshire( t, exception, file );\r
+ }\r
+ else if ( _save_filechooser.getFileFilter() == MainFrame.xmlfilter ) {\r
+ exception = writeAsPhyloXml( t, exception, file );\r
+ }\r
+ else if ( _save_filechooser.getFileFilter() == MainFrame.nexusfilter ) {\r
+ exception = writeAsNexus( t, exception, file );\r
+ }\r
+ // "*.*":\r
+ else {\r
+ final String file_name = file.getName().trim().toLowerCase();\r
+ if ( file_name.endsWith( ".nh" ) || file_name.endsWith( ".newick" ) || file_name.endsWith( ".phy" )\r
+ || file_name.endsWith( ".tree" ) ) {\r
+ exception = writeAsNewHampshire( t, exception, file );\r
+ }\r
+ else if ( file_name.endsWith( ".nex" ) || file_name.endsWith( ".nexus" ) ) {\r
+ exception = writeAsNexus( t, exception, file );\r
+ }\r
+ // XML is default:\r
+ else {\r
+ exception = writeAsPhyloXml( t, exception, file );\r
+ }\r
+ }\r
+ if ( !exception ) {\r
+ getMainPanel().setTitleOfSelectedTab( file.getName() );\r
+ getMainPanel().getCurrentTreePanel().setTreeFile( file );\r
+ getMainPanel().getCurrentTreePanel().setEdited( false );\r
+ }\r
+ }\r
+ }\r
+\r
+ void writeToGraphicsFile( final Phylogeny t, final GraphicsExportType type ) {\r
+ if ( ( t == null ) || t.isEmpty() ) {\r
+ return;\r
+ }\r
+ String initial_filename = "";\r
+ if ( getMainPanel().getCurrentTreePanel().getTreeFile() != null ) {\r
+ initial_filename = getMainPanel().getCurrentTreePanel().getTreeFile().toString();\r
+ }\r
+ if ( initial_filename.indexOf( '.' ) > 0 ) {\r
+ initial_filename = initial_filename.substring( 0, initial_filename.lastIndexOf( '.' ) );\r
+ }\r
+ initial_filename = initial_filename + "." + type;\r
+ _writetographics_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ final File my_dir = getCurrentDir();\r
+ if ( my_dir != null ) {\r
+ _writetographics_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = _writetographics_filechooser.showSaveDialog( _contentpane );\r
+ File file = _writetographics_filechooser.getSelectedFile();\r
+ setCurrentDir( _writetographics_filechooser.getCurrentDirectory() );\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( !file.toString().toLowerCase().endsWith( type.toString() ) ) {\r
+ file = new File( file.toString() + "." + type );\r
+ }\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( this,\r
+ file + " already exists. Overwrite?",\r
+ "Warning",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.WARNING_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return;\r
+ }\r
+ else {\r
+ try {\r
+ file.delete();\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to delete: " + file,\r
+ "Error",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ }\r
+ }\r
+ writePhylogenyToGraphicsFile( file.toString(), type );\r
+ }\r
+ }\r
+\r
+ static File writeToPdf( final Phylogeny t,\r
+ final MainPanel mp,\r
+ JFileChooser writetopdf_filechooser,\r
+ File curr_dir,\r
+ Container contentpane ,\r
+ Component component ) {\r
+ if ( ( t == null ) || t.isEmpty() ) {\r
+ return null;\r
+ }\r
+ String initial_filename = "";\r
+ if (mp.getCurrentTreePanel().getTreeFile() != null ) {\r
+ initial_filename = mp.getCurrentTreePanel().getTreeFile().toString();\r
+ }\r
+ if ( initial_filename.indexOf( '.' ) > 0 ) {\r
+ initial_filename = initial_filename.substring( 0, initial_filename.lastIndexOf( '.' ) );\r
+ }\r
+ initial_filename = initial_filename + ".pdf";\r
+ writetopdf_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ final File my_dir = curr_dir;\r
+ if ( my_dir != null ) {\r
+ writetopdf_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = writetopdf_filechooser.showSaveDialog( contentpane );\r
+ File file = writetopdf_filechooser.getSelectedFile();\r
+ // setCurrentDir( writetopdf_filechooser.getCurrentDirectory() );\r
+ final File new_current_dir = writetopdf_filechooser.getCurrentDirectory();\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( !file.toString().toLowerCase().endsWith( ".pdf" ) ) {\r
+ file = new File( file.toString() + ".pdf" );\r
+ }\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( component,\r
+ file + " already exists. Overwrite?",\r
+ "WARNING",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.WARNING_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return null;\r
+ }\r
+ }\r
+ printPhylogenyToPdf( file.toString() );\r
+ }\r
+ return new_current_dir;\r
+ }\r
+\r
+ private void annotateSequences() {\r
+ if ( getCurrentTreePanel() != null ) {\r
+ List<PhylogenyNode> nodes = null;\r
+ if ( ( getCurrentTreePanel().getFoundNodes0() != null )\r
+ || ( getCurrentTreePanel().getFoundNodes1() != null ) ) {\r
+ nodes = getCurrentTreePanel().getFoundNodesAsListOfPhylogenyNodes();\r
+ }\r
+ if ( ( nodes == null ) || nodes.isEmpty() ) {\r
+ JOptionPane\r
+ .showMessageDialog( this,\r
+ "Need to select nodes, either via direct selection or via the \"Search\" function",\r
+ "No nodes selected for annotation",\r
+ JOptionPane.ERROR_MESSAGE );\r
+ return;\r
+ }\r
+ final Phylogeny phy = getMainPanel().getCurrentPhylogeny();\r
+ if ( ( phy != null ) && !phy.isEmpty() ) {\r
+ final JTextField ref_field = new JTextField( 10 );\r
+ final JTextField desc_filed = new JTextField( 20 );\r
+ ref_field.setText( ForesterUtil.isEmpty( getPreviousNodeAnnotationReference() ) ? ""\r
+ : getPreviousNodeAnnotationReference() );\r
+ final JPanel my_panel = new JPanel();\r
+ my_panel.add( new JLabel( "Reference " ) );\r
+ my_panel.add( ref_field );\r
+ my_panel.add( Box.createHorizontalStrut( 15 ) );\r
+ my_panel.add( new JLabel( "Description " ) );\r
+ my_panel.add( desc_filed );\r
+ final int result = JOptionPane.showConfirmDialog( null,\r
+ my_panel,\r
+ "Enter the sequence annotation(s) for the "\r