package com.james.uicomparerunner.ui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.james.uicomparerunner.res.R;
import com.james.uicomparerunner.ui.dialog.DialogBuilder;
import com.james.uicomparerunner.ui.uiinterface.OnWindowCloseListener;
public class ScriptConcatenateFrame extends JFrame implements ActionListener {
private JFrame parentFrame;
private Box scriptBox;
private JButton addButton;
private JButton removeButton;
private JButton clearButton;
private JButton runButton;
private ArrayList<String> scripts = new ArrayList<String>();
private OnWindowCloseListener mOnWindowCloseListener;
public ScriptConcatenateFrame(JFrame parentFrame, String defaultScriptFile, final OnWindowCloseListener onWindowCloseListener) {
super();
this.parentFrame = parentFrame;
this.mOnWindowCloseListener = onWindowCloseListener;
setLayout(new BorderLayout());
setLocation(parentFrame.getX() + parentFrame.getWidth() / 10, parentFrame.getY() + parentFrame.getHeight() / 10);
setSize(parentFrame.getWidth() * 8 / 10, parentFrame.getHeight() * 8 / 10);
//Lay out the text controls and the labels.
JPanel resultPane = new JPanel();
BorderLayout borderLayout = new BorderLayout();
resultPane.setLayout(borderLayout);
resultPane.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Scripts List"),
BorderFactory.createEmptyBorder(5, 5, 5, 5)));
scriptBox = Box.createVerticalBox();
resultPane.add(scriptBox, BorderLayout.NORTH);
//
Box buttonBox = Box.createHorizontalBox();
addButton = new JButton(R.string.button_add_script);
addButton.addActionListener(this);
removeButton = new JButton(R.string.button_remove_last_script);
removeButton.addActionListener(this);
clearButton = new JButton(R.string.button_clear_script);
clearButton.addActionListener(this);
runButton = new JButton(R.string.button_run_script);
runButton.addActionListener(this);
buttonBox.add(addButton);
buttonBox.add(removeButton);
buttonBox.add(clearButton);
buttonBox.add(runButton);
//Put everything together.
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.add(resultPane, BorderLayout.CENTER);
contentPane.add(buttonBox, BorderLayout.NORTH);
add(contentPane);
setVisible(true);
if (defaultScriptFile != null) {
addScript(defaultScriptFile);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(addButton)) {
String scriptFile = DialogBuilder.showFindScriptFileDialog(this);
addScript(scriptFile);
}
else if (e.getSource().equals(removeButton)) {
if (scripts.size() > 0) {
scripts.remove(scripts.size() - 1);
scriptBox.remove(scriptBox.getComponentCount() - 1);
}
scriptBox.repaint();
scriptBox.invalidate();
}
else if (e.getSource().equals(clearButton)) {
scripts.clear();
scriptBox.removeAll();
scriptBox.repaint();
scriptBox.invalidate();
}
else if (e.getSource().equals(runButton)) {
dispose();
mOnWindowCloseListener.onWindowClosing(scripts.toArray(new String[scripts.size()]));
}
}
private void addScript(String scriptFile) {
scripts.add(scriptFile);
JLabel label = new JLabel(new File(scriptFile).getName());
scriptBox.add(label);
setSize(parentFrame.getWidth() * 8 / 10 + 1, parentFrame.getHeight() * 8 / 10 + 1);
setSize(parentFrame.getWidth() * 8 / 10, parentFrame.getHeight() * 8 / 10);
}
}