Logo Search packages:      
Sourcecode: jabref version File versions  Download package

TabLabelPattern.java

/*
 * Created on 09-Dec-2003
 */
package net.sf.jabref;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import net.sf.jabref.labelPattern.LabelPattern;
import net.sf.jabref.labelPattern.LabelPatternUtil;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;

/**
 * The Preferences panel for key generation.
 */
00025 public class TabLabelPattern extends JPanel implements PrefsTab{
      
    private String def = Globals.lang("Default");
    private GridBagLayout gbl = new GridBagLayout();
    private GridBagConstraints con = new GridBagConstraints();
    private HashMap<String, JTextField> textFields = new HashMap<String, JTextField>();

      private JabRefPreferences _prefs;
      private LabelPattern _keypatterns = null;
      
    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 JLabel lblEntryType, lblKeyPattern;

    private JTextField defaultPat = new JTextField();

    //private JTextField basenamePatternRegex = new JTextField(20);
    //private JTextField basenamePatternReplacement = new JTextField(20);
    private JTextField KeyPatternRegex = new JTextField(20);
    private JTextField KeyPatternReplacement = new JTextField(20);

      private JButton btnDefaultAll, btnDefault;


    private HelpAction help;
      
      /**
       * The constructor
       */
00058       public TabLabelPattern(JabRefPreferences prefs, HelpDialog helpDiag) {
            _prefs = prefs;
            //_keypatterns = _prefs.getKeyPattern();
            help = new HelpAction(helpDiag, GUIGlobals.labelPatternHelp,
                              "Help on key patterns");
            buildGUI();
        //fillTextfields();
      }

      /**
       * Store changes to table preferences. This method is called when
       * the user clicks Ok.
       *
       */
00072       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());
         LabelPatternUtil.updateDefaultPattern();


          LabelPattern defKeyPattern = _keypatterns.getParent();
          _keypatterns = new LabelPattern(defKeyPattern);
          
          // then we rebuild... 
          Iterator<String> i=textFields.keySet().iterator();
          //String defa = (String)LabelPatternUtil.DEFAULT_LABELPATTERN.get(0);
          while (i.hasNext()) {
            String s = i.next(),
                text = textFields.get(s).getText();
            if (!"".equals(text.trim())) //(!defa.equals(text))
                _keypatterns.addLabelPattern(s, text);
          }

          _prefs.putKeyPattern(_keypatterns);

      }
      
    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( def );
      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 buttonHandler());
      c.add( but );           

      return tf;
    }

    private void setValue(JTextField tf, String fieldName) {
        if (_keypatterns.isDefaultValue(fieldName))
            tf.setText("");
        else {
            //System.out.println(":: "+_keypatterns.getValue(fieldName).get(0).toString());
            tf.setText(_keypatterns.getValue(fieldName).get(0).toString());
        }
    }

      /**
       * Method to build GUI
       *
       */
00159       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 buttonHandler());
          add( btnDefaultAll );


        // Build a panel for checkbox settings:
        FormLayout layout = new FormLayout
              ("1dlu, 8dlu, left:pref, 8dlu, left:pref", "");//, 8dlu, 20dlu, 8dlu, fill:pref", "");
        pan = new JPanel();
          DefaultFormBuilder builder = new DefaultFormBuilder(layout);
        builder.appendSeparator(Globals.lang("Key generator settings"));

        builder.nextLine();
        builder.append(pan);
        builder.append(autoGenerateOnImport);
        builder.nextLine();
        builder.append(pan);
        builder.append(warnBeforeOverwriting);
        builder.append(dontOverwrite);
        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());
            }
        });

      /*
       Simon Fischer's patch for replacing a regexp in keys before converting to filename:

      layout = new FormLayout
              ("left:pref, 8dlu, left:pref, left:pref", "");
      builder = new DefaultFormBuilder(layout);
        builder.appendSeparator(Globals.lang("Bibkey to filename conversion"));
        builder.nextLine();
      builder.append(Globals.lang("Replace"), basenamePatternRegex);
        builder.nextLine();
      builder.append(Globals.lang("by"), basenamePatternReplacement);
        builder.nextLine();

        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        con.gridx = 2;
      con.gridy = 3;
      con.gridwidth = GridBagConstraints.REMAINDER;
      con.weightx = 1;
      con.fill = GridBagConstraints.BOTH;
      gbl.setConstraints(builder.getPanel(), con);
        add(builder.getPanel());
        */
      }
      
      /**
       * Method for filling the text fields with user defined key patterns or default.
       * The method used (<code>getValue(key)</code>) to get the ArrayList 
       * corrosponding to an entry type throws a <code>NullPointerException</code>
       * and <code>?</code> if an entry cannot be found. It really shouln't be
       * nessesary to catch those exceptions here... 
       */
    /*      private void fillTextfields(){
            txtArticle.setText(_keypatterns.getValue("article").get(0).toString());
            txtBook.setText(_keypatterns.getValue("book").get(0).toString());
            txtBooklet.setText(_keypatterns.getValue("booklet").get(0).toString());
            txtConference.setText(_keypatterns.getValue("conference").get(0).toString());
            txtInbook.setText(_keypatterns.getValue("inbook").get(0).toString());
            txtIncollection.setText(_keypatterns.getValue("incollection").get(0).toString());
            txtInproceedings.setText(_keypatterns.getValue("inproceedings").get(0).toString());
            txtManual.setText(_keypatterns.getValue("manual").get(0).toString());
            txtMastersthesis.setText(_keypatterns.getValue("mastersthesis").get(0).toString());
            txtMisc.setText(_keypatterns.getValue("misc").get(0).toString());
            txtPhdthesis.setText(_keypatterns.getValue("phdthesis").get(0).toString());
            txtProceedings.setText(_keypatterns.getValue("proceedings").get(0).toString());
            txtTechreport.setText(_keypatterns.getValue("techreport").get(0).toString());
            txtUnpublished.setText(_keypatterns.getValue("unpublished").get(0).toString());
      }

    */
      /**
       * An inner class to handle button actions
       * @author Ulrik Stervbo (ulriks AT ruc.dk)
       */
00355       class buttonHandler implements ActionListener{
            public void actionPerformed(ActionEvent evt){

                if (evt.getSource() == btnDefaultAll) {
                  // All to default
                  Iterator<String> i=textFields.keySet().iterator();
                  while (i.hasNext()) {
                      String s = i.next();
                      //_keypatterns.removeLabelPattern(s);
                      JTextField tf = textFields.get(s);
                            tf.setText("");
                      /*tf.setText(_keypatterns.getParent()
                               .getValue(s).get(0).toString());*/
                  }

                  return;
                }

                //_keypatterns.removeLabelPattern(evt.getActionCommand());
                JTextField tf = textFields.get(evt.getActionCommand());
                    tf.setText("");
                /*tf.setText(_keypatterns.getParent()
                         .getValue(evt.getActionCommand()).get(0).toString());*/
            }
          
      }

00382     public boolean readyToClose() {
      return true;
    }

00386     public void setValues() {
        _keypatterns = _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"));
        // Warning before overwriting is only relevant if overwriting can happen:
        warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
          for (Iterator<String> i=textFields.keySet().iterator(); i.hasNext();) {
            String name = i.next();
            JTextField tf = textFields.get(name);
          setValue(tf, name);
      }

        KeyPatternRegex.setText(Globals.prefs.get("KeyPatternRegex"));
        KeyPatternReplacement.setText(Globals.prefs.get("KeyPatternReplacement"));

          //basenamePatternRegex.setText(Globals.prefs.get("basenamePatternRegex"));
          //basenamePatternReplacement.setText(Globals.prefs.get("basenamePatternReplacement"));
    }

00408       public String getTabName() {
          return Globals.lang("BibTeX key generator");
      }
}

Generated by  Doxygen 1.6.0   Back to index