/*
* $Id$
*
* Copyright (c) 2004 by Rodney Kinney
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.configure;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import VASSAL.build.GameModule;
import VASSAL.tools.ScrollPane;
/**
* Dialog for reporting the results of validating a GameModule
*/
public class ValidationReportDialog extends JDialog {
private static final long serialVersionUID = 1L;
private CallBack callback;
public ValidationReportDialog(ValidationReport report, CallBack cb) {
super(GameModule.getGameModule().getFrame(), false);
setTitle("Problems found in module");
this.callback = cb;
Box reportBox = Box.createVerticalBox();
add(reportBox);
JPanel buttonPanel = new JPanel();
add(buttonPanel, BorderLayout.SOUTH);
final List<String> warnings = report.getWarnings();
switch (warnings.size()) {
case 0:
reportBox.add(new JLabel("No problems found"));
buttonPanel.add(createOkButton());
break;
case 1:
reportBox.add(new JLabel("A problem was found in this module."));
reportBox.add(new JLabel(warnings.get(0) + "."));
buttonPanel.add(createOkButton());
buttonPanel.add(createCancelButton());
break;
default:
reportBox.add(new JLabel("The following problems were found in this module."));
reportBox.add(new JLabel("If not fixed, they could cause bugs during game play."));
JList list = new JList(warnings.toArray());
list.setVisibleRowCount(Math.min(list.getVisibleRowCount(),warnings.size()));
reportBox.add(new ScrollPane(list));
buttonPanel.add(createOkButton());
buttonPanel.add(createCancelButton());
}
pack();
setLocationRelativeTo(null);
}
private JButton createCancelButton() {
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
callback.cancel();
dispose();
}
});
return cancel;
}
private JButton createOkButton() {
JButton ok = new JButton("Ignore, save anyway");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
callback.ok();
dispose();
}
});
return ok;
}
public static interface CallBack {
void ok();
void cancel();
}
}