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