All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.ibm.as400.vaccess.SpooledFileViewer Maven / Gradle / Ivy

There is a newer version: 20.0.7
Show newest version
///////////////////////////////////////////////////////////////////////////////
//                                                                             
// JTOpen (IBM Toolbox for Java - OSS version)                              
//                                                                             
// Filename: SpooledFileViewer.java
//                                                                             
// The source code contained herein is licensed under the IBM Public License   
// Version 1.0, which has been approved by the Open Source Initiative.         
// Copyright (C) 1997-2000 International Business Machines Corporation and     
// others. All rights reserved.                                                
//                                                                             
///////////////////////////////////////////////////////////////////////////////

package com.ibm.as400.vaccess;

import com.ibm.as400.access.Trace;
import com.ibm.as400.access.PrintObject;
import com.ibm.as400.access.PrintObjectPageInputStream;
import com.ibm.as400.access.PrintParameterList;
import com.ibm.as400.access.SpooledFile;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;    // @A5A
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JViewport;
import javax.swing.ScrollPaneConstants;
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.MemoryImageSource;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.Serializable;
import java.util.Locale;
import java.util.MissingResourceException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.*;

/**
The SpooledFileViewer class represents a system spooled file viewer.
You can create an instance of this class to view an individual
AFPDS or SCS spooled file on the system. Viewer functions such as page forward,
page back, set current page, and so on, are provided.

The following properties can be set directly, but require the
invocation of load() to load the information from the system.
  • paper size
  • spooled file
  • viewing fidelity
The following properties can be set directly, but require the invocation of loadPage() to load the information from the system.
  • current page

Most errors are reported as ErrorEvents rather than throwing exceptions. Users should listen for ErrorEvents in order to diagnose and recover from error conditions.

SpooledFileViewer objects generate the following events:

  • ErrorEvent
  • PropertyChangeEvent
  • VetoableChangeEvent
  • WorkingEvent
(To create new spooled files on the system, use the SpooledFileOutputStream class. See Spooled File Attributes for valid attributes.)

The following example creates a spooled file viewer to display a spooled file previously created on the system.

// Assume splf is the spooled file.
// Create the spooled file viewer
SpooledFileViewer splfv = new SpooledFileViewer(splf, 1);
splfv.load();

// Add the spooled file viewer to a frame
JFrame frame = new JFrame("My Window");
frame.getContentPane().add(splfv);
@see SpooledFile @deprecated Use Java Swing instead, along with the classes in package com.ibm.as400.access **/ public class SpooledFileViewer extends JComponent implements Serializable { private static final String copyright = "Copyright (C) 1997-2000 International Business Machines Corporation and others."; /** Represents *ABSOLUTE viewing fidelity **/ public static final int ABSOLUTE_FIDELITY = 0; /** Represents *CONTENT viewing fidelity **/ public static final int CONTENT_FIDELITY = 1; /** Represents letter paper size (8.5 x 11 inches) **/ public static final int LETTER = 0; /** Represents legal paper size (8.5 x 14 inches) **/ public static final int LEGAL = 1; /** Represents A3 paper size (297 x 420 mm) **/ public static final int A3 = 2; /** Represents A4 paper size (210 x 297 mm) **/ public static final int A4 = 3; /** Represents A5 paper size (148 x 210 mm) **/ public static final int A5 = 4; /** Represents B4 paper size (257 x 364 mm) **/ public static final int B4 = 5; /** Represents B5 paper size (182 x 257 mm) **/ public static final int B5 = 6; /** Represents executive paper size (7.25 x 10.5 inches) **/ public static final int EXECUTIVE = 7; /** Represents ledger paper size (17 x 11 inches) **/ public static final int LEDGER = 8; /** Represents continuous feed 80 paper size (8 x 11 inches) **/ public static final int CONT80 = 9; /** Represents continuous feed 132 paper size (13.2 x 11 inches) **/ public static final int CONT132 = 10; /** Represents no paper size **/ public static final int NONE = 11; // Private constants. private static final int BSIZE_ = 36; // size of (square) button edge private static final int LISTBOXWIDTH_ = 300; // width of list box private static final int LISTBOXHEIGHT_ = 175; // height of list box private static final int PREF_WIDTH = 465; // preferred width of viewer private static final int PREF_HEIGHT = 600; // preferred height of viewer private static final int TOOLBARSIZE_ = 38; // size of tool bar private static final int TOPOFFSET_ = 1; // offset from top private static final String WSCSTOBJ = "/QSYS.LIB/QWPGIF.WSCST"; // wkrstn cust object // MRI. private static final String a3Text_ = ResourceLoader.getPrintText("PAPER_SIZE_A3"); private static final String a4Text_ = ResourceLoader.getPrintText("PAPER_SIZE_A4"); private static final String a5Text_ = ResourceLoader.getPrintText("PAPER_SIZE_A5"); private static final String absoluteText_ = ResourceLoader.getPrintText("FIDELITY_ABSOLUTE"); private static final String actualSizeText_ = ResourceLoader.getText("MENU_ACTUAL_SIZE"); private static final String b4Text_ = ResourceLoader.getPrintText("PAPER_SIZE_B4"); private static final String b5Text_ = ResourceLoader.getPrintText("PAPER_SIZE_B5"); private static final String cancelText_ = ResourceLoader.getText("DLG_CANCEL"); private static final String cont80Text_ = ResourceLoader.getPrintText("PAPER_SIZE_CONT80"); private static final String cont132Text_ = ResourceLoader.getPrintText("PAPER_SIZE_CONT132"); private static final String contentText_ = ResourceLoader.getPrintText("FIDELITY_CONTENT"); private static final String curPaperText_ = ResourceLoader.getPrintText("CURRENT_PAPER_SIZE"); private static final String curVFidelityText_ = ResourceLoader.getPrintText("CURRENT_VIEWING_FIDELITY"); private static final String executiveText_ = ResourceLoader.getPrintText("PAPER_SIZE_EXECUTIVE"); private static final String firstPageText_ = ResourceLoader.getText("MENU_FIRST_PAGE"); private static final String fitPageText_ = ResourceLoader.getText("MENU_FIT_PAGE"); private static final String fitWidthText_ = ResourceLoader.getText("MENU_FIT_WIDTH"); private static final String flashPageText_ = ResourceLoader.getText("MENU_FLASH_PAGE"); private static final String goToText_ = ResourceLoader.getText("MENU_GO_TO_PAGE"); private static final String goToPageText_ = ResourceLoader.getPrintText("GO_TO_PAGE"); private static final String lastPageText_ = ResourceLoader.getText("MENU_LAST_PAGE"); private static final String ledgerText_ = ResourceLoader.getPrintText("PAPER_SIZE_LEDGER"); private static final String legalText_ = ResourceLoader.getPrintText("PAPER_SIZE_LEGAL"); private static final String letterText_ = ResourceLoader.getPrintText("PAPER_SIZE_LETTER"); private static final String nextPageText_ = ResourceLoader.getText("MENU_NEXT_PAGE"); private static final String noneText_ = ResourceLoader.getPrintText("NONE"); private static final String okText_ = ResourceLoader.getText("DLG_OK"); private static final String paperSizeText_ = ResourceLoader.getPrintText("PAPER_SIZE"); private static final String paperSizeWarnText_ = ResourceLoader.getPrintText("WARNING_PAPER_SIZE"); private static final String prevPageText_ = ResourceLoader.getText("MENU_PREVIOUS_PAGE"); private static final String vFidelityText_ = ResourceLoader.getPrintText("VIEWING_FIDELITY"); private static final String vFidelityWarnText_ = ResourceLoader.getPrintText("WARNING_FIDELITY"); private static final String warningText_ = ResourceLoader.getPrintText("WARNING"); private static final String zoomText_ = ResourceLoader.getText("MENU_ZOOM"); // Icons. private static final Icon iconActualSize_ = ResourceLoader.getIcon("ResetViewIcon.gif"); private static final Icon iconFirstPage_ = ResourceLoader.getIcon("FirstIcon.gif"); private static final Icon iconFitPage_ = ResourceLoader.getIcon("FitPageIcon.gif"); private static final Icon iconFitWidth_ = ResourceLoader.getIcon("FitWidthIcon.gif"); private static final Icon iconFlashPage_ = ResourceLoader.getIcon("FlashIcon.gif"); private static final Icon iconGoToPage_ = ResourceLoader.getIcon("GoToIcon.gif"); private static final Icon iconLastPage_ = ResourceLoader.getIcon("LastIcon.gif"); private static final Icon iconNextPage_ = ResourceLoader.getIcon("NextIcon.gif"); private static final Icon iconPaperSize_ = ResourceLoader.getIcon("PaperIcon.gif"); private static final Icon iconPrevPage_ = ResourceLoader.getIcon("PreviousIcon.gif"); private static final Icon iconViewFidelity_ = ResourceLoader.getIcon("VFIcon.gif"); private static final Icon iconZoom_ = ResourceLoader.getIcon("ZoomIcon.gif"); // Paper sizes. private static final String[] paperSizes = {letterText_, legalText_, a3Text_, a4Text_, a5Text_, b4Text_, b5Text_, executiveText_, ledgerText_, cont80Text_, cont132Text_, noneText_ }; private static final String[] paperSizeValues = {"*LETTER", "*LEGAL", "*A3", "*A4", "*A5", "*B4", "*B5", "*EXECUTIVE", "*LEDGER", "*CONT80", "*CONT132", "*NONE"}; // Viewing fidelities. private static final String[] viewingFidelities = {absoluteText_, contentText_ }; private static final String[] viewingValues = {"*ABSOLUTE", "*CONTENT"}; // Static variables. private static int sPaperSize_ = LETTER; // default paper size private static int sViewingFidelity_ = CONTENT_FIDELITY; // default viewing fidelity private static boolean paperSizeChecked_ = false; // default to false // Transient data. transient private Image currentPageImage_ = null; // Image of page currently in view transient private Image flashPageImage_ = null; // Image of previously viewed page transient private PrintObjectPageInputStream spooledFileIS_ = null; // the input stream // Serializable data. private boolean initialized_ = false;// indicates if a spooled file has been loaded private boolean numberOfPagesEst_ = false;// is numberOfPages estimated? private int currentPageNumber_ = 0; // page number of current page private int flashPageNumber_ = 0; // page number of previously viewed page private int knownPages_ = 0; // total number of pages known to exist private int numberOfPages_ = 0; // total number of pages private int oldCurrentPage_ = 0; // old current page (most recently loaded) private int paperSize_ = 0; // current paper size private int viewingFidelity_ = 0; // current viewing fidelity private float zoomPercentage_ = 100; // zoom percentage @A1C changed int to float // Buttons. //@A3C - Made all JButtons transient. transient private JButton actualButton_ = null; // 'return page to actual size' button transient private JButton firstPageButton_ = null; // 'view first page' button transient private JButton fitPageButton_ = null; // 'fit page in view' button transient private JButton fitWidthButton_ = null; // 'view flash page' button transient private JButton flashButton_ = null; // 'view previously viewed page' button transient private JButton gotoButton_ = null; // 'go to specific page' button transient private JButton lastPageButton_ = null; // 'view last page' button transient private JButton nextPageButton_ = null; // 'view next page' button transient private JButton paperSizeButton_ = null; // 'select paper size' button transient private JButton prevPageButton_ = null; // 'view previous page' button transient private JButton viewingFidelityButton_= null; // 'select viewing fidelity' button transient private JButton zoomButton_ = null; // 'zoom' button //@A3C - Made the JPanels, JScrollPane, and JTextFields transient. transient private JPanel statusBar_ = null; // the status bar (for text fields) transient private JPanel toolBar_ = null; // the tool bar (for action buttons) transient private JScrollPane scrollView_ = null; // container for the viewport private SpooledFile spooledFile_ = null; // the spooled file private SpooledFilePageView_ pageView_ = null; // view of a spooled file page (image) private String estimateStar_ = ""; // visual indicator that numberOfPages is estimated transient private JTextField pageInfo_ = null; // text field indicating current page transient private JTextField zoomInfo_ = null; // text field indicating zoom percentage // Event support. transient private ErrorEventSupport errorEventSupport_; transient private PropertyChangeSupport propertyChangeSupport_; transient private VetoableChangeSupport vetoableChangeSupport_; transient private WorkingEventSupport workingEventSupport_; /** Constructs a SpooledFileViewer object. A call to setSpooledFile() must be done after calling this method in order to set the spooled file to be viewed. **/ public SpooledFileViewer() { spooledFile_ = null; createViewer(); } /** Constructs a SpooledFileViewer object. By default, the current page is set to the first page of the spooled file. A call to load() must be done after calling this method in order to load the spooled file. @param spooledFile The spooled file to view. **/ public SpooledFileViewer(SpooledFile spooledFile) { if (spooledFile == null) throw new NullPointerException("spooledFile"); spooledFile_ = spooledFile; createViewer(); currentPageNumber_ = 1; } /** Constructs a SpooledFileViewer object. Page page of the spooled file is loaded as the initial view. If page is less than 1, an error is thrown. A call to load() must be done after calling this method in order to load the spooled file. @param spooledFile The spooled file to view. @param page The initial page to view. **/ public SpooledFileViewer(SpooledFile spooledFile, int page) { if (spooledFile == null) throw new NullPointerException("spooledFile"); if (page < 1) { throw new IllegalArgumentException("page"); } spooledFile_ = spooledFile; createViewer(); currentPageNumber_ = page; } /** Resets the size of the page image to its original size. This method is only valid after a spooled file has been loaded. **/ public void actualSize() { if (initialized_ == true) { // clear view pageView_.clearView(); // adjust width and height of page image to image's actual size Dimension d = new Dimension(currentPageImage_.getWidth(this), currentPageImage_.getHeight(this)); pageView_.setViewSize(d); // calculate the new viewing zoom percentage calculateZoom(); // update the viewer updateViewer(); } } /** Adds a listener to be notified when an error occurs. @param listener The listener. **/ public void addErrorListener(ErrorListener listener) { errorEventSupport_.addErrorListener(listener); } /** Adds a listener to be notified when the value of any bound property changes. @param listener The listener. **/ public void addPropertyChangeListener(PropertyChangeListener listener) { super.addPropertyChangeListener(listener); propertyChangeSupport_.addPropertyChangeListener(listener); } /** Adds the status bar. **/ public void addStatusBar() { add("South", statusBar_); validate(); // @A4A - validate forces redraw // paintAll(this.getGraphics()); @A4D } /** Adds the tool bar. **/ public void addToolBar() { add("North", toolBar_); validate(); // @A4A - validate forces redraw // paintAll(this.getGraphics()); @A4D } /** Adds a listener to be notified when the value of any constrained property changes. @param listener The listener. **/ public void addVetoableChangeListener(VetoableChangeListener listener) { super.addVetoableChangeListener(listener); vetoableChangeSupport_.addVetoableChangeListener(listener); } /** Adds a listener to be notified of a working state. @param listener The listener. **/ public void addWorkingListener(WorkingListener listener) { workingEventSupport_.addWorkingListener(listener); } /** Calculate zoom percentage. **/ private void calculateZoom() { float imageWidth = (float)getPageImageSize().width; // @A1C double to float if (imageWidth != 0) { /* zoomPercentage_ = (int)java.lang.Math.ceil((((double)pageView_.getWidth()/ imageWidth) * 100.0)); */ zoomPercentage_ = (((float)pageView_.getWidth()/imageWidth) * 100); // @A1C } else errorEventSupport_.fireError(new ArithmeticException()); } /** Creates and shows a 'Go To Page' dialog. This dialog will allow the user to graphically input a page to view. **/ void changeCurrentPage() { GoToBox_ theGoToBox; theGoToBox = new GoToBox_((JFrame)VUtilities.getFrame(this)); theGoToBox.setVisible(true); } /** Creates and shows a 'Paper Size' dialog. This dialog will display a list of valid paper sizes and allow the user to select one. **/ void changePaperSize() { PaperSizeBox_ thePaperSizeBox; thePaperSizeBox = new PaperSizeBox_((JFrame)VUtilities.getFrame(this)); thePaperSizeBox.setVisible(true); } /** Creates and shows a 'Viewing Fidelity' dialog Box. This dialog will display a list of valid viewing fidelities and allow the user to select one. **/ void changeViewingFidelity() { ViewingFidelityBox_ theViewingFidelityBox; theViewingFidelityBox = new ViewingFidelityBox_((JFrame)VUtilities.getFrame(this)); theViewingFidelityBox.setVisible(true); } /** Creates and shows a 'Zoom' Dialog Box. This dialog box will display a set of radio buttons and a data entry field for entering a magnification (zoom) percentage. **/ void changeZoom() { ZoomToBox_ theZoomToBox; theZoomToBox = new ZoomToBox_((JFrame)VUtilities.getFrame(this)); theZoomToBox.setVisible(true); } /** Closes the viewer. **/ public void close() { try { // close the page input stream and return the conversation if (spooledFileIS_ != null) { spooledFileIS_.close(); spooledFileIS_ = null; // @A2A } } catch (IOException e) {} } /** Creates the status bar. @return The status bar. **/ private JPanel createStatusBar() { // create a panel for the status bar JPanel statusBar = new JPanel(); // create page information field pageInfo_ = new JTextField(22); pageInfo_.setEditable(false); pageInfo_.transferFocus(); // create zoom percentage field zoomInfo_ = new JTextField(8); zoomInfo_.setEditable(false); zoomInfo_.transferFocus(); // set layout... statusBar.setLayout(new FlowLayout(FlowLayout.LEFT)); // add both fields to the status bar statusBar.add(pageInfo_); statusBar.add(zoomInfo_); // return the status bar return statusBar; } /** Creates the tool bar @return The tool bar. **/ private JPanel createToolBar() { // create an instance of a JPanel for a tool bar JPanel toolBar = new JPanel(); Insets insets = toolBar.getInsets(); ViewerActionListener_ listener = new ViewerActionListener_(); // set preferred size toolBar.setPreferredSize(new Dimension(TOOLBARSIZE_,TOOLBARSIZE_)); // set null layout...we will position the buttons manually toolBar.setLayout(null); // create the 'Actual size' button and add it to the tool bar actualButton_ = new JButton(iconActualSize_); toolBar.add(actualButton_); actualButton_.setBounds(insets.left + 1, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); actualButton_.addActionListener(listener); actualButton_.setToolTipText(actualSizeText_); actualButton_.setActionCommand("actualSize"); // create the 'Fit Width' button and add it to the tool bar fitWidthButton_ = new JButton(iconFitWidth_); toolBar.add(fitWidthButton_); fitWidthButton_.setBounds(insets.left + 37, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); fitWidthButton_.addActionListener(listener); fitWidthButton_.setToolTipText(fitWidthText_); fitWidthButton_.setActionCommand("fitWidth"); // create the 'Fit Page' button and add it to the tool bar fitPageButton_ = new JButton(iconFitPage_); toolBar.add(fitPageButton_); fitPageButton_.setBounds(insets.left + 73, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); fitPageButton_.addActionListener(listener); fitPageButton_.setToolTipText(fitPageText_); fitPageButton_.setActionCommand("fitPage"); // create the 'Zoom' button and add it to the tool bar zoomButton_ = new JButton(iconZoom_); toolBar.add(zoomButton_); zoomButton_.setBounds(insets.left + 109, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); zoomButton_.addActionListener(listener); zoomButton_.setToolTipText(zoomText_); zoomButton_.setActionCommand("zoom"); // create the 'Go To Page' button and add it to the tool bar gotoButton_ = new JButton(iconGoToPage_); toolBar.add(gotoButton_); gotoButton_.setBounds(insets.left + 152, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); gotoButton_.addActionListener(listener); gotoButton_.setToolTipText(goToText_); gotoButton_.setActionCommand("goToPage"); // create the 'First Page' button and add it to the tool bar firstPageButton_= new JButton(iconFirstPage_); toolBar.add(firstPageButton_); firstPageButton_.setBounds(insets.left + 195, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); firstPageButton_.addActionListener(listener); firstPageButton_.setToolTipText(firstPageText_); firstPageButton_.setActionCommand("firstPage"); // create the 'Previous Page' button and add it to the tool bar prevPageButton_= new JButton(iconPrevPage_); toolBar.add(prevPageButton_); prevPageButton_.setBounds(insets.left + 231,insets.top + TOPOFFSET_, BSIZE_, BSIZE_); prevPageButton_.addActionListener(listener); prevPageButton_.setToolTipText(prevPageText_); prevPageButton_.setActionCommand("prevPage"); // create the 'Next Page' button and add it to the tool bar nextPageButton_= new JButton(iconNextPage_); toolBar.add(nextPageButton_); nextPageButton_.setBounds(insets.left + 267, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); nextPageButton_.addActionListener(listener); nextPageButton_.setToolTipText(nextPageText_); nextPageButton_.setActionCommand("nextPage"); // create the 'Last Page' button and add it to the tool bar lastPageButton_= new JButton(iconLastPage_); toolBar.add(lastPageButton_); lastPageButton_.setBounds(insets.left + 303,insets.top + TOPOFFSET_, BSIZE_, BSIZE_); lastPageButton_.addActionListener(listener); lastPageButton_.setToolTipText(lastPageText_); lastPageButton_.setActionCommand("lastPage"); // create the 'Flash Page' button and add it to the tool bar flashButton_ = new JButton(iconFlashPage_); toolBar.add(flashButton_); flashButton_.setBounds(insets.left + 346, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); flashButton_.addActionListener(listener); flashButton_.setToolTipText(flashPageText_); flashButton_.setActionCommand("flashPage"); // create the 'Paper Size' button and add it to the tool bar paperSizeButton_ = new JButton(iconPaperSize_); toolBar.add(paperSizeButton_); paperSizeButton_.setBounds(insets.left + 389, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); paperSizeButton_.addActionListener(listener); paperSizeButton_.setToolTipText(paperSizeText_); paperSizeButton_.setActionCommand("changePaperSize"); // create the 'Viewing Fidelity' button and add it to the tool bar viewingFidelityButton_ = new JButton(iconViewFidelity_); toolBar.add(viewingFidelityButton_); viewingFidelityButton_.setBounds(insets.left + 425, insets.top + TOPOFFSET_, BSIZE_, BSIZE_); viewingFidelityButton_.addActionListener(listener); viewingFidelityButton_.setToolTipText(vFidelityText_); viewingFidelityButton_.setActionCommand("changeViewingFidelity"); // return the tool bar return toolBar; } /** Constructs the viewer for the spooled file object. All visual aspects of the viewer (toolbar, scrolling view window, status bar) are created. This method also calls initializeTransient() to initialize the transient data. **/ private void createViewer() { // initialize transient data initializeTransient(); // initialize paper size if (paperSizeChecked_ == false) { // if paper size hasn't been initialized try { // get default locale for determining paper size Locale country = Locale.getDefault(); String cntry = country.getISO3Country(); if ((cntry.equals("USA")) || (cntry.equals("CAN")) || (cntry.equals("BRA")) || (cntry.equals("MEX"))) { // non metric country, select LETTER paper size paperSize_ = LETTER; } else { // metric country, select A4 paper size paperSize_ = A4; } } // catch MissingResourceException catch (MissingResourceException mre) { // trace the error if (Trace.isTraceOn()) Trace.log(Trace.ERROR, "Default paper size selected"); paperSize_ = A4; } finally { paperSizeChecked_ = true; // paper size has been initialized } } else { paperSize_ = sPaperSize_; } viewingFidelity_ = sViewingFidelity_; // set border layout for the frame setLayout(new BorderLayout()); // create the tool bar and add it toolBar_ = createToolBar(); addToolBar(); // create the scolling view pane and add it scrollView_ = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); add("Center", scrollView_); // create the staus bar and add it statusBar_ = createStatusBar(); addStatusBar(); // disable the viewer buttons disableViewerButtons(); // show the viewer repaint(); } /** Disables the viewer buttons. **/ private void disableViewerButtons() { actualButton_.setEnabled(false); // 'return page to actual size' button firstPageButton_.setEnabled(false); // 'view first page' button fitPageButton_.setEnabled(false); // 'fit page in view' button fitWidthButton_.setEnabled(false); // 'view flash page' button flashButton_.setEnabled(false); // 'view previously viewed page' button gotoButton_.setEnabled(false); // 'go to specific page' button lastPageButton_.setEnabled(false); // 'view last page' button nextPageButton_.setEnabled(false); // 'view next page' button paperSizeButton_.setEnabled(false); // 'select paper size' button prevPageButton_.setEnabled(false); // 'view previous page' button viewingFidelityButton_.setEnabled(false); // 'viewing fidelity' button zoomButton_.setEnabled(false); // 'zoom' button } /** Creates and shows a 'Warning' dialog. This dialog is displayed to warn that the property being changed will cause the spooled file being viewed to be closed and re-opened. The appropriate 'set ' method is then invoked, depending on the property being changed. @param property The property requested to be changed.
May be any of the following values:
  • PAPER_SIZE - The paper size
  • VIEWING_FIDELITY - The viewing fidelity

@param value The new property value.

For PAPER_SIZE, this parameter may be any of the following values:

  • LETTER - Letter (8.5 x 11 inches)
  • LEGAL - Legal (8.5 x 14 inches)
  • A3 - A3 (297 x 420 mm)
  • A4 - A4 (210 x 297 mm)
  • A5 - A5 (148 x 210 mm)
  • B4 - B4 (257 x 364 mm)
  • B5 - B5 (182 x 257 mm)
  • EXECUTIVE - Executive (7.25 x 10.5 inches)
  • LEDGER - Ledger (17 x 11 inches)
  • CONT80 - Continuous feed 80 (8 x 11 inches)
  • CONT132 - Continuous feed 132 (12.2 x 11 inches)
  • NONE - None

For VIEWING_FIDLEITY, this parameter may be any of the following values:

  • ABSOLUTE
  • CONTENT
**/ void displayPropertyChangeWarning(String property, int value) { boolean internetExplorer = false; // @A5A int selectedValue; Object[] options = { okText_, cancelText_ }; Class policyEngineClass = null; // @A5A try { // @A5A policyEngineClass = Class.forName("com.ms.security.PolicyEngine"); // @A5A } // @A5A catch (Throwable e) {} // @A5A if (policyEngineClass != null) { // @A5A internetExplorer = true; // @A5A } // @A5A if (property.equals("viewingFidelity")) { // display viewing fidelity warning and set accordingly if (!internetExplorer) { // @A5A selectedValue = JOptionPane.showOptionDialog(this, vFidelityWarnText_, warningText_, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); if (selectedValue == 0) { try { setViewingFidelity(value); load(); } catch (Exception e) {} // absorb all exceptions - if an error // occurred - an error event was fired. } } // @A5A else { // @A5A WarningDialogBox_ wDialog = new WarningDialogBox_((JFrame)VUtilities.getFrame(this), vFidelityWarnText_, property, value); // @A5A wDialog.setVisible(true); // @A5A } // @A5A } else if (property.equals("paperSize")) { // display paper size warning and set accordingly if (!internetExplorer) { // @A5A selectedValue = JOptionPane.showOptionDialog(this, paperSizeWarnText_, warningText_, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); if (selectedValue == 0) { try { setPaperSize(value); load(); } catch (Exception e) {} // absorb all exceptions - if an error // occurred - an error event was fired. } } // @A5A else { // @A5A WarningDialogBox_ wDialog = new WarningDialogBox_((JFrame)VUtilities.getFrame(this), paperSizeWarnText_, property, value); // @A5A wDialog.setVisible(true); // @A5A } // @A5A } else { if (Trace.isTraceOn()) Trace.log(Trace.ERROR, "Property for 'displayPropertyChangeWarning' not valid"); } } /** Enables the viewer buttons. **/ private void enableViewerButtons() { actualButton_.setEnabled(true); // 'return page to actual size' button firstPageButton_.setEnabled(true); // 'view first page' button fitPageButton_.setEnabled(true); // 'fit page in view' button fitWidthButton_.setEnabled(true); // 'view flash page' button flashButton_.setEnabled(true); // 'view previously viewed page' button gotoButton_.setEnabled(true); // 'go to specific page' button lastPageButton_.setEnabled(true); // 'view last page' button nextPageButton_.setEnabled(true); // 'view next page' button paperSizeButton_.setEnabled(true); // 'select paper size' button prevPageButton_.setEnabled(true); // 'view previous page' button viewingFidelityButton_.setEnabled(true); // 'viewing fidelity' button zoomButton_.setEnabled(true); // 'zoom' button } /** Closes the viewer. @exception Throwable If an error occurs during cleanup. **/ protected void finalize() throws Throwable { try { // close the page input stream and return the conversation if (spooledFileIS_ != null) spooledFileIS_.close(); } catch (IOException e) {} super.finalize(); } /** Stretches the size of the page image vertically to the edges of the viewing window. This method is only valid after a spooled file has been loaded. **/ public void fitHeight() { if (initialized_ == true) { // clear view pageView_.clearView(); // retrieve viewport from scroll pane JViewport viewPort = scrollView_.getViewport(); // retrieve visible viewport size Dimension viewPortSize = viewPort.getExtentSize(); // ensure viewport size is valid if (viewPortSize.width < 0) viewPortSize.width = 0; if (viewPortSize.height < 0) viewPortSize.height = 0; // adjust width and height of page image to fit height of viewport Dimension d = new Dimension(); d.height = viewPortSize.height; d.width = ((currentPageImage_.getWidth(this) * viewPortSize.height)/ currentPageImage_.getHeight(this)); pageView_.setViewSize(d); // calculate the new viewing zoom percentage calculateZoom(); // update the viewer updateViewer(); } } /** Stretches the size of the page image horizontally or vertically so the entire view is contained within the edges of the viewing window. This method is only valid after a spooled file has been loaded. **/ public void fitPage() { if (initialized_ == true) { Dimension d1 = scrollView_.getSize(); Dimension d2 = scrollView_.getViewport().getExtentSize(); // ensure viewport size is valid if (d2.width < 0) d2.width = 0; if (d2.height < 0) d2.height = 0; int viewWidth = pageView_.getWidth(); int viewHeight = pageView_.getHeight(); if ((viewWidth <= d2.width) && (viewHeight >= d2.height)) fitHeight(); else if ((viewWidth >= d2.width) && (viewHeight <= d2.height)) fitWidth(); else if (viewWidth < d2.width) { if (java.lang.Math.abs(d1.width - viewWidth) < java.lang.Math.abs(d1.height - viewHeight)) fitWidth(); else fitHeight(); } else { if (java.lang.Math.abs(d1.width - viewWidth) < java.lang.Math.abs(d1.height - viewHeight)) fitHeight(); else fitWidth(); } } } /** Stretches the size of the page image horizontally to the edges of the viewing window. This method is only valid after a spooled file has been loaded. **/ public void fitWidth() { if (initialized_ == true) { // clear view pageView_.clearView(); // retrieve viewport from scroll pane JViewport viewPort = scrollView_.getViewport(); // retrieve visible viewport size Dimension viewPortSize = viewPort.getExtentSize(); // ensure viewport size is valid if (viewPortSize.width < 0) viewPortSize.width = 0; if (viewPortSize.height < 0) viewPortSize.height = 0; // adjust width and height of page image to fit width of viewport Dimension d = new Dimension(); d.width = viewPortSize.width; d.height = ((currentPageImage_.getHeight(this) * viewPortSize.width)/ currentPageImage_.getWidth(this)); pageView_.setViewSize(d); // calculate the new viewing zoom percentage calculateZoom(); // update the viewer updateViewer(); } } /** Returns the page number of the current page. @return The current page number. **/ public int getCurrentPage() { return currentPageNumber_; } /** Returns the number of pages in the spooled file. This value may be estimated, depending on the origin of spooled file. If the spooled file was created natively on a system, the value is valid. If the spooled file was created on another type of system, the value may be estimated. @see #isNumberOfPagesEstimated @return The number of pages. **/ public int getNumberOfPages() { return numberOfPages_; } /** Returns the Image for page page @param page The page to return an Image of. @return The page Image. @exception IOException Thrown if the specified page cannot be retrieved. **/ private synchronized Image getPageImage(int page) throws IOException { Image image = null; // GIF image to create if (spooledFileIS_ == null) { throw new IOException(); } try { // select page in page input stream boolean pageSelected = spooledFileIS_.selectPage(page); // @A1C if (pageSelected == false) { // @A1A throw new IOException(); // @A1A } // @A1A // retrieve size of page data in bytes int bytesAvailable = spooledFileIS_.available(); if (bytesAvailable == 0) { throw new IOException(); } byte[] imageData = new byte[bytesAvailable]; // read image data spooledFileIS_.read(imageData, 0, bytesAvailable); // retrieve the frame's toolkit (needed for 'createImage' method) Frame frame = new Frame(); Toolkit kit = frame.getToolkit(); // create imageLoader to track image loading MediaTracker imageLoader = new MediaTracker(frame); // create the Image image = (kit.createImage(imageData)); if (image != null) { // ensure the image loaded correctly in memory imageLoader.addImage(image, 0); imageLoader.waitForID(0); // free imageLoader: it has served its purpose imageLoader = null; } } catch (Exception e) { // error generating page image throw new IOException(); } // return the image return image; } /** Returns the Dimension of the page image being viewed. @return The Dimension of the current page image. **/ private Dimension getPageImageSize() { if (currentPageImage_ != null) { return (new Dimension(currentPageImage_.getWidth(this), currentPageImage_.getHeight(this))); } else return new Dimension(0,0); } /** Returns the paper size. The paper size is used to determine how to process pages from the spooled file. @return The paper size. **/ public int getPaperSize() { return paperSize_; } /** Returns the preferred size of the viewer. @return The preferred size. **/ public Dimension getPreferredSize() { if ((pageView_ != null) && ((pageView_.getWidth() < 500) && (pageView_.getHeight() < 700))) { return new Dimension(pageView_.getWidth() + 25, pageView_.getHeight() + TOOLBARSIZE_ + statusBar_.getPreferredSize().height); } else return new Dimension(PREF_WIDTH,PREF_HEIGHT); } /** Returns the spooled file being viewed. @return The spooled file. **/ public SpooledFile getSpooledFile() { return spooledFile_; } /** Returns the viewing fidelity. The viewing fidelity is used to determine how to process pages from the spooled file. @return The viewing fidelity. **/ public int getViewingFidelity() { return viewingFidelity_; } /** Initializes the transient data. **/ private void initializeTransient() { // Initialize the event support. errorEventSupport_ = new ErrorEventSupport(this); propertyChangeSupport_ = new PropertyChangeSupport(this); vetoableChangeSupport_ = new VetoableChangeSupport(this); workingEventSupport_ = new WorkingEventSupport(this); addWorkingListener(new WorkingCursorAdapter(this)); addFocusListener(new SerializationListener(this)); //@A3A } /** Indicates if the number of pages associated with the spooled file being viewed is estimated. @see #getNumberOfPages @return Returns true if the number of pages is estimated; false otherwise. **/ public boolean isNumberOfPagesEstimated() { return numberOfPagesEst_; } /** Loads the spooled file for viewing. A call to this method must be made after the constructor has been invoked or the spooled file has changed in order to load the spooled file and properly initialize the viewer. @exception IOException Thrown if the spooled file cannot be initialized. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void load() throws IOException, PropertyVetoException { if (spooledFile_ == null) { errorEventSupport_.fireError(new IllegalStateException("spooledFile")); } else { // fire started working event. workingEventSupport_.fireStartWorking(); try { // set intialized to false, and disable the viewer buttons // until we have successfully retrieved the spooled file initialized_ = false; disableViewerButtons(); // set up the print parms for creating the spooled file input stream // These parms will ensure we get page-at-a-time data, with each // page being represented as a 'block' of GIF binary data PrintParameterList printParms = new PrintParameterList(); printParms.setParameter(PrintObject.ATTR_WORKSTATION_CUST_OBJECT, WSCSTOBJ); printParms.setParameter(PrintObject.ATTR_MFGTYPE, "*WSCST"); printParms.setParameter(PrintObject.ATTR_VIEWING_FIDELITY, viewingValues[viewingFidelity_]); printParms.setParameter(PrintObject.ATTR_PAPER_SOURCE_1, paperSizeValues[paperSize_]); // close previous spooled file page input stream if (spooledFileIS_ != null) { spooledFileIS_.close(); } // retrieve page input stream from spooled file spooledFileIS_ = spooledFile_.getPageInputStream(printParms); // throw exception for spooledFileIS_ == null if (spooledFileIS_ == null) { throw new IOException(); } // warn of numberOfPages property change int newValue = spooledFileIS_.getNumberOfPages(); vetoableChangeSupport_.fireVetoableChange("numberOfPages", new Integer(numberOfPages_), new Integer(newValue)); int oldValue = numberOfPages_; numberOfPages_ = newValue; // fire numberOfPages property change propertyChangeSupport_.firePropertyChange("numberOfPages", new Integer(oldValue), new Integer(numberOfPages_)); // determine if number of pages is estimated boolean newEstimated = spooledFileIS_.isPagesEstimated(); // warn of pagesEstimated property change vetoableChangeSupport_.fireVetoableChange("numberOfPagesEstimated", new Boolean(numberOfPagesEst_), new Boolean(newEstimated)); // we know the number of pages is estimated boolean oldEstimated = numberOfPagesEst_; numberOfPagesEst_ = newEstimated; // fire numberOfPagesEstimated property change propertyChangeSupport_.firePropertyChange("numberOfPagesEstimated", new Boolean(oldEstimated), new Boolean(numberOfPagesEst_)); // display '*' if the number of pages is estimated if (numberOfPagesEst_ == true) { estimateStar_ = "*"; } try { // retrieve the starting page view currentPageImage_ = getPageImage(currentPageNumber_); // no exception thrown means the page was found successfully // update instance variables accordingly oldCurrentPage_ = currentPageNumber_; knownPages_ = currentPageNumber_; } catch (IOException e) { // error getting page, default to page one... if (currentPageNumber_ != 1) { // if we didn't try to get page one above... // default to setting current page to 1 setCurrentPage(1); // retrieve starting page image currentPageImage_ = getPageImage(currentPageNumber_); // no exception thrown means the page was found successfully // update instance variables accordingly oldCurrentPage_ = currentPageNumber_; knownPages_ = currentPageNumber_; } else { // the page stream doesn't have page 1 available... // trace the error if (Trace.isTraceOn()) Trace.log(Trace.ERROR, "Error initializing spooled file viewer"); // throw the exception throw(e); } } // if we have gotten here, we successfully retrieved a // spooled file page image // create the page view for the viewer pageView_ = new SpooledFilePageView_(); scrollView_.setViewportView(pageView_); // enable the viewer buttons enableViewerButtons(); // initialization complete initialized_ = true; // (re)set viewing zoom percentage calculateZoom(); // update the viewer updateViewer(); // repaint all validate(); // @A4A - validate forces redraw // paintAll(this.getGraphics()); @A4D } catch (Exception e) { initialized_ = false; // trace the error if (Trace.isTraceOn()) Trace.log(Trace.ERROR, "Error initializing spooled file viewer"); errorEventSupport_.fireError(e); } finally { // fire stopped working event workingEventSupport_.fireStopWorking(); } } } /** Loads the previously viewed page. If a different page was not previously viewed (loaded), no action is taken. This method can only be called after a spooled file has been loaded. If a spooled file has not been successfully loaded into the viewer previously, an error event is fired. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void loadFlashPage() throws PropertyVetoException { if (initialized_ == true) { if (flashPageImage_!= null) { // flash page defined vetoableChangeSupport_.fireVetoableChange("currentPage", new Integer(oldCurrentPage_), new Integer(flashPageNumber_)); // clear current page view pageView_.clearView(); // perform swap of flash/current page number int tempPageNumber = flashPageNumber_; flashPageNumber_ = oldCurrentPage_; currentPageNumber_ = tempPageNumber; // perform swap of flash/current page image Image tempPageImage = flashPageImage_; flashPageImage_ = currentPageImage_; currentPageImage_ = tempPageImage; oldCurrentPage_ = currentPageNumber_; Dimension d1 = getPageImageSize(); // @A1A Dimension d2 = new Dimension(); // @A1A d2.width =(int)((float)d1.width * (zoomPercentage_/100)); // @A1A d2.height=(int)((float)d1.height * (zoomPercentage_/100)); // @A1A pageView_.setViewSize(d2); // @A1A // update the view updateViewer(); propertyChangeSupport_.firePropertyChange("currentPage", new Integer(flashPageNumber_), new Integer(currentPageNumber_)); } } else { errorEventSupport_.fireError(new IllegalStateException()); } } /** Loads the current page for viewing. This method can only be called after a spooled file has been successfully loaded. If the current page is not a valid page of the spooled file, the current page is set to the previously viewed page, and an error event is fired. If a spooled file has not been successfully loaded into the viewer previously, an error event is fired. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void loadPage() throws PropertyVetoException { Image newPageImage; // fire started working event workingEventSupport_.fireStartWorking(); if (initialized_ == true) { // a spooled file has been loaded if (currentPageNumber_ == oldCurrentPage_) { // optimization - current page already loaded } else if (currentPageNumber_ == flashPageNumber_) { // optimization - load flash page loadFlashPage(); } else { // possible new page to read try { // attempt to retrieve current page newPageImage = getPageImage(currentPageNumber_); // no exception thrown means the page was found successfully // update flash page information flashPageNumber_ = oldCurrentPage_; flashPageImage_ = currentPageImage_; // update current page information oldCurrentPage_ = currentPageNumber_; currentPageImage_ = newPageImage; // check number of pages, update known count if ((numberOfPagesEst_ == true) && (currentPageNumber_ > knownPages_)) { knownPages_ = currentPageNumber_; } } catch (IOException e) { // couldn't retrieve currentPageNumber_ // check to see if we found the last page if we have // the number of pages estimated! if ((numberOfPagesEst_ == true) && (currentPageNumber_ == (knownPages_ + 1))) { // we've found the last page! // warn of property change vetoableChangeSupport_.fireVetoableChange("numberOfPages", new Integer(numberOfPages_), new Integer(knownPages_)); // we now know the number of pages int oldValue = numberOfPages_; numberOfPages_ = knownPages_; // fire numberOfPages property change propertyChangeSupport_.firePropertyChange("numberOfPages", new Integer(oldValue), new Integer(numberOfPages_)); // warn of property change, only from true to false vetoableChangeSupport_.fireVetoableChange("numberOfPagesEstimated", new Boolean(true), new Boolean(false)); // we know the number of pages is valid numberOfPagesEst_ = false; estimateStar_ = ""; // fire numberOfPagesEstimated property change, only from true to false propertyChangeSupport_.firePropertyChange("numberOfPagesEstimated", new Boolean(true), new Boolean(false)); } // warn of property change vetoableChangeSupport_.fireVetoableChange("currentPage", new Integer(currentPageNumber_), new Integer(oldCurrentPage_)); int oldPage = currentPageNumber_; currentPageNumber_ = oldCurrentPage_; // fire currentPage property change propertyChangeSupport_.firePropertyChange("currentPage", new Integer(oldPage), new Integer(currentPageNumber_)); // fire error event errorEventSupport_.fireError(new IOException()); } } Dimension d1 = getPageImageSize(); // @A1A Dimension d2 = new Dimension(); // @A1A d2.width =(int)((float)d1.width * (zoomPercentage_/100)); // @A1A d2.height=(int)((float)d1.height * (zoomPercentage_/100)); // @A1A pageView_.setViewSize(d2); // @A1A // update the viewer updateViewer(); } // (initialized == false) else { errorEventSupport_.fireError(new IllegalStateException()); } // fire stopped working event workingEventSupport_.fireStopWorking(); } /** Sets the view back one page. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void pageBack() throws PropertyVetoException { setCurrentPage(currentPageNumber_ - 1); loadPage(); } /** Sets the view forward one page. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void pageForward() throws PropertyVetoException { setCurrentPage(currentPageNumber_ + 1); loadPage(); } /** Restores the state of the object from an input stream. This is used when deserializing an object. @param in The input stream. @exception IOException Thrown if an IO error occurs. @exception ClassNotFoundException Thrown if class is not found. **/ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); initializeTransient(); initialized_ = false; } /** Removes an ErrorListener. @param listener The listener. **/ public void removeErrorListener(ErrorListener listener) { errorEventSupport_.removeErrorListener(listener); } /** Removes a property change listener. @param listener The listener. **/ public void removePropertyChangeListener(PropertyChangeListener listener) { super.removePropertyChangeListener(listener); propertyChangeSupport_.removePropertyChangeListener(listener); } /** Removes the tool bar. **/ public void removeToolBar() { remove(toolBar_); validate(); // @A4A - validate forces redraw // paintAll(this.getGraphics()); @A4D } /** Removes the status bar. **/ public void removeStatusBar() { remove(statusBar_); validate(); // @A4A - validate forces redraw // paintAll(this.getGraphics()); @A4D } /** Removes a vetoable change listener. @param listener The listener. **/ public void removeVetoableChangeListener(VetoableChangeListener listener) { super.removeVetoableChangeListener(listener); vetoableChangeSupport_.removeVetoableChangeListener (listener); } /** Removes a WorkingListener. @param listener The listener. **/ public void removeWorkingListener(WorkingListener listener) { workingEventSupport_.removeWorkingListener(listener); } /** Sets the current page. @param newPage The page to view. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public synchronized void setCurrentPage(int newPage) throws PropertyVetoException { if ((1 <= newPage) && ((newPage <= numberOfPages_) || (numberOfPagesEst_ == true) || (initialized_ == false))) { // warn of property change vetoableChangeSupport_.fireVetoableChange("currentPage", new Integer(currentPageNumber_), new Integer(newPage)); // update current page int oldPage = currentPageNumber_; currentPageNumber_ = newPage; // fire currentPage property change propertyChangeSupport_.firePropertyChange("currentPage", new Integer(oldPage), new Integer(currentPageNumber_)); } } /** Sets the papersize. If paper size specified by paperSize is not valid, no action is taken. @param paperSize The paper size to be used for processing spooled file pages.

May be any of the following values:

  • LETTER - Letter (8.5 x 11 inches)
  • LEGAL - Legal (8.5 x 14 inches)
  • A3 - A3 (297 x 420 mm)
  • A4 - A4 (210 x 297 mm)
  • A5 - A5 (148 x 210 mm)
  • B4 - B4 (257 x 364 mm)
  • B5 - B5 (182 x 257 mm)
  • EXECUTIVE - Executive (7.25 x 10.5 inches)
  • LEDGER - Ledger (17 x 11 inches)
  • CONT80 - Continuous feed 80 (8 x 11 inches)
  • CONT132 - Continuous feed 132 (13.2 x 11 inches)
  • NONE - None
@exception PropertyVetoException Thrown if the property change is vetoed. **/ public synchronized void setPaperSize(int paperSize) throws PropertyVetoException { if ((LETTER <= paperSize) && (paperSize <= NONE)) { // warn of property change vetoableChangeSupport_.fireVetoableChange("paperSize", new Integer(paperSize_), new Integer(paperSize)); // update paper size int oldValue = paperSize_; paperSize_ = paperSize; // set static initializer sPaperSize_ = paperSize_; paperSizeChecked_ = true; // fire property change to all listeners propertyChangeSupport_.firePropertyChange("paperSize", new Integer(oldValue), new Integer(paperSize_)); } else errorEventSupport_.fireError(new IllegalArgumentException("paperSize")); } /** Sets the spooled file. @param spooledFile The spooled file to view. @exception PropertyVetoException Thrown if the property change is vetoed. **/ public void setSpooledFile(SpooledFile spooledFile) throws PropertyVetoException { if (spooledFile == null) throw new NullPointerException("spooledFile"); // warn of property change vetoableChangeSupport_.fireVetoableChange("spooledFile", spooledFile_, spooledFile); // update spooled file SpooledFile oldValue = spooledFile_; spooledFile_ = spooledFile; // fire spooledFile property change propertyChangeSupport_.firePropertyChange("spooledFile", oldValue, spooledFile_); } /** Sets the viewing fidelity. @param viewingFidelity The viewing fidelity. If viewing fidelity specified by viewingFidelity is not valid, no action is taken.

May be any of the following values:

  • ABSOLUTE - Absolute. When this is specified, the spooled file data is scanned and all non-raster data is processed up through the current page.
  • CONTENT - Content. When this is specified, the spooled file data is processed according to datastream type:
    • SCS - Process open-time commands and current page commands only.
    • AFPDS - Process the first page without rasterizing, then the current page.
@exception PropertyVetoException Thrown if the property change is vetoed. **/ public synchronized void setViewingFidelity(int viewingFidelity) throws PropertyVetoException { if ((ABSOLUTE_FIDELITY <= viewingFidelity) && (viewingFidelity <= CONTENT_FIDELITY)) { // warn of property change vetoableChangeSupport_.fireVetoableChange("viewingFidelity", new Integer(viewingFidelity_), new Integer(viewingFidelity)); // update viewing fidelity int oldValue = viewingFidelity_; viewingFidelity_ = viewingFidelity; // set static initializer sViewingFidelity_ = viewingFidelity_; // fire property change to all listeners propertyChangeSupport_.firePropertyChange("viewingFidelity", new Integer(oldValue), new Integer(viewingFidelity_)); } else errorEventSupport_.fireError(new IllegalArgumentException("viewingFidelity")); } /** Performs the action of updating viewer information; specifically, updating the current page number, calculating the zoom ration, and (enabling/disabling) the viewer buttons items, **/ private void updateViewer() { if ((pageView_ != null) && (initialized_ == true)) { // update pageview pageView_.repaint(); // currentPageNumber_ = getCurrentPage(); zoomInfo_.setText((int)zoomPercentage_ + "%"); // @A1C added (int) String pageText = ResourceLoader.substitute(ResourceLoader.getPrintText("PAGE_OF"), new String[]{Integer.toString(currentPageNumber_), Integer.toString(numberOfPages_)}); pageInfo_.setText(pageText + estimateStar_); // enabled/disable 'first' and 'previous' page buttons if (currentPageNumber_ > 1) { firstPageButton_.setEnabled(true); prevPageButton_.setEnabled(true); } else { firstPageButton_.setEnabled(false); prevPageButton_.setEnabled(false); } // enable/disable 'next' and 'last' page buttons // NOTE: All spooled files have a 'number of pages' attribute. // For some spooled files, this value is an 'estimated' quantity. // Another attribute associated with the spooled file allows us // to know whether this total 'number of pages' is real or estimated. // We have stored the value of this attribute in numberOfPagesEst_. if (numberOfPagesEst_ == false) { if (currentPageNumber_ < numberOfPages_) { lastPageButton_.setEnabled(true); nextPageButton_.setEnabled(true); } else { lastPageButton_.setEnabled(false); nextPageButton_.setEnabled(false); } } else { lastPageButton_.setEnabled(false); nextPageButton_.setEnabled(true); } } } /*************************************************************************/ private class ViewerActionListener_ implements ActionListener { /** Performs the action. @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); try { // perform requested action if (command.equals("actualSize")) { actualSize(); } else if (command.equals("fitWidth")) { fitWidth(); } else if (command.equals("fitPage")) { fitPage(); } else if (command.equals("zoom")) { changeZoom(); } else if (command.equals("goToPage")) { changeCurrentPage(); } else if (command.equals("firstPage")) { setCurrentPage(1); loadPage(); } else if (command.equals("prevPage")) { pageBack(); } else if (command.equals("nextPage")) { pageForward(); } else if (command.equals("lastPage")) { setCurrentPage(numberOfPages_); loadPage(); } else if (command.equals("flashPage")) { loadFlashPage(); } else if (command.equals("changeViewingFidelity")) { changeViewingFidelity(); } else if (command.equals("changePaperSize")) { changePaperSize(); } } catch (Exception err) { // do nothing } } } /*************************************************************************/ /** The SpooledFilePageView_ class represents the view of one page of a spooled file. **/ private class SpooledFilePageView_ extends JLabel { Dimension viewSize_; public SpooledFilePageView_() { viewSize_ = new Dimension(currentPageImage_.getWidth(this), currentPageImage_.getHeight(this)); } /** Clears the current view. **/ synchronized public void clearView() { Rectangle r = getVisibleRect(); getGraphics().clearRect(r.x, r.y, r.width, r.height); } /** Returns the view height. @return The height. **/ public int getHeight() { // in IE, Super class JLabel needs valid values even before // this object is constructed. To comply, a value // of 10 is returned temporarily... if (viewSize_ == null) // @A5A return 10; // @A5A else // @A5A return viewSize_.height; } /** Returns the view width. @return The width. **/ public int getWidth() { // in IE, Super class JLabel needs valid values even before // this object is constructed. To comply, a value // of 10 is returned temporarily... if (viewSize_ == null) // @A5A return 10; // @A5A else // @A5A return viewSize_.width; } /** Paints the view. @param g The specified Graphics environment. **/ public void paint(Graphics g) { //@PDD causes recursive paint events to fire and eats up cpu setSize(viewSize_); g.drawImage(currentPageImage_,0,0,viewSize_.width, viewSize_.height, this); } /** Sets the view size. @param d The new dimension for the view size. **/ public void setViewSize(Dimension d) { viewSize_.width = d.width; viewSize_.height = d.height; } /** Updates the view. @param g The specified Graphics environment. **/ public void update(Graphics g) { clearView(); paint(g); } } /*************************************************************************/ /** The PaperSizeBox_ class represents a dialog for selecting a paper size to be used when rendering the pages of spooled file for viewing. **/ private class PaperSizeBox_ extends JDialog implements ActionListener { JButton okButton, cancelButton; final JList dataList; /** Constructs a PaperSizeBox_ Dialog * @param parent **/ public PaperSizeBox_(JFrame parent) { super(parent, paperSizeText_, true); setResizable(false); getContentPane().setLayout(new BorderLayout()); // set the size of the list box setSize(LISTBOXWIDTH_, LISTBOXHEIGHT_); // create text label indicating current paper size JPanel textPanel = new JPanel(); textPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); textPanel.add(new JLabel(curPaperText_ + " : " + paperSizes[paperSize_])); getContentPane().add("North", textPanel); // create the data list of available paper sizes dataList = new JList(paperSizes); JScrollPane scrollPane = new JScrollPane(dataList); getContentPane().add("Center", scrollPane); // set a default index dataList.setSelectedIndex(paperSize_); // create the mouse event listener MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = dataList.locationToIndex(e.getPoint()); // dispose(); setVisible(false); displayPropertyChangeWarning("paperSize", index); } } }; dataList.addMouseListener(mouseListener); // create "OK" button okButton = new JButton(okText_); okButton.addActionListener(this); okButton.setActionCommand("ok"); // create "Cancel" button cancelButton = new JButton(cancelText_); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); // create button panel and add buttons JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(okButton); buttonPanel.add(cancelButton); getContentPane().add("South", buttonPanel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); } }); } /** Perform the requested action. @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); // dispose(); setVisible(false); if (command.equals("ok")) { int index = dataList.getSelectedIndex(); displayPropertyChangeWarning("paperSize", index); updateViewer(); } } /** Show the dialog in the middle of the parent frame. **/ public void setVisible(boolean b) { if (b == true) { Rectangle bounds = getParent().getBounds(); Rectangle bounds2 = getBounds(); setLocation(bounds.x + (bounds.width - bounds2.width)/ 2, bounds.y + (bounds.height - bounds2.height)/2); super.setVisible(true); } else super.setVisible(false); } } /*************************************************************************/ /** The ViewingFidelityBox_ class represents a dialog for selecting the viewing fidelity to be used when rendering the pages of spooled file for viewing. **/ private class ViewingFidelityBox_ extends JDialog implements ActionListener { JButton okButton, cancelButton; final JList dataList; /** Constructs a ViewingFidelityBox_ Dialog * @param parent **/ public ViewingFidelityBox_(JFrame parent) { super(parent, vFidelityText_, true); setResizable(false); getContentPane().setLayout(new BorderLayout()); // set the size of the list box setSize(LISTBOXWIDTH_, LISTBOXHEIGHT_); // create text label indicating current paper size JPanel textPanel = new JPanel(); textPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); textPanel.add(new JLabel(curVFidelityText_ + " : " + viewingFidelities[viewingFidelity_])); getContentPane().add("North", textPanel); // create the data list of available viewing fidelities dataList = new JList(viewingFidelities); // set a default index dataList.setSelectedIndex(viewingFidelity_); JScrollPane scrollPane = new JScrollPane(dataList); getContentPane().add("Center", scrollPane); MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = dataList.locationToIndex(e.getPoint()); // dispose(); setVisible(false); displayPropertyChangeWarning("viewingFidelity", index); } } }; dataList.addMouseListener(mouseListener); // create "OK" button okButton = new JButton(okText_); okButton.addActionListener(this); okButton.setActionCommand("ok"); // create "Cancel" button cancelButton = new JButton(cancelText_); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); // create button panel and add buttons JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(okButton); buttonPanel.add(cancelButton); getContentPane().add("South", buttonPanel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); } }); } /** Perform the requested action. @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); setVisible(false); if (command.equals("ok")) { int index = dataList.getSelectedIndex(); // dispose(); displayPropertyChangeWarning("viewingFidelity", index); updateViewer(); } } /** Show the dialog in the middle of the parent frame. **/ public void setVisible(boolean b) { if (b == true) { Rectangle bounds = getParent().getBounds(); Rectangle bounds2 = getBounds(); setLocation(bounds.x + (bounds.width - bounds2.width)/ 2, bounds.y + (bounds.height - bounds2.height)/2); super.setVisible(true); } else super.setVisible(false); } } /*************************************************************************/ /** The GoToBox_ class represents a dialog for selecting a page to view. **/ private class GoToBox_ extends JDialog implements ActionListener { JButton okButton, cancelButton; TextField pageNumber; /** Constructs a GoToBox_ Dialog * @param parent **/ public GoToBox_(JFrame parent) { super(parent, goToPageText_, true); setResizable(false); getContentPane().setLayout(new BorderLayout()); // set the size of the dialog setSize(250, 100); // create text elements JLabel desc = new JLabel(goToPageText_); pageNumber = new TextField("1", 6); // default 'go to' page pageNumber.setBackground(new Color(255,255,255)); // set background white pageNumber.setEditable(true); pageNumber.setVisible(true); pageNumber.addActionListener(this); // create text panel and add above elements JPanel textPanel = new JPanel(); textPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); textPanel.add(desc); textPanel.add(pageNumber); // add text panel to dialog box getContentPane().add("Center",textPanel); // create "OK" button okButton = new JButton(okText_); okButton.addActionListener(this); okButton.setActionCommand("ok"); // create "Cancel" button cancelButton = new JButton(cancelText_); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); // create button panel and add buttons JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(okButton); buttonPanel.add(cancelButton); getContentPane().add("South", buttonPanel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); } }); } /** Perform the requested action. @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); setVisible(false); if (!(command.equals("cancel"))) { try { setCurrentPage(Integer.valueOf(pageNumber.getText()).intValue()); loadPage(); } catch (Exception error) {} } } /** Show the dialog in the middle of the parent frame. **/ public void setVisible(boolean b) { if (b == true) { Rectangle bounds = getParent().getBounds(); Rectangle bounds2 = getBounds(); setLocation(bounds.x + (bounds.width - bounds2.width)/ 2, bounds.y + (bounds.height - bounds2.height)/2); super.setVisible(true); } else super.setVisible(false); } } /*************************************************************************/ // @A5A - Added inner class /** The WarningDialogBox_ class represents a dialog for displaying a warning. **/ private class WarningDialogBox_ extends JDialog implements ActionListener { JButton okButton, cancelButton; String property; int value; /** Constructs a WarningDialogBox_ Dialog * @param parent * @param warning * @param prop * @param val **/ public WarningDialogBox_(JFrame parent, String warning, String prop, int val) { super(parent, warningText_, true); property = prop; value = val; getContentPane().setLayout(new BorderLayout()); // set the size of the dialog setSize(250, 150); // create text element JTextArea desc = new JTextArea(warning); desc.setEditable(false); // create text panel and add text element JPanel textPanel = new JPanel(); textPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); textPanel.add(desc); // add text panel to dialog box getContentPane().add("Center",textPanel); // create "OK" button okButton = new JButton(okText_); okButton.addActionListener(this); okButton.setActionCommand("ok"); // create "Cancel" button cancelButton = new JButton(cancelText_); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); // create button panel and add buttons JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(okButton); buttonPanel.add(cancelButton); getContentPane().add("South", buttonPanel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); } }); } /** Perform the requested action. @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); setVisible(false); if (!(command.equals("cancel"))) { if (property.equals("viewingFidelity")) { try { setViewingFidelity(value); load(); } catch (Exception e1) {} // absorb all exceptions - if an error // occurred - an error event was fired. } else if (property.equals("paperSize")) { try { setPaperSize(value); load(); } catch (Exception e1) {} // absorb all exceptions - if an error // occurred - an error event was fired. } } } /** Show the dialog in the middle of the parent frame. **/ public void setVisible(boolean b) { if (b == true) { Rectangle bounds = getParent().getBounds(); Rectangle bounds2 = getBounds(); setLocation(bounds.x + (bounds.width - bounds2.width)/ 2, bounds.y + (bounds.height - bounds2.height)/2); super.setVisible(true); } else super.setVisible(false); } } /*************************************************************************/ /** The ZoomToBox_ class represents a dialog for selecting a magnification (zoom) ratio to for displaying the images of the spooled file pages. **/ private class ZoomToBox_ extends JDialog implements ActionListener { private JButton okButton, cancelButton; private Checkbox[] radioButtons; private float zoomAmount; private TextField zoomPerc; /** Constructs a ZoomToBox_ Dialog * @param parent **/ public ZoomToBox_(JFrame parent) { super(parent, zoomText_, true); Container zoomDialog = getContentPane(); setResizable(false); zoomDialog.setLayout(new BorderLayout()); // set the size of the dialog setSize(250, 175); // create zoom percentages group CheckboxGroup zoomPGroup= new CheckboxGroup(); // set all buttons off boolean[] buttonOn = new boolean[5]; for (int i = 0; i < 5; i++) { buttonOn[i] = false; } switch ((int)zoomPercentage_) { // @A1C added (int) case 50: buttonOn[0] = true; break; case 75: buttonOn[1] = true; break; case 125: buttonOn[2] = true; break; case 150: buttonOn[3] = true; break; default: buttonOn[4] = true; break; } // The checkbox group is a collection of zoom percentage checkboxes // with the special property that no more than one checkbox // in the same group can be selected at a time. radioButtons = new Checkbox[5]; radioButtons[0] = new Checkbox(" 50%", zoomPGroup, buttonOn[0]); radioButtons[1] = new Checkbox(" 75%", zoomPGroup, buttonOn[1]); radioButtons[2] = new Checkbox("125%", zoomPGroup, buttonOn[2]); radioButtons[3] = new Checkbox("150%", zoomPGroup, buttonOn[3]); radioButtons[4] = new Checkbox("", zoomPGroup, buttonOn[4]); // create blank panel to 'adjust' radio buttons in from right JPanel rightBorder = new JPanel(); zoomDialog.add("West", rightBorder); // create the radio button panel and add the buttons JPanel radioPanel = new JPanel(); radioPanel.setLayout(new GridLayout(4,1)); radioPanel.add(radioButtons[0]); radioPanel.add(radioButtons[1]); radioPanel.add(radioButtons[2]); radioPanel.add(radioButtons[3]); zoomDialog.add("Center",radioPanel); // create zoom percentage panel JPanel zoomPercPanel = new JPanel(); zoomPercPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); // create zoom percentage input field if (buttonOn[4]) zoomPerc = new TextField((Integer.toString((int)zoomPercentage_)),4); //@A1C else zoomPerc = new TextField("100",4); zoomPerc.setEditable(true); zoomPerc.setBackground(new Color(255,255,255)); // white zoomPerc.addActionListener(this); // fill zoom percentage panel JLabel percentage = new JLabel("%"); zoomPercPanel.add(radioButtons[4]); zoomPercPanel.add(zoomPerc); zoomPercPanel.add(percentage); // create "OK" button okButton = new JButton(okText_); okButton.addActionListener(this); okButton.setActionCommand("ok"); // create "Cancel" button cancelButton = new JButton(cancelText_); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); // create button panel and add buttons JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); buttonPanel.add(okButton); buttonPanel.add(cancelButton); // add both panels to the zoomRightPanel JPanel zoomRightPanel = new JPanel(); zoomRightPanel.setLayout(new BorderLayout()); zoomRightPanel.add("Center", zoomPercPanel); zoomRightPanel.add("South", buttonPanel); zoomDialog.add("East",zoomRightPanel); // set up window listener for window closing event addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); } }); } /** Performs the requested action @param e The ActionEvent **/ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); setVisible(false); if (!(command.equals("cancel"))) { if (radioButtons[0].getState()) { zoomAmount = (float).50; // 50% } else if (radioButtons[1].getState()) { zoomAmount = (float).75; // 75% } else if (radioButtons[2].getState()) { zoomAmount = (float)1.25; // 125% } else if (radioButtons[3].getState()) { zoomAmount = (float)1.50; // 150% } else if (radioButtons[4].getState()) { float userValue = Float.valueOf(zoomPerc.getText()).floatValue(); if (userValue >= 1.0) { zoomAmount = (float)(userValue/100.0); } else { errorEventSupport_.fireError(new IllegalArgumentException("userValue")); zoomAmount = 0; } } // below added to simplify viewer maximum zoom exceeded if (zoomAmount > 8) zoomAmount = (float)8.0; if (zoomAmount > 0) { Dimension d1 = getPageImageSize(); Dimension d2 = new Dimension(); d2.width = (int)((float)d1.width * zoomAmount); d2.height = (int)((float)d1.height * zoomAmount); pageView_.setViewSize(d2); // calculate the new viewing zoom percentage zoomPercentage_ = zoomAmount * 100; // @A1A // calculateZoom(); @A1D // update the viewer updateViewer(); } } } /** Show the dialog in the middle of the parent frame. **/ public void setVisible(boolean b) { if (b == true) { Rectangle bounds = getParent().getBounds(); Rectangle bounds2 = getBounds(); setLocation(bounds.x + (bounds.width - bounds2.width)/ 2, bounds.y + (bounds.height - bounds2.height)/2); super.setVisible(true); } else super.setVisible(false); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy