net.sf.jabref.help.HelpContent.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.jabref.help.HelpContent.java

Source

/*  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.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Stack;

import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import net.sf.jabref.GUIGlobals;
import net.sf.jabref.JabRef;
import net.sf.jabref.JabRefPreferences;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class HelpContent extends JTextPane {

    static Log log = LogFactory.getLog(HelpContent.class);

    JScrollPane pane;

    private Stack<URL> history, forw;

    JabRefPreferences prefs;

    public HelpContent(JabRefPreferences prefs_) {
        super();
        pane = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setDoubleBuffered(true);
        prefs = prefs_;
        history = new Stack<URL>();
        forw = new Stack<URL>();
        setEditorKitForContentType("text/html", new MyEditorKit());
        setContentType("text/html");
        setText("");
        setEditable(false);

        // Handles Anchors
        final HyperlinkListener hyperLinkListener = new HyperlinkListener() {
            public void hyperlinkUpdate(final HyperlinkEvent e) {
                if (e.getDescription().startsWith("#")) {
                    scrollToReference(e.getDescription().substring(1));
                }
            }
        };
        addHyperlinkListener(hyperLinkListener);
    }

    public boolean back() {
        if (!history.empty()) {
            URL prev = (history.pop());
            forw.push(getPage());
            setPageOnly(prev);
        }
        return !history.empty();
    }

    public boolean forward() {
        if (!forw.empty()) {
            URL next = (forw.pop());
            history.push(getPage());
            setPageOnly(next);
        }
        return !forw.empty();
    }

    public void reset() {
        forw.removeAllElements();
        history.removeAllElements();
    }

    public void setPage(String filename, Class resourceOwner) {

        // Check for anchor
        int indexOf = filename.indexOf('#');
        String file;
        String reference;

        if (indexOf != -1) {
            file = filename.substring(0, indexOf);
            reference = filename.substring(indexOf + 1);
        } else {
            file = filename;
            reference = "";
        }

        String middle = prefs.get("language") + "/";
        if (middle.equals("en/"))
            middle = ""; // english in base help dir.

        URL old = getPage();
        try {
            // First check in specified language
            URL resource = resourceOwner.getResource(GUIGlobals.helpPre + middle + file);

            // If not available fallback to english
            if (resource == null) {
                resource = resourceOwner.getResource(GUIGlobals.helpPre + file);
            }

            // If still not available print a warning
            if (resource == null) {
                // TODO show warning to user
                log.error("Could not find html-help for file '" + file + "'.");
                return;
            }
            setPageOnly(new URL(resource.toString() + "#" + reference));

        } catch (IOException ex) {
            ex.printStackTrace();
        }

        forw.removeAllElements();
        if (old != null)
            history.push(old);

    }

    /**
     * Convenience method for setPage(String)
     */
    public void setPage(URL url) {
        File f = new File(url.getPath());
        setPage(f.getName(), JabRef.class);
    }

    private void setPageOnly(URL url) {
        try {
            super.setPage(url);
        } catch (IOException ex) {
            if (url == null) {
                System.out.println("Error: Help file not set");
            } else {
                System.out.println("Error: Help file not found '" + url.getFile() + "'");
            }
        }
    }

    public JComponent getPane() {
        return pane;
    }

    /*public void paintComponent(Graphics g) {
       Graphics2D g2 = (Graphics2D) g;
       g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
       g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
       super.paintComponent(g2);
    }*/

}