/* Copyright (C) 2003-2012 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref; import java.awt.GridBagConstraints; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.sf.jabref.help.HelpDialog; import net.sf.jabref.labelPattern.LabelPattern; import net.sf.jabref.labelPattern.LabelPatternPanel; import net.sf.jabref.labelPattern.LabelPatternUtil; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; /** * The Preferences panel for key generation. */ public class TabLabelPattern extends LabelPatternPanel implements PrefsTab { private JabRefPreferences _prefs; private JCheckBox dontOverwrite = new JCheckBox(Globals.lang("Do not overwrite existing keys")), warnBeforeOverwriting = new JCheckBox(Globals.lang("Warn before overwriting existing keys")), generateOnSave = new JCheckBox(Globals.lang("Generate keys before saving (for entries without a key)")), autoGenerateOnImport = new JCheckBox(Globals.lang("Generate keys for imported entries")); private JRadioButton letterStartA = new JRadioButton(Globals.lang("Ensure unique keys using letters (a, b, ...)")), letterStartB = new JRadioButton(Globals.lang("Ensure unique keys using letters (b, c, ...)")), alwaysAddLetter = new JRadioButton(Globals.lang("Always add letter (a, b, ...) to generated keys")); private JTextField KeyPatternRegex = new JTextField(20); private JTextField KeyPatternReplacement = new JTextField(20); public TabLabelPattern(JabRefPreferences prefs, HelpDialog helpDiag) { super(helpDiag); _prefs = prefs; appendKeyGeneratorSettings(); } /** * Store changes to table preferences. This method is called when * the user clicks Ok. * */ public void storeSettings() { // Set the default value: Globals.prefs.put("defaultLabelPattern", defaultPat.getText()); Globals.prefs.putBoolean("warnBeforeOverwritingKey", warnBeforeOverwriting.isSelected()); Globals.prefs.putBoolean("avoidOverwritingKey", dontOverwrite.isSelected()); //Globals.prefs.put("basenamePatternRegex", basenamePatternRegex.getText()); //Globals.prefs.put("basenamePatternReplacement", basenamePatternReplacement.getText()); Globals.prefs.put("KeyPatternRegex", KeyPatternRegex.getText()); Globals.prefs.put("KeyPatternReplacement", KeyPatternReplacement.getText()); Globals.prefs.putBoolean("generateKeysAfterInspection", autoGenerateOnImport.isSelected()); Globals.prefs.putBoolean("generateKeysBeforeSaving", generateOnSave.isSelected()); if (alwaysAddLetter.isSelected()) Globals.prefs.putBoolean("keyGenAlwaysAddLetter", true); else if (letterStartA.isSelected()) { Globals.prefs.putBoolean("keyGenFirstLetterA", true); Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false); } else { Globals.prefs.putBoolean("keyGenFirstLetterA", false); Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false); } LabelPatternUtil.updateDefaultPattern(); // fetch the old parent from the currently stored patterns LabelPattern defKeyPattern = _prefs.getKeyPattern().getParent(); // fetch entries from GUI LabelPattern keypatterns = getLabelPattern(); // restore old parent keypatterns.setParent(defKeyPattern); // store new patterns globally _prefs.putKeyPattern(keypatterns); } private void appendKeyGeneratorSettings() { ButtonGroup bg = new ButtonGroup(); bg.add(letterStartA); bg.add(letterStartB); bg.add(alwaysAddLetter); // Build a panel for checkbox settings: FormLayout layout = new FormLayout ("1dlu, 8dlu, left:pref, 8dlu, left:pref", "");//, 8dlu, 20dlu, 8dlu, fill:pref", ""); JPanel pan = new JPanel(); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.appendSeparator(Globals.lang("Key generator settings")); builder.nextLine(); builder.append(pan); builder.append(autoGenerateOnImport); builder.append(letterStartA); builder.nextLine(); builder.append(pan); builder.append(warnBeforeOverwriting); builder.append(letterStartB); builder.nextLine(); builder.append(pan); builder.append(dontOverwrite); builder.append(alwaysAddLetter); builder.nextLine(); builder.append(pan); builder.append(generateOnSave); builder.nextLine(); builder.append(pan); builder.append(Globals.lang("Replace (regular expression)")+":"); builder.append(Globals.lang("by")+":"); builder.nextLine(); builder.append(pan); builder.append(KeyPatternRegex); builder.append(KeyPatternReplacement); builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); con.gridx = 1; con.gridy = 3; con.gridwidth = GridBagConstraints.REMAINDER; con.weightx = 1; con.fill = GridBagConstraints.BOTH; gbl.setConstraints(builder.getPanel(), con); add(builder.getPanel()); dontOverwrite.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent event) { // Warning before overwriting is only relevant if overwriting can happen: warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected()); } }); } public boolean readyToClose() { return true; } public void setValues() { super.setValues(_prefs.getKeyPattern()); defaultPat.setText(Globals.prefs.get("defaultLabelPattern")); dontOverwrite.setSelected(Globals.prefs.getBoolean("avoidOverwritingKey")); generateOnSave.setSelected(Globals.prefs.getBoolean("generateKeysBeforeSaving")); autoGenerateOnImport.setSelected(Globals.prefs.getBoolean("generateKeysAfterInspection")); warnBeforeOverwriting.setSelected(Globals.prefs.getBoolean("warnBeforeOverwritingKey")); boolean alwaysAddLetter = Globals.prefs.getBoolean("keyGenAlwaysAddLetter"), firstLetterA = Globals.prefs.getBoolean("keyGenFirstLetterA"); if (alwaysAddLetter) this.alwaysAddLetter.setSelected(true); else if (firstLetterA) this.letterStartA.setSelected(true); else this.letterStartB.setSelected(true); // Warning before overwriting is only relevant if overwriting can happen: warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected()); KeyPatternRegex.setText(Globals.prefs.get("KeyPatternRegex")); KeyPatternReplacement.setText(Globals.prefs.get("KeyPatternReplacement")); //basenamePatternRegex.setText(Globals.prefs.get("basenamePatternRegex")); //basenamePatternReplacement.setText(Globals.prefs.get("basenamePatternReplacement")); } public String getTabName() { return Globals.lang("BibTeX key generator"); } }