1 | |
package net.sf.jabref; |
2 | |
|
3 | |
import java.awt.BorderLayout; |
4 | |
import java.awt.event.ActionEvent; |
5 | |
import java.awt.event.ActionListener; |
6 | |
import java.util.Arrays; |
7 | |
import java.util.Collections; |
8 | |
import java.util.Vector; |
9 | |
|
10 | |
import javax.swing.*; |
11 | |
import javax.swing.event.ChangeEvent; |
12 | |
import javax.swing.event.ChangeListener; |
13 | |
|
14 | |
import com.jgoodies.forms.builder.DefaultFormBuilder; |
15 | |
import com.jgoodies.forms.layout.FormLayout; |
16 | |
|
17 | 1058839791 | class TablePrefsTab extends JPanel implements PrefsTab { |
18 | |
|
19 | |
JabRefPreferences _prefs; |
20 | |
|
21 | |
private JCheckBox autoResizeMode, priDesc, secDesc, terDesc, floatMarked, pdfColumn, urlColumn, |
22 | |
fileColumn, citeseerColumn; |
23 | |
|
24 | |
private JRadioButton namesAsIs, namesFf, namesFl, namesNatbib, abbrNames, noAbbrNames, |
25 | |
lastNamesOnly; |
26 | |
|
27 | |
private JComboBox priSort, secSort, terSort; |
28 | |
|
29 | |
private JTextField priField, secField, terField, numericFields; |
30 | |
|
31 | |
|
32 | |
|
33 | |
|
34 | |
|
35 | |
|
36 | |
|
37 | 122252627 | public TablePrefsTab(JabRefPreferences prefs, JabRefFrame frame) { |
38 | 122252627 | _prefs = prefs; |
39 | 122252627 | setLayout(new BorderLayout()); |
40 | |
|
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
|
48 | 122252627 | Vector<String> v = new Vector<String>(Arrays.asList(BibtexFields.getAllFieldNames())); |
49 | 122252627 | v.add(BibtexFields.KEY_FIELD); |
50 | 122252627 | Collections.sort(v); |
51 | 122252627 | Object[] allPlusKey = v.toArray(); |
52 | 122252627 | priSort = new JComboBox(allPlusKey); |
53 | 122252627 | secSort = new JComboBox(allPlusKey); |
54 | 122252627 | terSort = new JComboBox(allPlusKey); |
55 | |
|
56 | 122252627 | autoResizeMode = new JCheckBox(Globals.lang("Fit table horizontally on screen")); |
57 | |
|
58 | 122252627 | namesAsIs = new JRadioButton(Globals.lang("Show names unchanged")); |
59 | 122252627 | namesFf = new JRadioButton(Globals.lang("Show 'Firstname Lastname'")); |
60 | 122252627 | namesFl = new JRadioButton(Globals.lang("Show 'Lastname, Firstname'")); |
61 | 122252627 | namesNatbib = new JRadioButton(Globals.lang("Natbib style")); |
62 | 122252627 | noAbbrNames = new JRadioButton(Globals.lang("Do not abbreviate names")); |
63 | 122252627 | abbrNames = new JRadioButton(Globals.lang("Abbreviate names")); |
64 | 122252627 | lastNamesOnly = new JRadioButton(Globals.lang("Show last names only")); |
65 | 122252627 | fileColumn = new JCheckBox(Globals.lang("Show file column")); |
66 | 122252627 | pdfColumn = new JCheckBox(Globals.lang("Show PDF/PS column")); |
67 | 122252627 | urlColumn = new JCheckBox(Globals.lang("Show URL/DOI column")); |
68 | 122252627 | citeseerColumn = new JCheckBox(Globals.lang("Show CiteSeer column")); |
69 | |
|
70 | 122252627 | floatMarked = new JCheckBox(Globals.lang("Float marked entries")); |
71 | |
|
72 | 122252627 | priField = new JTextField(10); |
73 | 122252627 | secField = new JTextField(10); |
74 | 122252627 | terField = new JTextField(10); |
75 | |
|
76 | 122252627 | numericFields = new JTextField(30); |
77 | |
|
78 | 122252627 | priSort.insertItemAt(Globals.lang("<select>"), 0); |
79 | 122252627 | secSort.insertItemAt(Globals.lang("<select>"), 0); |
80 | 122252627 | terSort.insertItemAt(Globals.lang("<select>"), 0); |
81 | |
|
82 | 122252627 | priSort.addActionListener(new ActionListener() { |
83 | |
public void actionPerformed(ActionEvent e) { |
84 | 123293597 | if (priSort.getSelectedIndex() > 0) { |
85 | 0 | priField.setText(priSort.getSelectedItem().toString()); |
86 | 0 | priSort.setSelectedIndex(0); |
87 | |
} |
88 | 123293597 | } |
89 | |
}); |
90 | 122252627 | secSort.addActionListener(new ActionListener() { |
91 | |
public void actionPerformed(ActionEvent e) { |
92 | 123293597 | if (secSort.getSelectedIndex() > 0) { |
93 | 0 | secField.setText(secSort.getSelectedItem().toString()); |
94 | 0 | secSort.setSelectedIndex(0); |
95 | |
} |
96 | 123293597 | } |
97 | |
}); |
98 | 122252627 | terSort.addActionListener(new ActionListener() { |
99 | |
public void actionPerformed(ActionEvent e) { |
100 | 123293597 | if (terSort.getSelectedIndex() > 0) { |
101 | 0 | terField.setText(terSort.getSelectedItem().toString()); |
102 | 0 | terSort.setSelectedIndex(0); |
103 | |
} |
104 | 123293597 | } |
105 | |
}); |
106 | |
|
107 | 122252627 | ButtonGroup bg = new ButtonGroup(); |
108 | 122252627 | bg.add(namesAsIs); |
109 | 122252627 | bg.add(namesNatbib); |
110 | 122252627 | bg.add(namesFf); |
111 | 122252627 | bg.add(namesFl); |
112 | 122252627 | ButtonGroup bg2 = new ButtonGroup(); |
113 | 122252627 | bg2.add(lastNamesOnly); |
114 | 122252627 | bg2.add(abbrNames); |
115 | 122252627 | bg2.add(noAbbrNames); |
116 | 122252627 | priDesc = new JCheckBox(Globals.lang("Descending")); |
117 | 122252627 | secDesc = new JCheckBox(Globals.lang("Descending")); |
118 | 122252627 | terDesc = new JCheckBox(Globals.lang("Descending")); |
119 | |
|
120 | 122252627 | FormLayout layout = new FormLayout( |
121 | |
"1dlu, 8dlu, left:pref, 4dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, fill:pref", ""); |
122 | 122252627 | DefaultFormBuilder builder = new DefaultFormBuilder(layout); |
123 | |
JLabel lab; |
124 | 122252627 | JPanel pan = new JPanel(); |
125 | 122252627 | builder.appendSeparator(Globals.lang("Special table columns")); |
126 | 122252627 | builder.nextLine(); |
127 | 122252627 | builder.append(pan); |
128 | 122252627 | builder.append(fileColumn); |
129 | 122252627 | builder.nextLine(); |
130 | 122252627 | builder.append(pan); |
131 | 122252627 | builder.append(pdfColumn); |
132 | 122252627 | builder.nextLine(); |
133 | 122252627 | builder.append(pan); |
134 | 122252627 | builder.append(urlColumn); |
135 | 122252627 | builder.nextLine(); |
136 | 122252627 | builder.append(pan); |
137 | 122252627 | builder.append(citeseerColumn); |
138 | 122252627 | builder.nextLine(); |
139 | 122252627 | builder.appendSeparator(Globals.lang("Format of author and editor names")); |
140 | 122252627 | DefaultFormBuilder nameBuilder = new DefaultFormBuilder(new FormLayout( |
141 | |
"left:pref, 8dlu, left:pref", "")); |
142 | |
|
143 | 122252627 | nameBuilder.append(namesAsIs); |
144 | 122252627 | nameBuilder.append(noAbbrNames); |
145 | 122252627 | nameBuilder.nextLine(); |
146 | 122252627 | nameBuilder.append(namesFf); |
147 | 122252627 | nameBuilder.append(abbrNames); |
148 | 122252627 | nameBuilder.nextLine(); |
149 | 122252627 | nameBuilder.append(namesFl); |
150 | 122252627 | nameBuilder.append(lastNamesOnly); |
151 | 122252627 | nameBuilder.nextLine(); |
152 | 122252627 | nameBuilder.append(namesNatbib); |
153 | 122252627 | builder.append(pan); |
154 | 122252627 | builder.append(nameBuilder.getPanel()); |
155 | 122252627 | builder.nextLine(); |
156 | |
|
157 | |
|
158 | |
|
159 | |
|
160 | |
|
161 | 122252627 | builder.appendSeparator(Globals.lang("Default sort criteria")); |
162 | |
|
163 | 122252627 | FormLayout layout2 = new FormLayout( |
164 | |
"left:pref, 8dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, left:pref", ""); |
165 | 122252627 | DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2); |
166 | 122252627 | lab = new JLabel(Globals.lang("Primary sort criterion")); |
167 | 122252627 | builder2.append(lab); |
168 | 122252627 | builder2.append(priSort); |
169 | 122252627 | builder2.append(priField); |
170 | 122252627 | builder2.append(priDesc); |
171 | 122252627 | builder2.nextLine(); |
172 | 122252627 | lab = new JLabel(Globals.lang("Secondary sort criterion")); |
173 | 122252627 | builder2.append(lab); |
174 | 122252627 | builder2.append(secSort); |
175 | 122252627 | builder2.append(secField); |
176 | 122252627 | builder2.append(secDesc); |
177 | 122252627 | builder2.nextLine(); |
178 | 122252627 | lab = new JLabel(Globals.lang("Tertiary sort criterion")); |
179 | 122252627 | builder2.append(lab); |
180 | 122252627 | builder2.append(terSort); |
181 | 122252627 | builder2.append(terField); |
182 | 122252627 | builder2.append(terDesc); |
183 | 122252627 | builder.nextLine(); |
184 | 122252627 | builder.append(pan); |
185 | 122252627 | builder.append(builder2.getPanel()); |
186 | 122252627 | builder.nextLine(); |
187 | 122252627 | builder.append(pan); |
188 | 122252627 | builder.append(floatMarked); |
189 | 122252627 | builder.nextLine(); |
190 | 122252627 | builder.append(pan); |
191 | 122252627 | builder2 = new DefaultFormBuilder(new FormLayout("left:pref, 8dlu, fill:pref","")); |
192 | 122252627 | builder2.append(Globals.lang("Sort the following fields as numeric fields")+":"); |
193 | 122252627 | builder2.append(numericFields); |
194 | 122252627 | builder.append(builder2.getPanel(), 5); |
195 | 122252627 | builder.nextLine(); |
196 | 122252627 | builder.appendSeparator(Globals.lang("General")); |
197 | 122251302 | builder.append(pan); |
198 | 122251302 | builder.append(autoResizeMode); |
199 | 122251302 | builder.nextLine(); |
200 | |
|
201 | 122251302 | pan = builder.getPanel(); |
202 | 122251302 | pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
203 | 122251302 | add(pan, BorderLayout.CENTER); |
204 | |
|
205 | 122251302 | namesNatbib.addChangeListener(new ChangeListener() { |
206 | |
public void stateChanged(ChangeEvent changeEvent) { |
207 | 114826500 | abbrNames.setEnabled(!namesNatbib.isSelected()); |
208 | 114826500 | lastNamesOnly.setEnabled(!namesNatbib.isSelected()); |
209 | 114826500 | noAbbrNames.setEnabled(!namesNatbib.isSelected()); |
210 | 114826500 | } |
211 | |
}); |
212 | 122251302 | } |
213 | |
|
214 | |
public void setValues() { |
215 | 123293597 | autoResizeMode |
216 | |
.setSelected((_prefs.getInt("autoResizeMode") == JTable.AUTO_RESIZE_ALL_COLUMNS)); |
217 | 123293597 | fileColumn.setSelected(_prefs.getBoolean("fileColumn")); |
218 | 123293597 | pdfColumn.setSelected(_prefs.getBoolean("pdfColumn")); |
219 | 123293597 | urlColumn.setSelected(_prefs.getBoolean("urlColumn")); |
220 | 123293597 | fileColumn.setSelected(_prefs.getBoolean("fileColumn")); |
221 | 123293597 | citeseerColumn.setSelected(_prefs.getBoolean("citeseerColumn")); |
222 | |
|
223 | 123293597 | priField.setText(_prefs.get("priSort")); |
224 | 123293597 | secField.setText(_prefs.get("secSort")); |
225 | 123293597 | terField.setText(_prefs.get("terSort")); |
226 | 123293597 | priSort.setSelectedIndex(0); |
227 | 123293597 | secSort.setSelectedIndex(0); |
228 | 123293597 | terSort.setSelectedIndex(0); |
229 | |
|
230 | 123293597 | if (_prefs.getBoolean("namesAsIs")) |
231 | 0 | namesAsIs.setSelected(true); |
232 | 123293597 | else if (_prefs.getBoolean("namesFf")) |
233 | 13447425 | namesFf.setSelected(true); |
234 | 109846172 | else if (_prefs.getBoolean("namesNatbib")) |
235 | 109846172 | namesNatbib.setSelected(true); |
236 | |
else |
237 | 0 | namesFl.setSelected(true); |
238 | 123293597 | if (_prefs.getBoolean("abbrAuthorNames")) |
239 | 123293597 | abbrNames.setSelected(true); |
240 | 0 | else if (_prefs.getBoolean("namesLastOnly")) |
241 | 0 | lastNamesOnly.setSelected(true); |
242 | |
else |
243 | 0 | noAbbrNames.setSelected(true); |
244 | 123293597 | priDesc.setSelected(_prefs.getBoolean("priDescending")); |
245 | 123293597 | secDesc.setSelected(_prefs.getBoolean("secDescending")); |
246 | 123293597 | terDesc.setSelected(_prefs.getBoolean("terDescending")); |
247 | |
|
248 | 123293597 | floatMarked.setSelected(_prefs.getBoolean("floatMarkedEntries")); |
249 | |
|
250 | 123293597 | abbrNames.setEnabled(!namesNatbib.isSelected()); |
251 | 123293597 | lastNamesOnly.setEnabled(!namesNatbib.isSelected()); |
252 | 123293597 | noAbbrNames.setEnabled(!namesNatbib.isSelected()); |
253 | |
|
254 | 123293597 | String numF = _prefs.get("numericFields"); |
255 | 123293597 | if (numF == null) |
256 | 0 | numericFields.setText(""); |
257 | |
else |
258 | 123293597 | numericFields.setText(numF); |
259 | 123293597 | } |
260 | |
|
261 | |
|
262 | |
|
263 | |
|
264 | |
|
265 | |
|
266 | |
public void storeSettings() { |
267 | |
|
268 | 28777213 | _prefs.putBoolean("namesAsIs", namesAsIs.isSelected()); |
269 | 28777213 | _prefs.putBoolean("namesFf", namesFf.isSelected()); |
270 | 28777213 | _prefs.putBoolean("namesNatbib", namesNatbib.isSelected()); |
271 | 28777213 | _prefs.putBoolean("namesLastOnly", lastNamesOnly.isSelected()); |
272 | 28777213 | _prefs.putBoolean("abbrAuthorNames", abbrNames.isSelected()); |
273 | |
|
274 | 28777213 | _prefs.putBoolean("fileColumn", fileColumn.isSelected()); |
275 | 28777213 | _prefs.putBoolean("pdfColumn", pdfColumn.isSelected()); |
276 | 28777213 | _prefs.putBoolean("urlColumn", urlColumn.isSelected()); |
277 | 28777213 | _prefs.putBoolean("citeseerColumn", citeseerColumn.isSelected()); |
278 | 28777213 | _prefs.putInt("autoResizeMode", |
279 | |
autoResizeMode.isSelected() ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF); |
280 | 28777213 | _prefs.putBoolean("priDescending", priDesc.isSelected()); |
281 | 28777213 | _prefs.putBoolean("secDescending", secDesc.isSelected()); |
282 | 28777213 | _prefs.putBoolean("terDescending", terDesc.isSelected()); |
283 | |
|
284 | |
|
285 | |
|
286 | |
|
287 | 28777213 | _prefs.put("priSort", priField.getText().toLowerCase().trim()); |
288 | 28777213 | _prefs.put("secSort", secField.getText().toLowerCase().trim()); |
289 | 28777213 | _prefs.put("terSort", terField.getText().toLowerCase().trim()); |
290 | |
|
291 | 28777213 | _prefs.putBoolean("floatMarkedEntries", floatMarked.isSelected()); |
292 | |
|
293 | |
|
294 | 28777213 | String oldVal = _prefs.get("numericFields"); |
295 | 28777213 | String newVal = numericFields.getText().trim(); |
296 | 28777213 | if (newVal.length() == 0) |
297 | 0 | newVal = null; |
298 | 28777213 | if (((newVal != null) && (oldVal == null)) |
299 | |
|| ((newVal == null) && (oldVal != null)) |
300 | |
|| ((newVal != null) && !newVal.equals(oldVal))) { |
301 | 245626 | _prefs.put("numericFields", newVal); |
302 | 245626 | BibtexFields.setNumericFieldsFromPrefs(); |
303 | |
} |
304 | |
|
305 | 28777213 | } |
306 | |
|
307 | |
public boolean readyToClose() { |
308 | 29016645 | return true; |
309 | |
} |
310 | |
|
311 | |
public String getTabName() { |
312 | 244486704 | return Globals.lang("Entry table"); |
313 | |
} |
314 | |
} |