package net.sf.jabref.labelPattern;
import com.jgoodies.forms.builder.ButtonBarBuilder;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import net.sf.jabref.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
/**
* Dialog box for resolving duplicate bibte keys
*/
public class ResolveDuplicateLabelDialog {
JDialog diag;
JButton ok = new JButton(Globals.lang("Ok")),
cancel = new JButton(Globals.lang("Cancel"));
List<JCheckBox> cbs = new ArrayList<JCheckBox>();
private boolean okPressed = false;
final static String layout = "<font face=\"arial\"><b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>\\end{bibtexkey}</b><br>\n" +
"\\begin{author} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\author}<BR>\\end{author}\n" +
"\\begin{editor} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\editor} <i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}\n" +
"\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>\n" +
"\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}\n" +
"\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}\n" +
"\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}\n" +
"\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}\n" +
"\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}\n" +
"\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}\n" +
"\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}\n" +
"<p></p></font>";
public ResolveDuplicateLabelDialog(BasePanel panel, String key,
List<BibtexEntry> entries) {
diag = new JDialog(panel.frame().getFrame(), Globals.lang("Duplicate BibTeX key"), true);
DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(
"left:pref, 4dlu, fill:pref", ""));
b.append(new JLabel(Globals.lang("Duplicate key")+": "+key), 3);
b.nextLine();
b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
boolean first = true;
for (BibtexEntry entry : entries) {
JCheckBox cb = new JCheckBox(Globals.lang("Generate key"), !first);
//JPanel pan = new JPanel();
//pan.setLayout(new BorderLayout());
//pan.add(cb, BorderLayout.NORTH);
//cb.add(new JPanel(), BorderLayout.CENTER);
b.append(cb);
PreviewPanel pp = new PreviewPanel(null, entry, null , new MetaData(), layout);
pp.setPreferredSize(new Dimension(800, 90));
//pp.setBorder(BorderFactory.createEtchedBorder());
b.append(new JScrollPane(pp));
b.nextLine();
cbs.add(cb);
first = false;
}
ButtonBarBuilder bb = new ButtonBarBuilder();
bb.addGlue();
bb.addGridded(ok);
bb.addGridded(cancel);
bb.addGlue();
bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
diag.pack();
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
okPressed = true;
diag.dispose();
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
diag.dispose();
}
});
AbstractAction closeAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
diag.dispose();
}
};
ActionMap am = b.getPanel().getActionMap();
InputMap im = b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(Globals.prefs.getKey("Close dialog"), "close");
am.put("close", closeAction);
}
/**
* After the dialog has been closed, this query answers whether the dialog was okPressed
* (by cancel button or by closing the dialog directly).
* @return true if it was okPressed, false if Ok was pressed.
*/
public boolean isOkPressed() {
return okPressed;
}
/**
* Get the list of checkboxes where the user has selected which entries to generate
* new keys for.
* @return the list of checkboxes
*/
public List<JCheckBox> getCheckBoxes() {
return cbs;
}
public void show() {
okPressed = false;
diag.setLocationRelativeTo(diag.getParent());
diag.setVisible(true);
}
}