a7f1a5653063ecc59f382fd404a7ee38e61456cb
[debian/jabref.git] / src / java / net / sf / jabref / HelpDialog.java
1 /*
2 Copyright (C) 2003 Morten O. Alver, Nizar N. Batada
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 package net.sf.jabref;
28
29 import java.awt.*;
30 import java.awt.event.*;
31 import javax.swing.*;
32 import javax.swing.event.HyperlinkListener;
33 import javax.swing.event.HyperlinkEvent;
34 import java.net.URL;
35
36 /**
37  * This is a non-modal help Dialog. The contents of the help is specified
38  * by calling
39  */
40 public class HelpDialog extends JDialog implements HyperlinkListener {
41
42     private JabRefFrame frame;
43     private HelpContent content;
44     private BackAction back = new BackAction();
45     private ForwardAction forward = new ForwardAction();
46     private ContentsAction contents = new ContentsAction();
47
48     // Initializes, but does not show the help dialog.
49     public HelpDialog(JabRefFrame bf) {
50         super(bf, Globals.lang("JabRef help"), false);
51         frame = bf;
52         content = new HelpContent(bf.prefs);
53         content.addHyperlinkListener(this);
54         setSize(GUIGlobals.helpSize);
55
56         /* There is probably no need for a window listener now, so
57          * it's commented out.
58         diag.addWindowListener(new WindowAdapter() {
59                 public void windowClosing(WindowEvent e) {
60                     open = null;
61                 }
62             });*/
63
64         JToolBar tlb = new JToolBar();
65         //tlb.add(new CloseAction());
66         //tlb.addSeparator();
67         tlb.add(back);
68         tlb.add(forward);
69         tlb.addSeparator();
70         tlb.add(contents);
71         tlb.setFloatable(false);
72
73         // Make ESC close dialog, and set shortkeys for back and forward.
74         InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
75         ActionMap am = tlb.getActionMap();
76         im.put(bf.prefs.getKey("Close dialog"), "close");
77         am.put("close", new CloseAction());
78         im.put(bf.prefs.getKey("Back, help dialog"), "left");
79         am.put("left", back);
80         im.put(bf.prefs.getKey("Forward, help dialog"), "right");
81         am.put("right", forward);
82
83         // Set shortkeys for back and forward specifically for the EditorPane.
84         im = content.getInputMap(JComponent.WHEN_FOCUSED);
85         am = content.getActionMap();
86         im.put(bf.prefs.getKey("Back, help dialog"), "left");
87         am.put("left", back);
88         im.put(bf.prefs.getKey("Forward, help dialog"), "right");
89         am.put("right", forward);
90
91         getContentPane().add(tlb, BorderLayout.NORTH);
92         getContentPane().add(content.getPane());
93         forward.setEnabled(false);
94         back.setEnabled(false);
95     }
96
97     public void showPage(String url) {
98         if (!isVisible()) {
99             Util.placeDialog(this, frame);
100             setVisible(true);
101             content.reset();
102             forward.setEnabled(false);
103             back.setEnabled(false);
104         } else {
105             setVisible(true);
106             forward.setEnabled(false);
107             back.setEnabled(true);
108         }
109         content.setPage(url);
110         content.requestFocus();
111         //setVisible(true);
112     }
113
114     public void hyperlinkUpdate(HyperlinkEvent e) {
115         if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
116             content.setPage(e.getURL());
117             back.setEnabled(true);
118             forward.setEnabled(false);
119         }
120     }
121
122     class CloseAction extends AbstractAction {
123         public CloseAction() {
124             super(Globals.lang("Close"));
125             //, new ImageIcon(GUIGlobals.closeIconFile));
126             putValue(SHORT_DESCRIPTION, Globals.lang("Close the help window"));
127         }
128
129         public void actionPerformed(ActionEvent e) {
130             dispose();
131         }
132     }
133
134     class BackAction extends AbstractAction {
135         public BackAction() {
136             super("Back", new ImageIcon(GUIGlobals.backIconFile));
137             //putValue(SHORT_DESCRIPTION, "Show the previous page");
138         }
139
140         public void actionPerformed(ActionEvent e) {
141             setEnabled(content.back());
142             forward.setEnabled(true);
143         }
144     }
145
146    class ForwardAction extends AbstractAction {
147        public ForwardAction() {
148            super("Forward", new ImageIcon(GUIGlobals.forwardIconFile));
149        }
150
151        public void actionPerformed(ActionEvent e) {
152             setEnabled(content.forward());
153             back.setEnabled(true);
154        }
155    }
156
157    class ContentsAction extends AbstractAction {
158        public ContentsAction() {
159            super("Contents", new ImageIcon(GUIGlobals.contentsIconFile));
160        }
161
162        public void actionPerformed(ActionEvent e) {
163            content.setPage(GUIGlobals.helpContents);
164            back.setEnabled(true);
165        }
166    }
167 }