/* 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.labelPattern;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import net.sf.jabref.BibtexEntryType;
import net.sf.jabref.GUIGlobals;
import net.sf.jabref.Globals;
import net.sf.jabref.Util;
import net.sf.jabref.help.HelpAction;
import net.sf.jabref.help.HelpDialog;
public class LabelPatternPanel extends JPanel {
// used by both LabelPatternPanel and TabLabelPAttern
protected GridBagLayout gbl = new GridBagLayout();
protected GridBagConstraints con = new GridBagConstraints();
private HelpAction help;
private JButton btnDefaultAll, btnDefault;
private JLabel lblEntryType, lblKeyPattern;
// default pattern
protected JTextField defaultPat = new JTextField();
// one field for each type
private HashMap<String, JTextField> textFields = new HashMap<String, JTextField>();
public LabelPatternPanel(HelpDialog helpDiag) {
help = new HelpAction(helpDiag, GUIGlobals.labelPatternHelp, "Help on key patterns");
buildGUI();
}
private void buildGUI() {
JPanel pan = new JPanel();
JScrollPane sp = new JScrollPane(pan);
sp.setPreferredSize(new Dimension(100,100));
sp.setBorder(BorderFactory.createEmptyBorder());
pan.setLayout(gbl);
setLayout(gbl);
// The header - can be removed
lblEntryType = new JLabel(Globals.lang("Entry type"));
Font f = new Font("plain", Font.BOLD, 12);
lblEntryType.setFont(f);
con.gridx = 0;
con.gridy = 0;
con.gridwidth = 1;
con.gridheight = 1;
con.fill = GridBagConstraints.VERTICAL;
con.anchor = GridBagConstraints.WEST;
con.insets = new Insets( 5,5,10,0 );
gbl.setConstraints( lblEntryType, con );
pan. add( lblEntryType );
lblKeyPattern = new JLabel(Globals.lang("Key pattern"));
lblKeyPattern.setFont(f);
con.gridx = 1;
con.gridy = 0;
//con.gridwidth = 2;
con.gridheight = 1;
con.fill = GridBagConstraints.HORIZONTAL;
con.anchor = GridBagConstraints.WEST;
con.insets = new Insets( 5,5,10,5 );
gbl.setConstraints( lblKeyPattern, con );
pan.add( lblKeyPattern );
con.gridy = 1;
con.gridx = 0;
JLabel lab = new JLabel(Globals.lang("Default pattern"));
gbl.setConstraints(lab, con);
pan.add(lab);
con.gridx = 1;
gbl.setConstraints(defaultPat, con);
pan.add(defaultPat);
con.insets = new Insets( 5,5,10,5 );
btnDefault = new JButton(Globals.lang("Default"));
btnDefault.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
}
});
con.gridx = 2;
int y = 2;
gbl.setConstraints(btnDefault, con);
pan.add(btnDefault);
for (String s : BibtexEntryType.ALL_TYPES.keySet()) {
textFields.put(s, addEntryType(pan, s, y));
y++;
}
con.fill = GridBagConstraints.BOTH;
con.gridx = 0;
con.gridy = 1;
con.gridwidth = 3;
con.weightx = 1;
con.weighty = 1;
gbl.setConstraints(sp, con );
add(sp);
// A help button
con.gridwidth = 1;
con.gridx = 1;
con.gridy = 2;
con.fill = GridBagConstraints.HORIZONTAL;
//
con.weightx = 0;
con.weighty = 0;
con.anchor = GridBagConstraints.SOUTHEAST;
con.insets = new Insets( 0,5,0,5 );
JButton hlb = new JButton(GUIGlobals.getImage("helpSmall"));
hlb.setToolTipText(Globals.lang("Help on key patterns"));
gbl.setConstraints( hlb, con );
add(hlb);
hlb.addActionListener(help);
// And finally a button to reset everything
btnDefaultAll = new JButton(Globals.lang("Reset all"));
con.gridx = 2;
con.gridy = 2;
//con.fill = GridBagConstraints.BOTH;
con.weightx = 1;
con.weighty = 0;
con.anchor = GridBagConstraints.SOUTHEAST;
con.insets = new Insets( 20,5,0,5 );
gbl.setConstraints( btnDefaultAll, con );
btnDefaultAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// reset all fields
Iterator<String> i=textFields.keySet().iterator();
while (i.hasNext()) {
String s = i.next();
JTextField tf = textFields.get(s);
tf.setText("");
}
// also reset the default pattern
defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
}
});
add( btnDefaultAll );
}
private JTextField addEntryType(Container c, String name, int y) {
JLabel lab = new JLabel(Util.nCase(name));
name = name.toLowerCase();
con.gridx = 0;
con.gridy = y;
con.fill = GridBagConstraints.BOTH;
con.weightx = 0;
con.weighty = 0;
con.anchor = GridBagConstraints.WEST;
con.insets = new Insets( 0,5,0,5 );
gbl.setConstraints( lab, con );
c.add( lab );
JTextField tf = new JTextField();//_keypatterns.getValue(name).get(0).toString());
tf.setColumns( 15 );
con.gridx = 1;
con.fill = GridBagConstraints.HORIZONTAL;
con.weightx = 1;
con.weighty = 0;
con.anchor = GridBagConstraints.CENTER;
con.insets = new Insets( 0,5,0,5 );
gbl.setConstraints( tf, con );
c.add( tf );
JButton but = new JButton( Globals.lang("Default") );
con.gridx = 2;
con.fill = GridBagConstraints.BOTH;
con.weightx = 0;
con.weighty = 0;
con.anchor = GridBagConstraints.CENTER;
con.insets = new Insets( 0,5,0,5 );
gbl.setConstraints( but, con );
but.setActionCommand(name);
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JTextField tf = textFields.get(e.getActionCommand());
tf.setText("");
}
});
c.add(but);
return tf;
}
/**
* @return the LabelPattern generated from the text fields
*/
public LabelPattern getLabelPattern() {
LabelPattern keypatterns = new LabelPattern();
// each entry type
Iterator<String> i=textFields.keySet().iterator();
while (i.hasNext()) {
String s = i.next(),
text = textFields.get(s).getText();
if (!"".equals(text.trim()))
keypatterns.addLabelPattern(s, text);
}
// default value
String text = defaultPat.getText();
if (!"".equals(text.trim())) { // we do not trim the value at the assignment to enable users to have spaces at the beginning and at the end of the pattern
keypatterns.setDefaultValue(text);
}
return keypatterns;
}
/**
* Fills the current values to the text fields
*
* @param keypatterns the LabelPattern to use as initial value
*/
public void setValues(LabelPattern keypatterns) {
for (Iterator<String> i=textFields.keySet().iterator(); i.hasNext();) {
String name = i.next();
JTextField tf = textFields.get(name);
setValue(tf, name, keypatterns);
}
if (keypatterns.getDefaultValue() == null) {
defaultPat.setText("");
} else {
defaultPat.setText(keypatterns.getDefaultValue().get(0));
}
}
private void setValue(JTextField tf, String fieldName, LabelPattern keypatterns) {
if (keypatterns.isDefaultValue(fieldName))
tf.setText("");
else {
//System.out.println(":: "+_keypatterns.getValue(fieldName).get(0).toString());
tf.setText(keypatterns.getValue(fieldName).get(0).toString());
}
}
}