001    /* PageFormat.java -- Information about the page format
002       Copyright (C) 1999, 2006 Free Software Foundation, Inc.
003    
004    This file is part of GNU Classpath.
005    
006    GNU Classpath is free software; you can redistribute it and/or modify
007    it under the terms of the GNU General Public License as published by
008    the Free Software Foundation; either version 2, or (at your option)
009    any later version.
010    
011    GNU Classpath is distributed in the hope that it will be useful, but
012    WITHOUT ANY WARRANTY; without even the implied warranty of
013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    General Public License for more details.
015    
016    You should have received a copy of the GNU General Public License
017    along with GNU Classpath; see the file COPYING.  If not, write to the
018    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019    02110-1301 USA.
020    
021    Linking this library statically or dynamically with other modules is
022    making a combined work based on this library.  Thus, the terms and
023    conditions of the GNU General Public License cover the whole
024    combination.
025    
026    As a special exception, the copyright holders of this library give you
027    permission to link this library with independent modules to produce an
028    executable, regardless of the license terms of these independent
029    modules, and to copy and distribute the resulting executable under
030    terms of your choice, provided that you also meet, for each linked
031    independent module, the terms and conditions of the license of that
032    module.  An independent module is a module which is not derived from
033    or based on this library.  If you modify this library, you may extend
034    this exception to your version of the library, but you are not
035    obligated to do so.  If you do not wish to do so, delete this
036    exception statement from your version. */
037    
038    
039    package java.awt.print;
040    
041    /**
042     * This class contains information about the desired page format to use for
043     * printing a particular set of pages.
044     * 
045     * @author Aaron M. Renn (arenn@urbanophile.com)
046     */
047    public class PageFormat
048      implements Cloneable
049    {
050      /**
051       * A constant for a landscaped page orientation. Used by
052       * <code>getOrientation</code> and <code>setOrientation</code>.
053       */
054      public static final int LANDSCAPE = 0;
055    
056      /**
057       * A constant for a portrait page orientation. Used by
058       * <code>getOrientation</code> and <code>setOrientation</code>.
059       */
060      public static final int PORTRAIT = 1;
061    
062      /**
063       * A constant for a reversed landscaped page orientation. This is the
064       * orientation used by Macintosh's for landscape. The origin is in the 
065       * upper right hand corner instead of the upper left. The X and Y axes 
066       * are reversed. Used by <code>getOrientation</code> and 
067       * <code>setOrientation</code>.
068       */
069      public static final int REVERSE_LANDSCAPE = 2;
070    
071      // The page orientation
072      private int orientation;
073    
074      // The paper type
075      private Paper paper;
076    
077      /**
078       * This method creates a default page layout, which will be in portrait
079       * format.
080       */
081      public PageFormat()
082      {
083        this.paper = new Paper();
084        this.orientation = PORTRAIT;
085      }
086    
087      /**
088       * This method returns the width of the page, in 1/72nd's of an inch. The
089       * "width" measured depends on orientation.
090       * 
091       * @return The width of the page.
092       */
093      public double getWidth()
094      {
095        return paper.getWidth();
096      }
097    
098      /**
099       * This method returns the height of the page, in 1/72nd's of an inch. The
100       * "height" measured depends on the orientation.
101       * 
102       * @return The height of the page.
103       */
104      public double getHeight()
105      {
106        return paper.getHeight();
107      }
108    
109      /**
110       * This method returns the X coordinate value of the upper leftmost drawable
111       * area of the paper.
112       * 
113       * @return The upper leftmost imageable X coordinate.
114       */
115      public double getImageableX()
116      {
117        return paper.getImageableX();
118      }
119    
120      /**
121       * This method returns the Y coordinate value of the upper leftmost drawable
122       * area of the paper.
123       * 
124       * @return The upper leftmost imageable Y coordinate.
125       */
126      public double getImageableY()
127      {
128        return paper.getImageableY();
129      }
130    
131      /**
132       * This method returns the imageable width of the paper, in 1/72nd's of an
133       * inch.
134       * 
135       * @return The imageable width of the paper.
136       */
137      public double getImageableWidth()
138      {
139        return paper.getImageableWidth();
140      }
141    
142      /**
143       * This method returns the imageable height of the paper, in 1/72nd's of an
144       * inch.
145       * 
146       * @return The imageable height of the paper.
147       */
148      public double getImageableHeight()
149      {
150        return paper.getImageableHeight();
151      }
152    
153      /**
154       * Returns a copy of the <code>paper</code> object being used for this page
155       * format.
156       * 
157       * @return A copy of the <code>Paper</code> object for this format.
158       */
159      public Paper getPaper()
160      {
161        return (Paper) paper.clone();
162      }
163    
164      /**
165       * Sets the <code>Paper</code> object to be used by this page format.
166       * 
167       * @param paper The new <code>Paper</code> object for this page format.
168       */
169      public void setPaper(Paper paper)
170      {
171        this.paper = paper;
172      }
173    
174      /**
175       * This method returns the current page orientation. The value returned will
176       * be one of the page orientation constants from this class.
177       * 
178       * @return The current page orientation.
179       */
180      public int getOrientation()
181      {
182        return orientation;
183      }
184    
185      /**
186       * This method sets the page orientation for this format to the specified
187       * value. It must be one of the page orientation constants from this class 
188       * or an exception will be thrown.
189       * 
190       * @param orientation The new page orientation.
191       * @exception IllegalArgumentException If the specified page orientation 
192       *            value is not one of the constants from this class.
193       */
194      public void setOrientation(int orientation) throws IllegalArgumentException
195      {
196        if ((orientation != PORTRAIT) && (orientation != LANDSCAPE)
197            && (orientation != REVERSE_LANDSCAPE))
198          throw new IllegalArgumentException("Bad page orientation value: "
199                                             + orientation);
200    
201        this.orientation = orientation;
202      }
203    
204      /**
205       * This method returns a matrix used for transforming user space coordinates
206       * to page coordinates. The value returned will be six doubles as described 
207       * in <code>java.awt.geom.AffineTransform</code>.
208       * 
209       * @return The transformation matrix for this page format.
210       */
211      public double[] getMatrix()
212      {
213        throw new RuntimeException("Not implemented since I don't know what to do");
214      }
215    
216      /**
217       * This method returns a copy of this object.
218       *
219       * @return A copy of this object.
220       */
221      public Object clone()
222      {
223        try
224          {
225            return (super.clone());
226          }
227        catch (CloneNotSupportedException e)
228          {
229            return (null);
230          }
231      }
232    
233    }