You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by James Tauber <jt...@locus.apache.org> on 1999/11/25 20:21:12 UTC

cvs commit: xml-fop/src/org/apache/fop/viewer/Images Print.gif firstpg.gif lastpg.gif nextpg.gif prevpg.gif

jtauber     99/11/25 11:21:12

  Modified:    .        STATUS
               src/org/apache/fop Makefile
               src/org/apache/fop/apps Makefile
               src/org/apache/fop/render Makefile
  Added:       src/org/apache/fop/apps AWTCommandLine.java
               src/org/apache/fop/render/awt AWTRenderer.java Makefile
               src/org/apache/fop/viewer Command.java DocumentPanel.java
                        IconToolBar.java Makefile PreviewDialog.java
                        PreviewDialogAboutBox.java
               src/org/apache/fop/viewer/Images Print.gif firstpg.gif
                        lastpg.gif nextpg.gif prevpg.gif
  Log:
  Added AWT Viewer contributed by Albers+Frommberger (af-software.de)
  
  Revision  Changes    Path
  1.9       +18 -1     xml-fop/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/xml-fop/STATUS,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- STATUS	1999/11/25 17:33:09	1.8
  +++ STATUS	1999/11/25 19:21:09	1.9
  @@ -1,4 +1,4 @@
  -$Id: STATUS,v 1.8 1999/11/25 17:33:09 jtauber Exp $
  +$Id: STATUS,v 1.9 1999/11/25 19:21:09 jtauber Exp $
   
   STATUS
   
  @@ -11,8 +11,25 @@
   [PARTIAL] Implement basic keeps
   [DONE]Incorporate Eric Schaeffer's fix to tables in static-content
   [DONE] Incorporate Kelly Campell's fixes to GifJpegImage
  +Incorporate Eric Schaeffer's further table fixes
  +Incorporate Eric Schaeffer's background colour implementation
   
   Other Bugs to fix:
   
   colour not continued onto subsequent pages if coloured block goes over page
  +
  +Todo's and problems with AWT Previewer:
  +
  +- currently the layout process uses PDF fonts. This gives sometimes
  +  trouble with java.awt.Font 
  +- we need some progress messages even if the process itself is fast
  +- GIF format is supported by the viewer, but disabled in FOP. BMP is
  +  not done, because there are no standard libraries.
  +- more comments/english comments
  +- print output using AWT
  +- i18n for the user interface (yes, now we need this stuff)
  +- toolbar images directory is not configurable
  +- first preview is painted twice (flashing screen)
  +- should "preview" be an option when calling FOP instead of having
  +  it's own main method?
   
  
  
  
  1.2       +2 -1      xml-fop/src/org/apache/fop/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/Makefile,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Makefile	1999/11/08 19:12:55	1.1
  +++ Makefile	1999/11/25 19:21:09	1.2
  @@ -10,7 +10,8 @@
   	layout \
   	pdf \
   	render \
  -	svg
  +	svg \
  +	viewer
   
   all: $(CLASSES) allsubs
   
  
  
  
  1.2       +2 -1      xml-fop/src/org/apache/fop/apps/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/Makefile,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Makefile	1999/11/08 19:13:08	1.1
  +++ Makefile	1999/11/25 19:21:09	1.2
  @@ -5,7 +5,8 @@
   
   SUBDIRS=
   
  -SOURCES=CommandLine.java \
  +SOURCES=AWTCommandLine.java \
  +	CommandLine.java \
   	Driver.java \
   	ErrorHandler.java \
   	FOPException.java \
  
  
  
  1.1                  xml-fop/src/org/apache/fop/apps/AWTCommandLine.java
  
  Index: AWTCommandLine.java
  ===================================================================
  
  package org.apache.fop.apps;
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  
  import org.apache.fop.viewer.*;
  import org.apache.fop.render.awt.*;
  
  import javax.swing.UIManager;
  import java.awt.*;
  
  // SAX
  import org.xml.sax.Parser;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  import org.xml.sax.SAXParseException;
  
  
  
  // Java
  import java.io.FileReader;
  import java.io.File;
  import java.io.FileWriter;
  import java.io.PrintWriter;
  import java.io.IOException;
  import java.io.FileNotFoundException;
  import java.net.URL;
  
  
  
  
  /**
   * initialize AWT previewer
   */
  
  public class AWTCommandLine {
  
  
    public AWTCommandLine(AWTRenderer aRenderer) {
  
      PreviewDialog frame = new PreviewDialog(aRenderer);
      frame.validate();
  
      // center window
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
      Dimension frameSize = frame.getSize();
      if (frameSize.height > screenSize.height)
        frameSize.height = screenSize.height;
      if (frameSize.width > screenSize.width)
        frameSize.width = screenSize.width;
      frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
      frame.setVisible(true);
    }
  
  
      static Parser createParser() {
  	String parserClassName =
  	    System.getProperty("org.xml.sax.parser");
  	if (parserClassName == null) {
  	    parserClassName = "com.jclark.xml.sax.Driver";
  	}
  	System.err.println("using SAX parser " + parserClassName);
  
  	try {
  	    return (Parser)
  		Class.forName(parserClassName).newInstance();
  	} catch (ClassNotFoundException e) {
  	    System.err.println("Could not find " + parserClassName);
  	} catch (InstantiationException e) {
  	    System.err.println("Could not instantiate "
  			       + parserClassName);
  	} catch (IllegalAccessException e) {
  	    System.err.println("Could not access " + parserClassName);
  	} catch (ClassCastException e) {
  	    System.err.println(parserClassName + " is not a SAX driver");
  	}
  	return null;
      }
  
    /**
     * create an InputSource from a file name
     *
     * @param filename the name of the file
     * @return the InputSource created
     */
    protected static InputSource fileInputSource(String filename) {
  
  	/* this code adapted from James Clark's in XT */
  	File file = new File(filename);
  	String path = file.getAbsolutePath();
  	String fSep = System.getProperty("file.separator");
  	if (fSep != null && fSep.length() == 1)
  	    path = path.replace(fSep.charAt(0), '/');
  	if (path.length() > 0 && path.charAt(0) != '/')
  	    path = '/' + path;
  	try {
  	    return new InputSource(new URL("file", null,
  					   path).toString());
  	}
  	catch (java.net.MalformedURLException e) {
  	    throw new Error("unexpected MalformedURLException");
  	}
    }
  
  
  
    /* main
     */
    public static void main(String[] args) {
      try  {
        UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
      } catch (Exception e) {
        e.printStackTrace();
      }
  
      String srcPath = null;
  
      System.err.println(Version.getVersion());
      if (args.length == 1) {
        srcPath = args[0];
      }
      else {
        System.err.println("usage: java " +
                           "AWTCommandLine " +
                           "formatting-object-file");
  
        System.exit(1);
      }
  
  
      AWTRenderer renderer = new AWTRenderer();
      new AWTCommandLine(renderer);
  
  //init parser
      Parser parser = createParser();
  
  	if (parser == null) {
  	    System.err.println("ERROR: Unable to create SAX parser");
  	    System.exit(1);
  	}
  
  	try {
  	    Driver driver = new Driver();
  	    driver.setRenderer(renderer);
  
  // init mappings: time
  	    driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
  	    driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
  
  // build FO tree: time
  	    driver.buildFOTree(parser, fileInputSource(srcPath));
  
  // layout FO tree: time
  	    driver.format();
  
  // render: time
          driver.render();
  
  	} catch (Exception e) {
  	    System.err.println("FATAL ERROR: " + e.getMessage());
  	    System.exit(1);
  	}
  
    }  // main
  }  // AWTCommandLine
  
  
  
  
  1.2       +2 -1      xml-fop/src/org/apache/fop/render/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/Makefile,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Makefile	1999/11/08 19:13:10	1.1
  +++ Makefile	1999/11/25 19:21:10	1.2
  @@ -3,7 +3,8 @@
   BASEDIR:=../../../../..
   include $(BASEDIR)/Makefile.rules
   
  -SUBDIRS=pdf \
  +SUBDIRS=awt \
  +	pdf \
   	xml
   
   SOURCES=Renderer.java
  
  
  
  1.1                  xml-fop/src/org/apache/fop/render/awt/AWTRenderer.java
  
  Index: AWTRenderer.java
  ===================================================================
  
  
  package org.apache.fop.render.awt;
  
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
   
  import org.apache.fop.layout.*;
  import org.apache.fop.image.*;
  import org.apache.fop.svg.*;
  import org.apache.fop.render.pdf.*;
  import org.apache.fop.viewer.*;
  
  
  import java.awt.*;
  import java.awt.image.*;
  import java.awt.geom.*;
  import java.awt.font.*;
  import java.util.*;
  import java.io.*;
  import javax.swing.*;
  
  
  public class AWTRenderer implements org.apache.fop.render.Renderer {
  
    protected int pageWidth    = 0;
    protected int pageHeight   = 0;
    protected double scaleFactor = 100.0;
    protected int pageNumber = 0;
  
    protected Hashtable fontNames = new Hashtable();
    protected Hashtable fontStyles = new Hashtable();
  
  
  
  
    protected Graphics2D graphics = null;
  
    protected DocumentPanel documentPanel = null;
  
  
    /** the current (internal) font name */
    protected String currentFontName;
  
    /** the current font size in millipoints */
    protected int currentFontSize;
  
    /** the current colour's red component */
    protected float currentRed = 0;
  
    /** the current colour's green component */
    protected float currentGreen = 0;
  
    /** the current colour's blue component */
    protected float currentBlue = 0;
  
    /** the current vertical position in millipoints from bottom */
    protected int currentYPosition = 0;
  
    /** the current horizontal position in millipoints from left */
    protected int currentXPosition = 0;
  
    /** the horizontal position of the current area container */
    private int currentAreaContainerXPosition = 0;
  
  
    public AWTRenderer() {
    }
  
    public void setGraphics(Graphics2D g) {
      graphics = g;
      if (graphics != null) {
        graphics = g;
        graphics.setColor(Color.red);
      }
    }
  
    public int getPageNumber() {
      return pageNumber;
    }
  
    public void setPageNumber(int aValue) {
      pageNumber = aValue;
      if (documentPanel == null)
        return;
      documentPanel.updateSize(pageNumber, scaleFactor / 100.0);
    }
  
    public void setScaleFactor(double newScaleFactor) {
      scaleFactor = newScaleFactor;
      if (documentPanel == null)
        return;
      documentPanel.updateSize(pageNumber, scaleFactor / 100.0);
    }
  
  
    public double getScaleFactor() {
      return scaleFactor;
    }
  
  
    /**
     * Vor dem Druck einzustellen:
     *
     * Seite/Seiten w�hlen
     * Zoomfaktor
     * Seitenformat  / Quer- oder Hoch
     **/
    public void transform(Graphics2D g2d, double zoomPercent, double angle) {
      AffineTransform at = g2d.getTransform();
      at.rotate(angle);
      at.scale(zoomPercent/100.0, zoomPercent/100.0);
      g2d.setTransform(at);
    }
  
    protected void drawFrame() {
  
      int width  = pageWidth;
      int height = pageHeight;
  
      graphics.setColor(Color.white);
      graphics.fillRect(0, 0, width, height);
      graphics.setColor(Color.black);
      graphics.drawRect(-1, -1, width+2, height+2);
      graphics.drawLine(width+2, 0, width+2, height+2);
      graphics.drawLine(width+3, 1, width+3, height+3);
  
      graphics.drawLine(0, height+2, width+2, height+2);
      graphics.drawLine(1, height+3, width+3, height+3);
  
    }
  
  
    public void render(AreaTree areaTree, PrintWriter writer) throws IOException {
      documentPanel.setAreaTree(areaTree);
      documentPanel.setPageCount(areaTree.getPages().size());
      documentPanel.updateSize(pageNumber, scaleFactor/100.0);
      render(areaTree, 0);
    }
  
    public void render(AreaTree areaTree, int aPageNumber) throws IOException {
      Page page = (Page)areaTree.getPages().elementAt(aPageNumber);
  
      pageWidth  = (int)((float)page.getWidth() / 1000f);
      pageHeight = (int)((float)page.getHeight() / 1000f);
  
      transform(graphics, scaleFactor, 0);
      drawFrame();
  
      renderPage(page);
    }
  
    public void renderPage(Page page) {
  	AreaContainer body, before, after;
  
  	body = page.getBody();
  	before = page.getBefore();
  	after = page.getAfter();
  
  	this.currentFontName = "";
  	this.currentFontSize = 0;
  
  	renderAreaContainer(body);
  
  	if (before != null) {
  	    renderAreaContainer(before);
  	}
  
  	if (after != null) {
  	    renderAreaContainer(after);
  	}
  
    }
  
  
    public void renderAreaContainer(AreaContainer area) {
  
  
  	this.currentYPosition = area.getYPosition();
  	this.currentAreaContainerXPosition = area.getXPosition();
  
  	Enumeration e = area.getChildren().elements();
  	while (e.hasMoreElements()) {
  	    org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
  	    b.render(this);
  	}
    }
  
  
  
    protected Rectangle2D getBounds(org.apache.fop.layout.Area a) {
      return new Rectangle2D.Double(currentAreaContainerXPosition,
                                    currentYPosition,
                                    a.getAllocationWidth(),
                                    a.getHeight());
    }
  
      public void renderBlockArea(BlockArea area) {
  	int rx = this.currentAreaContainerXPosition
  	    + area.getStartIndent();
  	int ry = this.currentYPosition;
  	int w = area.getContentWidth();
  	int h = area.getHeight();
  	Enumeration e = area.getChildren().elements();
  	while (e.hasMoreElements()) {
  	    org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
  	    b.render(this);
  	}
      }
  
  
    public void setupFontInfo(FontInfo fontInfo) {
  	  FontSetup.setup(fontInfo);
      Hashtable hash = fontInfo.getFonts();
      org.apache.fop.render.pdf.Font f;
      String name;
      Object key;
      int fontStyle;
      for (Enumeration e = hash.keys(); e.hasMoreElements();) {
        fontStyle = java.awt.Font.PLAIN;
        key = e.nextElement();
        f = (org.apache.fop.render.pdf.Font)hash.get(key);
        name = f.fontName();
  
        if (name.toUpperCase().indexOf("BOLD") > 0) {
          fontStyle += java.awt.Font.BOLD;
        }
        if (name.toUpperCase().indexOf("ITALIC") > 0 ||
            name.toUpperCase().indexOf("OBLIQUE") > 0) {
          fontStyle += java.awt.Font.ITALIC;
        }
  
        int hyphenIndex = name.indexOf("-");
  
        hyphenIndex = (hyphenIndex < 0) ? name.length() : hyphenIndex;
        fontNames.put(key, name.substring(0, hyphenIndex));
        fontStyles.put(key, new Integer(fontStyle));
      }
  
    }
  
  
  
      public void renderDisplaySpace(DisplaySpace space) {
  	int d = space.getSize();
  	this.currentYPosition -= d;
      }
  
  
      public void renderImageArea(ImageArea area) {
  	int x = this.currentAreaContainerXPosition +
  	    area.getXOffset();
  	int y = this.currentYPosition;
  	int w = area.getContentWidth();
  	int h = area.getHeight();
  
  
  	FopImage img = area.getImage();
  
      if (img == null) {
        System.out.println("area.getImage() is null");
      }
  
      int[] map = img.getimagemap();
  
      String path = img.gethref();
      // path = "c:/any.gif";
  
      ImageIcon icon = new ImageIcon(path); 
  
      Image imgage = icon.getImage();
  
      graphics.drawImage(imgage, currentXPosition / 1000,
                         pageHeight - y / 1000,
                         img.getWidth() / 1000,
                         img.getHeight() / 1000,
                         null);
  
  	currentYPosition -= h;
  
  
  	/* int xObjectNum = this.pdfDoc.addImage(img);
  
  	currentStream.add("ET\nq\n" + (img.getWidth()/1000f) + " 0 0 " +
  			  (img.getHeight()/1000f) + " " +
  			  ((x + img.getX())/1000f) + " " +
  			  (((y - h) - img.getY())/1000f) + " cm\n" +
  			  "/Im" + xObjectNum + " Do\nQ\nBT\n");
      */
      }
  
  
  
  
      public void renderInlineArea(InlineArea area) {
  	char ch;
  	StringBuffer pdf = new StringBuffer();
  
  	String name = area.getFontState().getFontName();
  	int size = area.getFontState().getFontSize();
  
  	float red = area.getRed();
  	float green = area.getGreen();
  	float blue = area.getBlue();
  
  	if ((!name.equals(this.currentFontName))
  	    || (size != this.currentFontSize)) {
  	    this.currentFontName = name;
  	    this.currentFontSize = size;
  	}
  
  	if ((red != this.currentRed)
  	    || (green != this.currentGreen)
  	    || (blue != this.currentBlue)) {
  	    this.currentRed = red;
  	    this.currentGreen = green;
  	    this.currentBlue = blue;
  	}
  
  	int rx = this.currentXPosition;
  	int bl = this.currentYPosition;
  
  
  	String s = area.getText();
      Color oldColor = graphics.getColor();
      java.awt.Font oldFont = graphics.getFont();
      java.awt.Font f = new java.awt.Font(fontNames.get(name).toString(),
                                          ((Integer)fontStyles.get(name)).intValue(),
                                          (int)(size / 1000f));
  
  
      graphics.setColor(new Color(red, green, blue));
  
      graphics.setFont(f);
      graphics.drawString(s, rx / 1000f, (int)(pageHeight - bl / 1000f));
      graphics.setFont(oldFont);
      graphics.setColor(oldColor);
  
  
  	this.currentXPosition += area.getContentWidth();
      }
  
      public void renderInlineSpace(InlineSpace space) {
  	this.currentXPosition += space.getSize();
      }
  
  
      public void renderLineArea(LineArea area) {
  	int rx = this.currentAreaContainerXPosition
  	    + area.getStartIndent();
  	int ry = this.currentYPosition;
  	int w = area.getContentWidth();
  	int h = area.getHeight();
  
  	this.currentYPosition -= area.getPlacementOffset();
  	this.currentXPosition = rx;
  
  	int bl = this.currentYPosition;
  
  	Enumeration e = area.getChildren().elements();
  	while (e.hasMoreElements()) {
  	    org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
  	    b.render(this);
  	}
  
  	this.currentYPosition = ry-h;
      }
  
      /**
       * render rule area into PDF
       *
       * @param area area to render
       */
      public void renderRuleArea(RuleArea area) {
  	int rx = this.currentAreaContainerXPosition
  	    + area.getStartIndent();
  	int ry = this.currentYPosition;
  	int w = area.getContentWidth();
  	int h = area.getHeight();
  	int th = area.getRuleThickness();
  	float r = area.getRed();
  	float g = area.getGreen();
  	float b = area.getBlue();
  
  
      Color oldColor = graphics.getColor();
  
      graphics.setColor(new Color(r, g, b));
  
      graphics.fillRect((int)(rx / 1000f), (int)(pageHeight - ry / 1000f),
                        (int)(w / 1000f), (int)(th / 1000f));
      graphics.setColor(oldColor);
  
  
  
      }
  
  
      public void renderSVGArea(SVGArea area) {
  	int x = this.currentAreaContainerXPosition;
  	int y = this.currentYPosition;
  	int w = area.getContentWidth();
  	int h = area.getHeight();
  	this.currentYPosition -= h;
    /*
  	Enumeration e = area.getChildren().elements();
  	while (e.hasMoreElements()) {
  	    Object o = e.nextElement();
  	    if (o instanceof RectGraphic) {
  		int rx = ((RectGraphic)o).x;
  		int ry = ((RectGraphic)o).y;
  		int rw = ((RectGraphic)o).width;
  		int rh = ((RectGraphic)o).height;
  		addRect(x+rx,y-ry,rw,-rh,0,0,0);
  	    } else if (o instanceof LineGraphic) {
  		int x1 = ((LineGraphic)o).x1;
  		int y1 = ((LineGraphic)o).y1;
  		int x2 = ((LineGraphic)o).x2;
  		int y2 = ((LineGraphic)o).y2;
  		addLine(x+x1,y-y1,x+x2,y-y2,0,0,0,0);
  	    } else if (o instanceof TextGraphic) {
  		int tx = ((TextGraphic)o).x;
  		int ty = ((TextGraphic)o).y;
  		String s = ((TextGraphic)o).s;
  		currentStream.add("1 0 0 1 "
  				  + ((x+tx)/1000f) + " "
  				  + ((y-ty)/1000f) + " Tm "
  				  + "(" + s + ") Tj\n");
  	    }
  	} */
      }
  
  
    public void setProducer(String producer) {
      // this.pdfDoc.setProducer(producer);
    }
  
  
    public void setComponent(DocumentPanel comp) {
      documentPanel = comp;
    }
  
  }
  
  
  
  
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/render/awt/Makefile
  
  Index: Makefile
  ===================================================================
  
  
  BASEDIR:=../../../../../..
  include $(BASEDIR)/Makefile.rules
  
  SUBDIRS=
  
  SOURCES=AWTRenderer.java
  
  CLASSES=$(SOURCES:.java=.class)
  
  all: $(CLASSES) allsubs
  
  clean: cleanme cleansubs
  
  cleanme:
  	rm -f *.class
  
  $(TARGETS:%=%subs): %subs :
  	for dir in $(SUBDIRS) ; do \
  		(cd $$dir && pwd && $(MAKE) $(MFLAGS) $*) || exit 1 ; \
  	done
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Command.java
  
  Index: Command.java
  ===================================================================
  package org.apache.fop.viewer;
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  import java.awt.event.ActionEvent;
  import javax.swing.AbstractAction;
  import javax.swing.ImageIcon;
  import java.io.File;
  
  
  /**
   * Klasse f�r UI-Kommandos. Die Kommandos k�nnen in das Men�system oder
   * in eine Toolbar eingef�gt werden.<br>
   * <code>Commands</code> unterst�tzen mehrsprachigkeit.<br>
   * Durch �berschreiben der Methode <code>doit<code> kann die Klasse customisiert werden.
   * �ber die Methode <code>undoit</code> kann Undo-Funktionalit�t unterst�tzt werden.<br>
   *
   * @author Juergen.Verwohlt@af-software.de
   * @version 1.0 18.03.99
   */
  public class Command extends AbstractAction {
  
    public static final String IMAGE_DIR = "../viewer/images/";
  
    public Command(String name) {
      this(name, (ImageIcon)null);
    }
  
    public Command(String name, ImageIcon anIcon) {
      super(name, anIcon);
    }
  
  
    public Command(String name, ImageIcon anIcon, String path) {
      this(name, anIcon);
      File f = new File (IMAGE_DIR + path + ".gif");
      if (!f.exists()) {
        System.err.println("Icon not found: " + f.getAbsolutePath());
      }
  
    }
  
    public Command(String name, String iconName) {
      this(name, new ImageIcon(IMAGE_DIR + iconName + ".gif"), iconName);
    }
  
    public void actionPerformed(ActionEvent e) {
      doit();
    }
  
    public void doit() {
      System.err.println("Not implemented.");
    }
  
    public void undoit() {
      System.err.println("Not implemented.");
    }
  }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/DocumentPanel.java
  
  Index: DocumentPanel.java
  ===================================================================
  package org.apache.fop.viewer;
  
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  
  
  import java.awt.*;
  import javax.swing.*;
  
  
  import org.apache.fop.layout.*;
  import org.apache.fop.render.awt.*;
  
  
   /**
    * Diese Komponente stellt im Dialog das Dokument dar.
    */
  public class DocumentPanel extends JComponent {
    static final int V_BORDER = 80;
    static final int H_BORDER = 70;
  
    protected AWTRenderer renderer;
    protected PreviewDialog previewDialog;
    protected AreaTree areaTree;
    protected int pageNumber = 0;
  
    protected int docWidth;
    protected int docHeight;
    protected Color myColor = Color.lightGray;
  
    public DocumentPanel(AWTRenderer aRenderer, PreviewDialog p) {
      previewDialog = p;
      renderer = aRenderer;
      renderer.setComponent(this);
    }
  
    public void updateSize(int aPageNumber, double aFactor) {
      if (areaTree == null)
        return;
  
      Page aPage = (Page)areaTree.getPages().elementAt(aPageNumber);
      docWidth  = aPage.getWidth() / 1000;
      docHeight = aPage.getHeight() / 1000;
      setSize((int)(aFactor * aPage.getWidth() / 1000.0 + 2*V_BORDER),
              (int)(aFactor * aPage.getHeight()/ 1000.0 + 2*H_BORDER));
    }
  
    public void setAreaTree(AreaTree tree) {
      areaTree = tree;
      updateSize(pageNumber, 1.0);
      getParent().getParent().doLayout();
    }
  
  
    public void paintComponent(Graphics g) {
      Color ownColor = g.getColor();
      g.setColor(myColor);
      g.fillRect(0, 0, getWidth(), getHeight());
      g.setColor(ownColor);
      g.translate(V_BORDER, H_BORDER);
  
      renderer.setGraphics((Graphics2D)g);
      if (areaTree != null) {
        try {
          renderer.render(areaTree, pageNumber);
        } catch(Exception ex) {
          ex.printStackTrace();
        }
      }
      g.translate(-V_BORDER, -H_BORDER);
    }
  
    public void setPageNumber(int number) {
      pageNumber = number;
    }
  
    public Dimension getPreferredSize() {
      return getSize();
    }
  
    public void setPageCount(int pageCount) {
      previewDialog.setPageCount(pageCount);
    }
  
  }
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/IconToolBar.java
  
  Index: IconToolBar.java
  ===================================================================
  package org.apache.fop.viewer;
  
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  
  import javax.swing.*;
  import java.beans.PropertyChangeListener;
  
  public class IconToolBar extends JToolBar {
  
    public JButton add(Action a) {
      String name = (String) a.getValue(Action.NAME);
      Icon icon = (Icon) a.getValue(Action.SMALL_ICON);
      return add(a, name, icon);
    }
  
    public JButton add(Action a, String name, Icon icon) {
      JButton b = new JButton(icon);
      b.setToolTipText(name);
      b.setEnabled(a.isEnabled());
      b.addActionListener(a);
      add(b);
      PropertyChangeListener actionPropertyChangeListener =
        createActionChangeListener(b);
      a.addPropertyChangeListener(actionPropertyChangeListener);
      return b;
    }
  }
  
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Makefile
  
  Index: Makefile
  ===================================================================
  
  
  BASEDIR:=../../../../..
  include $(BASEDIR)/Makefile.rules
  
  SUBDIRS=
  
  SOURCES=Command.java \
  	DocumentPanel.java \
  	IconToolBar.java \
  	PreviewDialog.java \
  	PreviewDialogAboutBox.java
  
  CLASSES=$(SOURCES:.java=.class)
  
  all: $(CLASSES) allsubs
  
  clean: cleanme cleansubs
  
  cleanme:
  	rm -f *.class
  
  $(TARGETS:%=%subs): %subs :
  	for dir in $(SUBDIRS) ; do \
  		(cd $$dir && pwd && $(MAKE) $(MFLAGS) $*) || exit 1 ; \
  	done
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/PreviewDialog.java
  
  Index: PreviewDialog.java
  ===================================================================
  
  package org.apache.fop.viewer;
  
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  
  import java.awt.*;
  import java.awt.event.*;
  import java.util.*;
  import javax.swing.*;
  import java.beans.PropertyChangeListener;
  
  import org.apache.fop.layout.*;
  import org.apache.fop.render.awt.*;
  
  
  
  
  /**
   * Frame and User Interface for Preview
   */
  public class PreviewDialog extends JFrame {
  
  
    protected int currentPage = 0;
    protected int pageCount = 0;
  
    protected AWTRenderer renderer;
  
    protected IconToolBar toolBar = new IconToolBar();
  
    protected Command printAction        = new Command("Print", "Print");// { public void doit() {}}
    protected Command firstPageAction    = new Command("First page",   "firstpg") { public void doit() {goToFirstPage(null);}};
    protected Command previousPageAction = new Command("Previous page", "prevpg") { public void doit() {goToPreviousPage(null);}};
    protected Command nextPageAction     = new Command("Next page",     "nextpg") { public void doit() {goToNextPage(null);}};
    protected Command lastPageAction     = new Command("Last page",     "lastpg") { public void doit() {goToLastPage(null);}};
  
    protected JLabel zoomLabel = new JLabel(); //{public float getAlignmentY() { return 0.0f; }};
    protected JComboBox scale = new JComboBox() {public float getAlignmentY() { return 0.5f; }};
  
    protected JScrollPane previewArea = new JScrollPane();
    protected JLabel statusBar = new JLabel();
    protected DocumentPanel docPanel;
  
  
  
  
    public PreviewDialog(AWTRenderer aRenderer) {
      renderer = aRenderer;
  
  
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setSize(new Dimension(379, 476));
      previewArea.setMinimumSize(new Dimension(50, 50));
      statusBar.setText("");
      statusBar.setBackground(new Color(0, 0, 231));
      this.setTitle("FOP: AWT-Preview");
  
      scale.addItem("25");
      scale.addItem("50");
      scale.addItem("75");
      scale.addItem("100");
      scale.addItem("150");
      scale.addItem("200");
  
      scale.setMaximumSize(new Dimension(80, 24));
      scale.setPreferredSize(new Dimension(80, 24));
  
      scale.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
          scale_actionPerformed(e);
        }
      });
  
      scale.setSelectedItem("100");
      renderer.setScaleFactor(100.0);
  
      zoomLabel.setText("Zoom");
  
      this.setJMenuBar(setupMenue());
  
      this.getContentPane().add(toolBar, BorderLayout.NORTH);
      this.getContentPane().add(statusBar, BorderLayout.SOUTH);
  
      toolBar.add(printAction);
      toolBar.addSeparator();
      toolBar.add(firstPageAction);
      toolBar.add(previousPageAction);
      toolBar.add(nextPageAction);
      toolBar.add(lastPageAction);
      toolBar.addSeparator();
      toolBar.add(zoomLabel, null);
      toolBar.addSeparator();
      toolBar.add(scale, null);
  
      this.getContentPane().add(previewArea, BorderLayout.CENTER);
  
      docPanel = new DocumentPanel(renderer, this);
  
  
      previewArea.setSize(docPanel.getSize());
      previewArea.getViewport().add(docPanel);
      statusBar.setText("FOTree --> AreaTree ...");
  
    }
  
  
    JMenuBar setupMenue() {
      JMenuBar  menuBar;
      JMenuItem menuItem;
      JMenu     menu;
      JMenu     subMenu;
  
      menuBar = new JMenuBar();
        menu = new JMenu("File");
          subMenu = new JMenu("OutputFormat");
            subMenu.add(new Command("mHTML"));
            subMenu.add(new Command("mPDF"));
            subMenu.add(new Command("mRTF"));
            subMenu.add(new Command("mTEXT"));
          // menu.add(subMenu);
          // menu.addSeparator();
          menu.add(new Command("Print"));
          menu.addSeparator();
          menu.add(new Command("Exit") { public void doit() {dispose();}} );
        menuBar.add(menu);
        menu = new JMenu("View");
          menu.add(new Command("First page") { public void doit() {goToFirstPage(null);}} );
          menu.add(new Command("Previous page") { public void doit() {goToPreviousPage(null);}} );
          menu.add(new Command("Next page") { public void doit() {goToNextPage(null);}} );
          menu.add(new Command("Last page") { public void doit() {goToLastPage(null);}} );
          menu.addSeparator();
          subMenu = new JMenu("Zoom");
            subMenu.add(new Command("25%") { public void doit() {setScale(25.0);}} );
            subMenu.add(new Command("50%") { public void doit() {setScale(50.0);}} );
            subMenu.add(new Command("75%") { public void doit() {setScale(75.0);}} );
            subMenu.add(new Command("100%") { public void doit() {setScale(100.0);}} );
            subMenu.add(new Command("150%") { public void doit() {setScale(150.0);}} );
            subMenu.add(new Command("200%") { public void doit() {setScale(200.0);}} );
          menu.add(subMenu);
          menu.addSeparator();
          menu.add(new Command("Default zoom") { public void doit() {setScale(100.0);}} );
        menuBar.add(menu);
        menu = new JMenu("Help");
          menu.add(new Command("Index"));
          menu.addSeparator();
          menu.add(new Command("Introduction"));
          menu.addSeparator();
          menu.add(new Command("About"){ public void doit() {startHelpAbout(null);}} );
        menuBar.add(menu);
      return menuBar;
    }
  
  
    public void dispose() {
      System.exit(0);
    }
  
  
    //Aktion Hilfe | Info durchgef�hrt
  
    public void startHelpAbout(ActionEvent e) {
      PreviewDialogAboutBox dlg = new PreviewDialogAboutBox(this);
      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.setModal(true);
      dlg.show();
    }
  
    void goToPage(int number) {
      docPanel.setPageNumber(number);
      repaint();
      previewArea.repaint();
      statusBar.setText("Page " + (number + 1) + " of " + pageCount);
    }
  
    /**
     * Shows the previous page.
     */
    void goToPreviousPage(ActionEvent e) {
      if (currentPage <= 0)
        return;
      currentPage--;
      goToPage(currentPage);
    }
  
  
    /**
     * Shows the next page.
     */
    void goToNextPage(ActionEvent e) {
      if (currentPage >= pageCount - 1)
        return;
      currentPage++;
      goToPage(currentPage);
    }
  
    /**
     * Shows the last page.
     */
    void goToLastPage(ActionEvent e) {
  
      if (currentPage == pageCount - 1) return;
      currentPage = pageCount - 1;
  
      goToPage(currentPage);
    }
  
    /**
     * Shows the first page.
     */
    void goToFirstPage(ActionEvent e) {
      if (currentPage == 0)
        return;
      currentPage = 0;
      goToPage(currentPage);
    }
  
    void print(ActionEvent e) {
      Properties p = null;
  
      Container parent = this.getRootPane();
      while ( !( parent instanceof Frame )) parent = parent.getParent();
      Frame f = (Frame)parent;
  
      PrintJob pj = f.getToolkit().getPrintJob(f, getTitle(), p);
      if(pj == null) return;
      Graphics pg = pj.getGraphics();
      if (pg != null) {
        docPanel.paintAll(pg);
        pg.dispose();
      }
      pj.end();
    }
  
    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);
  
      renderer.setScaleFactor(scaleFactor);
      previewArea.invalidate();
      previewArea.repaint();
    }
  
    void scale_actionPerformed(ActionEvent e) {
      setScale(new Double((String)scale.getSelectedItem()).doubleValue());
    }
  
  
    public void setPageCount(int aPageCount) {
      pageCount = aPageCount;
      statusBar.setText("Page 1 of " + pageCount);
    }
  
  }  // class PreviewDialog
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/PreviewDialogAboutBox.java
  
  Index: PreviewDialogAboutBox.java
  ===================================================================
  
  package org.apache.fop.viewer;
  
  /*
    originally contributed by
    Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
    Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
    Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
   */
  
  
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import javax.swing.border.*;
  
  import org.apache.fop.apps.Version;
  
  
  
  public class PreviewDialogAboutBox extends Dialog implements ActionListener {
  
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel insetsPanel1 = new JPanel();
    JPanel insetsPanel2 = new JPanel();
    JPanel insetsPanel3 = new JPanel();
    JButton button1 = new JButton();
    JLabel imageControl1 = new JLabel();
    ImageIcon imageIcon;
    JLabel label1 = new JLabel();
    JLabel label2 = new JLabel();
    JLabel label3 = new JLabel();
    JLabel label4 = new JLabel();
    BorderLayout borderLayout1 = new BorderLayout();
    BorderLayout borderLayout2 = new BorderLayout();
    FlowLayout flowLayout1 = new FlowLayout();
    FlowLayout flowLayout2 = new FlowLayout();
    GridLayout gridLayout1 = new GridLayout();
    String product = "FOP AWT-Preview";
    String version = "Version: " + Version.getVersion();
    String copyright = "See xml.apache.org";
    String comments = "";//"Print Preview";
  
    public PreviewDialogAboutBox(Frame parent) {
      super(parent);
      enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  
      //imageIcon = new ImageIcon(getClass().getResource("Hier der Grafikname"));
      this.setTitle("Info");
      setResizable(false);
      panel1.setLayout(borderLayout1);
      panel2.setLayout(borderLayout2);
      insetsPanel1.setLayout(flowLayout1);
      insetsPanel2.setLayout(flowLayout1);
      insetsPanel2.setBorder(new EmptyBorder(10, 10, 10, 10));
      gridLayout1.setRows(4);
      gridLayout1.setColumns(1);
      label1.setText(product);
      label2.setText(version);
      label3.setText(copyright);
      label4.setText(comments);
      insetsPanel3.setLayout(gridLayout1);
      insetsPanel3.setBorder(new EmptyBorder(10, 60, 10, 10));
      button1.setText("OK");
      button1.addActionListener(this);
      insetsPanel2.add(imageControl1, null);
      panel2.add(insetsPanel2, BorderLayout.WEST);
      this.add(panel1, null);
      insetsPanel3.add(label1, null);
      insetsPanel3.add(label2, null);
      insetsPanel3.add(label3, null);
      insetsPanel3.add(label4, null);
      panel2.add(insetsPanel3, BorderLayout.CENTER);
      insetsPanel1.add(button1, null);
      panel1.add(insetsPanel1, BorderLayout.SOUTH);
      panel1.add(panel2, BorderLayout.NORTH);
      pack();
    }
  
    protected void processWindowEvent(WindowEvent e) {
      if (e.getID() == WindowEvent.WINDOW_CLOSING) {
        cancel();
      }
      super.processWindowEvent(e);
    }
  
    void cancel() {
      dispose();
    }
  
    public void actionPerformed(ActionEvent e) {
      if (e.getSource() == button1) {
        cancel();
      }
    }
  }
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Images/Print.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Images/firstpg.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Images/lastpg.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Images/nextpg.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-fop/src/org/apache/fop/viewer/Images/prevpg.gif
  
  	<<Binary file>>