/* * SimulationPanel.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.bss; import dr.app.gui.components.WholeNumberField; import dr.evolution.alignment.SimpleAlignment; import jam.framework.Exportable; import jam.panels.OptionsPanel; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** * @author Filip Bielejec * @version $Id$ */ @SuppressWarnings({ "rawtypes", "serial" }) public class SimulationPanel extends JPanel implements Exportable { private MainFrame frame; private PartitionDataList dataList; private OptionsPanel optionPanel; private WholeNumberField simulationsNumberField; private WholeNumberField startingSeedNumberField; // Buttons private JButton simulate; private JButton generateXML; // Check boxes private JCheckBox setSeed; private JCheckBox useParallel; private JCheckBox outputAncestralSequences; //Combo boxes private JComboBox outputFormat; private ComboBoxModel outputFormatModel; @SuppressWarnings({ "unchecked" }) public SimulationPanel(final MainFrame frame, final PartitionDataList dataList) { this.frame = frame; this.dataList = dataList; optionPanel = new OptionsPanel(12, 12, SwingConstants.CENTER); simulationsNumberField = new WholeNumberField(1, Integer.MAX_VALUE); simulationsNumberField.setColumns(10); simulationsNumberField.setValue(dataList.simulationsCount); optionPanel.addComponentWithLabel("Number of simulations:", simulationsNumberField); setSeed = new JCheckBox(); setSeed.addItemListener(new SetSeedCheckBoxListener()); setSeed.setSelected(dataList.setSeed); optionPanel.addComponentWithLabel("Set seed:", setSeed); startingSeedNumberField = new WholeNumberField(1, Long.MAX_VALUE); startingSeedNumberField.setColumns(10); startingSeedNumberField.setValue(dataList.startingSeed); startingSeedNumberField.setEnabled(dataList.setSeed); optionPanel.addComponentWithLabel("Starting seed:", startingSeedNumberField); outputFormat = new JComboBox(); optionPanel.addComponentWithLabel("Output format:", outputFormat); outputFormatModel = new DefaultComboBoxModel(SimpleAlignment.OutputType.values()); outputFormat.setModel(outputFormatModel); outputAncestralSequences = new JCheckBox(); outputAncestralSequences.addItemListener(new outputAncestralSequencesCheckBoxListener()); outputAncestralSequences.setSelected(dataList.useParallel); optionPanel.addComponentWithLabel("Output ancestral sequences:", outputAncestralSequences); useParallel = new JCheckBox(); useParallel.addItemListener(new UseParallelCheckBoxListener()); useParallel.setSelected(dataList.useParallel); optionPanel.addComponentWithLabel("Use parallel implementation:", useParallel); // Buttons holder JPanel buttonsHolder = new JPanel(); buttonsHolder.setOpaque(false); // simulate button simulate = new JButton("Simulate", Utils.createImageIcon(Utils.BIOHAZARD_ICON)); simulate.addActionListener(new ListenSimulate()); buttonsHolder.add(simulate); generateXML = new JButton("Generate XML", Utils.createImageIcon(Utils.HAMMER_ICON)); generateXML.addActionListener(new ListenGenerateXML()); buttonsHolder.add(generateXML); setOpaque(false); setLayout(new BorderLayout()); add(optionPanel, BorderLayout.NORTH); add(buttonsHolder, BorderLayout.SOUTH); }// END: SimulationPanel public final void collectSettings() { dataList.simulationsCount = simulationsNumberField.getValue(); if (dataList.setSeed) { dataList.startingSeed = startingSeedNumberField.getValue(); } dataList.outputFormat = SimpleAlignment.OutputType.parseFromString( outputFormat.getSelectedItem().toString()); }// END: collectSettings private class SetSeedCheckBoxListener implements ItemListener { public void itemStateChanged(ItemEvent e) { if (setSeed.isSelected()) { startingSeedNumberField.setEnabled(true); dataList.setSeed = true; } else { startingSeedNumberField.setEnabled(false); dataList.setSeed = false; } } }// END: CheckBoxListener private class UseParallelCheckBoxListener implements ItemListener { public void itemStateChanged(ItemEvent e) { if (useParallel.isSelected()) { dataList.useParallel = true; } else { dataList.useParallel = false; } } }// END: CheckBoxListener private class outputAncestralSequencesCheckBoxListener implements ItemListener { public void itemStateChanged(ItemEvent e) { if (outputAncestralSequences.isSelected()) { dataList.outputAncestralSequences = true; } else { dataList.outputAncestralSequences = false; } } }// END: CheckBoxListener private class ListenSimulate implements ActionListener { public void actionPerformed(ActionEvent ev) { frame.doExport(); }// END: actionPerformed }// END: ListenSimulate private class ListenGenerateXML implements ActionListener { public void actionPerformed(ActionEvent ev) { frame.doGenerateXML(); }// END: actionPerformed }// END: ListenSaveLocationCoordinates public void setBusy() { simulate.setEnabled(false); generateXML.setEnabled(false); }// END: setBusy public void setIdle() { simulate.setEnabled(true); generateXML.setEnabled(true); }// END: setIdle public JComponent getExportableComponent() { return this; }// END: getExportableComponent public void updateSimulationPanel(PartitionDataList dataList) { setDataList(dataList); // TODO: DOES NOT WORK outputFormatModel.setSelectedItem(dataList.outputFormat); outputFormat.setSelectedItem(dataList.outputFormat); }//END: updateSimulationPanel public void setDataList(PartitionDataList dataList) { this.dataList = dataList; }// END: setDataList }// END: class