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

GIF image

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to