/*
* EntryTypeList.java
*
* Created on February 13, 2005, 2:07 PM
*/
package net.sf.jabref.gui;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.sf.jabref.BibtexEntryType;
import net.sf.jabref.CustomEntryType;
import net.sf.jabref.Globals;
import net.sf.jabref.Util;
/**
* This class extends FieldSetComponent to provide some required functionality for the
* list of entry types in EntryCustomizationDialog2.
* @author alver
*/
public class EntryTypeList extends FieldSetComponent implements ListSelectionListener, ActionListener {
protected JButton def = new JButton(Globals.lang("Default"));
/** Creates a new instance of EntryTypeList */
public EntryTypeList(List<String> fields) {
super(Globals.lang("Entry types"), fields, false, true);
con.gridx = 0;
con.gridy = 2;
con.fill = GridBagConstraints.VERTICAL;
con.anchor = GridBagConstraints.EAST;
gbl.setConstraints(def, con);
add(def);
list.addListSelectionListener(this);
def.addActionListener(this);
def.setEnabled(false);
remove.setEnabled(false);
}
protected void addField(String s) {
s = s.trim();
if (forceLowerCase)
s = s.toLowerCase();
if (s.equals("") || listModel.contains(s))
return;
String testString = Util.checkLegalKey(s);
if (!testString.equals(s) || (s.indexOf('&') >= 0)) {
// Report error and exit.
JOptionPane.showMessageDialog(this, Globals.lang("Entry type names are not allowed to contain white space or the following "
+"characters")+": # { } ~ , ^ &",
Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
return;
}
else if (s.equalsIgnoreCase("comment")) {
// Report error and exit.
JOptionPane.showMessageDialog(this, Globals.lang("The name 'comment' can not be used as an entry type name."),
Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
return;
}
addFieldUncritically(s);
}
protected void removeSelected() {
//super.removeSelected();
int[] selected = list.getSelectedIndices();
if (selected.length > 0)
changesMade = true;
for (int i=0; i<selected.length; i++) {
String typeName = (String)listModel.get(selected[selected.length-1-i]);
BibtexEntryType type = BibtexEntryType.getType(typeName);
// If it is a custom entry type, we can remove it. If type == null, it means
// the user must have added it and not yet applied it, so we can remove it
// in this case as well. If it is a standard type it cannot be removed.
if ((type != null) && (type instanceof CustomEntryType)) {
listModel.removeElementAt(selected[selected.length-1-i]);
}
else
// This shouldn't happen, since the Remove button should be disabled.
JOptionPane.showMessageDialog(null, Globals.lang("This entry type cannot be removed."),
Globals.lang("Remove entry type"), JOptionPane.ERROR_MESSAGE);
}
}
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
//
}
public void enable(String typeName, boolean isChanged) {
//String s = (String)list.getSelectedValue();
if (BibtexEntryType.getStandardType(typeName) != null) {
if (isChanged || (BibtexEntryType.getType(typeName) instanceof CustomEntryType)) {
def.setEnabled(true);
} else
def.setEnabled(false);
remove.setEnabled(false);
} else {
def.setEnabled(false);
remove.setEnabled(true);
}
}
public void addDefaultActionListener(ActionListener l) {
def.addActionListener(l);
}
public void actionPerformed(ActionEvent e) {
// Default button pressed.
if (e.getSource() == def)
def.setEnabled(false);
else super.actionPerformed(e);
}
public void setEnabled(boolean en) {
super.setEnabled(en);
def.setEnabled(en);
}
}