/* * File HTMLHelp.java * * Copyright (C) 2010 Remco Bouckaert remco@cs.auckland.ac.nz * * This file is part of BEAST2. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * BEAST 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package beast.app.draw; import java.util.ArrayList; import java.util.List; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JScrollPane; import javax.swing.UIManager; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import beast.app.DocMaker; import beast.core.util.Log; /** * Dialog for showing HTML help, with hyperlinks and some browser * functionality to navigate around the BEASTObject help facilities. */ public class HelpBrowser extends JDialog implements HyperlinkListener { /** * serialisation * */ private static final long serialVersionUID = 1L; /** * generates HTML pages * */ static DocMaker m_docMaker; /** * browser stack * */ List<String> m_sPlugins = new ArrayList<>(); int m_iCurrentPlugin = 0; /** * GUI components * */ JEditorPane m_editorPane; JButton m_forwardButton; JButton m_backwardButton; public HelpBrowser(String beastObjectName) { if (m_docMaker == null) { m_docMaker = new DocMaker(); } // initialise JEditorPane m_editorPane = new JEditorPane(); m_editorPane.setEditable(false); m_editorPane.setContentType("text/html"); m_editorPane.addHyperlinkListener(this); setModal(true); JScrollPane scroller = new JScrollPane(m_editorPane); // add the navigation buttons at the top Box buttonBox = Box.createHorizontalBox(); buttonBox.setAlignmentX(LEFT_ALIGNMENT); m_forwardButton = new JButton(">"); m_forwardButton.setToolTipText("Browse forward"); m_forwardButton.addActionListener(e -> { browseForward(); }); m_backwardButton = new JButton("<"); m_backwardButton.setToolTipText("Browse backward"); m_backwardButton.addActionListener(e -> { browseBackward(); }); JButton closeButton = new JButton("x"); closeButton.setToolTipText("Close Help"); closeButton.addActionListener(e -> { dispose(); }); // m_backwardButton.setMnemonic(KeyEvent.VK_RIGHT); // m_forwardButton.setMnemonic(KeyEvent.VK_LEFT); buttonBox.add(m_backwardButton); buttonBox.add(m_forwardButton); buttonBox.add(closeButton); Box box = Box.createVerticalBox(); box.add(buttonBox); box.add(scroller); m_sPlugins.add(beastObjectName); updateState(); this.add(box); } // c'tor void browseForward() { if (m_iCurrentPlugin < m_sPlugins.size() - 1) { m_iCurrentPlugin++; } updateState(); } void browseBackward() { if (m_iCurrentPlugin > 0) { m_iCurrentPlugin--; } updateState(); } @Override public void hyperlinkUpdate(HyperlinkEvent link) { try { HyperlinkEvent.EventType type = link.getEventType(); if (type == HyperlinkEvent.EventType.ACTIVATED) { String beastObjectName = link.getDescription(); beastObjectName = beastObjectName.replaceAll(".html", ""); // update browser stack m_iCurrentPlugin++; while (m_iCurrentPlugin < m_sPlugins.size()) { m_sPlugins.remove(m_iCurrentPlugin); } m_sPlugins.add(beastObjectName); updateState(); } } catch (Exception e) { // ignore Log.err.println(e.getMessage()); } } // hyperlinkUpdate /** * change html text and enable/disable buttons (where appropriate) * */ void updateState() { String beastObjectName = m_sPlugins.get(m_iCurrentPlugin); try { String hTML = m_docMaker.getHTML(beastObjectName, false); m_editorPane.setText(hTML); } catch (Exception e) { // ignore Log.err.println("HelpBrowser: Something is wrong: " + e.getClass().getName() + " " + e.getMessage()); } m_backwardButton.setEnabled(m_iCurrentPlugin > 0); m_forwardButton.setEnabled(m_iCurrentPlugin < m_sPlugins.size() - 1); } // updateState /** * test * */ public static void main(String[] args) { try { HelpBrowser b = new HelpBrowser("beast.core.MCMC"); int size = UIManager.getFont("Label.font").getSize(); b.setSize(800 * size / 13, 800 * size / 13); b.setVisible(true); b.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } catch (Exception e) { e.printStackTrace(); } } // main } // HelpBrowser