History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/awt/print/Book.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/awt/print/Book.java+221−0
@@ -0,0 +1,221 @@
1+/*
2+ * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.print;
27+
28+import java.util.Vector;
29+
30+/**
31+ * The <code>Book</code> class provides a representation of a document in
32+ * which pages may have different page formats and page painters. This
33+ * class uses the {@link Pageable} interface to interact with a
34+ * {@link PrinterJob}.
35+ * @see Pageable
36+ * @see PrinterJob
37+*/
38+
39+public class Book implements Pageable {
40+
41+ /* Class Constants */
42+
43+ /* Class Variables */
44+
45+ /* Instance Variables */
46+
47+ /**
48+ * The set of pages that make up the Book.
49+ */
50+ private Vector mPages;
51+
52+ /* Instance Methods */
53+
54+ /**
55+ * Creates a new, empty <code>Book</code>.
56+ */
57+ public Book() {
58+ mPages = new Vector();
59+ }
60+
61+ /**
62+ * Returns the number of pages in this <code>Book</code>.
63+ * @return the number of pages this <code>Book</code> contains.
64+ */
65+ public int getNumberOfPages(){
66+ return mPages.size();
67+ }
68+
69+ /**
70+ * Returns the {@link PageFormat} of the page specified by
71+ * <code>pageIndex</code>.
72+ * @param pageIndex the zero based index of the page whose
73+ * <code>PageFormat</code> is being requested
74+ * @return the <code>PageFormat</code> describing the size and
75+ * orientation of the page.
76+ * @throws IndexOutOfBoundsException if the <code>Pageable</code>
77+ * does not contain the requested page
78+ */
79+ public PageFormat getPageFormat(int pageIndex)
80+ throws IndexOutOfBoundsException
81+ {
82+ return getPage(pageIndex).getPageFormat();
83+ }
84+
85+ /**
86+ * Returns the {@link Printable} instance responsible for rendering
87+ * the page specified by <code>pageIndex</code>.
88+ * @param pageIndex the zero based index of the page whose
89+ * <code>Printable</code> is being requested
90+ * @return the <code>Printable</code> that renders the page.
91+ * @throws IndexOutOfBoundsException if the <code>Pageable</code>
92+ * does not contain the requested page
93+ */
94+ public Printable getPrintable(int pageIndex)
95+ throws IndexOutOfBoundsException
96+ {
97+ return getPage(pageIndex).getPrintable();
98+ }
99+
100+ /**
101+ * Sets the <code>PageFormat</code> and the <code>Painter</code> for a
102+ * specified page number.
103+ * @param pageIndex the zero based index of the page whose
104+ * painter and format is altered
105+ * @param painter the <code>Printable</code> instance that
106+ * renders the page
107+ * @param page the size and orientation of the page
108+ * @throws IndexOutOfBoundsException if the specified
109+ * page is not already in this <code>Book</code>
110+ * @throws NullPointerException if the <code>painter</code> or
111+ * <code>page</code> argument is <code>null</code>
112+ */
113+ public void setPage(int pageIndex, Printable painter, PageFormat page)
114+ throws IndexOutOfBoundsException
115+ {
116+ if (painter == null) {
117+ throw new NullPointerException("painter is null");
118+ }
119+
120+ if (page == null) {
121+ throw new NullPointerException("page is null");
122+ }
123+
124+ mPages.setElementAt(new BookPage(painter, page), pageIndex);
125+ }
126+
127+ /**
128+ * Appends a single page to the end of this <code>Book</code>.
129+ * @param painter the <code>Printable</code> instance that
130+ * renders the page
131+ * @param page the size and orientation of the page
132+ * @throws <code>NullPointerException</code>
133+ * If the <code>painter</code> or <code>page</code>
134+ * argument is <code>null</code>
135+ */
136+ public void append(Printable painter, PageFormat page) {
137+ mPages.addElement(new BookPage(painter, page));
138+ }
139+
140+ /**
141+ * Appends <code>numPages</code> pages to the end of this
142+ * <code>Book</code>. Each of the pages is associated with
143+ * <code>page</code>.
144+ * @param painter the <code>Printable</code> instance that renders
145+ * the page
146+ * @param page the size and orientation of the page
147+ * @param numPages the number of pages to be added to the
148+ * this <code>Book</code>.
149+ * @throws <code>NullPointerException</code>
150+ * If the <code>painter</code> or <code>page</code>
151+ * argument is <code>null</code>
152+ */
153+ public void append(Printable painter, PageFormat page, int numPages) {
154+ BookPage bookPage = new BookPage(painter, page);
155+ int pageIndex = mPages.size();
156+ int newSize = pageIndex + numPages;
157+
158+ mPages.setSize(newSize);
159+ for(int i = pageIndex; i < newSize; i++){
160+ mPages.setElementAt(bookPage, i);
161+ }
162+ }
163+
164+ /**
165+ * Return the BookPage for the page specified by 'pageIndex'.
166+ */
167+ private BookPage getPage(int pageIndex)
168+ throws ArrayIndexOutOfBoundsException
169+ {
170+ return (BookPage) mPages.elementAt(pageIndex);
171+ }
172+
173+ /**
174+ * The BookPage inner class describes an individual
175+ * page in a Book through a PageFormat-Printable pair.
176+ */
177+ private class BookPage {
178+ /**
179+ * The size and orientation of the page.
180+ */
181+ private PageFormat mFormat;
182+
183+ /**
184+ * The instance that will draw the page.
185+ */
186+ private Printable mPainter;
187+
188+ /**
189+ * A new instance where 'format' describes the page's
190+ * size and orientation and 'painter' is the instance
191+ * that will draw the page's graphics.
192+ * @throws NullPointerException
193+ * If the <code>painter</code> or <code>format</code>
194+ * argument is <code>null</code>
195+ */
196+ BookPage(Printable painter, PageFormat format) {
197+
198+ if (painter == null || format == null) {
199+ throw new NullPointerException();
200+ }
201+
202+ mFormat = format;
203+ mPainter = painter;
204+ }
205+
206+ /**
207+ * Return the instance that paints the
208+ * page.
209+ */
210+ Printable getPrintable() {
211+ return mPainter;
212+ }
213+
214+ /**
215+ * Return the format of the page.
216+ */
217+ PageFormat getPageFormat() {
218+ return mFormat;
219+ }
220+ }
221+}