badec9f9603f5574c49fb82fa5ffc055d6c4f077
[debian/jabref.git] / src / java / net / sf / jabref / export / CustomExportDialog.java
1 /*
2 Copyright (C) 2003 Morten O. Alver, Nizar N. Batada
3
4 All programs in this directory and
5 subdirectories are published under the GNU General Public License as
6 described below.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or (at
11 your option) any later version.
12
13 This program is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 USA
22
23 Further information about the GNU GPL is available at:
24 http://www.gnu.org/copyleft/gpl.ja.html
25
26 */
27 package net.sf.jabref.export;
28
29 import java.awt.*;
30 import java.awt.event.*;
31 import javax.swing.*;
32 import java.util.Vector;
33 import java.io.File;
34 import net.sf.jabref.JabRefFrame;
35 import net.sf.jabref.Util;
36 import net.sf.jabref.Globals;
37
38 /**
39  * Dialog for creating or modifying custom exports.
40  */
41 class CustomExportDialog extends JDialog {
42
43     JTextField
44     name = new JTextField(60),
45     layoutFile = new JTextField(60),
46     extension = new JTextField(60);
47     JLabel
48     nl = new JLabel(Globals.lang("Export name")+":"),
49     nr = new JLabel(Globals.lang("Main layout file")+":"),
50     nf = new JLabel(Globals.lang("File extension")+":");
51     JButton
52         ok = new JButton(Globals.lang("Ok")),
53         cancel = new JButton(Globals.lang("Cancel")),
54         browse = new JButton(Globals.lang("Browse"));
55     JPanel
56     main = new JPanel(),
57     opt = new JPanel();
58     private boolean ok_pressed = false;
59     private Vector groups;
60     private int index;
61     private JabRefFrame parent;
62
63     private String /*name, regexp, field,*/ oldName, oldRegexp, oldField;
64
65     GridBagLayout gbl = new GridBagLayout();
66     GridBagConstraints con = new GridBagConstraints();
67
68
69     public CustomExportDialog(JabRefFrame parent_, String name_, String layoutFile_, String extension_) {
70       this(parent_);
71       name.setText(name_);
72       layoutFile.setText(layoutFile_);
73       extension.setText(extension_);
74     }
75
76
77     public CustomExportDialog(JabRefFrame parent_) {
78     super(parent_, Globals.lang("Edit custom export"), true);
79     parent = parent_;
80     //groups = groups_;
81     //index = index_;
82     /*if (index >= 0) {
83             // Group entry already exists.
84             try {
85             oldField = (String)groups.elementAt(index);
86             field.setText(oldField);
87             oldName = (String)groups.elementAt(index+1);
88             name.setText(oldName);
89             oldRegexp = (String)groups.elementAt(index+2);
90             regexp.setText(oldRegexp);
91
92             // We disable these text fields, since changing field
93             // or regexp would leave the entries added to the
94             // group hanging.
95             field.setEnabled(false);
96             regexp.setEnabled(false);
97             } catch (ArrayIndexOutOfBoundsException ex) {
98             }
99         } else
100             field.setText(defaultField);
101     */
102     ActionListener okListener = new ActionListener() {
103         public void actionPerformed(ActionEvent e) {
104
105             // Check that there are no empty strings.
106             if ((layoutFile.getText().equals("")) ||
107             (name.getText().equals("")) ||
108             (extension.getText().equals("")) ||
109                         (!layoutFile.getText().endsWith(".layout"))) {
110             //JOptionPane.showMessageDialog
111             //    (parent, Globals.lang("You must provide a name, a search "
112             //                    +"string and a field name for this group."),
113             //                    Globals.lang("Create group"),
114             //     JOptionPane.ERROR_MESSAGE);
115             return;
116             }
117
118             // Handling of : and ; must also be done.
119
120             ok_pressed = true;
121             dispose();
122         }
123         };
124     ok.addActionListener(okListener);
125     name.addActionListener(okListener);
126     layoutFile.addActionListener(okListener);
127     extension.addActionListener(okListener);
128
129     AbstractAction cancelAction = new AbstractAction() {
130           public void actionPerformed(ActionEvent e) {
131               dispose();
132         }
133         };
134
135     cancel.addActionListener(cancelAction);
136
137         browse.addActionListener(new ActionListener() {
138           public void actionPerformed(ActionEvent e) {
139             File directory = new File(Globals.prefs.get("exportWorkingDirectory"));
140             String chosenStr = Globals.getNewFile(parent, directory, ".layout",
141                                              JFileChooser.OPEN_DIALOG, false);
142             if (chosenStr == null) return;
143             File chosen = new File(chosenStr);
144
145             // Update working directory for layout files.
146             Globals.prefs.put("exportWorkingDirectory", chosen.getParent());
147
148             layoutFile.setText(chosen.getPath());
149           }
150         });
151
152         // Key bindings:
153         ActionMap am = main.getActionMap();
154         InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
155         im.put(parent.prefs().getKey("Close dialog"), "close");
156     am.put("close", cancelAction);
157
158
159     // Layout starts here.
160     main.setLayout(gbl);
161     //opt.setLayout(gbl);
162     main.setBorder(BorderFactory.createTitledBorder
163                (BorderFactory.createEtchedBorder(),
164             Globals.lang("Export properties")));
165
166     // Main panel:
167     con.weightx = 0;
168     con.gridwidth = 1;
169     con.insets = new Insets(3, 5, 3, 5);
170     con.anchor = GridBagConstraints.EAST;
171     con.fill = GridBagConstraints.NONE;
172     con.gridx = 0;
173     con.gridy = 0;
174     gbl.setConstraints(nl, con);
175     main.add(nl);
176     con.gridy = 1;
177     gbl.setConstraints(nr, con);
178     main.add(nr);
179     con.gridy = 2;
180     gbl.setConstraints(nf, con);
181     main.add(nf);
182
183         con.gridwidth = 2;
184         con.weightx = 1;
185     con.anchor = GridBagConstraints.WEST;
186     con.fill = GridBagConstraints.HORIZONTAL;
187     con.gridy = 0;
188     con.gridx = 1;
189     gbl.setConstraints(name, con);
190     main.add(name);
191     con.gridy = 1;
192         con.gridwidth = 1;
193         gbl.setConstraints(layoutFile, con);
194     main.add(layoutFile);
195         con.gridx = 2;
196         con.weightx = 0;
197         gbl.setConstraints(browse, con);
198         main.add(browse);
199         con.weightx = 1;
200         con.gridwidth = 2;
201         con.gridx = 1;
202     con.gridy = 2;
203     gbl.setConstraints(extension, con);
204     main.add(extension);
205
206            // Option buttons:
207     con.gridx = GridBagConstraints.RELATIVE;
208     con.gridy = GridBagConstraints.RELATIVE;
209     con.weightx = 1;
210     con.gridwidth = 1;
211     con.anchor = GridBagConstraints.EAST;
212     con.fill = GridBagConstraints.NONE;
213     //gbl.setConstraints(ok, con);
214     opt.add(ok);
215     con.anchor = GridBagConstraints.WEST;
216     con.gridwidth = GridBagConstraints.REMAINDER;
217     //gbl.setConstraints(cancel, con);
218     opt.add(cancel);
219
220     getContentPane().add(main, BorderLayout.CENTER);
221     getContentPane().add(opt, BorderLayout.SOUTH);
222
223     //pack();
224     setSize(600, 170);
225
226         Util.placeDialog(this, parent);
227     }
228
229     public boolean okPressed() {
230     return ok_pressed;
231     }
232
233     public int index() { return index; }
234     public String oldField() { return oldField; }
235     public String oldName() { return oldName; }
236     public String oldRegexp() { return oldRegexp; }
237     public String layoutFile() { return layoutFile.getText(); }
238     public String name() { return name.getText(); }
239     public String extension() {
240       String ext = extension.getText();
241       if (ext.startsWith("."))
242         return ext;
243       else if (ext.startsWith("*."))
244         return ext.substring(1);
245       else
246         return "."+ext;
247     }
248
249 }