Package net.sf.jabref

Source Code of net.sf.jabref.TabLabelPattern$buttonHandler

/*
* 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.
*/
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
   */
  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.
   *
   */
  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
   *
   */
  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)
   */
  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());*/
    }
     
  }

    public boolean readyToClose() {
  return true;
    }

    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"));
    }

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

Related Classes of net.sf.jabref.TabLabelPattern$buttonHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.