/* Copyright (C) 2003-2011 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.export; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.*; import net.sf.jabref.Globals; import net.sf.jabref.JabRefFrame; import net.sf.jabref.Util; import net.sf.jabref.gui.FileDialogs; import com.jgoodies.forms.builder.ButtonBarBuilder; /** * Dialog for creating or modifying custom exports. */ class CustomExportDialog extends JDialog { JTextField name = new JTextField(60), layoutFile = new JTextField(60), extension = new JTextField(60); JLabel nl = new JLabel(Globals.lang("Export name")+":"), nr = new JLabel(Globals.lang("Main layout file")+":"), nf = new JLabel(Globals.lang("File extension")+":"); JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals.lang("Cancel")), browse = new JButton(Globals.lang("Browse")); JPanel main = new JPanel(), buttons = new JPanel(); private boolean ok_pressed = false; private int index; private JabRefFrame parent; private String oldName, oldRegexp, oldField; GridBagLayout gbl = new GridBagLayout(); GridBagConstraints con = new GridBagConstraints(); public CustomExportDialog(JabRefFrame parent_, String name_, String layoutFile_, String extension_) { this(parent_); name.setText(name_); layoutFile.setText(layoutFile_); extension.setText(extension_); } public CustomExportDialog(JabRefFrame parent_) { super(parent_, Globals.lang("Edit custom export"), true); parent = parent_; ActionListener okListener = new ActionListener() { public void actionPerformed(ActionEvent e) { // Check that there are no empty strings. if ((layoutFile.getText().equals("")) || (name.getText().equals("")) || (extension.getText().equals("")) || (!layoutFile.getText().endsWith(".layout"))) { //JOptionPane.showMessageDialog // (parent, Globals.lang("You must provide a name, a search " // +"string and a field name for this group."), // Globals.lang("Create group"), // JOptionPane.ERROR_MESSAGE); return; } // Handling of : and ; must also be done. ok_pressed = true; dispose(); } }; ok.addActionListener(okListener); name.addActionListener(okListener); layoutFile.addActionListener(okListener); extension.addActionListener(okListener); AbstractAction cancelAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { dispose(); } }; cancel.addActionListener(cancelAction); browse.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { File directory = new File(Globals.prefs.get("exportWorkingDirectory")); String chosenStr = FileDialogs.getNewFile(parent, directory, ".layout", JFileChooser.OPEN_DIALOG, false); if (chosenStr == null) return; File chosen = new File(chosenStr); // Update working directory for layout files. Globals.prefs.put("exportWorkingDirectory", chosen.getParent()); layoutFile.setText(chosen.getPath()); } }); // Key bindings: ActionMap am = main.getActionMap(); InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); im.put(parent.prefs().getKey("Close dialog"), "close"); am.put("close", cancelAction); // Layout starts here. main.setLayout(gbl); main.setBorder(BorderFactory.createTitledBorder (BorderFactory.createEtchedBorder(), Globals.lang("Export properties"))); // Main panel: con.weightx = 0; con.gridwidth = 1; con.insets = new Insets(3, 5, 3, 5); con.anchor = GridBagConstraints.EAST; con.fill = GridBagConstraints.NONE; con.gridx = 0; con.gridy = 0; gbl.setConstraints(nl, con); main.add(nl); con.gridy = 1; gbl.setConstraints(nr, con); main.add(nr); con.gridy = 2; gbl.setConstraints(nf, con); main.add(nf); con.gridwidth = 2; con.weightx = 1; con.anchor = GridBagConstraints.WEST; con.fill = GridBagConstraints.HORIZONTAL; con.gridy = 0; con.gridx = 1; gbl.setConstraints(name, con); main.add(name); con.gridy = 1; con.gridwidth = 1; gbl.setConstraints(layoutFile, con); main.add(layoutFile); con.gridx = 2; con.weightx = 0; gbl.setConstraints(browse, con); main.add(browse); con.weightx = 1; con.gridwidth = 2; con.gridx = 1; con.gridy = 2; gbl.setConstraints(extension, con); main.add(extension); ButtonBarBuilder bb = new ButtonBarBuilder(buttons); buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); bb.addGlue(); bb.addButton(ok); bb.addButton(cancel); bb.addGlue(); getContentPane().add(main, BorderLayout.CENTER); getContentPane().add(buttons, BorderLayout.SOUTH); //pack(); setSize(600, 170); Util.placeDialog(this, parent); } public boolean okPressed() { return ok_pressed; } public int index() { return index; } public String oldField() { return oldField; } public String oldName() { return oldName; } public String oldRegexp() { return oldRegexp; } public String layoutFile() { return layoutFile.getText(); } public String name() { return name.getText(); } public String extension() { String ext = extension.getText(); if (ext.startsWith(".")) return ext; else if (ext.startsWith("*.")) return ext.substring(1); else return "."+ext; } }