package jcircus.gui;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import jcircus.JCircusController;
import jcircus.JCircusControllerFrame;
import jcircus.complementaryenvs.ProcCreateMainEnv;
import jcircus.exceptions.FailTranslationException;
import jcircus.util.ProcInfo;
/**
* ChooseMainDialog.java
*
* Dialog where the user selects the processes for which they want to
* create a main class.
*
* @author Angela Freitas
*/
public class ChooseMainDialog extends JDialog implements ActionListener {
private JCircusController/*Frame*/ _controller;
private List<ProcInfo> _procList;
private ProcCreateMainEnv pcme = new ProcCreateMainEnv ();
// Interface components
private JCheckBox [] checkBoxes;
private JButton btnOk;
private JButton btnCancel;
private void constructProcCreateMainFromProcList (ProcCreateMainEnv pcme, List <ProcInfo> procInfoList) {
int size = procInfoList.size();
for (int i = 0; i < size; i++) {
ProcInfo procInfo = procInfoList.get(i);
String procName = procInfo.getProcessName();
pcme.update (procName, procInfo.getCreateMain());
}
}
/*private List <ProcInfo> constructProcListFromProcCreateMain (ProcCreateMainEnv pcme) {
List <ProcInfo> list = new ArrayList <ProcInfo> ();
String [] keys = pcme.keys();
for (int i = 0; i < keys.length; i++) {
list.add(new ProcInfo());
}
}*/
/**
* Constructor
*/
public ChooseMainDialog(JCircusFrame jCircusFrame,
JCircusController/*Frame*/ controller, ProcCreateMainEnv pcme) {
this (jCircusFrame, controller, new ArrayList <ProcInfo> (), pcme);
}
public ChooseMainDialog(JCircusFrame jCircusFrame,
JCircusController/*Frame*/ controller, List<ProcInfo> procList, ProcCreateMainEnv pcme) {
super(jCircusFrame, "Choose main processes", true);
this._controller = controller;
this._procList = procList;
// User can not close by clicking on "X"
this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
//Create and set up the content pane.
JComponent contentPane = new JPanel();
contentPane.setOpaque(true); //content panes must be opaque
contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.setContentPane(contentPane);
this.getContentPane().setLayout(
new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
String [] text = new String[] {
"Mark the processes for which you",
"want a class Main to be created:"
};
checkBoxes = new JCheckBox[procList.size()];
int i;
for (i = 0; i < text.length; i++) {
this.getContentPane().add(new JLabel(text[i]));
}
for (i = 0; i < checkBoxes.length; i++) {
checkBoxes[i] = new JCheckBox(procList.get(i).getProcessName());
//_procList.get(i).setCreateMain(true); //Sam's
this.getContentPane().add(checkBoxes[i]);
}
JPanel pnlButtons = new JPanel();
//pnlButtons.setLayout(new GridLayout(0, 2));
btnOk = new JButton("OK");
btnOk.setSize(20, 10);
btnOk.addActionListener(this);
pnlButtons.add(btnOk);
btnCancel = new JButton("Cancel");
btnCancel.setSize(20, 10);
btnCancel.addActionListener(this);
pnlButtons.add(btnCancel);
this.getContentPane().add(pnlButtons);
constructProcCreateMainFromProcList (pcme, procList);
}
/**
* This is invoked when a button is pressed.
*/
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnOk) {
btnOkPressed();
} else if (e.getSource() == btnCancel) {
btnCancelPressed();
}
}
/**
* This is invoked when button OK is pressed.
*/
private void btnOkPressed() {
int n = 0;
for (int i = 0; i < checkBoxes.length; i++) {
if (checkBoxes[i].isSelected()) {
_procList.get(i).setCreateMain(true);
pcme.update(_procList.get(i).getProcessName(), true);
n++;
} else {
_procList.get(i).setCreateMain(false);
pcme.update(_procList.get(i).getProcessName(), false);
}
}
if (n == 0) {
JOptionPane.showMessageDialog(this, "No class Main will be created.");
}
((JCircusFrame) this.getOwner()).setCanceled(false);
this.setVisible(false);
this.dispose();
}
/**
* This is invoked when button Cancel is pressed.
*/
private void btnCancelPressed() {
((JCircusFrame) this.getOwner()).setCanceled(true);
this.setVisible(false);
this.dispose();
}
}