package spl.gui; import com.jgoodies.forms.builder.ButtonBarBuilder; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; import net.sf.jabref.Globals; import net.sf.jabref.ImportSettingsTab; import net.sf.jabref.JabRefPreferences; import spl.listener.LabelLinkListener; import spl.localization.LocalizationSupport; import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.*; import java.io.File; import java.util.ResourceBundle; public class ImportDialog extends JDialog { public final static int NOMETA = 0; public final static int XMP = 1; public final static int CONTENT = 2; public final static int MRDLIB = 3; public final static int ONLYATTACH = 4; public final static int UPDATEEMPTYFIELDS = 5; private JPanel contentPane; private JLabel labelSubHeadline; private JButton buttonOK; private JButton buttonCancel; private JCheckBox checkBoxDoNotShowAgain; private JCheckBox useDefaultPDFImportStyle; private JRadioButton radioButtonXmp; private JRadioButton radioButtonPDFcontent; private JRadioButton radioButtonMrDlib; private JRadioButton radioButtonNoMeta; private JLabel labelHeadline; private JLabel labelFileName; private JRadioButton radioButtononlyAttachPDF; private JRadioButton radioButtonUpdateEmptyFields; private JLabel labelMrDlib1; private JLabel labelMrDlib2; private int result; private int dropRow; private String fileName; public ImportDialog(int dropRow, String fileName) { this.dropRow = dropRow; contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); setContentPane(contentPane); JPanel panel3 = new JPanel(); panel3.setBackground(new Color(-1643275)); labelHeadline = new JLabel(Globals.lang("Import_Metadata_from:")); labelHeadline.setFont(new Font(labelHeadline.getFont().getName(), Font.BOLD, 14)); labelSubHeadline = new JLabel(Globals.lang("Choose_the_source_for_the_metadata_import")); labelSubHeadline.setFont(new Font(labelSubHeadline.getFont().getName(), labelSubHeadline.getFont().getStyle(), 13)); labelFileName = new JLabel(); labelFileName.setFont(new Font(labelHeadline.getFont().getName(), Font.BOLD, 14)); JPanel headLinePanel = new JPanel(); headLinePanel.add(labelHeadline); headLinePanel.add(labelFileName); headLinePanel.setBackground(new Color(-1643275)); GridLayout gl = new GridLayout(2,1); gl.setVgap(10); gl.setHgap(10); panel3.setLayout(gl); panel3.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); panel3.add(headLinePanel); panel3.add(labelSubHeadline); radioButtonNoMeta = new JRadioButton(Globals.lang("Create_blank_entry_linking_the_PDF")); radioButtonXmp = new JRadioButton(Globals.lang("Create_entry_based_on_XMP_data")); radioButtonPDFcontent = new JRadioButton(Globals.lang("Create_entry_based_on_content")); radioButtonMrDlib = new JRadioButton(Globals.lang("Create_entry_based_on_data_fetched_from")); radioButtononlyAttachPDF = new JRadioButton(Globals.lang("Only_attach_PDF")); radioButtonUpdateEmptyFields = new JRadioButton(Globals.lang("Update_empty_fields_with_data_fetched_from")); labelMrDlib1 = new JLabel("Mr._dLib"); labelMrDlib1.setFont(new Font(labelMrDlib1.getFont().getName(), Font.BOLD, 13)); labelMrDlib1.setForeground(new Color(-16776961)); labelMrDlib2 = new JLabel("Mr._dLib"); labelMrDlib2.setFont(new Font(labelMrDlib1.getFont().getName(), Font.BOLD, 13)); labelMrDlib2.setForeground(new Color(-16776961)); buttonOK = new JButton(Globals.lang("Ok")); buttonCancel = new JButton(Globals.lang("Cancel")); checkBoxDoNotShowAgain = new JCheckBox(Globals.lang("Do not show this box again for this import")); useDefaultPDFImportStyle = new JCheckBox(Globals.lang("Always use this PDF import style (and do not ask for each import)")); DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref, 5dlu, left:pref:grow","")); b.appendSeparator(Globals.lang("Create New Entry")); b.append(radioButtonNoMeta, 3); b.append(radioButtonXmp, 3); b.append(radioButtonPDFcontent, 3); b.append(radioButtonMrDlib); b.append(labelMrDlib1); b.appendSeparator(Globals.lang("Update_Existing_Entry")); b.append(radioButtononlyAttachPDF, 3); b.append(radioButtonUpdateEmptyFields); b.append(labelMrDlib2); b.nextLine(); b.append(checkBoxDoNotShowAgain); b.append(useDefaultPDFImportStyle); b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); ButtonBarBuilder bb = new ButtonBarBuilder(); bb.addGlue(); bb.addButton(buttonOK); bb.addButton(buttonCancel); bb.addGlue(); bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); contentPane.add(panel3, BorderLayout.NORTH); contentPane.add(b.getPanel(), BorderLayout.CENTER); contentPane.add(bb.getPanel(), BorderLayout.SOUTH); //$$$setupUI$$$(); //this.setText(); if (this.dropRow < 0) { this.radioButtononlyAttachPDF.setEnabled(false); this.radioButtonUpdateEmptyFields.setEnabled(false); this.labelMrDlib2.setEnabled(false); } this.fileName = fileName; String name = new File(this.fileName).getName(); if (name.length() < 34) { this.labelFileName.setText(name); } else { this.labelFileName.setText(new File(this.fileName).getName().substring(0, 33) + "..."); } this.labelMrDlib1.addMouseListener(new LabelLinkListener(this.labelMrDlib1, "www.mr-dlib.org/docs/pdf_metadata_extraction.php")); this.labelMrDlib2.addMouseListener(new LabelLinkListener(this.labelMrDlib2, "www.mr-dlib.org/docs/pdf_metadata_extraction.php")); this.setTitle(LocalizationSupport.message("Import_Metadata_From_PDF")); setModal(true); getRootPane().setDefaultButton(buttonOK); // only one of the radio buttons may be selected. ButtonGroup bg = new ButtonGroup(); bg.add(radioButtonNoMeta); bg.add(radioButtonXmp); bg.add(radioButtonPDFcontent); bg.add(radioButtonMrDlib); bg.add(radioButtononlyAttachPDF); bg.add(radioButtonUpdateEmptyFields); buttonOK.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onOK(); } }); buttonCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onCancel(); } }); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { onCancel(); } }); contentPane.registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent e) { onCancel(); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); switch (Globals.prefs.getInt(ImportSettingsTab.PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE)) { case NOMETA: radioButtonNoMeta.setSelected(true); break; case XMP: radioButtonXmp.setSelected(true); break; case CONTENT: radioButtonPDFcontent.setSelected(true); break; case MRDLIB: radioButtonMrDlib.setSelected(true); break; case ONLYATTACH: radioButtononlyAttachPDF.setSelected(true); break; case UPDATEEMPTYFIELDS: radioButtonUpdateEmptyFields.setSelected(true); break; default: // fallback radioButtonPDFcontent.setSelected(true); break; } this.setSize(555, 371); } private void onOK() { this.result = JOptionPane.OK_OPTION; Globals.prefs.putInt(ImportSettingsTab.PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE, this.getChoice()); if (useDefaultPDFImportStyle.isSelected()) { Globals.prefs.putBoolean(ImportSettingsTab.PREF_IMPORT_ALWAYSUSE, true); } // checkBoxDoNotShowAgain handled by local variable dispose(); } private void onCancel() { this.result = JOptionPane.CANCEL_OPTION; dispose(); } public void showDialog() { this.pack(); this.setVisible(true); } public int getChoice() { if (radioButtonXmp.isSelected()) return XMP; else if (radioButtonPDFcontent.isSelected()) return CONTENT; else if (radioButtonMrDlib.isSelected()) return MRDLIB; else if (radioButtonNoMeta.isSelected()) return NOMETA; else if (radioButtononlyAttachPDF.isSelected()) return ONLYATTACH; else if (radioButtonUpdateEmptyFields.isSelected()) return UPDATEEMPTYFIELDS; else throw new IllegalStateException(); } public boolean getDoNotShowAgain() { return this.checkBoxDoNotShowAgain.isSelected(); } public int getResult() { return result; } /** * @noinspection ALL */ public JComponent $$$getRootComponent$$$() { return contentPane; } public void disableXMPChoice() { this.radioButtonXmp.setEnabled(false); } }