706466356319081b63b0f143d2c57cbc68f1309b
[debian/jabref.git] / src / java / net / sf / jabref / PrefsDialog2.java
1 /*
2 Copyright (C) 2003 JabRef project
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
28 package net.sf.jabref;
29
30 import java.awt.*;
31 import java.awt.event.*;
32 import javax.swing.*;
33 import javax.swing.table.*;
34
35 /**
36  * Preferences dialog. Contains a TabbedPane, and tabs will be defined
37  * in separate classes. Tabs MUST implement the PrefsTab interface,
38  * since this dialog will call the storeSettings() method of all tabs
39  * when the user presses ok.
40  *
41  * With this design, it should be very easy to add new tabs later.
42  *
43  * @deprecated Use PrefsDialog3 instead!
44  *
45  */
46 public class PrefsDialog2 extends JDialog {
47
48     private JabRefPreferences _prefs;
49     JPanel upper = new JPanel(),
50         lower = new JPanel();
51     GridBagLayout gbl = new GridBagLayout();
52     GridBagConstraints con = new GridBagConstraints();
53     JTabbedPane tabbed = new JTabbedPane();
54     JabRefFrame frame;
55
56     public PrefsDialog2(JabRefFrame parent, JabRefPreferences prefs) {
57         super(parent, Globals.lang("JabRef preferences"), false);
58         _prefs = prefs;
59         frame = parent;
60         getContentPane().setLayout(gbl);
61         con.weighty = 1;
62         con.weightx = 1;
63         con.fill = GridBagConstraints.BOTH;
64         con.gridwidth = GridBagConstraints.REMAINDER;
65         con.insets = new Insets(5, 5, 0, 5);
66         gbl.setConstraints(tabbed, con);
67         getContentPane().add(tabbed);
68         con.weighty = 0;
69         con.gridheight = GridBagConstraints.REMAINDER;
70         gbl.setConstraints(lower, con);
71         //lower.setBackground(GUIGlobals.lightGray);
72         //getContentPane().setBackground(GUIGlobals.lightGray);
73         getContentPane().add(lower);
74
75         // ----------------------------------------------------------------
76         // Add new tabs to be displayed in the preferences here. 
77         // Remember, tabs must implement PrefsTab.
78         // ----------------------------------------------------------------
79         tabbed.addTab(Globals.lang("General"), new GeneralTab(frame, _prefs));
80         tabbed.addTab(Globals.lang("Appearance"), new TablePrefsTab(_prefs, parent));
81         //tabbed.addTab(Globals.lang("External programs"), new ExternalProgramsTab(_prefs));
82         tabbed.addTab(Globals.lang("Key pattern"), new TabLabelPattern(_prefs, parent.helpDiag));
83         tabbed.addTab(Globals.lang("Entry preview"), new PreviewPrefsTab(_prefs));
84         
85         if (!Globals.ON_MAC)
86             tabbed.addTab(Globals.lang("Advanced"), new AdvancedTab(_prefs, parent.helpDiag));
87         JButton
88             ok = new JButton(Globals.lang("Ok")),
89             cancel = new JButton(Globals.lang("Cancel"));
90         ok.addActionListener(new OkAction());
91         CancelAction cancelAction = new CancelAction();
92         cancel.addActionListener(cancelAction);
93         lower.add(ok);
94         lower.add(cancel);
95
96         // Key bindings:
97         ActionMap am = tabbed.getActionMap();
98         InputMap im = tabbed.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
99         im.put(frame.prefs().getKey("Close dialog"), "close");
100         am.put("close", cancelAction);
101
102         pack(); //setSize(440, 500);
103     }
104
105     class OkAction extends AbstractAction {
106         public OkAction() {
107             super("Ok");
108         }
109         public void actionPerformed(ActionEvent e) {
110
111             AbstractWorker worker = new AbstractWorker() {
112                     public void run() {
113                         // First check that all tabs are ready to close:
114                         for (int i = 0; i < tabbed.getTabCount(); i++) {
115                             if (!((PrefsTab)tabbed.getComponentAt(i)).readyToClose())
116                                 return; // If not, break off.
117                         }                       
118                         // Then store settings and close:
119                         for (int i = 0; i < tabbed.getTabCount(); i++) {
120                             ( (PrefsTab) tabbed.getComponentAt(i)).storeSettings();
121                         }
122
123                         //try { Thread.sleep(3000); } catch (InterruptedException ex) {}
124                     }
125                     public void update() {
126                         dispose();
127                         frame.setupAllTables();
128                         frame.output(Globals.lang("Preferences recorded."));
129                     }
130                 };
131             worker.getWorker().run();
132             worker.getCallBack().update();
133             
134         }
135     }
136
137     class CancelAction extends AbstractAction {
138         public CancelAction() {
139             super("Cancel");
140
141         }
142         public void actionPerformed(ActionEvent e) {
143             dispose();
144             // Just close dialog without recording changes.
145             /*(new Thread() {
146               public void run() {
147
148               }
149               }).start();*/
150         }
151     }
152
153 }