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]