package thaw.plugins.miniFrost;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import java.util.Iterator;
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.plugins.miniFrost.interfaces.Board;
import thaw.plugins.miniFrost.interfaces.BoardFactory;
public class BoardSelecter implements ActionListener {
private static int DIALOG_SIZE_X = 200;
private static int DIALOG_SIZE_Y = 500;
private MiniFrostPanel mainPanel;
private Object parentWindow;
protected BoardSelecter() {
}
/**
* @param parentWindow must be a java.awt.Dialog or a java.awt.Frame
*/
protected BoardSelecter(MiniFrostPanel mainPanel,
Object parentWindow) {
this.mainPanel = mainPanel;
this.parentWindow = parentWindow;
}
private JButton okButton;
private JButton cancelButton;
private boolean cancelled;
protected Vector askBoardList() {
Vector boards = new Vector();
Vector checkBoxes = new Vector();
JDialog dialog;
if (parentWindow instanceof java.awt.Frame)
dialog = new JDialog((java.awt.Frame)parentWindow,
I18n.getMessage("thaw.plugin.miniFrost.boards"));
else if (parentWindow instanceof java.awt.Dialog)
dialog = new JDialog((java.awt.Dialog)parentWindow,
I18n.getMessage("thaw.plugin.miniFrost.boards"));
else {
Logger.error(this, "Unknow type for the parameter 'parentWindow' : "+parentWindow.getClass().getName());
return null;
}
dialog.getContentPane().setLayout(new BorderLayout());
/* boards */
BoardFactory[] factories = mainPanel.getPluginCore().getFactories();
for (int i = 0 ; i < factories.length ; i++) {
/* ignore special boards */
if (factories[i] instanceof SpecialBoardFactory)
continue;
Vector v = factories[i].getBoards();
if (v != null) {
boards.addAll(v);
}
}
java.util.Collections.sort(boards);
/* checkbox */
JPanel checkBoxPanel = new JPanel(new GridLayout(boards.size(), 1));
for (Iterator it = boards.iterator();
it.hasNext();) {
JCheckBox box = new JCheckBox(((Board)it.next()).toString(), false);
checkBoxes.add(box);
checkBoxPanel.add(box);
}
dialog.getContentPane().add(new JScrollPane(checkBoxPanel), BorderLayout.CENTER);
/* buttons */
JPanel buttonPanel = new JPanel(new GridLayout(1, 2));
okButton = new JButton(I18n.getMessage("thaw.common.ok"));
cancelButton = new JButton(I18n.getMessage("thaw.common.cancel"));
okButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
dialog.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
dialog.setSize(DIALOG_SIZE_X,
DIALOG_SIZE_Y);
dialog.setVisible(true);
try {
synchronized(this) {
this.wait();
}
} catch(InterruptedException e) {
/* \_o< */
}
dialog.setVisible(false);
dialog.dispose();
Vector selected = null;
if (!cancelled) {
selected = new Vector();
Iterator checkBoxIt = checkBoxes.iterator();
Iterator boardsIt = boards.iterator();
while (checkBoxIt.hasNext() && boardsIt.hasNext()) {
JCheckBox box = (JCheckBox)checkBoxIt.next();
Board board = (Board)boardsIt.next();
if (box.isSelected())
selected.add(board);
}
}
return selected;
}
public void actionPerformed(ActionEvent e) {
cancelled = !(e.getSource() == okButton);
synchronized(this) {
this.notifyAll();
}
}
public static Vector askBoardList(MiniFrostPanel panel, Object parentWindow) {
Vector v = (new BoardSelecter(panel, parentWindow)).askBoardList();
if (v == null) {
Logger.info(new BoardSelecter(), "Cancelled");
return null;
}
return v;
}
}