Hello! Just to get rid of necessity to relaunch fop during authoring of xsl to view changes I've added reloading functionality to PreviewDialog and AWTStarter classes. Here is the patch + image for reload button (I don't know how can I cvs the image, but it should be placed in org/apache/fop/viewer/Images).
-- Oleg Tkachenko Multiconn International Ltd
Index: apps/AWTStarter.java =================================================================== RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/apps/AWTStarter.java,v retrieving revision 1.9.2.3 diff -u -r1.9.2.3 AWTStarter.java --- apps/AWTStarter.java 1 Apr 2002 19:21:39 -0000 1.9.2.3 +++ apps/AWTStarter.java 15 Jun 2002 16:17:09 -0000 @@ -51,6 +51,8 @@ PreviewDialog frame; AWTRenderer renderer; + protected Driver driver; + protected XMLReader parser; public static String TRANSLATION_PATH = "/org/apache/fop/viewer/resources/"; @@ -62,7 +64,7 @@ init(); } - private void init() { + private void init() throws FOPException { try { UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel()); } catch (Exception e) { @@ -90,27 +92,24 @@ frame = createPreviewDialog(renderer, resource); renderer.setProgressListener(frame); renderer.setComponent(frame); - } - - - public void run() throws FOPException { - Driver driver = new Driver(); + driver = new Driver(); driver.setLogger(log); if (errorDump) { driver.setErrorDump(true); } - + driver.setRenderer(renderer); // init parser frame.progress(resource.getString("Init parser") + " ..."); - XMLReader parser = inputHandler.getParser(); - + parser = inputHandler.getParser(); if (parser == null) { throw new FOPException("Unable to create SAX parser"); } + } - try { - driver.setRenderer(renderer); + public void run() throws FOPException { + driver.reset(); + try { // build FO tree: time frame.progress(resource.getString("Build FO tree") + " ..."); driver.render(parser, inputHandler.getInputSource()); @@ -119,6 +118,7 @@ frame.showPage(); } catch (Exception e) { + frame.reportException(e); if (e instanceof FOPException) { throw (FOPException)e; } @@ -129,7 +129,7 @@ protected PreviewDialog createPreviewDialog(AWTRenderer renderer, Translator res) { - PreviewDialog frame = new PreviewDialog(renderer, res); + PreviewDialog frame = new PreviewDialog(this, renderer, res); frame.validate(); frame.addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent we) { Index: viewer/PreviewDialog.java =================================================================== RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/viewer/PreviewDialog.java,v retrieving revision 1.7.2.1 diff -u -r1.7.2.1 PreviewDialog.java --- viewer/PreviewDialog.java 1 Apr 2002 19:21:39 -0000 1.7.2.1 +++ viewer/PreviewDialog.java 15 Jun 2002 16:17:12 -0000 @@ -33,6 +33,8 @@ import org.apache.fop.layout.*; import org.apache.fop.render.awt.*; import org.apache.fop.messaging.*; +import org.apache.fop.apps.AWTStarter; +import org.apache.fop.apps.FOPException; /** * Frame and User Interface for Preview @@ -46,6 +48,7 @@ protected int pageCount = 0; protected AWTRenderer renderer; + protected AWTStarter starter; protected IconToolBar toolBar = new IconToolBar(); @@ -54,6 +57,8 @@ protected Command previousPageAction; protected Command nextPageAction; protected Command lastPageAction; + protected Command reloadAction; + protected Reloader reloader; protected JLabel zoomLabel = new JLabel(); // {public float getAlignmentY() { return 0.0f; }}; @@ -74,6 +79,18 @@ protected JLabel infoStatus = new JLabel(); protected JLabel previewImageLabel = new JLabel(); + /** + * Create a new PreviewDialog that uses the given starter, renderer and +translator. + * + * @param aStarter the to use starter + * @param aRenderer the to use renderer + * @param aRes the to use translator + */ + public PreviewDialog(AWTStarter aStarter, AWTRenderer aRenderer, Translator aRes) +{ + this(aRenderer, aRes); + starter = aStarter; + } + /** * Create a new PreviewDialog that uses the given renderer and translator. * @@ -116,6 +133,12 @@ } }; + reloadAction = new Command(res.getString("Reload"), "reload") { + public void doit() { + reload(null); + } + + }; setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setSize(new Dimension(379, 476)); @@ -150,6 +173,7 @@ this.getContentPane().add(toolBar, BorderLayout.NORTH); toolBar.add(printAction); + toolBar.add(reloadAction); toolBar.addSeparator(); toolBar.add(firstPageAction); toolBar.add(previousPageAction); @@ -221,6 +245,12 @@ } }); + menu.add(new Command(res.getString("Reload")) { + public void doit() { + reload(null); + } + + }); menu.addSeparator(); menu.add(new Command(res.getString("Exit")) { public void doit() { @@ -385,6 +415,35 @@ } /** + * Reloads and reformats document. + */ + private synchronized void reload(ActionEvent e) { + if (reloader == null || !reloader.isAlive()) { + reloader = new Reloader(); + reloader.start(); + } + } + + /** + * This class is used to reload document in + * a thread safe way. + */ + private class Reloader extends Thread { + public void run() { + previewImageLabel.setIcon(null); + statisticsStatus.setText(""); + //Cleans up renderer + while (renderer.getPageCount() != 0) + renderer.removePage(0); + try { + starter.run(); + } catch (FOPException e) { + e.printStackTrace(); + } + } + } + + /** * Shows a page by number. */ private void goToPage(ActionEvent e) { @@ -624,6 +683,17 @@ } } } + } + + public void reportException(Exception e) { + String msg = res.getString("An exception has occured"); + progress(msg); + JOptionPane.showMessageDialog( + getContentPane(), + "<html><b>" + msg + ":</b><br>" + + e.getClass().getName() + "<br>" + e.getMessage() + "</html>", +res.getString("Fatal error"), + JOptionPane.ERROR_MESSAGE + ); } } // class PreviewDialog
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]