package org.openpixi.pixi.ui.tab; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.openpixi.pixi.physics.Settings; import org.openpixi.pixi.ui.SimulationAnimation; import org.openpixi.pixi.ui.util.FileIO; import org.openpixi.pixi.ui.util.yaml.YamlParser; public class FileTab extends Box { private Component parent; private SimulationAnimation simulationAnimation; private JFileChooser fc; private JButton openButton; private JButton saveButton; private JButton applyButton; private JTextArea fileTextArea; public FileTab(Component parent, SimulationAnimation simulationAnimation) { super(BoxLayout.PAGE_AXIS); this.parent = parent; this.simulationAnimation = simulationAnimation; fc = new JFileChooser(); File workingDirectory = new File(System.getProperty("user.dir")); File inputDirectory = new File(workingDirectory, "input"); if (inputDirectory.exists()) { fc.setCurrentDirectory(inputDirectory); } else { fc.setCurrentDirectory(workingDirectory); } openButton = new JButton("Open..."); openButton.addActionListener(new OpenButtonListener()); saveButton = new JButton("Save..."); saveButton.addActionListener(new SaveButtonListener()); applyButton = new JButton("Apply"); applyButton.addActionListener(new ApplyButtonListener()); fileTextArea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(fileTextArea); Box buttonBox = Box.createHorizontalBox(); buttonBox.add(openButton); buttonBox.add(saveButton); buttonBox.add(applyButton); this.add(buttonBox); this.add(scrollpane); } class OpenButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { int returnVal = fc.showOpenDialog(parent); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); try { String content = FileIO.readFile(file); fileTextArea.setText(content); applyTextAreaSettings(); } catch (IOException e) { // TODO Error message } } else { // Open command cancelled by user } } } class SaveButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { int returnVal = fc.showSaveDialog(parent); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); if (file.exists()) { // Show confirmation dialog int response = JOptionPane.showConfirmDialog( parent, "Are you sure you want to override existing file?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (response == JOptionPane.YES_OPTION) { // Ok, proceed } else if (response == JOptionPane.NO_OPTION) { return; } else if (response == JOptionPane.CLOSED_OPTION) { return; } } String string = fileTextArea.getText(); try { FileIO.writeFile(file, string); } catch (IOException e) { // TODO Error message } } else { // Save command cancelled by user } } } class ApplyButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { applyTextAreaSettings(); } } /** * Apply the settings from the text area and restart the simulation. */ private void applyTextAreaSettings() { String string = fileTextArea.getText(); Settings settings = new Settings(); YamlParser parser = new YamlParser(settings); parser.parseString(string); simulationAnimation.resetAnimation(settings); } }