4 import javax.swing.event.ChangeListener;
5 import javax.swing.event.ChangeEvent;
7 import java.awt.event.*;
8 import com.jgoodies.forms.layout.*;
9 import com.jgoodies.forms.factories.*;
10 import com.jgoodies.forms.builder.*;
11 import net.sf.jabref.remote.RemoteListener;
13 public class AdvancedTab extends JPanel implements PrefsTab {
15 JabRefPreferences _prefs;
18 HelpAction remoteHelp;
19 JPanel pan = new JPanel(),
22 JCheckBox useDefault, useRemoteServer, useNativeFileDialogOnMac;
23 JTextField className, remoteServerPort;
24 JButton def1 = new JButton(Globals.lang("Default")),
25 def2 = new JButton(Globals.lang("Default"));
26 JPanel p1 = new JPanel(),
32 public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) {
36 remoteHelp = new HelpAction(diag, GUIGlobals.remoteHelp, "Help",
37 GUIGlobals.getIconUrl("helpSmall"));
38 useDefault = new JCheckBox(Globals.lang("Use other look and feel"));
39 useRemoteServer = new JCheckBox(Globals.lang("Listen for remote operation on port")+":");
40 useNativeFileDialogOnMac = new JCheckBox(Globals.lang("Use native file dialog"));
41 remoteServerPort = new JTextField();
42 className = new JTextField(50);
43 final JTextField clName = className;
44 useDefault.addChangeListener(new ChangeListener() {
45 public void stateChanged(ChangeEvent e) {
46 clName.setEnabled(((JCheckBox)e.getSource()).isSelected());
50 FormLayout layout = new FormLayout
51 ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
53 DefaultFormBuilder builder = new DefaultFormBuilder(layout);
54 JPanel pan = new JPanel();
56 if (!Globals.ON_MAC) {
57 builder.appendSeparator(Globals.lang("Look and feel"));
58 JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "
59 +(Globals.ON_WIN ? GUIGlobals.windowsDefaultLookAndFeel :
60 GUIGlobals.linuxDefaultLookAndFeel));
66 builder.append(useDefault);
69 JPanel pan2 = new JPanel();
70 lab = new JLabel(Globals.lang("Class name")+":");
76 lab = new JLabel(Globals.lang("Note that you must specify the fully qualified class name for the look and feel,"));
80 lab = new JLabel(Globals.lang("and the class must be available in your classpath next time you start JabRef."));
84 builder.appendSeparator(Globals.lang("Remote operation"));
86 builder.append(new JPanel());
87 JPanel p = new JPanel();
88 p.add(useRemoteServer);
89 p.add(remoteServerPort);
90 p.add(remoteHelp.getIconButton());
95 builder.appendSeparator(Globals.lang("Mac file dialog"));
97 builder.append(new JPanel());
98 builder.append(useNativeFileDialogOnMac);
101 pan = builder.getPanel();
102 pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
103 setLayout(new BorderLayout());
104 add(pan, BorderLayout.CENTER);
108 public void setValues() {
109 oldUseDef = _prefs.getBoolean("useDefaultLookAndFeel");
110 oldLnf = _prefs.get("lookAndFeel");
111 useDefault.setSelected(!oldUseDef);
112 className.setText(oldLnf);
113 className.setEnabled(!oldUseDef);
114 useRemoteServer.setSelected(_prefs.getBoolean("useRemoteServer"));
115 oldPort = _prefs.getInt("remoteServerPort");
116 remoteServerPort.setText(String.valueOf(oldPort));
117 useNativeFileDialogOnMac.setSelected(Globals.prefs.getBoolean("useNativeFileDialogOnMac"));
120 public void storeSettings() {
121 _prefs.putBoolean("useDefaultLookAndFeel", !useDefault.isSelected());
122 _prefs.put("lookAndFeel", className.getText());
123 _prefs.putBoolean("useNativeFileDialogOnMac", useNativeFileDialogOnMac.isSelected());
125 int port = Integer.parseInt(remoteServerPort.getText());
126 if (port != oldPort) {
127 _prefs.putInt("remoteServerPort", port);
128 /*JOptionPane.showMessageDialog(null, Globals.lang("You have changed the menu and label font size. "
129 + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"),
130 JOptionPane.WARNING_MESSAGE);*/
133 } catch (NumberFormatException ex) {
134 ex.printStackTrace();
136 _prefs.putBoolean("useRemoteServer", useRemoteServer.isSelected());
137 if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) {
138 // Start the listener now.
140 JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.ths);
141 if (JabRef.remoteListener != null) {
142 JabRef.remoteListener.start();
144 } else if (!useRemoteServer.isSelected() && (JabRef.remoteListener != null)) {
145 JabRef.remoteListener.disable();
146 JabRef.remoteListener = null;
149 if ((useDefault.isSelected() == oldUseDef) ||
150 !oldLnf.equals(className.getText())) {
151 JOptionPane.showMessageDialog(null, Globals.lang("You have changed the look and feel setting. "
152 +"You must restart JabRef for this to come into effect."), Globals.lang("Changed look and feel settings"),
153 JOptionPane.WARNING_MESSAGE);
157 public boolean readyToClose() {
160 int size = Integer.parseInt(remoteServerPort.getText());
161 return true; // Ok, the number was legal.
162 } catch (NumberFormatException ex) {
163 JOptionPane.showMessageDialog
164 (null, Globals.lang("You must enter an integer value in the text field for") + " '" +
165 Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
166 JOptionPane.ERROR_MESSAGE);