package org.xhtmlrenderer.demo.docbook;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.InputStream;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.xhtmlrenderer.layout.SharedContext;
import org.xhtmlrenderer.simple.FSScrollPane;
import org.xhtmlrenderer.simple.XHTMLPanel;
import org.xhtmlrenderer.swing.Java2DTextRenderer;
import org.xhtmlrenderer.swing.NaiveUserAgent;
import org.xhtmlrenderer.util.XRLog;
/**
*
*/
public class ShowDocBookPage {
public JFrame frame;
private static class ResourceLoadingUserAgent extends NaiveUserAgent {
protected InputStream resolveAndOpenStream(String uri) {
InputStream result = super.resolveAndOpenStream(uri);
if (result == null && uri != null && uri.startsWith("file:")) {
return ShowDocBookPage.class.getResourceAsStream(uri.substring("file:".length()));
} else {
return result;
}
}
}
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
String uri = "/docbook/xml/plugin-implement.xml";
if (args.length > 0) uri = args[0];
new ShowDocBookPage().run(uri);
}
});
}
private static void usage(int i, String reason) {
String s = "org.xhtmlrenderer.demo.docbook.ShowDocbookPage" +
"\n" +
"Simple example to render a single DocBook XML page, " +
"using only CSS, in a Swing JFrame/JPanel " +
"using Flying Saucer." +
"\n\n" +
"Usage: \n" +
" java org.xhtmlrenderer.demo.docbook.ShowDocbookPage [uri]" +
"\n\n" +
"Error: " + reason;
System.out.println(s);
System.exit(i);
}
private void run(final String uri) {
frame = new JFrame("Show Sample DocBook XML Rendered with Pure CSS");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final XHTMLPanel panel = new XHTMLPanel();
panel.getSharedContext().setUserAgentCallback(new ResourceLoadingUserAgent());
setAntiAlias(panel);
FSScrollPane fsp = new FSScrollPane(panel);
frame.getContentPane().add(fsp, BorderLayout.CENTER);
frame.pack();
frame.setSize(1024, 768);
frame.setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
URL url = ShowDocBookPage.class.getResource(uri);
String urls = url.toExternalForm();
XRLog.general("Loading URI: " + urls);
panel.setDocument(urls);
showAboutDialog();
}
});
}
private void setAntiAlias(XHTMLPanel introPanel) {
SharedContext sharedContext = introPanel.getSharedContext();
sharedContext.setTextRenderer(new Java2DTextRenderer());
}
private void showAboutDialog() {
final JDialog aboutDlg = new JDialog(frame);
aboutDlg.setSize(new Dimension(500, 450));
XHTMLPanel panel = new XHTMLPanel();
setAntiAlias(panel);
panel.setOpaque(false);
URL url = ShowDocBookPage.class.getResource("/docbook/xhtml/intro.xhtml");
panel.setDocument(url.toExternalForm());
JPanel outer = new JPanel(new BorderLayout());
outer.add(panel, BorderLayout.CENTER);
final JButton btn = new JButton(new AbstractAction("OK") {
public void actionPerformed(ActionEvent e) {
aboutDlg.dispose();
}
});
JPanel control = new JPanel(new FlowLayout(FlowLayout.RIGHT));
control.add(btn);
outer.add(control, BorderLayout.SOUTH);
aboutDlg.getContentPane().setLayout(new BorderLayout());
aboutDlg.getContentPane().add(outer, BorderLayout.CENTER);
aboutDlg.setTitle("About the Browser Demo");
int xx = (frame.getWidth() - aboutDlg.getWidth()) / 2;
int yy = (frame.getHeight() - aboutDlg.getHeight()) / 2;
aboutDlg.setLocation(xx, yy);
aboutDlg.setModal(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
aboutDlg.setVisible(true);
}
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btn.requestFocusInWindow();
}
});
}
}