package edu.harvard.wcfia.yoshikoder.ui.dialog;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import edu.harvard.wcfia.yoshikoder.Yoshikoder;
import edu.harvard.wcfia.yoshikoder.document.YKDocument;
import edu.harvard.wcfia.yoshikoder.reporting.YKReport;
import edu.harvard.wcfia.yoshikoder.ui.TableSorter;
import edu.harvard.wcfia.yoshikoder.ui.TableUtil;
import edu.harvard.wcfia.yoshikoder.util.Messages;
import edu.harvard.wcfia.yoshikoder.util.TaskWorker;
public class MultiReportDialog extends JDialog {
protected JButton saveButton;
protected JButton closeButton;
protected FileDialog htmlExporter, excelExporter;
protected ExportDialog exportDialog;
protected TaskWorker worker;
protected Yoshikoder yoshikoder;
protected List reports;
protected JTabbedPane tabs;
public MultiReportDialog(Yoshikoder parent, List reps){
super(parent, true);
yoshikoder = parent;
reports = reps;
makeGUI();
}
protected void makeGUI(){
Container cPane = getContentPane();
cPane.setLayout(new BorderLayout());
JPanel buttons = createButtonPanel();
cPane.add(buttons, BorderLayout.SOUTH);
tabs = new JTabbedPane();
for (Iterator iter = reports.iterator(); iter.hasNext();) {
YKReport report = (YKReport) iter.next();
TableSorter sorter = new TableSorter(report);
JTable table = new JTable(sorter);
sorter.setTableHeader(table.getTableHeader());
table.setFont(yoshikoder.getDisplayFont());
TableUtil.packColumn(table, 0, 2);
YKDocument doc = (YKDocument)report.getDocuments().get(0);
JPanel cent = new JPanel(new BorderLayout());
cent.add( new JScrollPane(table), BorderLayout.CENTER );
cent.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
tabs.addTab(doc.getTitle(), cent);
}
JPanel central = new JPanel(new BorderLayout());
central.add(tabs, BorderLayout.CENTER);
central.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
cPane.add(central, BorderLayout.CENTER);
pack();
setLocationRelativeTo(yoshikoder);
}
protected JPanel createButtonPanel() {
JPanel buttonPanel = new JPanel(new BorderLayout());
Box bbox = Box.createHorizontalBox();
saveButton = new JButton(Messages.getString("export"));
// XXX make multidocument export work
saveButton.setEnabled(false);
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
handleSave();
}
});
closeButton = new JButton(Messages.getString("close"));
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
dispose();
}
});
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent we){
dispose();} });
bbox.add(Box.createHorizontalGlue());
bbox.add(saveButton);
bbox.add(Box.createHorizontalStrut(15));
bbox.add(closeButton);
bbox.add(Box.createHorizontalGlue());
bbox.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
buttonPanel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0,
Color.GRAY));
buttonPanel.add(bbox, BorderLayout.EAST);
return buttonPanel;
}
protected void handleSave(){
// XXX make multi report saving work
/*
// throw up export dialog
if (exportDialog == null)
exportDialog =
new ExportDialog(this, new String[]{ExportUtil.HTML_FORMAT,
ExportUtil.EXCEL_FORMAT});
exportDialog.show();
String format = exportDialog.getChosenFormat();
if (format==null) return;
if (format == ExportUtil.HTML_FORMAT){
if (htmlExporter == null)
htmlExporter =
DialogUtil.makeFileDialog(yoshikoder, "Export as HTML",
FileDialog.SAVE, DialogUtil.htmlFilenameFilter); // TODO loc
htmlExporter.show();
String f = htmlExporter.getFile();
if (f==null) return;
final File file = new File(htmlExporter.getDirectory(), f);
worker = new TaskWorker(this){
protected void doWork() throws Exception {
report.saveAsHtml(FileUtil.suffix(file, "html", "htm"));
}
protected void onError() {
DialogUtil.yelp(MultiReportDialog.this, "Could not save as HTML", e); // TODO loc
}
};
worker.start();
} else {
if (excelExporter == null)
excelExporter =
DialogUtil.makeFileDialog(yoshikoder, "Export as Excel",
FileDialog.SAVE, DialogUtil.xlsFilenameFilter); // TODO loc
excelExporter.show();
String f = excelExporter.getFile();
if (f==null) return;
final File file = new File(excelExporter.getDirectory(), f);
worker = new TaskWorker(this){
protected void doWork() throws Exception {
report.saveAsExcel(FileUtil.suffix(file, "xls"));
}
protected void onError() {
DialogUtil.yelp(MultiReportDialog.this, "Could not save as Excel", e); // TODO loc
}
};
worker.start();
}
*/
}
}