package org.f2o.absurdum.puck.gui.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.f2o.absurdum.puck.gui.PuckFrame;
import org.f2o.absurdum.puck.gui.config.PuckConfiguration;
import org.f2o.absurdum.puck.i18n.UIMessages;
import eu.irreality.age.FiltroFicheroLog;
import eu.irreality.age.Utility;
import eu.irreality.age.filemanagement.Paths;
import eu.irreality.age.server.ServerHandler;
import eu.irreality.age.windowing.DialogUtils;
public class ExecuteDialog extends JDialog
{
private JRadioButton mdiButton = new JRadioButton(UIMessages.getInstance().getMessage("exec.mdi"));
private JRadioButton sdiButton = new JRadioButton(UIMessages.getInstance().getMessage("exec.sdi"));
private JCheckBox logCheckBox = new JCheckBox(UIMessages.getInstance().getMessage("exec.uselog"));
private JTextField logTextField = new JTextField(20);
private JButton logBrowseButton = new JButton(UIMessages.getInstance().getMessage("exec.browse"));
private JButton okButton = new JButton(UIMessages.getInstance().getMessage("exec.ok"));
private JButton cancelButton = new JButton(UIMessages.getInstance().getMessage("exec.cancel"));
private PuckFrame frame;
public ExecuteDialog ( PuckFrame pf )
{
super(pf);
this.frame = pf;
this.setModal(true);
this.setResizable(false);
setTitle(UIMessages.getInstance().getMessage("exec.dialogtitle"));
//lay out the components
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
ButtonGroup bg = new ButtonGroup();
bg.add(mdiButton);
bg.add(sdiButton);
if ( PuckConfiguration.getInstance().getProperty("runInSDI").equals("true") )
sdiButton.setSelected(true);
else
mdiButton.setSelected(true);
getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.PAGE_AXIS));
getContentPane().add(new JLabel(UIMessages.getInstance().getMessage("exec.interface")));
getContentPane().add(mdiButton);
getContentPane().add(sdiButton);
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
logCheckBox.setSelected(false);
JPanel logPanel = new JPanel();
//logPanel.setLayout(new BoxLayout(logPanel,BoxLayout.LINE_AXIS));
//logPanel.add(Box.createRigidArea(new Dimension(10, 0)));
//logPanel.add(logCheckBox);
//logPanel.add(Box.createRigidArea(new Dimension(10, 0)));
//JPanel tfPanel = new JPanel(new FlowLayout());
//tfPanel.add(logTextField);
//logPanel.add(tfPanel);
//logPanel.add(logTextField);
//logPanel.add(Box.createRigidArea(new Dimension(10, 0)));
//logPanel.add(logBrowseButton);
//logPanel.add(Box.createRigidArea(new Dimension(10, 0)));
logPanel.setLayout(new BorderLayout());
JPanel paddedCheckBox = new JPanel();
paddedCheckBox.setLayout(new BoxLayout(paddedCheckBox,BoxLayout.LINE_AXIS));
paddedCheckBox.add(Box.createHorizontalStrut(10));
paddedCheckBox.add(logCheckBox);
paddedCheckBox.add(Box.createHorizontalStrut(10));
logPanel.add(paddedCheckBox,BorderLayout.WEST);
logPanel.add(logTextField,BorderLayout.CENTER);
JPanel paddedButton = new JPanel();
paddedButton.setLayout(new BoxLayout(paddedButton,BoxLayout.LINE_AXIS));
paddedButton.add(Box.createHorizontalStrut(10));
paddedButton.add(logBrowseButton);
paddedButton.add(Box.createHorizontalStrut(10));
logPanel.add(paddedButton,BorderLayout.EAST);
logTextField.setEnabled(logCheckBox.isSelected());
logBrowseButton.setEnabled(logCheckBox.isSelected());
getContentPane().add(logPanel);
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
getContentPane().add(new JSeparator());
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
JLabel lConfirm = new JLabel(UIMessages.getInstance().getMessage("exec.wanttosave"));
//lConfirm.setAlignmentX(JComponent.LEFT_ALIGNMENT);
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
getContentPane().add(lConfirm);
getContentPane().add(Box.createHorizontalGlue());
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new BoxLayout(buttonsPanel,BoxLayout.LINE_AXIS));
buttonsPanel.add(Box.createHorizontalGlue());
buttonsPanel.add(okButton);
buttonsPanel.add(Box.createRigidArea(new Dimension(10, 0)));
buttonsPanel.add(cancelButton);
buttonsPanel.add(Box.createRigidArea(new Dimension(10, 0)));
getContentPane().add(buttonsPanel);
getContentPane().add(Box.createRigidArea(new Dimension(0,10)));
pack();
this.setLocationRelativeTo(null);
//add the listeners
sdiButton.addItemListener ( new ItemListener()
{
public void itemStateChanged(ItemEvent arg0)
{
String boolString = sdiButton.isSelected() ? "true" : "false";
PuckConfiguration.getInstance().setProperty("runInSDI",boolString);
}
}
);
cancelButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
}
}
);
DialogUtils.registerEscapeAction(this);
okButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
boolean saved = frame.saveOrSaveAs();
if ( !saved ) { dispose(); return; }
String logFile = null;
if ( logCheckBox.isSelected() && logTextField.getText() != null && logTextField.getText().length() > 0 ) logFile = logTextField.getText();
boolean mdiOption = mdiButton.isSelected();
frame.runCurrentFileInAge(mdiOption,logFile);
dispose();
}
}
);
logBrowseButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
final JFileChooser selector = new JFileChooser( Paths.SAVE_PATH );
selector.setFileSelectionMode(JFileChooser.FILES_ONLY);
selector.setDialogTitle("Selecciona el fichero de log");
selector.setFileFilter ( new FiltroFicheroLog() );
int returnVal = selector.showOpenDialog(ExecuteDialog.this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
logTextField.setText(selector.getSelectedFile().getAbsolutePath());
}
}
}
);
logCheckBox.addChangeListener( new ChangeListener()
{
public void stateChanged(ChangeEvent arg0)
{
logTextField.setEnabled(logCheckBox.isSelected());
logBrowseButton.setEnabled(logCheckBox.isSelected());
}
}
);
this.getRootPane().setDefaultButton(okButton);
}
public void setVisible ( boolean visible )
{
super.setVisible(visible);
if ( visible == true ) this.getRootPane().setDefaultButton(okButton);
}
}