package net.sf.jabref; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.TreeSet; import java.util.Vector; import javax.swing.*; import javax.swing.border.TitledBorder; public class ContentSelectorDialog extends JDialog { JPanel panel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JButton Close = new JButton(); GridBagLayout gridBagLayout1 = new GridBagLayout(); JPanel jPanel1 = new JPanel(); JLabel lab = new JLabel(); JTextField fieldTf = new JTextField(); JButton add = new JButton(); JPanel jPanel3 = new JPanel(); JButton remove = new JButton(); JComboBox fieldSelector = new JComboBox(); GridBagLayout gridBagLayout2 = new GridBagLayout(); //HelpAction help; JButton help; JPanel jPanel4 = new JPanel(); GridBagLayout gridBagLayout3 = new GridBagLayout(); GridBagLayout gridBagLayout4 = new GridBagLayout(); TitledBorder titledBorder1; TitledBorder titledBorder2; JLabel jLabel1 = new JLabel(); JComboBox wordSelector = new JComboBox(); JTextField wordTf = new JTextField(); JPanel jPanel5 = new JPanel(); GridBagLayout gridBagLayout5 = new GridBagLayout(); JButton addWord = new JButton(); JPanel jPanel6 = new JPanel(); JButton removeWord = new JButton(); GridBagLayout gridBagLayout6 = new GridBagLayout(); JButton select = new JButton(); final String WORD_EMPTY_TEXT = Globals.lang("<no field>"), WORD_FIRSTLINE_TEXT = Globals.lang("<select word>"), FIELD_FIRST_LINE = Globals.lang("<field name>"); MetaData metaData; String currentField = null; TreeSet<String> fieldSet, wordSet; JabRefFrame frame; public ContentSelectorDialog(JabRefFrame frame, boolean modal, MetaData metaData) { super(frame.getFrame(), Globals.lang("Setup selectors"), modal); this.metaData = metaData; this.frame = frame; help = new JButton(Globals.lang("Help")); help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help")); //help = new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help"); try { jbInit(); wordSelector.addItem(WORD_EMPTY_TEXT); pack(); } catch(Exception ex) { ex.printStackTrace(); } } public ContentSelectorDialog(JabRefFrame frame, boolean modal, MetaData metaData, String fieldName) { this(frame, modal, metaData); try { fieldSelector.setSelectedItem(fieldName); } catch (Exception ex) { ex.printStackTrace(); } // The next two lines remove the part of the interface allowing // the user to control which fields have a selector. I think this // makes the dialog more intuitive. When the user opens this dialog // from the Tools menu, the full interface will be available. panel1.remove(jPanel1); pack(); } /** * Set the contents of the field selector combobox. * */ private void setupFieldSelector() { fieldSelector.removeAllItems(); fieldSelector.addItem(FIELD_FIRST_LINE); for (String s : metaData){ if (s.startsWith(Globals.SELECTOR_META_PREFIX)) fieldSelector.addItem(s.substring(Globals.SELECTOR_META_PREFIX.length())); } } private void updateWordPanel() { if (currentField == null) { titledBorder2.setTitle(""); jPanel3.repaint(); return; } titledBorder2.setTitle(Globals.lang("Field")+": "+currentField); jPanel3.repaint(); fillWordSelector(); wordTf.setText(""); } private void fillWordSelector() { wordSelector.removeAllItems(); wordSelector.addItem(WORD_FIRSTLINE_TEXT); Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + currentField); if ((items != null)) { // && (items.size() > 0)) { wordSet = new TreeSet<String>(items); for (String word : wordSet) wordSelector.addItem(word); } } private void addWord() { if (currentField == null) return; String word = wordTf.getText().trim(); if (!wordSet.contains(word)) { Util.pr(Globals.SELECTOR_META_PREFIX+currentField); wordSet.add(word); // Create a new Vector for this word list, and update the MetaData. metaData.putData(Globals.SELECTOR_META_PREFIX+currentField, new Vector<String>(wordSet)); fillWordSelector(); frame.basePanel().markNonUndoableBaseChanged(); //wordTf.selectAll(); wordTf.setText(""); wordTf.requestFocus(); } } private void addField() { currentField = fieldTf.getText().trim().toLowerCase(); if (metaData.getData(Globals.SELECTOR_META_PREFIX+currentField) == null) { metaData.putData(Globals.SELECTOR_META_PREFIX+currentField, new Vector<String>()); frame.basePanel().markNonUndoableBaseChanged(); setupFieldSelector(); updateWordPanel(); } } private void removeWord() { String word = wordTf.getText().trim(); if (wordSet.contains(word)) { wordSet.remove(word); // Create a new Vector for this word list, and update the MetaData. metaData.putData(Globals.SELECTOR_META_PREFIX+currentField, new Vector<String>(wordSet)); fillWordSelector(); frame.basePanel().markNonUndoableBaseChanged(); //wordTf.selectAll(); wordTf.setText(""); wordTf.requestFocus(); } } void fieldSelector_actionPerformed(ActionEvent e) { if (fieldSelector.getSelectedIndex() > 0) { //fieldTf.setText((String)fieldSelector.getSelectedItem()); currentField = (String)fieldSelector.getSelectedItem(); updateWordPanel(); } } private void jbInit() { titledBorder1 = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(142, 142, 142)),Globals.lang("Selector enabled fields")); titledBorder2 = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(142, 142, 142)),Globals.lang("Item list for field")); //jPanel1.setBackground(GUIGlobals.lightGray); //jPanel2.setBackground(GUIGlobals.lightGray); //panel1.setBackground(GUIGlobals.lightGray); panel1.setLayout(gridBagLayout1); Close.setText(Globals.lang("Close")); Close.addActionListener(new ContentSelectorDialog_Close_actionAdapter(this)); lab.setRequestFocusEnabled(true); lab.setText(Globals.lang("Field name")+":"); fieldTf.setSelectionEnd(8); add.setText(Globals.lang("Add")); remove.setText(Globals.lang("Remove")); jPanel1.setLayout(gridBagLayout2); jPanel1.setBorder(titledBorder1); jPanel3.setBorder(titledBorder2); jPanel3.setLayout(gridBagLayout4); jPanel4.setLayout(gridBagLayout3); jLabel1.setText(Globals.lang("Word")+":"); jPanel5.setLayout(gridBagLayout5); addWord.setText(Globals.lang("Add")); removeWord.setText(Globals.lang("Remove")); jPanel6.setLayout(gridBagLayout6); select.setText(Globals.lang("Select")); fieldSelector.addActionListener(new ContentSelectorDialog_fieldSelector_actionAdapter(this)); getContentPane().add(panel1); this.getContentPane().add(jPanel2, BorderLayout.SOUTH); //JToolBar tlb = new JToolBar(); //tlb.setLayout(new GridLayout(1,1)); //tlb.setPreferredSize(new Dimension(28, 28)); //tlb.setFloatable(false); //tlb.add(help); jPanel2.add(help, null); jPanel2.add(Close, null); panel1.add(jPanel1, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); jPanel1.add(lab, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); jPanel1.add(fieldTf, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 1, 0)); panel1.add(jPanel3, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); jPanel3.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); jPanel1.add(fieldSelector, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); jPanel1.add(jPanel4, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); jPanel4.add(add, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); jPanel4.add(remove, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 0, 5, 5), 0, 0)); jPanel3.add(wordSelector, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); jPanel3.add(wordTf, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); jPanel3.add(jPanel5, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); jPanel3.add(jPanel6, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); jPanel6.add(addWord, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); jPanel6.add(removeWord, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 0, 5, 5), 0, 0)); jPanel1.add(select, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); add.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addField(); } }); wordTf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addWord(); } }); addWord.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addWord(); } }); removeWord.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWord(); } }); wordSelector.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (wordSelector.getSelectedIndex() > 0) { wordTf.setText((String)wordSelector.getSelectedItem()); wordTf.requestFocus(); } } }); setupFieldSelector(); } void Close_actionPerformed(ActionEvent e) { dispose(); } } class ContentSelectorDialog_Close_actionAdapter implements java.awt.event.ActionListener { ContentSelectorDialog adaptee; ContentSelectorDialog_Close_actionAdapter(ContentSelectorDialog adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.Close_actionPerformed(e); } } class ContentSelectorDialog_fieldSelector_actionAdapter implements java.awt.event.ActionListener { ContentSelectorDialog adaptee; ContentSelectorDialog_fieldSelector_actionAdapter(ContentSelectorDialog adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.fieldSelector_actionPerformed(e); } }