/* * TreeAnnotatorDialog.java * * Copyright (C) 2002-2006 Alexei Drummond and Andrew Rambaut * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST 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 version 2 * of the License, or (at your option) any later version. * * BEAST is distributed in the hope that it will be useful, * 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 BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package beast.app.treeannotator; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FileDialog; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import beast.app.util.WholeNumberField; import jam.panels.OptionsPanel; public class TreeAnnotatorDialog { private JFrame frame; private OptionsPanel optionPanel; private WholeNumberField burninText = new WholeNumberField(0, Integer.MAX_VALUE); private RealNumberField limitText = new RealNumberField(0.0, 1.0); private JComboBox<TreeAnnotator.Target> summaryTreeCombo = new JComboBox<>(TreeAnnotator.Target.values()); private JComboBox<TreeAnnotator.HeightsSummary> nodeHeightsCombo = new JComboBox<>(TreeAnnotator.HeightsSummary.values()); private JCheckBox lowMemCheckbox = new JCheckBox(); private File targetFile = null; private File inputFile = null; private File outputFile = null; public TreeAnnotatorDialog(final JFrame frame) { this.frame = frame; optionPanel = new OptionsPanel(12, 12); this.frame = frame; JPanel panel = new JPanel(new BorderLayout()); panel.setOpaque(false); burninText.setColumns(12); burninText.setValue(0); optionPanel.addComponentWithLabel("Burnin percentage: ", burninText); limitText.setColumns(12); limitText.setValue(0.0); optionPanel.addComponentWithLabel("Posterior probability limit: ", limitText); optionPanel.addComponentWithLabel("Target tree type: ", summaryTreeCombo); optionPanel.addComponentWithLabel("Node heights: ", nodeHeightsCombo); optionPanel.addSeparator(); final JButton targetFileButton = new JButton("Choose File..."); final JTextField targetFileNameText = new JTextField("not selected", 16); targetFileButton.addActionListener(ae -> { FileDialog dialog = new FileDialog(frame, "Select target file...", FileDialog.LOAD); dialog.setVisible(true); if (dialog.getFile() == null) { // the dialog was cancelled... return; } targetFile = new File(dialog.getDirectory(), dialog.getFile()); targetFileNameText.setText(targetFile.getName()); }); targetFileNameText.setEditable(false); JPanel panel1 = new JPanel(new BorderLayout(0,0)); panel1.add(targetFileNameText, BorderLayout.CENTER); panel1.add(targetFileButton, BorderLayout.EAST); final JLabel label1 = optionPanel.addComponentWithLabel("Target Tree File: ", panel1); JButton inputFileButton = new JButton("Choose File..."); final JTextField inputFileNameText = new JTextField("not selected", 16); inputFileButton.addActionListener(ae -> { FileDialog dialog = new FileDialog(frame, "Select input tree file...", FileDialog.LOAD); dialog.setVisible(true); if (dialog.getFile() == null) { // the dialog was cancelled... return; } inputFile = new File(dialog.getDirectory(), dialog.getFile()); inputFileNameText.setText(inputFile.getName()); }); inputFileNameText.setEditable(false); label1.setEnabled(false); targetFileNameText.setEnabled(false); targetFileButton.setEnabled(false); summaryTreeCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent itemEvent) { boolean selected = summaryTreeCombo.getSelectedItem().toString().equals("User target tree"); label1.setEnabled(selected); targetFileNameText.setEnabled(selected); targetFileButton.setEnabled(selected); } }); JPanel panel2 = new JPanel(new BorderLayout(0,0)); panel2.add(inputFileNameText, BorderLayout.CENTER); panel2.add(inputFileButton, BorderLayout.EAST); Color focusColor = UIManager.getColor("Focus.color"); Border focusBorder = BorderFactory.createMatteBorder( 2, 2, 2, 2, focusColor ); new FileDrop( null, inputFileNameText, focusBorder, new FileDrop.Listener() { @Override public void filesDropped( java.io.File[] files ) { inputFile = files[0]; inputFileNameText.setText(inputFile.getName()); } // end filesDropped }); // end FileDrop.Listener optionPanel.addComponentWithLabel("Input Tree File: ", panel2); JButton outputFileButton = new JButton("Choose File..."); final JTextField outputFileNameText = new JTextField("not selected", 16); outputFileButton.addActionListener(ae -> { FileDialog dialog = new FileDialog(frame, "Select output file...", FileDialog.SAVE); dialog.setVisible(true); if (dialog.getFile() == null) { // the dialog was cancelled... return; } outputFile = new File(dialog.getDirectory(), dialog.getFile()); outputFileNameText.setText(outputFile.getName()); }); outputFileNameText.setEditable(false); JPanel panel3 = new JPanel(new BorderLayout(0,0)); panel3.add(outputFileNameText, BorderLayout.CENTER); panel3.add(outputFileButton, BorderLayout.EAST); optionPanel.addComponentWithLabel("Output File: ", panel3); optionPanel.addComponentWithLabel("Low memory: ", lowMemCheckbox); } public boolean showDialog(String title) { JOptionPane optionPane = new JOptionPane(optionPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, new String[] { "Run", "Quit" }, null); optionPane.setBorder(new EmptyBorder(12, 12, 12, 12)); final JDialog dialog = optionPane.createDialog(frame, title); //dialog.setResizable(true); dialog.pack(); dialog.setVisible(true); return optionPane.getValue().equals("Run"); } public int getBurninPercentage() { return burninText.getValue(); } public double getPosteriorLimit() { return limitText.getValue(); } public TreeAnnotator.Target getTargetOption() { return (TreeAnnotator.Target)summaryTreeCombo.getSelectedItem(); } public TreeAnnotator.HeightsSummary getHeightsOption() { return (TreeAnnotator.HeightsSummary)nodeHeightsCombo.getSelectedItem(); } public String getTargetFileName() { if (targetFile == null) return null; return targetFile.getPath(); } public String getInputFileName() { if (inputFile == null) return null; return inputFile.getPath(); } public String getOutputFileName() { if (outputFile == null) return null; return outputFile.getPath(); } public boolean useLowMem() { return lowMemCheckbox.isSelected(); } }