2 package org.forester.archaeopteryx;
4 import java.awt.BorderLayout;
5 import java.awt.Container;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.ComponentAdapter;
10 import java.awt.event.ComponentEvent;
11 import java.io.ByteArrayOutputStream;
13 import java.io.IOException;
15 import java.util.LinkedList;
16 import java.util.List;
17 import java.util.NoSuchElementException;
19 import javax.swing.ButtonGroup;
20 import javax.swing.JApplet;
21 import javax.swing.JCheckBoxMenuItem;
22 import javax.swing.JFileChooser;
23 import javax.swing.JMenu;
24 import javax.swing.JMenuBar;
25 import javax.swing.JMenuItem;
26 import javax.swing.JOptionPane;
27 import javax.swing.JRadioButtonMenuItem;
28 import javax.swing.UIManager;
29 import javax.swing.UnsupportedLookAndFeelException;
30 import javax.swing.event.ChangeEvent;
31 import javax.swing.event.ChangeListener;
33 import org.apache.commons.codec.binary.Base64;
34 import org.forester.archaeopteryx.AptxUtil.GraphicsExportType;
35 import org.forester.archaeopteryx.Options.CLADOGRAM_TYPE;
36 import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION;
37 import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE;
38 import org.forester.archaeopteryx.webservices.PhylogeniesWebserviceClient;
39 import org.forester.archaeopteryx.webservices.WebservicesManager;
40 import org.forester.io.parsers.nhx.NHXParser.TAXONOMY_EXTRACTION;
41 import org.forester.phylogeny.Phylogeny;
42 import org.forester.phylogeny.PhylogenyMethods;
43 import org.forester.phylogeny.PhylogenyMethods.DESCENDANT_SORT_PRIORITY;
44 import org.forester.phylogeny.data.SequenceRelation;
45 import org.forester.sdi.GSDI;
46 import org.forester.sdi.GSDIR;
47 import org.forester.sdi.SDIException;
48 import org.forester.util.ForesterConstants;
49 import org.forester.util.ForesterUtil;
52 // <applet archive="forester.jar"
53 // code="org.forester.archaeopteryx.ArchaeopteryxE.class"
54 // codebase="http://www.myserver.org/path/to/forester"
57 // alt="ArchaeopteryxE is not working on your system (requires at least Sun Java 1.5)!">
58 // <param name="url_of_tree_to_load"
59 // value="http://www.myserver.org/examples/data/apaf.xml">
60 // <param name="config_file"
61 // value="http://www.myserver.org/examples/config/config_file.txt">
63 public class ArchaeopteryxE extends JApplet implements ActionListener {
65 private final static String NAME = "ArchaeopteryxE";
66 private static final long serialVersionUID = -1220055577935759443L;
67 private Configuration _configuration;
68 private MainPanelApplets _mainpanel;
69 private JMenuBar _jmenubar;
70 private JMenu _options_jmenu;
71 private JMenu _font_size_menu;
72 private JMenuItem _super_tiny_fonts_mi;
73 private JMenuItem _tiny_fonts_mi;
74 private JMenuItem _small_fonts_mi;
75 private JMenuItem _medium_fonts_mi;
76 private JMenuItem _large_fonts_mi;
77 private JMenu _tools_menu;
78 private JMenuItem _taxcolor_item;
79 private JMenuItem _confcolor_item;
80 private JMenuItem _midpoint_root_item;
81 private JMenu _view_jmenu;
82 private JMenuItem _view_as_XML_item;
83 private JMenuItem _view_as_NH_item;
84 private JMenuItem _view_as_nexus_item;
85 private JMenuItem _display_basic_information_item;
86 private JMenu _type_menu;
87 private JCheckBoxMenuItem _rectangular_type_cbmi;
88 private JCheckBoxMenuItem _triangular_type_cbmi;
89 private JCheckBoxMenuItem _curved_type_cbmi;
90 private JCheckBoxMenuItem _convex_type_cbmi;
91 private JCheckBoxMenuItem _euro_type_cbmi;
92 private JCheckBoxMenuItem _rounded_type_cbmi;
93 private JCheckBoxMenuItem _unrooted_type_cbmi;
94 private JCheckBoxMenuItem _circular_type_cbmi;
95 private JMenuItem _help_item;
96 private JMenuItem _about_item;
97 private JMenu _help_jmenu;
98 private JMenuItem _website_item;
99 private JMenuItem _phyloxml_website_item;
100 private JMenuItem _phyloxml_ref_item;
101 private JMenuItem _aptx_ref_item;
102 private JMenuItem _remove_branch_color_item;
103 private JMenuItem _remove_visual_styles_item;
104 private JCheckBoxMenuItem _show_domain_labels;
105 private JCheckBoxMenuItem _show_annotation_ref_source;
106 private JCheckBoxMenuItem _color_labels_same_as_parent_branch;
107 private JCheckBoxMenuItem _abbreviate_scientific_names;
108 private JCheckBoxMenuItem _screen_antialias_cbmi;
109 private JCheckBoxMenuItem _background_gradient_cbmi;
110 private JCheckBoxMenuItem _color_by_taxonomic_group_cbmi;
111 private JRadioButtonMenuItem _non_lined_up_cladograms_rbmi;
112 private JRadioButtonMenuItem _uniform_cladograms_rbmi;
113 private JRadioButtonMenuItem _ext_node_dependent_cladogram_rbmi;
114 private Options _options;
115 private JMenuItem _choose_font_mi;
116 private JMenuItem _switch_colors_mi;
117 JCheckBoxMenuItem _label_direction_cbmi;
118 private JCheckBoxMenuItem _show_scale_cbmi;
119 private JCheckBoxMenuItem _search_case_senstive_cbmi;
120 private JCheckBoxMenuItem _search_whole_words_only_cbmi;
121 private JCheckBoxMenuItem _inverse_search_result_cbmi;
122 private JCheckBoxMenuItem _search_with_regex_cbmi;
123 private JCheckBoxMenuItem _show_overview_cbmi;
124 private JMenuItem _choose_minimal_confidence_mi;
125 private JMenuItem _collapse_species_specific_subtrees;
126 private JMenuItem _overview_placment_mi;
127 private ButtonGroup _radio_group_1;
128 private JCheckBoxMenuItem _show_default_node_shapes_internal_cbmi;
129 private JCheckBoxMenuItem _show_default_node_shapes_external_cbmi;
130 private JCheckBoxMenuItem _show_default_node_shapes_for_marked_cbmi;
131 private JMenuItem _cycle_node_shape_mi;
132 private JMenuItem _cycle_node_fill_mi;
133 private JMenuItem _choose_node_size_mi;
134 private JCheckBoxMenuItem _show_confidence_stddev_cbmi;
135 private final LinkedList<TextFrame> _textframes = new LinkedList<TextFrame>();
136 private JMenu _analysis_menu;
137 private JMenuItem _gsdi_item;
138 private JMenuItem _gsdir_item;
139 private Phylogeny _species_tree;
140 private JCheckBoxMenuItem _right_line_up_domains_cbmi;
141 private JCheckBoxMenuItem _line_up_renderable_data_cbmi;
143 JMenuItem _open_item;
144 JMenuItem _open_url_item;
145 JMenuItem _save_item;
146 JMenuItem _save_all_item;
147 JMenuItem _close_item;
148 JMenuItem _exit_item;
150 JMenuItem _print_item;
151 JMenuItem _write_to_pdf_item;
152 JMenuItem _write_to_jpg_item;
153 JMenuItem _write_to_gif_item;
154 JMenuItem _write_to_tif_item;
155 JMenuItem _write_to_png_item;
156 JMenuItem _write_to_bmp_item;
160 void writePhylogenyToGraphicsFile( final String file_name, final GraphicsExportType type ) {
161 _mainpanel.getCurrentTreePanel().calcParametersForPainting( _mainpanel.getCurrentTreePanel().getWidth(),
162 _mainpanel.getCurrentTreePanel().getHeight() );
163 String file_written_to = "";
164 boolean error = false;
166 file_written_to = AptxUtil.writePhylogenyToGraphicsFile( file_name,
167 _mainpanel.getCurrentTreePanel().getWidth(),
168 _mainpanel.getCurrentTreePanel().getHeight(),
169 _mainpanel.getCurrentTreePanel(),
170 _mainpanel.getControlPanel(),
174 catch ( final IOException e ) {
176 JOptionPane.showMessageDialog( this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );
179 if ( ( file_written_to != null ) && ( file_written_to.length() > 0 ) ) {
180 JOptionPane.showMessageDialog( this,
181 "Wrote image to: " + file_written_to,
183 JOptionPane.INFORMATION_MESSAGE );
186 JOptionPane.showMessageDialog( this,
187 "There was an unknown problem when attempting to write to an image file: \""
190 JOptionPane.ERROR_MESSAGE );
193 _contentpane.repaint();
197 void buildFileMenu() {
198 _file_jmenu = MainFrame.createMenu( "File", getConfiguration() );
199 _file_jmenu.add( _save_item = new JMenuItem( "Save Tree As..." ) );
200 _file_jmenu.addSeparator();
201 _file_jmenu.add( _write_to_pdf_item = new JMenuItem( "Export to PDF file ..." ) );
202 if ( AptxUtil.canWriteFormat( "tif" ) || AptxUtil.canWriteFormat( "tiff" ) || AptxUtil.canWriteFormat( "TIF" ) ) {
203 _file_jmenu.add( _write_to_tif_item = new JMenuItem( "Export to TIFF file..." ) );
205 _file_jmenu.add( _write_to_png_item = new JMenuItem( "Export to PNG file..." ) );
206 _file_jmenu.add( _write_to_jpg_item = new JMenuItem( "Export to JPG file..." ) );
207 if ( AptxUtil.canWriteFormat( "gif" ) ) {
208 _file_jmenu.add( _write_to_gif_item = new JMenuItem( "Export to GIF file..." ) );
210 if ( AptxUtil.canWriteFormat( "bmp" ) ) {
211 _file_jmenu.add( _write_to_bmp_item = new JMenuItem( "Export to BMP file..." ) );
213 _file_jmenu.addSeparator();
214 _file_jmenu.add( _print_item = new JMenuItem( "Print..." ) );
215 _file_jmenu.addSeparator();
216 _file_jmenu.add( _exit_item = new JMenuItem( "Exit" ) );
217 customizeJMenuItem( _save_item );
218 customizeJMenuItem( _write_to_pdf_item );
219 customizeJMenuItem( _write_to_png_item );
220 customizeJMenuItem( _write_to_jpg_item );
221 customizeJMenuItem( _write_to_gif_item );
222 customizeJMenuItem( _write_to_tif_item );
223 customizeJMenuItem( _write_to_bmp_item );
224 customizeJMenuItem( _print_item );
225 customizeJMenuItem( _exit_item );
226 _jmenubar.add( _file_jmenu );
230 public void actionPerformed( final ActionEvent e ) {
231 final Object o = e.getSource();
232 if ( o == _midpoint_root_item ) {
233 getMainPanel().getCurrentTreePanel().midpointRoot();
235 else if ( o == _gsdi_item ) {
236 if ( isSubtreeDisplayed() ) {
241 else if ( o == _gsdir_item ) {
242 if ( isSubtreeDisplayed() ) {
247 else if ( o == _taxcolor_item ) {
248 getMainPanel().getCurrentTreePanel().taxColor();
250 else if ( o == _confcolor_item ) {
251 getMainPanel().getCurrentTreePanel().confColor();
253 else if ( o == _collapse_species_specific_subtrees ) {
254 if ( getCurrentTreePanel() != null ) {
255 getCurrentTreePanel().collapseSpeciesSpecificSubtrees();
258 else if ( o == _remove_branch_color_item ) {
259 removeBranchColors();
261 else if ( o == _remove_visual_styles_item ) {
262 removeVisualStyles();
264 else if ( o == _switch_colors_mi ) {
267 else if ( o == _display_basic_information_item ) {
268 displayBasicInformation();
270 else if ( o == _view_as_NH_item ) {
273 else if ( o == _view_as_XML_item ) {
276 else if ( o == _view_as_nexus_item ) {
279 else if ( o == _super_tiny_fonts_mi ) {
280 if ( getCurrentTreePanel() != null ) {
281 getCurrentTreePanel().setSuperTinyFonts();
282 getCurrentTreePanel().repaint();
285 else if ( o == _tiny_fonts_mi ) {
286 if ( getCurrentTreePanel() != null ) {
287 getCurrentTreePanel().setTinyFonts();
288 getCurrentTreePanel().repaint();
291 else if ( o == _small_fonts_mi ) {
292 if ( getCurrentTreePanel() != null ) {
293 getCurrentTreePanel().setSmallFonts();
294 getCurrentTreePanel().repaint();
297 else if ( o == _medium_fonts_mi ) {
298 if ( getCurrentTreePanel() != null ) {
299 getCurrentTreePanel().setMediumFonts();
300 getCurrentTreePanel().repaint();
303 else if ( o == _large_fonts_mi ) {
304 if ( getCurrentTreePanel() != null ) {
305 getCurrentTreePanel().setLargeFonts();
306 getCurrentTreePanel().repaint();
309 else if ( o == _choose_font_mi ) {
312 else if ( o == _choose_minimal_confidence_mi ) {
313 chooseMinimalConfidence();
315 else if ( o == _choose_node_size_mi ) {
316 MainFrame.chooseNodeSize( getOptions(), this );
318 else if ( o == _overview_placment_mi ) {
319 MainFrame.cycleOverview( getOptions(), getCurrentTreePanel() );
321 else if ( o == _cycle_node_fill_mi ) {
322 MainFrame.cycleNodeFill( getOptions() );
324 else if ( o == _cycle_node_shape_mi ) {
325 MainFrame.cycleNodeShape( getOptions() );
327 else if ( o == _non_lined_up_cladograms_rbmi ) {
328 updateOptions( getOptions() );
329 _mainpanel.getControlPanel().showWhole();
331 else if ( o == _uniform_cladograms_rbmi ) {
332 updateOptions( getOptions() );
333 _mainpanel.getControlPanel().showWhole();
335 else if ( o == _ext_node_dependent_cladogram_rbmi ) {
336 updateOptions( getOptions() );
337 _mainpanel.getControlPanel().showWhole();
339 else if ( o == _search_case_senstive_cbmi ) {
340 updateOptions( getOptions() );
341 getMainPanel().getControlPanel().search0();
342 getMainPanel().getControlPanel().search1();
344 else if ( o == _search_whole_words_only_cbmi ) {
345 if ( ( _search_with_regex_cbmi != null ) && _search_whole_words_only_cbmi.isSelected() ) {
346 _search_with_regex_cbmi.setSelected( false );
348 updateOptions( getOptions() );
349 getMainPanel().getControlPanel().search0();
350 getMainPanel().getControlPanel().search1();
352 else if ( o == _inverse_search_result_cbmi ) {
353 updateOptions( getOptions() );
354 getMainPanel().getControlPanel().search0();
355 getMainPanel().getControlPanel().search1();
357 else if ( o == _search_with_regex_cbmi ) {
358 if ( ( _search_whole_words_only_cbmi != null ) && _search_with_regex_cbmi.isSelected() ) {
359 _search_whole_words_only_cbmi.setSelected( false );
361 if ( ( _search_case_senstive_cbmi != null ) && _search_with_regex_cbmi.isSelected() ) {
362 _search_case_senstive_cbmi.setSelected( true );
364 updateOptions( getOptions() );
365 getMainPanel().getControlPanel().search0();
366 getMainPanel().getControlPanel().search1();
368 else if ( o == _show_scale_cbmi ) {
369 updateOptions( getOptions() );
371 else if ( o == _show_confidence_stddev_cbmi ) {
372 updateOptions( getOptions() );
374 else if ( o == _label_direction_cbmi ) {
375 updateOptions( getOptions() );
377 else if ( o == _abbreviate_scientific_names ) {
378 updateOptions( getOptions() );
380 else if ( o == _show_overview_cbmi ) {
381 updateOptions( getOptions() );
382 if ( getCurrentTreePanel() != null ) {
383 getCurrentTreePanel().updateOvSizes();
386 else if ( ( o == _rectangular_type_cbmi ) || ( o == _triangular_type_cbmi ) || ( o == _curved_type_cbmi )
387 || ( o == _convex_type_cbmi ) || ( o == _rounded_type_cbmi ) || ( o == _euro_type_cbmi )
388 || ( o == _unrooted_type_cbmi ) || ( o == _circular_type_cbmi ) ) {
391 else if ( o == _screen_antialias_cbmi ) {
392 updateOptions( getOptions() );
393 setupScreenTextAntialias( getMainPanel().getTreePanels(), isScreenAntialias() );
395 else if ( o == _background_gradient_cbmi ) {
396 updateOptions( getOptions() );
398 else if ( o == _show_domain_labels ) {
399 updateOptions( getOptions() );
401 else if ( o == _color_labels_same_as_parent_branch ) {
402 updateOptions( getOptions() );
404 else if ( o == _show_default_node_shapes_internal_cbmi ) {
405 updateOptions( getOptions() );
407 else if ( o == _show_default_node_shapes_external_cbmi ) {
408 updateOptions( getOptions() );
410 else if ( o == _about_item ) {
413 else if ( o == _help_item ) {
415 AptxUtil.openWebsite( Constants.APTX_DOC_SITE, true, this );
417 catch ( final IOException e1 ) {
418 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
421 else if ( o == _website_item ) {
423 AptxUtil.openWebsite( Constants.APTX_WEB_SITE, true, this );
425 catch ( final IOException e1 ) {
426 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
429 else if ( o == _phyloxml_website_item ) {
431 AptxUtil.openWebsite( Constants.PHYLOXML_WEB_SITE, true, this );
433 catch ( final IOException e1 ) {
434 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
437 else if ( o == _aptx_ref_item ) {
439 AptxUtil.openWebsite( Constants.APTX_REFERENCE_URL, true, this );
441 catch ( final IOException e1 ) {
442 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
445 else if ( o == _phyloxml_ref_item ) {
447 AptxUtil.openWebsite( Constants.PHYLOXML_REFERENCE_URL, true, this );
449 catch ( final IOException e1 ) {
450 ForesterUtil.printErrorMessage( Constants.PRG_NAME, e1.toString() );
453 else if ( o == _color_by_taxonomic_group_cbmi ) {
454 updateOptions( getOptions() );
456 else if ( o == _line_up_renderable_data_cbmi ) {
457 if ( !_line_up_renderable_data_cbmi.isSelected() ) {
458 _right_line_up_domains_cbmi.setSelected( false );
460 updateOptions( getOptions() );
462 else if ( o == _right_line_up_domains_cbmi ) {
463 if ( _right_line_up_domains_cbmi.isSelected() ) {
464 _line_up_renderable_data_cbmi.setSelected( true );
466 updateOptions( getOptions() );
469 else if ( o == _write_to_pdf_item ) {
470 writeToPdf( _mainpanel.getCurrentPhylogeny() );
473 else if ( o == _write_to_jpg_item ) {
474 writeToGraphicsFile( _mainpanel.getCurrentPhylogeny(), GraphicsExportType.JPG );
476 else if ( o == _write_to_gif_item ) {
477 writeToGraphicsFile( _mainpanel.getCurrentPhylogeny(), GraphicsExportType.GIF );
479 else if ( o == _write_to_tif_item ) {
480 writeToGraphicsFile( _mainpanel.getCurrentPhylogeny(), GraphicsExportType.TIFF );
482 else if ( o == _write_to_bmp_item ) {
483 writeToGraphicsFile( _mainpanel.getCurrentPhylogeny(), GraphicsExportType.BMP );
485 else if ( o == _write_to_png_item ) {
486 writeToGraphicsFile( _mainpanel.getCurrentPhylogeny(), GraphicsExportType.PNG );
488 else if ( o == _print_item ) {
489 MainFrame.print( getCurrentTreePanel(),
495 else if ( o == _save_item ) {
496 writeToFile( _mainpanel.getCurrentPhylogeny() );
499 // else if ( o == _graphics_export_visible_only_cbmi ) {
500 // updateOptions( getOptions() );
502 // else if ( o == _antialias_print_cbmi ) {
503 // updateOptions( getOptions() );
505 // else if ( o == _print_black_and_white_cbmi ) {
506 // updateOptions( getOptions() );
508 // else if ( o == _print_using_actual_size_cbmi ) {
509 // updateOptions( getOptions() );
511 // else if ( o == _graphics_export_using_actual_size_cbmi ) {
512 // updateOptions( getOptions() );
514 // else if ( o == _print_size_mi ) {
515 // choosePrintSize();
517 // else if ( o == _choose_pdf_width_mi ) {
525 public void destroy() {
526 AptxUtil.printAppletMessage( NAME, "going to be destroyed " );
527 removeAllTextFrames();
528 if ( getMainPanel() != null ) {
529 getMainPanel().terminate();
534 * This method returns the current external node data which
535 * has been selected by the user by clicking the "Return ..."
536 * menu item. This method is expected to be called from Javascript or
539 * @return current external node data as String
541 public String getCurrentExternalNodesDataBuffer() {
542 return getCurrentTreePanel().getCurrentExternalNodesDataBufferAsString();
545 public int getCurrentExternalNodesDataBufferChangeCounter() {
546 return getCurrentTreePanel().getCurrentExternalNodesDataBufferChangeCounter();
549 public int getCurrentExternalNodesDataBufferLength() {
550 return getCurrentTreePanel().getCurrentExternalNodesDataBufferAsString().length();
554 * This method returns the current phylogeny as a string in the chosen format
556 * @param format must be NH, NHX, NEXUS or PHYLOXML
557 * @return the phylogeny string
558 * @author Herve Menager
560 public String getCurrentPhylogeny( final String format ) {
561 removeAllTextFrames();
562 if ( ( getMainPanel().getCurrentPhylogeny() == null ) || getMainPanel().getCurrentPhylogeny().isEmpty()
563 || ( getMainPanel().getCurrentPhylogeny().getNumberOfExternalNodes() > 10000 ) ) {
566 switch ( ForesterConstants.PhylogeneticTreeFormats.valueOf( format ) ) {
568 return getMainPanel().getCurrentPhylogeny().toNewHampshire();
570 return getMainPanel().getCurrentPhylogeny().toNewHampshireX();
572 return getMainPanel().getCurrentPhylogeny().toNexus();
574 return getMainPanel().getCurrentPhylogeny().toPhyloXML( -1 );
582 * This method returns a view of the current phylogeny in a chosen
583 * graphics format, base64-encoded in a string so that in can be used
586 * @param format must be GraphicsExportType (gif, jpg, pdf, png, tif, bmp)
587 * @return the phylogeny string
588 * @author Herve Menager
590 public String getCurrentPhylogenyGraphicsAsBase64EncodedString( final String format ) {
591 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
593 AptxUtil.writePhylogenyToGraphicsByteArrayOutputStream( baos,
594 _mainpanel.getWidth(),
595 _mainpanel.getHeight(),
596 getCurrentTreePanel(),
597 getCurrentTreePanel().getControlPanel(),
598 GraphicsExportType.valueOf( format ),
601 catch ( final IOException ioe ) {
602 ForesterUtil.printErrorMessage( NAME, ioe.toString() );
603 ioe.printStackTrace();
604 JOptionPane.showMessageDialog( this,
605 NAME + ": Failed to generate graphics: " + "\nException: " + ioe,
606 "Failed to generate graphics",
607 JOptionPane.ERROR_MESSAGE );
610 final byte[] bytes = baos.toByteArray();
611 final String dataImg = Base64.encodeBase64String( bytes );
615 public Options getOptions() {
621 final String config_filename = getParameter( Constants.APPLET_PARAM_NAME_FOR_CONFIG_FILE_URL );
622 AptxUtil.printAppletMessage( NAME, "URL for configuration file is: " + config_filename );
623 final Configuration configuration = new Configuration( config_filename, true, true, true );
624 setConfiguration( configuration );
625 setOptions( Options.createInstance( configuration ) );
627 final String tree_url_str = getParameter( Constants.APPLET_PARAM_NAME_FOR_URL_OF_TREE_TO_LOAD );
628 if ( ForesterUtil.isEmpty( tree_url_str ) ) {
629 ForesterUtil.printErrorMessage( NAME, "could not get tree URL from "
630 + Constants.APPLET_PARAM_NAME_FOR_URL_OF_TREE_TO_LOAD );
631 JOptionPane.showMessageDialog( this, NAME + ": could not get tree URL from "
632 + Constants.APPLET_PARAM_NAME_FOR_URL_OF_TREE_TO_LOAD, "Failed get URL", JOptionPane.ERROR_MESSAGE );
635 AptxUtil.printAppletMessage( NAME, "URL for phylogenies is " + tree_url_str );
636 // Get URL to tree file
639 phys_url = new URL( tree_url_str );
641 catch ( final Exception e ) {
642 ForesterUtil.printErrorMessage( NAME, "error: " + e );
644 JOptionPane.showMessageDialog( this, NAME + ": Could not create URL from: \"" + tree_url_str
645 + "\"\nException: " + e, "Failed to create URL", JOptionPane.ERROR_MESSAGE );
647 if ( phys_url == null ) {
648 ForesterUtil.printErrorMessage( NAME, "failed to get tree URL from "
649 + Constants.APPLET_PARAM_NAME_FOR_URL_OF_TREE_TO_LOAD );
650 JOptionPane.showMessageDialog( this,
651 NAME + ": Could not create URL from: \"" + tree_url_str,
652 "Failed to create URL",
653 JOptionPane.ERROR_MESSAGE );
656 // Load the tree from URL
657 Phylogeny[] phys = null;
659 phys = AptxUtil.readPhylogeniesFromUrl( phys_url,
660 getConfiguration().isValidatePhyloXmlAgainstSchema(),
661 getConfiguration().isReplaceUnderscoresInNhParsing(),
662 getConfiguration().isInternalNumberAreConfidenceForNhParsing(),
663 getConfiguration().getTaxonomyExtraction(),
664 getConfiguration().isMidpointReroot() );
666 catch ( final Exception e ) {
667 ForesterUtil.printErrorMessage( NAME, e.toString() );
669 JOptionPane.showMessageDialog( this,
670 NAME + ": Failed to read phylogenies: " + "\nException: " + e,
671 "Failed to read phylogenies",
672 JOptionPane.ERROR_MESSAGE );
674 if ( phys == null ) {
675 ForesterUtil.printErrorMessage( NAME, "phylogenies from [" + phys_url + "] are null" );
676 JOptionPane.showMessageDialog( this,
677 NAME + ": phylogenies from [" + phys_url + "] are null",
678 "Failed to read phylogenies",
679 JOptionPane.ERROR_MESSAGE );
682 else if ( phys.length < 1 ) {
683 ForesterUtil.printErrorMessage( NAME, "phylogenies from [" + phys_url + "] are empty" );
684 JOptionPane.showMessageDialog( this,
685 NAME + ": phylogenies from [" + phys_url + "] are empty",
686 "Failed to read phylogenies",
687 JOptionPane.ERROR_MESSAGE );
691 AptxUtil.printAppletMessage( NAME, "loaded " + phys.length + " phylogenies from: " + phys_url );
694 final String species_tree_url_str = getParameter( Constants.APPLET_PARAM_NAME_FOR_URL_OF_SPECIES_TREE_TO_LOAD );
695 if ( !ForesterUtil.isEmpty( species_tree_url_str ) ) {
696 AptxUtil.printAppletMessage( NAME, "URL of species tree to load: \"" + species_tree_url_str + "\"" );
697 Phylogeny[] species_trees = null;
699 final URL species_tree_url = new URL( species_tree_url_str );
700 species_trees = AptxUtil.readPhylogeniesFromUrl( species_tree_url,
701 configuration.isValidatePhyloXmlAgainstSchema(),
702 configuration.isReplaceUnderscoresInNhParsing(),
704 TAXONOMY_EXTRACTION.NO,
707 catch ( final IOException e ) {
708 ForesterUtil.printErrorMessage( NAME, "could not read species tree from [" + species_tree_url_str
710 JOptionPane.showMessageDialog( this, NAME + ": could not read species tree from ["
711 + species_tree_url_str + "]", "Failed to read species tree", JOptionPane.ERROR_MESSAGE );
713 if ( ( species_trees != null ) && ( species_trees.length > 0 ) ) {
714 AptxUtil.printAppletMessage( NAME, "successfully read species tree" );
715 if ( species_trees[ 0 ].isEmpty() ) {
716 ForesterUtil.printErrorMessage( NAME, "species tree is empty" );
718 else if ( !species_trees[ 0 ].isRooted() ) {
719 ForesterUtil.printErrorMessage( NAME, "species tree is not rooted" );
722 setSpeciesTree( species_trees[ 0 ] );
723 AptxUtil.printAppletMessage( NAME, "species tree OK" );
730 setMainPanel( new MainPanelApplets( getConfiguration(), this ) );
731 _jmenubar = new JMenuBar();
732 if ( !getConfiguration().isHideControlPanelAndMenubar() ) {
734 if ( !getConfiguration().isUseNativeUI() ) {
735 _jmenubar.setBackground( getConfiguration().getGuiMenuBackgroundColor() );
737 if ( getSpeciesTree() != null ) {
746 setJMenuBar( _jmenubar );
748 final Container contentpane = getContentPane();
749 contentpane.setLayout( new BorderLayout() );
750 contentpane.add( getMainPanel(), BorderLayout.CENTER );
751 addComponentListener( new ComponentAdapter() {
754 public void componentResized( final ComponentEvent e ) {
755 if ( getMainPanel().getCurrentTreePanel() != null ) {
756 getMainPanel().getCurrentTreePanel().calcParametersForPainting( getMainPanel()
757 .getCurrentTreePanel()
760 .getCurrentTreePanel()
765 if ( getConfiguration().isUseTabbedDisplay() ) {
767 AptxUtil.printAppletMessage( NAME, "using tabbed display" );
768 AptxUtil.addPhylogeniesToTabs( phys,
769 new File( phys_url.getFile() ).getName(),
774 catch ( final Exception e ) {
775 ForesterUtil.printErrorMessage( NAME, e.toString() );
780 AptxUtil.printAppletMessage( NAME, "not using tabbed display" );
781 if ( getSpeciesTree() != null ) {
782 AptxUtil.printAppletMessage( NAME,
783 "Warning: gsdi (gene duplication inference) only available tabbed display" );
785 AptxUtil.addPhylogenyToPanel( phys, getConfiguration(), getMainPanel() );
789 getMainPanel().getControlPanel().showWholeAll();
790 getMainPanel().getControlPanel().showWhole();
792 getCurrentTreePanel().getControlPanel().getSequenceRelationTypeBox().removeAllItems();
793 for( final SequenceRelation.SEQUENCE_RELATION_TYPE type : getMainPanel().getCurrentPhylogeny()
794 .getRelevantSequenceRelationTypes() ) {
795 getCurrentTreePanel().getControlPanel().getSequenceRelationTypeBox().addItem( type );
797 final String default_relation = getParameter( Constants.APPLET_PARAM_NAME_FOR_DEFAULT_SEQUENCE_RELATION_TYPE );
798 if ( default_relation != null ) {
799 getCurrentTreePanel().getControlPanel().getSequenceRelationTypeBox().setSelectedItem( default_relation );
801 final String default_sequence = getParameter( Constants.APPLET_PARAM_NAME_FOR_DEFAULT_QUERY_SEQUENCE );
802 if ( default_sequence != null ) {
803 getCurrentTreePanel().getControlPanel().getSequenceRelationBox().setSelectedItem( default_sequence );
807 AptxUtil.printAppletMessage( NAME, "successfully initialized" );
810 catch ( final Exception e ) {
811 ForesterUtil.printErrorMessage( NAME, e.toString() );
816 public void showTextFrame( final String s, final String title ) {
818 _textframes.addLast( TextFrame.instantiate( s, title, _textframes ) );
822 public void start() {
823 if ( getMainPanel() != null ) {
824 getMainPanel().validate();
827 requestFocusInWindow();
829 AptxUtil.printAppletMessage( NAME, "started" );
832 void buildAnalysisMenu() {
833 _analysis_menu = MainFrame.createMenu( "Analysis", getConfiguration() );
834 _analysis_menu.add( _gsdi_item = new JMenuItem( "GSDI (Generalized Speciation Duplication Inference)" ) );
835 _analysis_menu.add( _gsdir_item = new JMenuItem( "GSDIR (GSDI with re-rooting)" ) );
836 customizeJMenuItem( _gsdi_item );
837 customizeJMenuItem( _gsdir_item );
838 // _analysis_menu.addSeparator();
839 // _analysis_menu.add( _lineage_inference = new JMenuItem( INFER_ANCESTOR_TAXONOMIES ) );
840 // customizeJMenuItem( _lineage_inference );
841 // _lineage_inference.setToolTipText( "Inference of ancestor taxonomies/lineages" );
842 _jmenubar.add( _analysis_menu );
845 void buildFontSizeMenu() {
846 _font_size_menu = MainFrame.createMenu( MainFrame.FONT_SIZE_MENU_LABEL, getConfiguration() );
847 _font_size_menu.add( _super_tiny_fonts_mi = new JMenuItem( "Super tiny fonts" ) );
848 _font_size_menu.add( _tiny_fonts_mi = new JMenuItem( "Tiny fonts" ) );
849 _font_size_menu.add( _small_fonts_mi = new JMenuItem( "Small fonts" ) );
850 _font_size_menu.add( _medium_fonts_mi = new JMenuItem( "Medium fonts" ) );
851 _font_size_menu.add( _large_fonts_mi = new JMenuItem( "Large fonts" ) );
852 customizeJMenuItem( _super_tiny_fonts_mi );
853 customizeJMenuItem( _tiny_fonts_mi );
854 customizeJMenuItem( _small_fonts_mi );
855 customizeJMenuItem( _medium_fonts_mi );
856 customizeJMenuItem( _large_fonts_mi );
857 _jmenubar.add( _font_size_menu );
860 void buildHelpMenu() {
861 _help_jmenu = MainFrame.createMenu( "Help", getConfiguration() );
862 _help_jmenu.add( _help_item = new JMenuItem( "Documentation" ) );
863 _help_jmenu.addSeparator();
864 _help_jmenu.add( _website_item = new JMenuItem( "Archaeopteryx Home" ) );
865 _aptx_ref_item = new JMenuItem( "Archaeopteryx Reference" );
866 _help_jmenu.add( _phyloxml_website_item = new JMenuItem( "phyloXML Home" ) );
867 _help_jmenu.add( _phyloxml_ref_item = new JMenuItem( "phyloXML Reference" ) );
868 _help_jmenu.addSeparator();
869 _help_jmenu.add( _about_item = new JMenuItem( "About" ) );
870 customizeJMenuItem( _help_item );
871 customizeJMenuItem( _website_item );
872 customizeJMenuItem( _phyloxml_website_item );
873 customizeJMenuItem( _aptx_ref_item );
874 customizeJMenuItem( _phyloxml_ref_item );
875 customizeJMenuItem( _about_item );
876 _phyloxml_ref_item.setToolTipText( MainFrame.PHYLOXML_REF_TOOL_TIP );
877 _aptx_ref_item.setToolTipText( MainFrame.APTX_REF_TOOL_TIP );
878 _jmenubar.add( _help_jmenu );
881 void buildOptionsMenu() {
882 _options_jmenu = MainFrame.createMenu( MainFrame.OPTIONS_HEADER, getConfiguration() );
883 _options_jmenu.addChangeListener( new ChangeListener() {
886 public void stateChanged( final ChangeEvent e ) {
887 MainFrame.setOvPlacementColorChooseMenuItem( _overview_placment_mi, getOptions() );
888 MainFrame.setTextColorChooseMenuItem( _switch_colors_mi, getCurrentTreePanel() );
890 .setTextMinSupportMenuItem( _choose_minimal_confidence_mi, getOptions(), getCurrentTreePanel() );
891 MainFrame.setTextForFontChooserMenuItem( _choose_font_mi, MainFrame
892 .createCurrentFontDesc( getMainPanel().getTreeFontSet() ) );
893 MainFrame.setCycleNodeFillMenuItem( _cycle_node_fill_mi, getOptions() );
894 MainFrame.setCycleNodeShapeMenuItem( _cycle_node_shape_mi, getOptions() );
895 MainFrame.setTextNodeSizeMenuItem( _choose_node_size_mi, getOptions() );
897 getMainPanel().getControlPanel().setVisibilityOfDomainStrucureCB();
898 getMainPanel().getControlPanel().setVisibilityOfX();
900 catch ( final Exception ignore ) {
901 // do nothing, not important.
905 _options_jmenu.add( MainFrame.customizeMenuItemAsLabel( new JMenuItem( MainFrame.DISPLAY_SUBHEADER ),
906 getConfiguration() ) );
908 .add( _ext_node_dependent_cladogram_rbmi = new JRadioButtonMenuItem( MainFrame.NONUNIFORM_CLADOGRAMS_LABEL ) );
909 _options_jmenu.add( _uniform_cladograms_rbmi = new JRadioButtonMenuItem( MainFrame.UNIFORM_CLADOGRAMS_LABEL ) );
911 .add( _non_lined_up_cladograms_rbmi = new JRadioButtonMenuItem( MainFrame.NON_LINED_UP_CLADOGRAMS_LABEL ) );
912 _radio_group_1 = new ButtonGroup();
913 _radio_group_1.add( _ext_node_dependent_cladogram_rbmi );
914 _radio_group_1.add( _uniform_cladograms_rbmi );
915 _radio_group_1.add( _non_lined_up_cladograms_rbmi );
916 _options_jmenu.add( _show_overview_cbmi = new JCheckBoxMenuItem( MainFrame.SHOW_OVERVIEW_LABEL ) );
917 _options_jmenu.add( _show_scale_cbmi = new JCheckBoxMenuItem( MainFrame.DISPLAY_SCALE_LABEL ) );
919 .add( _show_default_node_shapes_internal_cbmi = new JCheckBoxMenuItem( MainFrame.DISPLAY_NODE_BOXES_LABEL_INT ) );
921 .add( _show_default_node_shapes_external_cbmi = new JCheckBoxMenuItem( MainFrame.DISPLAY_NODE_BOXES_LABEL_EXT ) );
923 .add( _show_default_node_shapes_for_marked_cbmi = new JCheckBoxMenuItem( MainFrame.DISPLAY_NODE_BOXES_LABEL_MARKED ) );
924 _options_jmenu.add( _line_up_renderable_data_cbmi = new JCheckBoxMenuItem( MainFrame.LINE_UP_RENDERABLE_DATA ) );
925 if ( getConfiguration().doDisplayOption( Configuration.show_domain_architectures ) ) {
926 _options_jmenu.add( _right_line_up_domains_cbmi = new JCheckBoxMenuItem( MainFrame.RIGHT_LINE_UP_DOMAINS ) );
927 _options_jmenu.add( _show_domain_labels = new JCheckBoxMenuItem( MainFrame.SHOW_DOMAIN_LABELS_LABEL ) );
929 _options_jmenu.add( _show_annotation_ref_source = new JCheckBoxMenuItem( MainFrame.SHOW_ANN_REF_SOURCE_LABEL ) );
930 _options_jmenu.add( _show_confidence_stddev_cbmi = new JCheckBoxMenuItem( MainFrame.SHOW_CONF_STDDEV_LABEL ) );
932 .add( _color_by_taxonomic_group_cbmi = new JCheckBoxMenuItem( MainFrame.COLOR_BY_TAXONOMIC_GROUP ) );
934 .add( _color_labels_same_as_parent_branch = new JCheckBoxMenuItem( MainFrame.COLOR_LABELS_LABEL ) );
935 _color_labels_same_as_parent_branch.setToolTipText( MainFrame.COLOR_LABELS_TIP );
936 _options_jmenu.add( _abbreviate_scientific_names = new JCheckBoxMenuItem( MainFrame.ABBREV_SN_LABEL ) );
937 _options_jmenu.add( _label_direction_cbmi = new JCheckBoxMenuItem( MainFrame.LABEL_DIRECTION_LABEL ) );
938 _label_direction_cbmi.setToolTipText( MainFrame.LABEL_DIRECTION_TIP );
939 _options_jmenu.add( _screen_antialias_cbmi = new JCheckBoxMenuItem( MainFrame.SCREEN_ANTIALIAS_LABEL ) );
940 _options_jmenu.add( _background_gradient_cbmi = new JCheckBoxMenuItem( MainFrame.BG_GRAD_LABEL ) );
941 _options_jmenu.add( _cycle_node_shape_mi = new JMenuItem( MainFrame.CYCLE_NODE_SHAPE_LABEL ) );
942 _options_jmenu.add( _cycle_node_fill_mi = new JMenuItem( MainFrame.CYCLE_NODE_FILL_LABEL ) );
943 _options_jmenu.add( _choose_node_size_mi = new JMenuItem( MainFrame.CHOOSE_NODE_SIZE_LABEL ) );
944 _options_jmenu.add( _choose_minimal_confidence_mi = new JMenuItem( "" ) );
945 _options_jmenu.add( _overview_placment_mi = new JMenuItem( "" ) );
946 _options_jmenu.add( _switch_colors_mi = new JMenuItem( "" ) );
947 _options_jmenu.add( _choose_font_mi = new JMenuItem( "" ) );
948 _options_jmenu.addSeparator();
949 _options_jmenu.add( MainFrame.customizeMenuItemAsLabel( new JMenuItem( MainFrame.SEARCH_SUBHEADER ),
950 getConfiguration() ) );
952 .add( _search_case_senstive_cbmi = new JCheckBoxMenuItem( MainFrame.SEARCH_CASE_SENSITIVE_LABEL ) );
953 _options_jmenu.add( _search_whole_words_only_cbmi = new JCheckBoxMenuItem( MainFrame.SEARCH_TERMS_ONLY_LABEL ) );
954 _options_jmenu.add( _search_with_regex_cbmi = new JCheckBoxMenuItem( MainFrame.SEARCH_REGEX_LABEL ) );
955 _search_with_regex_cbmi.setToolTipText( MainFrame.SEARCH_WITH_REGEX_TIP );
957 .add( _inverse_search_result_cbmi = new JCheckBoxMenuItem( MainFrame.INVERSE_SEARCH_RESULT_LABEL ) );
958 customizeJMenuItem( _choose_font_mi );
959 customizeJMenuItem( _choose_minimal_confidence_mi );
960 customizeJMenuItem( _switch_colors_mi );
961 customizeJMenuItem( _overview_placment_mi );
962 customizeCheckBoxMenuItem( _color_by_taxonomic_group_cbmi, getOptions().isColorByTaxonomicGroup() );
963 customizeCheckBoxMenuItem( _label_direction_cbmi,
964 getOptions().getNodeLabelDirection() == NODE_LABEL_DIRECTION.RADIAL );
965 customizeCheckBoxMenuItem( _screen_antialias_cbmi, getOptions().isAntialiasScreen() );
966 customizeCheckBoxMenuItem( _background_gradient_cbmi, getOptions().isBackgroundColorGradient() );
967 customizeCheckBoxMenuItem( _show_domain_labels, getOptions().isShowDomainLabels() );
968 customizeCheckBoxMenuItem( _show_annotation_ref_source, getOptions().isShowAnnotationRefSource() );
969 customizeCheckBoxMenuItem( _abbreviate_scientific_names, getOptions().isAbbreviateScientificTaxonNames() );
970 customizeCheckBoxMenuItem( _show_default_node_shapes_external_cbmi, getOptions()
971 .isShowDefaultNodeShapesExternal() );
972 customizeCheckBoxMenuItem( _show_default_node_shapes_internal_cbmi, getOptions()
973 .isShowDefaultNodeShapesInternal() );
974 customizeCheckBoxMenuItem( _show_default_node_shapes_for_marked_cbmi, getOptions()
975 .isShowDefaultNodeShapesForMarkedNodes() );
976 customizeJMenuItem( _cycle_node_shape_mi );
977 customizeJMenuItem( _cycle_node_fill_mi );
978 customizeJMenuItem( _choose_node_size_mi );
979 customizeCheckBoxMenuItem( _color_labels_same_as_parent_branch, getOptions().isColorLabelsSameAsParentBranch() );
980 customizeCheckBoxMenuItem( _search_case_senstive_cbmi, getOptions().isSearchCaseSensitive() );
981 customizeCheckBoxMenuItem( _show_scale_cbmi, getOptions().isShowScale() );
982 customizeRadioButtonMenuItem( _non_lined_up_cladograms_rbmi,
983 getOptions().getCladogramType() == CLADOGRAM_TYPE.NON_LINED_UP );
984 customizeRadioButtonMenuItem( _uniform_cladograms_rbmi,
985 getOptions().getCladogramType() == CLADOGRAM_TYPE.TOTAL_NODE_SUM_DEP );
986 customizeRadioButtonMenuItem( _ext_node_dependent_cladogram_rbmi,
987 getOptions().getCladogramType() == CLADOGRAM_TYPE.EXT_NODE_SUM_DEP );
988 customizeCheckBoxMenuItem( _show_overview_cbmi, getOptions().isShowOverview() );
989 customizeCheckBoxMenuItem( _search_with_regex_cbmi, getOptions().isSearchWithRegex() );
990 customizeCheckBoxMenuItem( _search_whole_words_only_cbmi, getOptions().isMatchWholeTermsOnly() );
991 customizeCheckBoxMenuItem( _inverse_search_result_cbmi, getOptions().isInverseSearchResult() );
992 customizeCheckBoxMenuItem( _show_confidence_stddev_cbmi, getOptions().isShowConfidenceStddev() );
993 customizeCheckBoxMenuItem( _line_up_renderable_data_cbmi, getOptions().isLineUpRendarableNodeData() );
994 customizeCheckBoxMenuItem( _right_line_up_domains_cbmi, getOptions().isRightLineUpDomains() );
995 _jmenubar.add( _options_jmenu );
998 void buildToolsMenu() {
999 _tools_menu = MainFrame.createMenu( "Tools", getConfiguration() );
1000 _tools_menu.add( _confcolor_item = new JMenuItem( "Colorize Branches Depending on Confidence" ) );
1001 customizeJMenuItem( _confcolor_item );
1002 _tools_menu.add( _taxcolor_item = new JMenuItem( "Taxonomy Colorize Branches" ) );
1003 customizeJMenuItem( _taxcolor_item );
1004 _tools_menu.addSeparator();
1005 _tools_menu.add( _remove_visual_styles_item = new JMenuItem( "Delete All Visual Styles From Nodes" ) );
1006 _remove_visual_styles_item
1007 .setToolTipText( "To remove all node visual styles (fonts, colors) from the current phylogeny." );
1008 customizeJMenuItem( _remove_visual_styles_item );
1009 _tools_menu.add( _remove_branch_color_item = new JMenuItem( "Delete All Colors From Branches" ) );
1010 _remove_branch_color_item.setToolTipText( "To remove all branch color values from the current phylogeny." );
1011 customizeJMenuItem( _remove_branch_color_item );
1012 _tools_menu.addSeparator();
1013 _tools_menu.add( _midpoint_root_item = new JMenuItem( "Midpoint-Root" ) );
1014 customizeJMenuItem( _midpoint_root_item );
1015 _tools_menu.addSeparator();
1016 _tools_menu.add( _collapse_species_specific_subtrees = new JMenuItem( "Collapse Species-Specific Subtrees" ) );
1017 customizeJMenuItem( _collapse_species_specific_subtrees );
1018 _jmenubar.add( _tools_menu );
1021 void buildTypeMenu() {
1022 _type_menu = MainFrame.createMenu( MainFrame.TYPE_MENU_HEADER, getConfiguration() );
1023 _type_menu.add( _rectangular_type_cbmi = new JCheckBoxMenuItem( MainFrame.RECTANGULAR_TYPE_CBMI_LABEL ) );
1024 _type_menu.add( _euro_type_cbmi = new JCheckBoxMenuItem( MainFrame.EURO_TYPE_CBMI_LABEL ) );
1025 _type_menu.add( _rounded_type_cbmi = new JCheckBoxMenuItem( MainFrame.ROUNDED_TYPE_CBMI_LABEL ) );
1026 _type_menu.add( _curved_type_cbmi = new JCheckBoxMenuItem( MainFrame.CURVED_TYPE_CBMI_LABEL ) );
1027 _type_menu.add( _triangular_type_cbmi = new JCheckBoxMenuItem( MainFrame.TRIANGULAR_TYPE_CBMI_LABEL ) );
1028 _type_menu.add( _convex_type_cbmi = new JCheckBoxMenuItem( MainFrame.CONVEX_TYPE_CBMI_LABEL ) );
1029 _type_menu.add( _unrooted_type_cbmi = new JCheckBoxMenuItem( MainFrame.UNROOTED_TYPE_CBMI_LABEL ) );
1030 _type_menu.add( _circular_type_cbmi = new JCheckBoxMenuItem( MainFrame.CIRCULAR_TYPE_CBMI_LABEL ) );
1031 customizeCheckBoxMenuItem( _rectangular_type_cbmi, false );
1032 customizeCheckBoxMenuItem( _triangular_type_cbmi, false );
1033 customizeCheckBoxMenuItem( _euro_type_cbmi, false );
1034 customizeCheckBoxMenuItem( _rounded_type_cbmi, false );
1035 customizeCheckBoxMenuItem( _curved_type_cbmi, false );
1036 customizeCheckBoxMenuItem( _convex_type_cbmi, false );
1037 customizeCheckBoxMenuItem( _unrooted_type_cbmi, false );
1038 customizeCheckBoxMenuItem( _circular_type_cbmi, false );
1039 _unrooted_type_cbmi.setToolTipText( MainFrame.USE_MOUSEWHEEL_SHIFT_TO_ROTATE );
1040 _circular_type_cbmi.setToolTipText( MainFrame.USE_MOUSEWHEEL_SHIFT_TO_ROTATE );
1041 initializeTypeMenu( getOptions() );
1042 _jmenubar.add( _type_menu );
1045 void buildViewMenu() {
1046 _view_jmenu = MainFrame.createMenu( "View", getConfiguration() );
1048 .add( _display_basic_information_item = new JMenuItem( MainFrame.SHOW_BASIC_TREE_INFORMATION_LABEL ) );
1049 _view_jmenu.addSeparator();
1050 _view_jmenu.add( _view_as_XML_item = new JMenuItem( "as phyloXML" ) );
1051 _view_jmenu.add( _view_as_NH_item = new JMenuItem( "as Newick" ) );
1052 _view_jmenu.add( _view_as_nexus_item = new JMenuItem( "as Nexus" ) );
1053 customizeJMenuItem( _display_basic_information_item );
1054 customizeJMenuItem( _view_as_NH_item );
1055 customizeJMenuItem( _view_as_XML_item );
1056 customizeJMenuItem( _view_as_nexus_item );
1057 _jmenubar.add( _view_jmenu );
1060 void checkTextFrames() {
1061 if ( _textframes.size() > 5 ) {
1063 if ( _textframes.getFirst() != null ) {
1064 _textframes.getFirst().removeMe();
1067 _textframes.removeFirst();
1070 catch ( final NoSuchElementException e ) {
1076 void clearCurrentExternalNodesDataBuffer() {
1077 getCurrentTreePanel().clearCurrentExternalNodesDataBuffer();
1080 void customizeCheckBoxMenuItem( final JCheckBoxMenuItem item, final boolean is_selected ) {
1081 if ( item != null ) {
1082 item.setFont( MainFrame.menu_font );
1083 if ( !getConfiguration().isUseNativeUI() ) {
1084 item.setBackground( getConfiguration().getGuiMenuBackgroundColor() );
1085 item.setForeground( getConfiguration().getGuiMenuTextColor() );
1087 item.setSelected( is_selected );
1088 item.addActionListener( this );
1092 void customizeJMenuItem( final JMenuItem jmi ) {
1093 if ( jmi != null ) {
1094 jmi.setFont( MainFrame.menu_font );
1095 if ( !getConfiguration().isUseNativeUI() ) {
1096 jmi.setBackground( getConfiguration().getGuiMenuBackgroundColor() );
1097 jmi.setForeground( getConfiguration().getGuiMenuTextColor() );
1099 jmi.addActionListener( this );
1103 void displayBasicInformation() {
1104 if ( ( getMainPanel() != null ) && ( getMainPanel().getCurrentPhylogeny() != null )
1105 && !getMainPanel().getCurrentPhylogeny().isEmpty() ) {
1106 String title = "Basic Information";
1107 if ( !ForesterUtil.isEmpty( getMainPanel().getCurrentPhylogeny().getName() ) ) {
1108 title = title + " for \"" + _mainpanel.getCurrentPhylogeny().getName() + "\"";
1110 showTextFrame( AptxUtil.createBasicInformation( getMainPanel().getCurrentPhylogeny(), null ), title );
1114 void executeGSDI() {
1115 if ( !isOKforSDI( false, true ) ) {
1118 if ( !_mainpanel.getCurrentPhylogeny().isRooted() ) {
1119 JOptionPane.showMessageDialog( this,
1120 "Gene tree is not rooted.",
1121 "Cannot execute GSDI",
1122 JOptionPane.ERROR_MESSAGE );
1125 final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy();
1126 gene_tree.setAllNodesToNotCollapse();
1127 gene_tree.recalculateNumberOfExternalDescendants( false );
1129 final Phylogeny species_tree = _species_tree.copy();
1131 gsdi = new GSDI( gene_tree, species_tree, false, true, true, true );
1133 catch ( final SDIException e ) {
1134 JOptionPane.showMessageDialog( this,
1135 e.getLocalizedMessage(),
1136 "Error during GSDI",
1137 JOptionPane.ERROR_MESSAGE );
1140 catch ( final Exception e ) {
1141 AptxUtil.unexpectedException( e );
1144 gene_tree.setRerootable( false );
1145 gene_tree.clearHashIdToNodeMap();
1146 gene_tree.recalculateNumberOfExternalDescendants( true );
1147 _mainpanel.addPhylogenyInNewTab( gene_tree, getConfiguration(), "gene tree", null );
1148 getMainPanel().getControlPanel().setShowEvents( true );
1150 final int selected = _mainpanel.getTabbedPane().getSelectedIndex();
1151 _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null );
1153 _mainpanel.getTabbedPane().setSelectedIndex( selected );
1155 _mainpanel.getCurrentTreePanel().setEdited( true );
1156 final int poly = PhylogenyMethods.countNumberOfPolytomies( species_tree );
1157 if ( gsdi.getStrippedExternalGeneTreeNodes().size() > 0 ) {
1158 JOptionPane.showMessageDialog( this,
1159 "Duplications: " + gsdi.getDuplicationsSum() + "\n"
1160 + "Potential duplications: "
1161 + gsdi.getSpeciationOrDuplicationEventsSum() + "\n"
1162 + "Speciations: " + gsdi.getSpeciationsSum() + "\n"
1163 + "Stripped gene tree nodes: "
1164 + gsdi.getStrippedExternalGeneTreeNodes().size() + "\n"
1165 + "Taxonomy linkage based on: " + gsdi.getTaxCompBase() + "\n"
1166 + "Number of polytomies in species tree used: " + poly + "\n",
1167 "GSDI successfully completed",
1168 JOptionPane.WARNING_MESSAGE );
1171 JOptionPane.showMessageDialog( this,
1172 "Duplications: " + gsdi.getDuplicationsSum() + "\n"
1173 + "Potential duplications: "
1174 + gsdi.getSpeciationOrDuplicationEventsSum() + "\n"
1175 + "Speciations: " + gsdi.getSpeciationsSum() + "\n"
1176 + "Stripped gene tree nodes: "
1177 + gsdi.getStrippedExternalGeneTreeNodes().size() + "\n"
1178 + "Taxonomy linkage based on: " + gsdi.getTaxCompBase() + "\n"
1179 + "Number of polytomies in species tree used: " + poly + "\n",
1180 "GSDI successfully completed",
1181 JOptionPane.INFORMATION_MESSAGE );
1185 void executeGSDIR() {
1186 if ( !isOKforSDI( false, false ) ) {
1189 final int p = PhylogenyMethods.countNumberOfPolytomies( _mainpanel.getCurrentPhylogeny() );
1191 && !( ( p == 1 ) && ( _mainpanel.getCurrentPhylogeny().getRoot().getNumberOfDescendants() == 3 ) ) ) {
1192 JOptionPane.showMessageDialog( this,
1193 "Gene tree is not completely binary",
1194 "Cannot execute GSDI",
1195 JOptionPane.ERROR_MESSAGE );
1198 final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy();
1199 gene_tree.setAllNodesToNotCollapse();
1200 gene_tree.recalculateNumberOfExternalDescendants( false );
1202 final Phylogeny species_tree = _species_tree.copy();
1204 gsdir = new GSDIR( gene_tree, species_tree, true, true, true );
1206 catch ( final SDIException e ) {
1207 JOptionPane.showMessageDialog( this,
1208 e.getLocalizedMessage(),
1209 "Error during GSDIR",
1210 JOptionPane.ERROR_MESSAGE );
1213 catch ( final Exception e ) {
1214 AptxUtil.unexpectedException( e );
1217 final Phylogeny result_gene_tree = gsdir.getMinDuplicationsSumGeneTree();
1218 result_gene_tree.setRerootable( false );
1219 result_gene_tree.clearHashIdToNodeMap();
1220 result_gene_tree.recalculateNumberOfExternalDescendants( true );
1221 PhylogenyMethods.orderAppearance( result_gene_tree.getRoot(), true, true, DESCENDANT_SORT_PRIORITY.NODE_NAME );
1222 _mainpanel.addPhylogenyInNewTab( result_gene_tree, getConfiguration(), "gene tree", null );
1223 getMainPanel().getControlPanel().setShowEvents( true );
1225 final int selected = _mainpanel.getTabbedPane().getSelectedIndex();
1226 _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null );
1228 _mainpanel.getTabbedPane().setSelectedIndex( selected );
1230 _mainpanel.getCurrentTreePanel().setEdited( true );
1231 final int poly = PhylogenyMethods.countNumberOfPolytomies( species_tree );
1232 if ( gsdir.getStrippedExternalGeneTreeNodes().size() > 0 ) {
1233 JOptionPane.showMessageDialog( this,
1234 "Minimal duplications: " + gsdir.getMinDuplicationsSum() + "\n"
1235 + "Speciations: " + gsdir.getSpeciationsSum() + "\n"
1236 + "Stripped gene tree nodes: "
1237 + gsdir.getStrippedExternalGeneTreeNodes().size() + "\n"
1238 + "Taxonomy linkage based on: " + gsdir.getTaxCompBase() + "\n"
1239 + "Number of polytomies in species tree used: " + poly + "\n",
1240 "GSDIR successfully completed",
1241 JOptionPane.WARNING_MESSAGE );
1244 JOptionPane.showMessageDialog( this,
1245 "Minimal duplications: " + gsdir.getMinDuplicationsSum() + "\n"
1246 + "Speciations: " + gsdir.getSpeciationsSum() + "\n"
1247 + "Stripped gene tree nodes: "
1248 + gsdir.getStrippedExternalGeneTreeNodes().size() + "\n"
1249 + "Taxonomy linkage based on: " + gsdir.getTaxCompBase() + "\n"
1250 + "Number of polytomies in species tree used: " + poly + "\n",
1251 "GSDIR successfully completed",
1252 JOptionPane.INFORMATION_MESSAGE );
1256 Configuration getConfiguration() {
1257 return _configuration;
1260 TreePanel getCurrentTreePanel() {
1261 return getMainPanel().getCurrentTreePanel();
1264 JCheckBoxMenuItem getlabelDirectionCbmi() {
1265 return _label_direction_cbmi;
1268 Options getOtions() {
1272 void initializeTypeMenu( final Options options ) {
1273 setTypeMenuToAllUnselected();
1275 switch ( options.getPhylogenyGraphicsType() ) {
1277 _convex_type_cbmi.setSelected( true );
1280 _curved_type_cbmi.setSelected( true );
1283 _euro_type_cbmi.setSelected( true );
1286 _rounded_type_cbmi.setSelected( true );
1289 _triangular_type_cbmi.setSelected( true );
1292 _unrooted_type_cbmi.setSelected( true );
1295 _circular_type_cbmi.setSelected( true );
1298 _rectangular_type_cbmi.setSelected( true );
1302 catch ( final NullPointerException np ) {
1303 // In all likelihood, this is caused by menu-less display.
1307 boolean isOKforSDI( final boolean species_tree_has_to_binary, final boolean gene_tree_has_to_binary ) {
1308 if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty() ) {
1311 else if ( ( _species_tree == null ) || _species_tree.isEmpty() ) {
1312 JOptionPane.showMessageDialog( this,
1313 "No species tree loaded",
1314 "Cannot execute GSDI",
1315 JOptionPane.ERROR_MESSAGE );
1318 else if ( species_tree_has_to_binary && !_species_tree.isCompletelyBinary() ) {
1319 JOptionPane.showMessageDialog( this,
1320 "Species tree is not completely binary",
1321 "Cannot execute GSDI",
1322 JOptionPane.ERROR_MESSAGE );
1325 else if ( gene_tree_has_to_binary && !_mainpanel.getCurrentPhylogeny().isCompletelyBinary() ) {
1326 JOptionPane.showMessageDialog( this,
1327 "Gene tree is not completely binary",
1328 "Cannot execute GSDI",
1329 JOptionPane.ERROR_MESSAGE );
1337 boolean isSubtreeDisplayed() {
1338 if ( getCurrentTreePanel() != null ) {
1339 if ( getCurrentTreePanel().isCurrentTreeIsSubtree() ) {
1341 .showMessageDialog( this,
1342 "This operation can only be performed on a complete tree, not on the currently displayed sub-tree only.",
1343 "Operation can not be exectuted on a sub-tree",
1344 JOptionPane.WARNING_MESSAGE );
1351 void removeAllTextFrames() {
1352 for( final TextFrame tf : _textframes ) {
1357 _textframes.clear();
1360 void setConfiguration( final Configuration configuration ) {
1361 _configuration = configuration;
1364 void setOptions( final Options options ) {
1368 void setSelectedTypeInTypeMenu( final PHYLOGENY_GRAPHICS_TYPE type ) {
1369 setTypeMenuToAllUnselected();
1373 _circular_type_cbmi.setSelected( true );
1376 _convex_type_cbmi.setSelected( true );
1379 _curved_type_cbmi.setSelected( true );
1382 _euro_type_cbmi.setSelected( true );
1385 _rounded_type_cbmi.setSelected( true );
1388 _rectangular_type_cbmi.setSelected( true );
1391 _triangular_type_cbmi.setSelected( true );
1394 _unrooted_type_cbmi.setSelected( true );
1397 throw new IllegalArgumentException( "unknown type: " + type );
1400 catch ( final NullPointerException np ) {
1401 // In all likelihood, this is caused by menu-less display.
1405 void setTypeMenuToAllUnselected() {
1406 if ( _convex_type_cbmi != null ) {
1407 _convex_type_cbmi.setSelected( false );
1409 if ( _curved_type_cbmi != null ) {
1410 _curved_type_cbmi.setSelected( false );
1412 if ( _euro_type_cbmi != null ) {
1413 _euro_type_cbmi.setSelected( false );
1415 if ( _rounded_type_cbmi != null ) {
1416 _rounded_type_cbmi.setSelected( false );
1418 if ( _triangular_type_cbmi != null ) {
1419 _triangular_type_cbmi.setSelected( false );
1421 if ( _rectangular_type_cbmi != null ) {
1422 _rectangular_type_cbmi.setSelected( false );
1424 if ( _unrooted_type_cbmi != null ) {
1425 _unrooted_type_cbmi.setSelected( false );
1427 if ( _circular_type_cbmi != null ) {
1428 _circular_type_cbmi.setSelected( false );
1433 _mainpanel.getControlPanel().showWhole();
1436 void switchColors() {
1437 final TreeColorSet colorset = getMainPanel().getCurrentTreePanel().getTreeColorSet();
1438 final ColorSchemeChooser csc = new ColorSchemeChooser( getMainPanel(), colorset );
1439 csc.setVisible( true );
1440 getMainPanel().setTreeColorSet( colorset );
1443 void typeChanged( final Object o ) {
1444 updateTypeCheckboxes( getOptions(), o );
1445 updateOptions( getOptions() );
1446 if ( getCurrentTreePanel() != null ) {
1447 final PHYLOGENY_GRAPHICS_TYPE previous_type = getCurrentTreePanel().getPhylogenyGraphicsType();
1448 final PHYLOGENY_GRAPHICS_TYPE new_type = getOptions().getPhylogenyGraphicsType();
1449 if ( ( ( previous_type == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) && ( new_type != PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) )
1450 || ( ( previous_type == PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) && ( new_type != PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) )
1451 || ( ( previous_type != PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) && ( new_type == PHYLOGENY_GRAPHICS_TYPE.UNROOTED ) )
1452 || ( ( previous_type != PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) && ( new_type == PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) ) ) {
1453 getCurrentTreePanel().getControlPanel().showWhole();
1455 if ( getCurrentTreePanel().isPhyHasBranchLengths() && ( new_type != PHYLOGENY_GRAPHICS_TYPE.CIRCULAR ) ) {
1456 getCurrentTreePanel().getControlPanel().setDrawPhylogramEnabled( true );
1459 getCurrentTreePanel().getControlPanel().setDrawPhylogramEnabled( false );
1461 getCurrentTreePanel().setPhylogenyGraphicsType( getOptions().getPhylogenyGraphicsType() );
1462 MainFrame.updateScreenTextAntialias( getMainPanel().getTreePanels() );
1466 void updateOptions( final Options options ) {
1467 options.setAntialiasScreen( ( _screen_antialias_cbmi != null ) && _screen_antialias_cbmi.isSelected() );
1468 options.setBackgroundColorGradient( ( _background_gradient_cbmi != null )
1469 && _background_gradient_cbmi.isSelected() );
1470 options.setShowDomainLabels( ( _show_domain_labels != null ) && _show_domain_labels.isSelected() );
1471 options.setShowAnnotationRefSource( ( _show_annotation_ref_source != null )
1472 && _show_annotation_ref_source.isSelected() );
1473 options.setAbbreviateScientificTaxonNames( ( _abbreviate_scientific_names != null )
1474 && _abbreviate_scientific_names.isSelected() );
1475 options.setColorLabelsSameAsParentBranch( ( _color_labels_same_as_parent_branch != null )
1476 && _color_labels_same_as_parent_branch.isSelected() );
1477 options.setShowDefaultNodeShapesInternal( ( _show_default_node_shapes_internal_cbmi != null )
1478 && _show_default_node_shapes_internal_cbmi.isSelected() );
1479 options.setShowDefaultNodeShapesExternal( ( _show_default_node_shapes_external_cbmi != null )
1480 && _show_default_node_shapes_external_cbmi.isSelected() );
1481 options.setShowDefaultNodeShapesForMarkedNodes( ( _show_default_node_shapes_for_marked_cbmi != null )
1482 && _show_default_node_shapes_for_marked_cbmi.isSelected() );
1483 if ( ( _non_lined_up_cladograms_rbmi != null ) && ( _non_lined_up_cladograms_rbmi.isSelected() ) ) {
1484 options.setCladogramType( CLADOGRAM_TYPE.NON_LINED_UP );
1486 else if ( ( _uniform_cladograms_rbmi != null ) && ( _uniform_cladograms_rbmi.isSelected() ) ) {
1487 options.setCladogramType( CLADOGRAM_TYPE.TOTAL_NODE_SUM_DEP );
1489 else if ( ( _ext_node_dependent_cladogram_rbmi != null ) && ( _ext_node_dependent_cladogram_rbmi.isSelected() ) ) {
1490 options.setCladogramType( CLADOGRAM_TYPE.EXT_NODE_SUM_DEP );
1492 options.setSearchCaseSensitive( ( _search_case_senstive_cbmi != null )
1493 && _search_case_senstive_cbmi.isSelected() );
1494 if ( ( _show_scale_cbmi != null ) && _show_scale_cbmi.isEnabled() ) {
1495 options.setShowScale( _show_scale_cbmi.isSelected() );
1497 if ( _label_direction_cbmi != null ) {
1498 if ( _label_direction_cbmi.isSelected() ) {
1499 options.setNodeLabelDirection( NODE_LABEL_DIRECTION.RADIAL );
1502 options.setNodeLabelDirection( NODE_LABEL_DIRECTION.HORIZONTAL );
1505 options.setShowOverview( ( _show_overview_cbmi != null ) && _show_overview_cbmi.isSelected() );
1506 options.setShowConfidenceStddev( ( _show_confidence_stddev_cbmi != null )
1507 && _show_confidence_stddev_cbmi.isSelected() );
1508 options.setMatchWholeTermsOnly( ( _search_whole_words_only_cbmi != null )
1509 && _search_whole_words_only_cbmi.isSelected() );
1510 options.setSearchWithRegex( ( _search_with_regex_cbmi != null ) && _search_with_regex_cbmi.isSelected() );
1511 options.setInverseSearchResult( ( _inverse_search_result_cbmi != null )
1512 && _inverse_search_result_cbmi.isSelected() );
1513 if ( ( _rectangular_type_cbmi != null ) && _rectangular_type_cbmi.isSelected() ) {
1514 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR );
1516 else if ( ( _triangular_type_cbmi != null ) && _triangular_type_cbmi.isSelected() ) {
1517 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.TRIANGULAR );
1519 else if ( ( _curved_type_cbmi != null ) && _curved_type_cbmi.isSelected() ) {
1520 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.CURVED );
1522 else if ( ( _convex_type_cbmi != null ) && _convex_type_cbmi.isSelected() ) {
1523 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.CONVEX );
1525 else if ( ( _euro_type_cbmi != null ) && _euro_type_cbmi.isSelected() ) {
1526 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.EURO_STYLE );
1528 else if ( ( _rounded_type_cbmi != null ) && _rounded_type_cbmi.isSelected() ) {
1529 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.ROUNDED );
1531 else if ( ( _unrooted_type_cbmi != null ) && _unrooted_type_cbmi.isSelected() ) {
1532 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.UNROOTED );
1534 else if ( ( _circular_type_cbmi != null ) && _circular_type_cbmi.isSelected() ) {
1535 options.setPhylogenyGraphicsType( PHYLOGENY_GRAPHICS_TYPE.CIRCULAR );
1537 if ( ( _color_by_taxonomic_group_cbmi != null ) && _color_by_taxonomic_group_cbmi.isEnabled() ) {
1538 options.setColorByTaxonomicGroup( _color_by_taxonomic_group_cbmi.isSelected() );
1540 if ( ( _right_line_up_domains_cbmi != null ) && _right_line_up_domains_cbmi.isEnabled() ) {
1541 options.setRightLineUpDomains( _right_line_up_domains_cbmi.isSelected() );
1543 if ( ( _line_up_renderable_data_cbmi != null ) && _line_up_renderable_data_cbmi.isEnabled() ) {
1544 options.setLineUpRendarableNodeData( _line_up_renderable_data_cbmi.isSelected() );
1548 void updateTypeCheckboxes( final Options options, final Object o ) {
1549 setTypeMenuToAllUnselected();
1550 ( ( JCheckBoxMenuItem ) o ).setSelected( true );
1553 void viewAsNexus() {
1554 if ( ( getMainPanel().getCurrentPhylogeny() != null ) && !getMainPanel().getCurrentPhylogeny().isEmpty() ) {
1555 String title = "Nexus";
1556 if ( !ForesterUtil.isEmpty( getMainPanel().getCurrentPhylogeny().getName() ) ) {
1557 title = "\"" + getMainPanel().getCurrentPhylogeny().getName() + "\" in " + title;
1559 showTextFrame( getMainPanel().getCurrentPhylogeny().toNexus( getOptions()
1560 .getNhConversionSupportValueStyle() ),
1566 if ( ( getMainPanel().getCurrentPhylogeny() != null ) && !getMainPanel().getCurrentPhylogeny().isEmpty() ) {
1567 String title = "New Hampshire";
1568 if ( !ForesterUtil.isEmpty( getMainPanel().getCurrentPhylogeny().getName() ) ) {
1569 title = "\"" + getMainPanel().getCurrentPhylogeny().getName() + "\" in " + title;
1571 showTextFrame( getMainPanel().getCurrentPhylogeny().toNewHampshire( getOptions()
1572 .getNhConversionSupportValueStyle() ),
1578 if ( ( getMainPanel().getCurrentPhylogeny() != null ) && !getMainPanel().getCurrentPhylogeny().isEmpty() ) {
1579 String title = "phyloXML";
1580 if ( !ForesterUtil.isEmpty( getMainPanel().getCurrentPhylogeny().getName() ) ) {
1581 title = "\"" + getMainPanel().getCurrentPhylogeny().getName() + "\" in " + title;
1583 showTextFrame( getMainPanel().getCurrentPhylogeny().toPhyloXML( 0 ), title );
1587 private void chooseFont() {
1588 final FontChooser fc = new FontChooser();
1589 fc.setFont( getMainPanel().getTreeFontSet().getLargeFont() );
1590 fc.showDialog( this, "Select the Base Font" );
1591 getMainPanel().getTreeFontSet().setBaseFont( fc.getFont() );
1594 private void chooseMinimalConfidence() {
1595 final String s = ( String ) JOptionPane
1596 .showInputDialog( this,
1597 "Please the minimum for confidence values to be displayed.\n" + "[current value: "
1598 + getOptions().getMinConfidenceValue() + "]\n",
1599 "Minimal Confidence Value",
1600 JOptionPane.QUESTION_MESSAGE,
1603 getOptions().getMinConfidenceValue() );
1604 if ( !ForesterUtil.isEmpty( s ) ) {
1605 boolean success = true;
1607 final String m_str = s.trim();
1608 if ( !ForesterUtil.isEmpty( m_str ) ) {
1610 m = Double.parseDouble( m_str );
1612 catch ( final Exception ex ) {
1619 if ( success && ( m >= 0.0 ) ) {
1620 getOptions().setMinConfidenceValue( m );
1625 private void customizeRadioButtonMenuItem( final JRadioButtonMenuItem item, final boolean is_selected ) {
1626 if ( item != null ) {
1627 item.setFont( MainFrame.menu_font );
1628 if ( !getConfiguration().isUseNativeUI() ) {
1629 item.setBackground( getConfiguration().getGuiMenuBackgroundColor() );
1630 item.setForeground( getConfiguration().getGuiMenuTextColor() );
1632 item.setSelected( is_selected );
1633 item.addActionListener( this );
1637 MainPanel getMainPanel() {
1641 private Phylogeny getSpeciesTree() {
1642 return _species_tree;
1645 private boolean isScreenAntialias() {
1649 private void removeBranchColors() {
1650 if ( getMainPanel().getCurrentPhylogeny() != null ) {
1651 AptxUtil.removeBranchColors( getMainPanel().getCurrentPhylogeny() );
1655 private void removeVisualStyles() {
1656 if ( getMainPanel().getCurrentPhylogeny() != null ) {
1657 AptxUtil.removeVisualStyles( getMainPanel().getCurrentPhylogeny() );
1661 private void setMainPanel( final MainPanelApplets main_panel ) {
1662 _mainpanel = main_panel;
1665 private void setSpeciesTree( final Phylogeny species_tree ) {
1666 _species_tree = species_tree;
1669 private void setupUI() {
1671 if ( getConfiguration().isUseNativeUI() ) {
1672 UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
1675 UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() );
1678 catch ( final UnsupportedLookAndFeelException e ) {
1679 AptxUtil.dieWithSystemError( "UnsupportedLookAndFeelException: " + e.toString() );
1681 catch ( final ClassNotFoundException e ) {
1682 AptxUtil.dieWithSystemError( "ClassNotFoundException: " + e.toString() );
1684 catch ( final InstantiationException e ) {
1685 AptxUtil.dieWithSystemError( "InstantiationException: " + e.toString() );
1687 catch ( final IllegalAccessException e ) {
1688 AptxUtil.dieWithSystemError( "IllegalAccessException: " + e.toString() );
1690 catch ( final Exception e ) {
1691 AptxUtil.dieWithSystemError( e.toString() );
1695 static void setupScreenTextAntialias( final List<TreePanel> treepanels, final boolean antialias ) {
1696 for( final TreePanel tree_panel : treepanels ) {
1697 tree_panel.setTextAntialias();