a54f8bd46c621ce1e4cb86cf51bd63e3837d0f11
[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 import net.sf.jabref.GUIGlobals;
38
39 /**
40  * Dialog for creating or modifying custom exports.
41  */
42 class CustomExportDialog extends JDialog {
43
44     JTextField
45         name = new JTextField(60),
46         layoutFile = new JTextField(60),
47         extension = new JTextField(60);
48     JLabel
49         nl = new JLabel(Globals.lang("Export name")+":"),
50         nr = new JLabel(Globals.lang("Main layout file")+":"),
51         nf = new JLabel(Globals.lang("File extension")+":");
52     JButton
53         ok = new JButton(Globals.lang("Ok")),
54         cancel = new JButton(Globals.lang("Cancel")),
55         browse = new JButton(Globals.lang("Browse"));
56     JPanel
57         main = new JPanel(),
58         opt = new JPanel();
59     private boolean ok_pressed = false;
60     private Vector groups;
61     private int index;
62     private JabRefFrame parent;
63
64     private String /*name, regexp, field,*/ oldName, oldRegexp, oldField;
65
66     GridBagLayout gbl = new GridBagLayout();
67     GridBagConstraints con = new GridBagConstraints();
68
69
70     public CustomExportDialog(JabRefFrame parent_, String name_, String layoutFile_, String extension_) {
71       this(parent_);
72       name.setText(name_);
73       layoutFile.setText(layoutFile_);
74       extension.setText(extension_);
75     }
76
77
78     public CustomExportDialog(JabRefFrame parent_) {
79         super(parent_, Globals.lang("Edit custom export"), true);
80         parent = parent_;
81         //groups = groups_;
82         //index = index_;
83         /*if (index >= 0) {
84             // Group entry already exists.
85             try {
86                 oldField = (String)groups.elementAt(index);
87                 field.setText(oldField);
88                 oldName = (String)groups.elementAt(index+1);
89                 name.setText(oldName);
90                 oldRegexp = (String)groups.elementAt(index+2);
91                 regexp.setText(oldRegexp);
92
93                 // We disable these text fields, since changing field
94                 // or regexp would leave the entries added to the
95                 // group hanging.
96                 field.setEnabled(false);
97                 regexp.setEnabled(false);
98             } catch (ArrayIndexOutOfBoundsException ex) {
99             }
100         } else
101             field.setText(defaultField);
102 */
103         ActionListener okListener = new ActionListener() {
104                 public void actionPerformed(ActionEvent e) {
105
106                     // Check that there are no empty strings.
107                     if ((layoutFile.getText().equals("")) ||
108                         (name.getText().equals("")) ||
109                         (extension.getText().equals("")) ||
110                         (!layoutFile.getText().endsWith(".layout"))) {
111                         //JOptionPane.showMessageDialog
112                         //    (parent, Globals.lang("You must provide a name, a search "
113                         //                        +"string and a field name for this group."),
114                         //                        Globals.lang("Create group"),
115                         //     JOptionPane.ERROR_MESSAGE);
116                         return;
117                     }
118
119                     // Handling of : and ; must also be done.
120
121                     ok_pressed = true;
122                     dispose();
123                 }
124             };
125         ok.addActionListener(okListener);
126         name.addActionListener(okListener);
127         layoutFile.addActionListener(okListener);
128         extension.addActionListener(okListener);
129
130         AbstractAction cancelAction = new AbstractAction() {
131           public void actionPerformed(ActionEvent e) {
132               dispose();
133                 }
134             };
135
136         cancel.addActionListener(cancelAction);
137
138         browse.addActionListener(new ActionListener() {
139           public void actionPerformed(ActionEvent e) {
140             File directory = new File(Globals.prefs.get("exportWorkingDirectory"));
141             String chosenStr = Globals.getNewFile(parent, Globals.prefs, directory, ".layout",
142                                              JFileChooser.OPEN_DIALOG, false);
143             if (chosenStr == null) return;
144             File chosen = new File(chosenStr);
145
146             // Update working directory for layout files.
147             Globals.prefs.put("exportWorkingDirectory", chosen.getParent());
148
149             layoutFile.setText(chosen.getPath());
150           }
151         });
152
153         // Key bindings:
154         ActionMap am = main.getActionMap();
155         InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
156         im.put(parent.prefs().getKey("Close dialog"), "close");
157         am.put("close", cancelAction);
158
159
160         // Layout starts here.
161         main.setLayout(gbl);
162         //opt.setLayout(gbl);
163         main.setBorder(BorderFactory.createTitledBorder
164                        (BorderFactory.createEtchedBorder(),
165                         Globals.lang("Export properties")));
166
167         // Main panel:
168         con.weightx = 0;
169         con.gridwidth = 1;
170         con.insets = new Insets(3, 5, 3, 5);
171         con.anchor = GridBagConstraints.EAST;
172         con.fill = GridBagConstraints.NONE;
173         con.gridx = 0;
174         con.gridy = 0;
175         gbl.setConstraints(nl, con);
176         main.add(nl);
177         con.gridy = 1;
178         gbl.setConstraints(nr, con);
179         main.add(nr);
180         con.gridy = 2;
181         gbl.setConstraints(nf, con);
182         main.add(nf);
183
184         con.gridwidth = 2;
185         con.weightx = 1;
186         con.anchor = GridBagConstraints.WEST;
187         con.fill = GridBagConstraints.HORIZONTAL;
188         con.gridy = 0;
189         con.gridx = 1;
190         gbl.setConstraints(name, con);
191         main.add(name);
192         con.gridy = 1;
193         con.gridwidth = 1;
194         gbl.setConstraints(layoutFile, con);
195         main.add(layoutFile);
196         con.gridx = 2;
197         con.weightx = 0;
198         gbl.setConstraints(browse, con);
199         main.add(browse);
200         con.weightx = 1;
201         con.gridwidth = 2;
202         con.gridx = 1;
203         con.gridy = 2;
204         gbl.setConstraints(extension, con);
205         main.add(extension);
206
207         // Option buttons:
208         con.gridx = GridBagConstraints.RELATIVE;
209         con.gridy = GridBagConstraints.RELATIVE;
210         con.weightx = 1;
211         con.gridwidth = 1;
212         con.anchor = GridBagConstraints.EAST;
213         con.fill = GridBagConstraints.NONE;
214         //gbl.setConstraints(ok, con);
215         opt.add(ok);
216         con.anchor = GridBagConstraints.WEST;
217         con.gridwidth = GridBagConstraints.REMAINDER;
218         //gbl.setConstraints(cancel, con);
219         opt.add(cancel);
220
221         getContentPane().add(main, BorderLayout.CENTER);
222         getContentPane().add(opt, BorderLayout.SOUTH);
223
224         //pack();
225         setSize(600, 170);
226
227         Util.placeDialog(this, parent);
228     }
229
230     public boolean okPressed() {
231         return ok_pressed;
232     }
233
234     public int index() { return index; }
235     public String oldField() { return oldField; }
236     public String oldName() { return oldName; }
237     public String oldRegexp() { return oldRegexp; }
238     public String layoutFile() { return layoutFile.getText(); }
239     public String name() { return name.getText(); }
240     public String extension() {
241       String ext = extension.getText();
242       if (ext.startsWith("."))
243         return ext;
244       else if (ext.startsWith("*."))
245         return ext.substring(1);
246       else
247         return "."+ext;
248     }
249
250 }