/* * CreateTraitDialog.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * 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 dr.app.beauti.traitspanel; import dr.app.beauti.BeautiFrame; import dr.app.beauti.options.STARBEASTOptions; import dr.app.beauti.options.TraitData; import dr.app.beauti.util.TextUtil; import jam.panels.OptionsPanel; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** * @author Andrew Rambaut * @author Walter Xie * @version $Id: PriorDialog.java,v 1.4 2006/09/05 13:29:34 rambaut Exp $ */ public class CreateTraitDialog { private final BeautiFrame frame; private JTextField nameField; private JComboBox typeCombo; private final JRadioButton createRadio = new JRadioButton("Create a new trait", true); private final JRadioButton importRadio = new JRadioButton("Import trait(s) from a mapping file", false); private final JButton exampleButton = new JButton("Show example of mapping file format"); private final JCheckBox createTraitPartitionCheck = new JCheckBox("Create a corresponding data partition", true); private String message = null; private boolean isSpeciesTrait = false; public static final int OK_IMPORT = 10; OptionsPanel optionPanel; public CreateTraitDialog(final BeautiFrame frame) { this.frame = frame; nameField = new JTextField("untitled_trait"); nameField.setColumns(20); // nameCombo = new JComboBox(TraitData.Traits.values()); typeCombo = new JComboBox(TraitData.TraitType.values()); optionPanel = new OptionsPanel(12, 12); ButtonGroup group = new ButtonGroup(); group.add(createRadio); group.add(importRadio); ItemListener listener = new ItemListener() { public void itemStateChanged(ItemEvent e) { nameField.setEnabled(createRadio.isSelected()); typeCombo.setEnabled(createRadio.isSelected()); exampleButton.setEnabled(importRadio.isSelected()); } }; createRadio.addItemListener(listener); importRadio.addItemListener(listener); exampleButton.setEnabled(false); exampleButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JScrollPane scrollPane = TextUtil.createHTMLScrollPane(STARBEASTOptions.EXAMPLE_FORMAT, new Dimension(400,300)); JOptionPane.showMessageDialog(frame, scrollPane, "Example of mapping file format", JOptionPane.PLAIN_MESSAGE); } }); } public void setTraitName(String traitName) { nameField.setText(traitName); } public void setMessage(String message) { this.message = message; } public void setSpeciesTrait(final boolean isSpeciesTrait) { this.isSpeciesTrait = isSpeciesTrait; } public int showDialog() { setupPanel(); JOptionPane optionPane = new JOptionPane(optionPanel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, null, null); optionPane.setBorder(new EmptyBorder(12, 12, 12, 12)); boolean done; int result = JOptionPane.CANCEL_OPTION; do { final JDialog dialog = optionPane.createDialog(frame, "Create or Import Trait(s)"); dialog.pack(); dialog.setVisible(true); Integer value = (Integer) optionPane.getValue(); if (value != null && value != -1) { result = value; } done = true; if (result == JOptionPane.OK_OPTION && createRadio.isSelected()) { done = frame.validateTraitName(getName()); } } while (!done); if (importRadio.isSelected() && result == JOptionPane.OK_OPTION) result = OK_IMPORT; return result; } private void setupPanel() { optionPanel.removeAll(); if (message != null && !message.isEmpty()) { optionPanel.addSpanningComponent(new JLabel(message)); } optionPanel.addComponent(createRadio); JLabel label = optionPanel.addComponentWithLabel("Name:", nameField); if (isSpeciesTrait) { label.setEnabled(false); nameField.setEnabled(false); } optionPanel.addComponent(importRadio); optionPanel.addComponent(exampleButton); exampleButton.putClientProperty("Quaqua.Button.style", "help"); if (!isSpeciesTrait) { optionPanel.addComponentWithLabel("Type:", typeCombo); optionPanel.addComponent(createTraitPartitionCheck); } // if create "species" partition for *BEAST, then everything goes wrong createTraitPartitionCheck.setSelected(!isSpeciesTrait); } public String getName() { return nameField.getText(); // return nameCombo.getSelectedItem().toString(); } public TraitData.TraitType getType() { return (TraitData.TraitType) typeCombo.getSelectedItem(); } public boolean createTraitPartition() { return createTraitPartitionCheck.isSelected(); } }