b58afa0804cd0def2e859f06797344452cd81646
[debian/jabref.git] / src / java / net / sf / jabref / AdvancedTab.java
1 package net.sf.jabref;
2
3 import javax.swing.*;
4 import javax.swing.event.ChangeListener;
5 import javax.swing.event.ChangeEvent;
6 import java.awt.*;
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;
12
13 public class AdvancedTab extends JPanel implements PrefsTab {
14
15     JabRefPreferences _prefs;
16     JabRefFrame _frame;
17     HelpDialog helpDiag;
18     HelpAction remoteHelp;
19     JPanel pan = new JPanel(),
20         lnf = new JPanel();
21     JLabel lab;
22     JCheckBox useDefault, useRemoteServer;
23     JTextField className, remoteServerPort;
24     JButton def1 = new JButton(Globals.lang("Default")),
25         def2 = new JButton(Globals.lang("Default"));
26     JPanel p1 = new JPanel(),
27         p2 = new JPanel();
28     String oldLnf = "";
29     boolean oldUseDef;
30     int oldPort = -1;
31
32     public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) {
33         _prefs = prefs;
34
35
36     remoteHelp = new HelpAction(diag, GUIGlobals.remoteHelp, "Help",
37                 GUIGlobals.helpSmallIconFile);
38     useDefault = new JCheckBox(Globals.lang("Use other look and feel"));
39     useRemoteServer = new JCheckBox(Globals.lang("Listen for remote operation on port")+":");
40     remoteServerPort = new JTextField();
41     className = new JTextField(50);
42     final JTextField clName = className;
43     useDefault.addChangeListener(new ChangeListener() {
44         public void stateChanged(ChangeEvent e) {
45             clName.setEnabled(((JCheckBox)e.getSource()).isSelected());
46         }
47         });
48
49     FormLayout layout = new FormLayout
50         ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
51          "");
52     DefaultFormBuilder builder = new DefaultFormBuilder(layout);
53     JPanel pan = new JPanel();
54     builder.appendSeparator(Globals.lang("Look and feel"));
55     JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "
56              +(Globals.ON_WIN ? GUIGlobals.windowsDefaultLookAndFeel :
57                GUIGlobals.linuxDefaultLookAndFeel));
58     builder.nextLine();
59     builder.append(pan);
60     builder.append(lab);
61     builder.nextLine();
62     builder.append(pan);
63     builder.append(useDefault);
64     builder.nextLine();
65     builder.append(pan);
66     JPanel pan2 = new JPanel();
67     lab = new JLabel(Globals.lang("Class name")+":");
68     pan2.add(lab);
69     pan2.add(className);
70     builder.append(pan2);
71     builder.nextLine();
72     builder.append(pan);
73     lab = new JLabel(Globals.lang("Note that you must specify the fully qualified class name for the look and feel,"));
74     builder.append(lab);
75     builder.nextLine();
76     builder.append(pan);
77     lab = new JLabel(Globals.lang("and the class must be available in your classpath next time you start JabRef."));
78     builder.append(lab);
79     builder.nextLine();
80     builder.appendSeparator(Globals.lang("Remote operation"));
81     builder.nextLine();
82     builder.append(new JPanel());
83     JPanel p = new JPanel();
84     p.add(useRemoteServer);
85     p.add(remoteServerPort);
86     p.add(remoteHelp.getIconButton());
87     builder.append(p);
88
89     pan = builder.getPanel();
90     pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
91     setLayout(new BorderLayout());
92     add(pan, BorderLayout.CENTER);
93
94     }
95
96     public void setValues() {
97     oldUseDef = _prefs.getBoolean("useDefaultLookAndFeel");
98     oldLnf = _prefs.get("lookAndFeel");
99     useDefault.setSelected(!oldUseDef);
100     className.setText(oldLnf);
101     className.setEnabled(!oldUseDef);
102     useRemoteServer.setSelected(_prefs.getBoolean("useRemoteServer"));
103     oldPort = _prefs.getInt("remoteServerPort");
104     remoteServerPort.setText(String.valueOf(oldPort));
105     }
106
107     public void storeSettings() {
108         _prefs.putBoolean("useDefaultLookAndFeel", !useDefault.isSelected());
109         _prefs.put("lookAndFeel", className.getText());
110         try {
111             int port = Integer.parseInt(remoteServerPort.getText());
112             if (port != oldPort) {
113                 _prefs.putInt("remoteServerPort", port);
114                 /*JOptionPane.showMessageDialog(null, Globals.lang("You have changed the menu and label font size. "
115                         + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"),
116                         JOptionPane.WARNING_MESSAGE);*/
117             }
118
119         } catch (NumberFormatException ex) {
120             ex.printStackTrace();
121         }
122         _prefs.putBoolean("useRemoteServer", useRemoteServer.isSelected());
123         if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) {
124             // Start the listener now.
125
126             JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.ths);
127             if (JabRef.remoteListener != null) {
128                 JabRef.remoteListener.start();
129             }
130         } else if (!useRemoteServer.isSelected() && (JabRef.remoteListener != null)) {
131             JabRef.remoteListener.disable();
132             JabRef.remoteListener = null;
133         }
134
135         if ((useDefault.isSelected() == oldUseDef) ||
136             !oldLnf.equals(className.getText())) {
137             JOptionPane.showMessageDialog(null, Globals.lang("You have changed the look and feel setting. "
138                                                              +"You must restart JabRef for this to come into effect."), Globals.lang("Changed look and feel settings"),
139                                           JOptionPane.WARNING_MESSAGE);
140         }
141     }
142
143     public boolean readyToClose() {
144            
145         try {
146             int size = Integer.parseInt(remoteServerPort.getText());
147             return true; // Ok, the number was legal.
148         } catch (NumberFormatException ex) {
149             JOptionPane.showMessageDialog
150                     (null, Globals.lang("You must enter an integer value in the text field for") + " '" +
151                     Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
152                             JOptionPane.ERROR_MESSAGE);
153             return false;
154         }
155
156     }
157
158 }