? rsw_awtviewer.patch
? src/java/org/apache/fop/render/awt/viewer/ImageProxyPanel.java
? src/java/org/apache/fop/render/awt/viewer/PreviewPanel.java
? src/java/org/apache/fop/render/awt/viewer/package.html
Index: build.xml
===================================================================
RCS file: /home/cvspublic/xml-fop/build.xml,v
retrieving revision 1.122
diff -w -u -r1.122 build.xml
--- build.xml	24 May 2005 19:45:02 -0000	1.122
+++ build.xml	14 Jun 2005 11:02:45 -0000
@@ -207,7 +207,7 @@
     <property name="build.examples.dir" value="${build.dir}/examples"/>
 
     <property name="viewer.resources.dest.dir" value="${build.dest}/org/apache/fop/render/awt/viewer/resources"/>
-    <property name="viewer.images.dest.dir" value="${build.dest}/org/apache/fop/render/awt/viewer/Images"/>
+    <property name="viewer.images.dest.dir" value="${build.dest}/org/apache/fop/render/awt/viewer/images"/>
 
     <property name="dist.bin.dir" value="${basedir}/dist-bin"/>
     <property name="dist.src.dir" value="${basedir}/dist-src"/>
Index: src/java/org/apache/fop/render/awt/AWTRenderer.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java,v
retrieving revision 1.35
diff -w -u -r1.35 AWTRenderer.java
--- src/java/org/apache/fop/render/awt/AWTRenderer.java	9 Jun 2005 08:49:26 -0000	1.35
+++ src/java/org/apache/fop/render/awt/AWTRenderer.java	14 Jun 2005 11:02:48 -0000
@@ -29,6 +29,7 @@
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
 import java.awt.Toolkit;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
@@ -86,18 +87,28 @@
             FOPException {
 
         super.renderPage(pageViewport);
-
-        // Shows the page if it's the first one
-        if (getCurrentPageNumber() == 1) {
-            frame.showPage();
-        }
         frame.setInfo();
-
     }
 
     public void stopRenderer() throws IOException {
         super.stopRenderer();
         frame.setStatus(translator.getString("Status.Show"));
+				frame.reload(); // Refreshes view of page
+		}
+
+		/**
+		 * Returns the dimensions of the specified page
+		 * @exception FOPException If the page is out of range or has not been rendered.
+		 */
+		public Dimension getPageImageSize(int pageNum) throws FOPException {
+        Rectangle2D bounds = getPageViewport(pageNum).getViewArea();
+        pageWidth = (int) Math.round(bounds.getWidth() / 1000f);
+        pageHeight = (int) Math.round(bounds.getHeight() / 1000f);
+        double scaleX = scaleFactor * FOUserAgent.DEFAULT_PX2MM / userAgent.getPixelUnitToMillimeter();
+        double scaleY = scaleFactor * FOUserAgent.DEFAULT_PX2MM / userAgent.getPixelUnitToMillimeter();
+        int bitmapWidth = (int) ((pageWidth * scaleX) + 0.5);
+        int bitmapHeight = (int) ((pageHeight * scaleY) + 0.5);
+				return new Dimension(bitmapWidth, bitmapHeight);
     }
 
     /** Creates and initialize the AWT Viewer main window */
@@ -153,6 +164,7 @@
     /** @see java.awt.print.Pageable#getPageFormat(int) */
     public PageFormat getPageFormat(int pageIndex)
             throws IndexOutOfBoundsException {
+				try {
         if (pageIndex >= getNumberOfPages())
             return null;
 
@@ -177,6 +189,11 @@
             pageFormat.setOrientation(PageFormat.PORTRAIT);
         }
         return pageFormat;
+				} catch(FOPException fopEx) {
+						IndexOutOfBoundsException boundsEx = new IndexOutOfBoundsException("Cannot return page due to FOPException");
+						boundsEx.initCause(fopEx);
+						throw boundsEx;
+						}
     }
 
     /** @see java.awt.print.Pageable#getPrintable(int) */
Index: src/java/org/apache/fop/render/awt/viewer/Command.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/java/org/apache/fop/render/awt/viewer/Command.java,v
retrieving revision 1.2
diff -w -u -r1.2 Command.java
--- src/java/org/apache/fop/render/awt/viewer/Command.java	27 Feb 2004 17:51:22 -0000	1.2
+++ src/java/org/apache/fop/render/awt/viewer/Command.java	14 Jun 2005 11:02:48 -0000
@@ -44,10 +44,14 @@
      * Creates <code>Command</code> object with a given name and
      * sets the name as a tooltip text. No associated icon image.
      * @param name of the command
+		 * @param A Key
      */
-    public Command(String name) {
+    public Command(String name, int mnemonic) {
         super(name);
         putValue(SHORT_DESCRIPTION, name);
+				if (mnemonic > 0) {
+						putValue(MNEMONIC_KEY, new Integer(mnemonic));
+				}
     }
 
     /**
Index: src/java/org/apache/fop/render/awt/viewer/PreviewDialog.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/java/org/apache/fop/render/awt/viewer/PreviewDialog.java,v
retrieving revision 1.10
diff -w -u -r1.10 PreviewDialog.java
--- src/java/org/apache/fop/render/awt/viewer/PreviewDialog.java	10 Jun 2005 15:20:22 -0000	1.10
+++ src/java/org/apache/fop/render/awt/viewer/PreviewDialog.java	14 Jun 2005 11:02:49 -0000
@@ -33,33 +33,37 @@
 import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.awt.image.BufferedImage;
+import java.awt.event.KeyEvent;
 import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
 
+import java.text.DecimalFormat;
+
 import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
+import javax.swing.ButtonGroup;
 import javax.swing.JComboBox;
+import javax.swing.JRadioButtonMenuItem;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JButton;
 import javax.swing.JToolBar;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
-import javax.swing.border.EmptyBorder;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.ListSelectionEvent;
 
-import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.apps.Fop;
-import org.apache.fop.fo.Constants;
+import org.apache.fop.apps.FOPException;
 import org.apache.fop.render.awt.AWTRenderer;
 
-/** AWT Viewer main window. */
+/**
+	 AWT Viewer main window.
+	 Surrounds a PreviewPanel with a bunch of pretty buttons and controls.
+*/
 public class PreviewDialog extends JFrame {
 
     /** The Translator for localization */
@@ -68,14 +72,6 @@
     protected AWTRenderer renderer;
     /** The FOUserAgent associated with this window */
     protected FOUserAgent foUserAgent;
-    /** The Fop object used for refreshing/reloading the view */
-    protected Fop fop;
-
-    /** The number of the page which is currently visible */
-    private int currentPage = 0;
-
-    /** The Reloader, when the user clicks on menu "reload" */
-    private Reloader reloader;
 
     /** The JCombobox to rescale the rendered page view */
     private JComboBox scale;
@@ -83,12 +79,15 @@
     /** The JLabel for the process status bar */
     private JLabel processStatus;
 
-    /** The JLabel that holds the rendered page */
-    private JLabel pageLabel;
-
     /** The JLabel information status bar */
     private JLabel infoStatus;
 
+		/** The main display area */
+		private PreviewPanel previewPanel;
+
+		/** Formats the text in the scale combobox. */
+		private DecimalFormat percentFormat = new DecimalFormat("###0.0#");
+
     /**
      * Creates a new PreviewDialog that uses the given renderer.
      * @param aRenderer the to use renderer
@@ -101,7 +100,7 @@
         //Commands aka Actions
         Command printAction = new Command(translator.getString("Menu.Print"), "Print") {
             public void doit() {
-                startPrinterJob();
+                startPrinterJob(true);
             }
         };
         Command firstPageAction = new Command(translator.getString("Menu.First.page"),
@@ -129,13 +128,13 @@
         };
         Command reloadAction = new Command(translator.getString("Menu.Reload"), "reload") {
             public void doit() {
-                reload();
+                previewPanel.reload();
             }
         };
         Command debugAction = new Command("Debug", "debug") {
             // TODO use Translator
             public void doit() {
-                debug();
+                previewPanel.debug();
             }
         };
         Command aboutAction = new Command("About FOP", "fopLogo") {
@@ -159,26 +158,23 @@
         setSize(screen.width * 61 / 100, screen.height * 9 / 10);
 
         //Page view stuff
-        pageLabel = new JLabel();
-        pageLabel.setHorizontalAlignment(0 /* CENTER */);
-        pageLabel.setBorder(new EmptyBorder(20, 0, 20, 0));
-        JScrollPane previewArea = new JScrollPane(pageLabel);
-        previewArea.getViewport().setBackground(Color.gray);
-        previewArea.setMinimumSize(new Dimension(50, 50));
-        getContentPane().add(previewArea, BorderLayout.CENTER);
+				previewPanel = new PreviewPanel(foUserAgent, renderer);
+        getContentPane().add(previewPanel, BorderLayout.CENTER);
 
         //Scaling combobox
         scale = new JComboBox();
+        scale.addItem(translator.getString("Menu.Fit.Window"));
+        scale.addItem(translator.getString("Menu.Fit.Width"));
         scale.addItem("25%");
         scale.addItem("50%");
         scale.addItem("75%");
         scale.addItem("100%");
         scale.addItem("150%");
         scale.addItem("200%");
-        scale.addItem("400%");
         scale.setMaximumSize(new Dimension(80, 24));
         scale.setPreferredSize(new Dimension(80, 24));
         scale.setSelectedItem("100%");
+        scale.setEditable(true);
         scale.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 scaleActionPerformed(e);
@@ -244,101 +240,137 @@
     private JMenuBar setupMenu() {
         JMenuBar menuBar = new JMenuBar();
         JMenu menu = new JMenu(translator.getString("Menu.File"));
-
+				menu.setMnemonic(KeyEvent.VK_F);
         //Adds mostly the same actions, but without icons
-        menu.add(new Command(translator.getString("Menu.Print")) {
+        menu.add(new Command(translator.getString("Menu.Print"), KeyEvent.VK_P) {
             public void doit() {
-                startPrinterJob();
+                startPrinterJob(true);
             }
         });
         // inputHandler must be set to allow reloading
         if (foUserAgent.getInputHandler() != null) {
-            menu.add(new Command(translator.getString("Menu.Reload")) {
+            menu.add(new Command(translator.getString("Menu.Reload"), KeyEvent.VK_R) {
                 public void doit() {
                     reload();
                 }
             });
         }
         menu.addSeparator();
-        menu.add(new Command(translator.getString("Menu.Exit")) {
+        menu.add(new Command(translator.getString("Menu.Exit"), KeyEvent.VK_X) {
             public void doit() {
                 dispose();
             }
         });
         menuBar.add(menu);
+
         menu = new JMenu(translator.getString("Menu.View"));
-        menu.add(new Command(translator.getString("Menu.First.page")) {
+				menu.setMnemonic(KeyEvent.VK_V);
+        menu.add(new Command(translator.getString("Menu.First.page"), KeyEvent.VK_F) {
             public void doit() {
                 goToFirstPage();
             }
         });
-        menu.add(new Command(translator.getString("Menu.Prev.page")) {
+        menu.add(new Command(translator.getString("Menu.Prev.page"), KeyEvent.VK_P) {
             public void doit() {
                 goToPreviousPage();
             }
         });
-        menu.add(new Command(translator.getString("Menu.Next.page")) {
+        menu.add(new Command(translator.getString("Menu.Next.page"), KeyEvent.VK_N) {
             public void doit() {
                 goToNextPage();
             }
         });
-        menu.add(new Command(translator.getString("Menu.Last.page")) {
+        menu.add(new Command(translator.getString("Menu.Last.page"), KeyEvent.VK_L) {
             public void doit() {
                 goToLastPage();
             }
         });
-        menu.add(new Command(translator.getString("Menu.Go.to.Page") + " ...") {
+        menu.add(new Command(translator.getString("Menu.Go.to.Page") + " ...", KeyEvent.VK_G) {
             public void doit() {
                 showGoToPageDialog();
             }
         });
         menu.addSeparator();
         JMenu subMenu = new JMenu(translator.getString("Menu.Zoom"));
-        subMenu.add(new Command("25%") {
+				subMenu.setMnemonic(KeyEvent.VK_Z);
+        subMenu.add(new Command("25%", 0) {
             public void doit() {
                 setScale(25.0);
             }
         });
-        subMenu.add(new Command("50%") {
+        subMenu.add(new Command("50%", 0) {
             public void doit() {
                 setScale(50.0);
             }
         });
-        subMenu.add(new Command("75%") {
+        subMenu.add(new Command("75%", 0) {
             public void doit() {
                 setScale(75.0);
             }
         });
-        subMenu.add(new Command("100%") {
+        subMenu.add(new Command("100%", 0) {
             public void doit() {
                 setScale(100.0);
             }
         });
-        subMenu.add(new Command("150%") {
+        subMenu.add(new Command("150%", 0) {
             public void doit() {
                 setScale(150.0);
             }
         });
-        subMenu.add(new Command("200%") {
+        subMenu.add(new Command("200%", 0) {
             public void doit() {
                 setScale(200.0);
             }
         });
-        subMenu.add(new Command("400%") {
+        menu.add(subMenu);
+        menu.addSeparator();
+        menu.add(new Command(translator.getString("Menu.Default.zoom"), KeyEvent.VK_D) {
             public void doit() {
-                setScale(400.0);
+										setScale(100.0);
+            }
+        });
+        menu.add(new Command(translator.getString("Menu.Fit.Window"), KeyEvent.VK_F) {
+            public void doit() {
+								setScaleToFitWindow();
+            }
+        });
+        menu.add(new Command(translator.getString("Menu.Fit.Width"), KeyEvent.VK_W) {
+            public void doit() {
+                setScaleToFitWidth();
             }
         });
-        menu.add(subMenu);
         menu.addSeparator();
-        menu.add(new Command(translator.getString("Menu.Default.zoom")) {
+
+				ButtonGroup group = new ButtonGroup();
+				JRadioButtonMenuItem single = new JRadioButtonMenuItem(new Command(translator.getString("Menu.Single"), KeyEvent.VK_S) {
             public void doit() {
-                setScale(100.0);
+										previewPanel.setDisplayMode(PreviewPanel.SINGLE);
             }
         });
+				JRadioButtonMenuItem cont = new JRadioButtonMenuItem(new Command(translator.getString("Menu.Continuous"), KeyEvent.VK_C) {
+								public void doit() {
+										previewPanel.setDisplayMode(PreviewPanel.CONTINUOUS);
+								}
+						});
+				JRadioButtonMenuItem facing = new JRadioButtonMenuItem(new Command(translator.getString("Menu.Facing"), 0) {
+								public void doit() {
+										previewPanel.setDisplayMode(PreviewPanel.CONT_FACING);
+								}
+						});
+				single.setSelected(true);
+				group.add(single);
+				group.add(cont);
+				group.add(facing);
+				menu.add(single);
+				menu.add(cont);
+				menu.add(facing);
+
         menuBar.add(menu);
+
         menu = new JMenu(translator.getString("Menu.Help"));
-        menu.add(new Command(translator.getString("Menu.About")) {
+				menu.setMnemonic(KeyEvent.VK_H);
+        menu.add(new Command(translator.getString("Menu.About"), KeyEvent.VK_A) {
             public void doit() {
                 startHelpAbout();
             }
@@ -347,119 +379,70 @@
         return menuBar;
     }
 
-    /** Shows the About box */
-    private void startHelpAbout() {
-        PreviewDialogAboutBox dlg = new PreviewDialogAboutBox(this, translator);
-        //Centers the box
-        Dimension dlgSize = dlg.getPreferredSize();
-        Dimension frmSize = getSize();
-        Point loc = getLocation();
-        dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x,
-                        (frmSize.height - dlgSize.height) / 2 + loc.y);
-        dlg.setVisible(true);
+		public void reload() {
+				previewPanel.reload();
     }
 
     /**
      * Changes the current visible page
      * @param number the page number to go to
      */
-      private void goToPage(int number) {
-        currentPage = number;
-        showPage();
+		public void goToPage(int number) {
+				if (number!=previewPanel.getPage()) {
+						previewPanel.setPage(number);
         setInfo();
     }
+    }
 
     /**
      * Shows the previous page.
      */
-    private void goToPreviousPage() {
-        if (currentPage <= 0) {
-            return;
+    public void goToPreviousPage() {
+				int page = previewPanel.getPage();
+        if (page > 0) {
+						goToPage(page-1);
         }
-        currentPage--;
-        goToPage(currentPage);
     }
 
     /**
      * Shows the next page.
      */
-    private void goToNextPage() {
-        if (currentPage >= renderer.getNumberOfPages() - 1) {
-            return;
+    public void goToNextPage() {
+				int page = previewPanel.getPage();
+        if (page < renderer.getNumberOfPages() - 1) {
+						goToPage(page+1);
         }
-        currentPage++;
-        goToPage(currentPage);
     }
 
-    /**
-     * Shows the last page.
-     */
-    private void goToLastPage() {
-        if (currentPage == renderer.getNumberOfPages() - 1) {
-            return;
-        }
-        currentPage = renderer.getNumberOfPages() - 1;
-        goToPage(currentPage);
-    }
-
-    /**
-     * Reloads and reformats document.
-     */
-    private synchronized void reload() {
-        if (reloader == null || !reloader.isAlive()) {
-            reloader = new Reloader();
-            reloader.start();
-        }
-    }
-
-    /**
-     * Allows a (yet) simple visual debug of the document.
-     */
-    private void debug(){
-        renderer.debug = !renderer.debug;
-        reload();
+    /** Shows the first page. */
+    public void goToFirstPage() {
+        goToPage(0);
     }
 
     /**
-     * This class is used to reload document in a thread safe way.
+     * Shows the last page.
      */
-    private class Reloader extends Thread {
-        public void run() {
-
-            if (!renderer.renderingDone) {
-                // do not allow the reloading while FOP is
-                // still rendering
-                JOptionPane.showMessageDialog(getContentPane(),
-                        "Cannot perform the requested operation until "
-                                + "all page are rendererd. Please wait",
-                        "Please wait ", 1 /* INFORMATION_MESSAGE */);
-                return;
-            }
-
-            if (fop == null) {
-                fop = new Fop(Constants.RENDER_AWT, foUserAgent);
+    public void goToLastPage() {
+				goToPage(renderer.getNumberOfPages() - 1);
             }
 
-            pageLabel.setIcon(null);
-            int savedCurrentPage = currentPage;
-            currentPage = 0;
-            renderer.clearViewportList();
-
-            try {
-                setStatus(translator.getString("Status.Build.FO.tree"));
-                foUserAgent.getInputHandler().render(fop);
-                goToPage(savedCurrentPage);
-                setStatus(translator.getString("Status.Show"));
-            } catch (FOPException e) {
-                reportException(e);
-            }
-        }
+    /** Shows the About box */
+    private void startHelpAbout() {
+        PreviewDialogAboutBox dlg = new PreviewDialogAboutBox(this, translator);
+        //Centers the box
+        Dimension dlgSize = dlg.getPreferredSize();
+        Dimension frmSize = getSize();
+        Point loc = getLocation();
+        dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x,
+                        (frmSize.height - dlgSize.height) / 2 + loc.y);
+        dlg.setVisible(true);
     }
 
     /**
      * Shows "go to page" dialog and then goes to the selected page
      */
     private void showGoToPageDialog() {
+				int currentPage = previewPanel.getPage();
         GoToPageDialog d = new GoToPageDialog(this,
             translator.getString("Menu.Go.to.Page"), translator);
         d.setLocation((int)getLocation().getX() + 50,
@@ -473,53 +456,72 @@
         goToPage(currentPage);
     }
 
-    /** Shows the first page. */
-    private void goToFirstPage() {
-        if (currentPage == 0) {
-            return;
-        }
-        currentPage = 0;
-        goToPage(currentPage);
+    /** Scales page image */
+    public void setScale(double scaleFactor) {
+//         if (scaleFactor == 25.0) {
+//             scale.setSelectedIndex(0);
+//         } else if (scaleFactor == 50.0) {
+//             scale.setSelectedIndex(1);
+//         } else if (scaleFactor == 75.0) {
+//             scale.setSelectedIndex(2);
+//         } else if (scaleFactor == 100.0) {
+//             scale.setSelectedIndex(3);
+//         } else if (scaleFactor == 150.0) {
+//             scale.setSelectedIndex(4);
+//         } else if (scaleFactor == 200.0) {
+//             scale.setSelectedIndex(5);
+//         } else if (scaleFactor == 400.0) {
+//             scale.setSelectedIndex(6);
+//         } else {
+						scale.setSelectedItem(percentFormat.format(scaleFactor)+"%");
+// 				}
+        previewPanel.setScaleFactor(scaleFactor / 100d);
     }
 
-    /** Prints the document */
-    private void startPrinterJob() {
-        PrinterJob pj = PrinterJob.getPrinterJob();
-        pj.setPageable(renderer);
-        if (pj.printDialog()) {
+		public void setScaleToFitWindow() {
             try {
-                pj.print();
-            } catch (PrinterException e) {
-                e.printStackTrace();
-            }
+						setScale(previewPanel.getScaleToFitWindow()*100);
+				} catch(FOPException fopEx) {
+						fopEx.printStackTrace();
         }
     }
 
-    /** Scales page image */
-    private void setScale(double scaleFactor) {
-        if (scaleFactor == 25.0) {
-            scale.setSelectedIndex(0);
-        } else if (scaleFactor == 50.0) {
-            scale.setSelectedIndex(1);
-        } else if (scaleFactor == 75.0) {
-            scale.setSelectedIndex(2);
-        } else if (scaleFactor == 100.0) {
-            scale.setSelectedIndex(3);
-        } else if (scaleFactor == 150.0) {
-            scale.setSelectedIndex(4);
-        } else if (scaleFactor == 200.0) {
-            scale.setSelectedIndex(5);
-        } else if (scaleFactor == 400.0) {
-            scale.setSelectedIndex(6);
+		public void setScaleToFitWidth() {
+				try {
+						setScale(previewPanel.getScaleToFitWidth()*100);
+				} catch(FOPException fopEx) {
+						fopEx.printStackTrace();
         }
-        renderer.setScaleFactor(scaleFactor / 100d);
-        reload();
     }
 
     private void scaleActionPerformed(ActionEvent e) {
+				try {
+						int index = scale.getSelectedIndex();
+						if (index==0) {
+								setScale(previewPanel.getScaleToFitWindow()*100);
+						} else if (index==1) {
+								setScale(previewPanel.getScaleToFitWidth()*100);
+						} else {
         String item = (String)scale.getSelectedItem();
         setScale(Double.parseDouble(item.substring(0, item.indexOf('%'))));
     }
+				} catch(FOPException fopEx) {
+						fopEx.printStackTrace();
+				}
+    }
+
+    /** Prints the document */
+    public void startPrinterJob(boolean showDialog) {
+        PrinterJob pj = PrinterJob.getPrinterJob();
+        pj.setPageable(renderer);
+        if (!showDialog || pj.printDialog()) {
+            try {
+                pj.print();
+            } catch (PrinterException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 
     /**
      * Sets message to be shown in the status bar in a thread safe way.
@@ -561,47 +563,13 @@
         public void run() {
 
             String message = translator.getString("Status.Page") + " "
-                    + (currentPage + 1) + " "
+                    + (previewPanel.getPage() + 1) + " "
                     + translator.getString("Status.of") + " "
-                    + renderer.getCurrentPageNumber();
-
+                    + (renderer.getNumberOfPages());
             infoStatus.setText(message);
         }
     }
 
-    /** Starts rendering process and shows the current page. */
-    public synchronized void showPage() {
-        ShowPageImage viewer = new ShowPageImage();
-
-        if (SwingUtilities.isEventDispatchThread()) {
-            viewer.run();
-        } else {
-            SwingUtilities.invokeLater(viewer);
-        }
-    }
-
-    /** This class is used to render the page image in a thread safe way. */
-    private class ShowPageImage implements Runnable {
-
-        /**
-         * The run method that does the actual rendering of the viewed page
-         */
-        public void run() {
-
-            setStatus(translator.getString("Status.Build.FO.tree"));
-
-            BufferedImage pageImage = null;
-            try {
-                pageImage = renderer.getPageImage(currentPage);
-            } catch (FOPException e) {
-                reportException(e);
-            }
-            pageLabel.setIcon(new ImageIcon(pageImage));
-
-            setStatus(translator.getString("Status.Show"));
-        }
-    }
-
     /**
      * Opens standard Swing error dialog box and reports given exception details.
      * @param e the Exception
Index: src/java/org/apache/fop/render/awt/viewer/resources/Viewer.properties
===================================================================
RCS file: /home/cvspublic/xml-fop/src/java/org/apache/fop/render/awt/viewer/resources/Viewer.properties,v
retrieving revision 1.1
diff -w -u -r1.1 Viewer.properties
--- src/java/org/apache/fop/render/awt/viewer/resources/Viewer.properties	21 Sep 2003 20:56:23 -0000	1.1
+++ src/java/org/apache/fop/render/awt/viewer/resources/Viewer.properties	14 Jun 2005 11:02:49 -0000
@@ -22,6 +22,11 @@
 Menu.Print=Print
 Menu.Zoom=Zoom
 Menu.Reload=Reload
+Menu.Fit.Window=Fit in window
+Menu.Fit.Width=Fit Width
+Menu.Single=Single Page
+Menu.Continuous=Continuous
+Menu.Facing=Continuous Facing
 
 Title.Preview=Preview
 
Index: src/java/org/apache/fop/render/java2d/Java2DRenderer.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/java/org/apache/fop/render/java2d/Java2DRenderer.java,v
retrieving revision 1.2
diff -w -u -r1.2 Java2DRenderer.java
--- src/java/org/apache/fop/render/java2d/Java2DRenderer.java	9 Jun 2005 12:45:53 -0000	1.2
+++ src/java/org/apache/fop/render/java2d/Java2DRenderer.java	14 Jun 2005 11:02:50 -0000
@@ -20,6 +20,7 @@
 
 // Java
 import java.awt.Color;
+import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.color.ColorSpace;
@@ -227,14 +228,6 @@
     }
 
     /**
-     * @param the 0-based pageIndex
-     * @return the corresponding PageViewport
-     */
-    public PageViewport getPageViewport(int pageIndex) {
-        return (PageViewport) pageViewportList.get(pageIndex);
-    }
-
-    /**
      * This method override only stores the PageViewport in a List. No actual
      * rendering is performed here. A renderer override renderPage() to get the
      * freshly produced PageViewport, and rendere them on the fly (producing the
@@ -321,6 +314,20 @@
         return currentPageImage;
     }
 
+		
+		/**
+		 * Returns the page viewport
+		 * @exception FOPException If the page is out of range.
+		 */
+		public PageViewport getPageViewport(int pageNum) throws FOPException {
+        if (pageNum < 0 || pageNum >= pageViewportList.size()) {
+            throw new FOPException("out-of-range page number (" + pageNum
+																	 + ") requested; only " + pageViewportList.size()
+																	 + " page(s) available.");
+        }
+        return (PageViewport) pageViewportList.get(pageNum);
+		}
+
     /**
      * Generates a desired page from the renderer's page viewport list.
      *
@@ -330,14 +337,7 @@
      * @throws FOPException
      */
     public BufferedImage getPageImage(int pageNum) throws FOPException {
-        if (pageNum < 0 || pageNum >= pageViewportList.size()) {
-            throw new FOPException("out-of-range page number (" + pageNum
-                    + ") requested; only " + pageViewportList.size()
-                    + " page(s) available.");
-        }
-        PageViewport pageViewport = (PageViewport) pageViewportList
-                .get(pageNum);
-        return getPageImage(pageViewport);
+        return getPageImage(getPageViewport(pageNum));
     }
 
     /**
