package org.jabref.gui.bibtexkeypattern; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.WindowEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.WindowConstants; import org.jabref.Globals; import org.jabref.gui.BasePanel; import org.jabref.gui.JabRefDialog; import org.jabref.gui.JabRefFrame; import org.jabref.gui.keyboard.KeyBinder; import org.jabref.logic.l10n.Localization; import org.jabref.model.bibtexkeypattern.AbstractBibtexKeyPattern; import org.jabref.model.metadata.MetaData; import com.jgoodies.forms.builder.ButtonBarBuilder; public class BibtexKeyPatternDialog extends JabRefDialog { private MetaData metaData; private BasePanel panel; private final BibtexKeyPatternPanel bibtexKeyPatternPanel; public BibtexKeyPatternDialog(JabRefFrame parent, BasePanel panel) { super(parent, Localization.lang("BibTeX key patterns"), true, BibtexKeyPatternDialog.class); this.bibtexKeyPatternPanel = new BibtexKeyPatternPanel(panel); setPanel(panel); init(); } /** * Used for updating an existing Dialog * * @param panel the panel to read the data from */ public void setPanel(BasePanel panel) { this.panel = panel; this.metaData = panel.getBibDatabaseContext().getMetaData(); AbstractBibtexKeyPattern keypatterns = metaData.getCiteKeyPattern(Globals.prefs.getKeyPattern()); bibtexKeyPatternPanel.setValues(keypatterns); } private void init() { getContentPane().setLayout(new BorderLayout()); getContentPane().add(bibtexKeyPatternPanel, BorderLayout.CENTER); JButton ok = new JButton(Localization.lang("OK")); JButton cancel = new JButton(); // label of "cancel" is set later as the label is overwritten by assigning an action to the button JPanel lower = new JPanel(); lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); ButtonBarBuilder bb = new ButtonBarBuilder(lower); bb.addGlue(); bb.addButton(ok); bb.addButton(cancel); bb.addGlue(); getContentPane().add(lower, BorderLayout.SOUTH); this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); getContentPane().setPreferredSize(new Dimension(500, 600)); pack(); ok.addActionListener(e -> { metaData.setCiteKeyPattern(bibtexKeyPatternPanel.getKeyPatternAsDatabaseBibtexKeyPattern()); panel.markNonUndoableBaseChanged(); dispose(); }); final JDialog dialog = this; Action cancelAction = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)); } }; cancel.setAction(cancelAction); cancel.setText(Localization.lang("Cancel")); KeyBinder.bindCloseDialogKeyToCancelAction(this.getRootPane(), cancelAction); } @Override public void setVisible(boolean visible) { if (visible) { super.setVisible(visible); } } }