/* Copyright (C) 2003-2011 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref.help; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import net.sf.jabref.GUIGlobals; import net.sf.jabref.Globals; import net.sf.jabref.JabRef; import net.sf.jabref.JabRefFrame; import net.sf.jabref.Util; /** * * This is a non-modal help Dialog. The contents of the help is specified by * calling showPage(). * * @version $Revision$ ($Date$) * */ public class HelpDialog extends JDialog implements HyperlinkListener { private JabRefFrame frame; private HelpContent content; private BackAction back = new BackAction(); private ForwardAction forward = new ForwardAction(); private ContentsAction contents = new ContentsAction(); // Initializes, but does not show the help dialog. public HelpDialog(JabRefFrame bf) { super(bf, Globals.lang("JabRef help"), false); frame = bf; content = new HelpContent(bf.prefs()); content.addHyperlinkListener(this); setSize(GUIGlobals.helpSize); JToolBar tlb = new JToolBar(); tlb.add(back); tlb.add(forward); tlb.addSeparator(); tlb.add(contents); tlb.setFloatable(false); // Make ESC close dialog, and set shortkeys for back and forward. InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap am = tlb.getActionMap(); im.put(bf.prefs().getKey("Close dialog"), "close"); am.put("close", new CloseAction()); im.put(bf.prefs().getKey("Back, help dialog"), "left"); am.put("left", back); im.put(bf.prefs().getKey("Forward, help dialog"), "right"); am.put("right", forward); // Set shortkeys for back and forward specifically for the EditorPane. im = content.getInputMap(JComponent.WHEN_FOCUSED); am = content.getActionMap(); im.put(bf.prefs().getKey("Back, help dialog"), "left"); am.put("left", back); im.put(bf.prefs().getKey("Forward, help dialog"), "right"); am.put("right", forward); getContentPane().add(tlb, BorderLayout.NORTH); getContentPane().add(content.getPane()); forward.setEnabled(false); back.setEnabled(false); } public void showPage(String url) { showPage(url, JabRef.class); } public void showPage(String url, Class resourceOwner) { if (!isVisible()) { Util.placeDialog(this, frame); content.reset(); back.setEnabled(false); setVisible(true); } else { back.setEnabled(true); } forward.setEnabled(false); content.setPage(url, resourceOwner); content.requestFocus(); } public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { content.setPage(e.getURL()); back.setEnabled(true); forward.setEnabled(false); } } class CloseAction extends AbstractAction { public CloseAction() { super(Globals.lang("Close")); // , new ImageIcon(GUIGlobals.closeIconFile)); putValue(SHORT_DESCRIPTION, Globals.lang("Close the help window")); } public void actionPerformed(ActionEvent e) { dispose(); } } class BackAction extends AbstractAction { public BackAction() { super("Back", GUIGlobals.getImage("left")); // putValue(SHORT_DESCRIPTION, "Show the previous page"); } public void actionPerformed(ActionEvent e) { setEnabled(content.back()); forward.setEnabled(true); } } class ForwardAction extends AbstractAction { public ForwardAction() { super("Forward", GUIGlobals.getImage("right")); } public void actionPerformed(ActionEvent e) { setEnabled(content.forward()); back.setEnabled(true); } } class ContentsAction extends AbstractAction { public ContentsAction() { super("Contents", GUIGlobals.getImage("helpContents")); } public void actionPerformed(ActionEvent e) { content.setPage(GUIGlobals.helpContents, JabRef.class); back.setEnabled(true); } } }