[Home] DMelt member access . Java source code: vmm3d.xm3d.HTMLDocWindow
/* This file is part of the source code for 3D-XplorMath-J, Version 1.0 (January 2008).
* Copyright (c) 2008 The 3D-XplorMath Consortium (http://3d-xplormath.org).
* This source code is released under a BSD License, which allows redistribution
* in source and binary form, with or without modification, provided copyright
* and license information are included, and with no warranty or guarantee of
* any kind. For details, see http://3d-xplormath.org/j/source/BSDLicense.txt
*/
package vmm3d.xm3d;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLEditorKit;
import vmm3d.core.I18n;
/**
* A window that holds a very simple HTML viewer.
*/
public class HTMLDocWindow extends JFrame {
private JEditorPane editPane;
private ArrayList history = new ArrayList();
private int currentHistoryIndex = -1;
private JButton backButton, forwardButton, closeButton;
/**
* Creates an initially invisible window.
*/
public HTMLDocWindow() {
super(I18n.tr("3dxm.HTMLDocWindow.title"));
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
editPane = new JEditorPane();
editPane.setEditable(false);
editPane.setMargin(new Insets(15,15,10,5));
editPane.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent evt) {
if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
editPane.setPage(evt.getURL());
}
catch (Exception e) {
editPane.setContentType("text/plain");
editPane.setText(I18n.tr("3dxm.HTMLDocWindow.loadError") + "\n");
}
}
}
});
backButton = new JButton(I18n.tr("3dxm.HTMLDocWindow.Back"));
forwardButton = new JButton(I18n.tr("3dxm.HTMLDocWindow.Forward"));
closeButton = new JButton(I18n.tr("3dxm.HTMLDocWindow.Close"));
JPanel buttonBar = new JPanel();
buttonBar.setLayout(new FlowLayout(FlowLayout.RIGHT));
buttonBar.add(backButton);
buttonBar.add(forwardButton);
buttonBar.add(closeButton);
backButton.setEnabled(false);
forwardButton.setEnabled(false);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
history.clear();
currentHistoryIndex = -1;
}
});
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
historyBack();
}
});
forwardButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
historyForward();
}
});
JPanel content = new JPanel();
content.setLayout(new BorderLayout(3,3));
content.setBackground(Color.GRAY);
content.add(new JScrollPane(editPane),BorderLayout.CENTER);
content.add(buttonBar,BorderLayout.SOUTH);
setContentPane(content);
HTMLEditorKit kit = (HTMLEditorKit)editPane.getEditorKitForContentType("text/html");
kit.getStyleSheet().addRule("body { font-size: 16pt }");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-620)/2,100,650,500);
}
/**
* Creates a window showing the specified initial file, and
* shows the window. Note that the file name is treated as
* a resource name that is located using the getResource()
* method of the class loader.
*/
public HTMLDocWindow(String initialFile) {
this();
if (initialFile != null)
showFile(initialFile);
else
setVisible(true);
}
/**
* Creates a window showing the specified intiial URL, and shows
* the window.
*/
public HTMLDocWindow(URL initialURL) {
this();
if (initialURL != null)
showURL(initialURL);
else
setVisible(true);
}
/**
* Set the contents of the window to a specified URL. If an error occurs
* while trying to load the url, an error message is shown in the window.
*/
public void showURL(URL url) {
historyAdd(url);
try {
editPane.setPage(url);
}
catch (Exception e) {
editPane.setContentType("text/plain");
editPane.setText(I18n.tr("3dxm.HTMLDocWindow.loadError") + "\n");
}
setVisible(true);
}
/**
* Set the content of the window to the specified file. Note that the file name is treated as
* a resource name that is located using the getResource() method of the class loader.
* @param file the name of the resource file whose contenxt are to appear in the window.
*/
public void showFile(String file) {
historyAdd(file);
try {
URL fileURL = getClass().getClassLoader().getResource(file);
if (fileURL == null)
throw new Exception();
editPane.setPage(fileURL);
}
catch (Exception e) {
editPane.setContentType("text/plain");
editPane.setText(I18n.tr("3dxm.HTMLDocWindow.loadError") + "\n");
}
setVisible(true);
}
private void historyBack() {
if (currentHistoryIndex > 0) {
currentHistoryIndex--;
showFromHistory();
}
}
private void historyForward() {
if (currentHistoryIndex >= 0 && currentHistoryIndex < history.size() - 1) {
currentHistoryIndex++;
showFromHistory();
}
}
private void showFromHistory() {
Object location = history.get(currentHistoryIndex);
try {
URL newLocation;
if (location instanceof String)
newLocation = getClass().getClassLoader().getResource((String)location);
else
newLocation = (URL)location;
editPane.setPage(newLocation);
}
catch (Exception e) {
editPane.setContentType("text/plain");
editPane.setText(I18n.tr("3dxm.HTMLDocWindow.loadError") + "\n");
}
backButton.setEnabled(currentHistoryIndex > 0);
forwardButton.setEnabled(currentHistoryIndex < history.size() - 1);
}
private void historyAdd(Object location) {
if (currentHistoryIndex == -1) { // first item is being added
history.add(location);
currentHistoryIndex = 0;
}
else if (location.equals(history.get(currentHistoryIndex)))
return;
else {
while (history.size() > currentHistoryIndex+1)
history.remove(history.size()-1);
history.add(location);
currentHistoryIndex = history.size() - 1;
}
backButton.setEnabled(currentHistoryIndex > 0);
forwardButton.setEnabled(currentHistoryIndex < history.size() - 1);
}
}
Ads help maintain this website.