1 /************************************************************************* 2 * 3 * The Contents of this file are made available subject to the terms of 4 * the BSD license. 5 * 6 * Copyright 2000, 2010 Oracle and/or its affiliates. 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. Neither the name of Sun Microsystems, Inc. nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 28 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 29 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 30 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 31 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 *************************************************************************/ 34 35 // __________ Imports __________ 36 37 import com.sun.star.uno.UnoRuntime; 38 import com.sun.star.lang.XComponent; 39 import com.sun.star.lang.XServiceInfo; 40 41 import com.sun.star.awt.Size; 42 43 import com.sun.star.beans.XPropertySet; 44 45 import com.sun.star.drawing.XDrawPage; 46 import com.sun.star.drawing.XDrawPages; 47 import com.sun.star.drawing.XDrawPagesSupplier; 48 import com.sun.star.drawing.XMasterPageTarget; 49 import com.sun.star.drawing.XMasterPagesSupplier; 50 51 import com.sun.star.presentation.XPresentationPage; 52 import com.sun.star.presentation.XHandoutMasterSupplier; 53 54 55 public class PageHelper 56 { 57 // __________ static helper methods __________ 58 59 // __________ draw pages __________ 60 61 /** get the page count for standard pages 62 */ 63 static public int getDrawPageCount( XComponent xComponent ) 64 { 65 XDrawPagesSupplier xDrawPagesSupplier = 66 (XDrawPagesSupplier)UnoRuntime.queryInterface( 67 XDrawPagesSupplier.class, xComponent ); 68 XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages(); 69 return xDrawPages.getCount(); 70 } 71 72 /** get draw page by index 73 */ 74 static public XDrawPage getDrawPageByIndex( XComponent xComponent, int nIndex ) 75 throws com.sun.star.lang.IndexOutOfBoundsException, 76 com.sun.star.lang.WrappedTargetException 77 { 78 XDrawPagesSupplier xDrawPagesSupplier = 79 (XDrawPagesSupplier)UnoRuntime.queryInterface( 80 XDrawPagesSupplier.class, xComponent ); 81 XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages(); 82 return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex )); 83 } 84 85 /** creates and inserts a draw page into the giving position, 86 the method returns the new created page 87 */ 88 static public XDrawPage insertNewDrawPageByIndex( XComponent xComponent, int nIndex ) 89 throws Exception 90 { 91 XDrawPagesSupplier xDrawPagesSupplier = 92 (XDrawPagesSupplier)UnoRuntime.queryInterface( 93 XDrawPagesSupplier.class, xComponent ); 94 XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages(); 95 return xDrawPages.insertNewByIndex( nIndex ); 96 } 97 98 /** removes the given page 99 */ 100 static public void removeDrawPage( XComponent xComponent, XDrawPage xDrawPage ) 101 { 102 XDrawPagesSupplier xDrawPagesSupplier = 103 (XDrawPagesSupplier)UnoRuntime.queryInterface( 104 XDrawPagesSupplier.class, xComponent ); 105 XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages(); 106 xDrawPages.remove( xDrawPage ); 107 } 108 109 /** get size of the given page 110 */ 111 static public Size getPageSize( XDrawPage xDrawPage ) 112 throws com.sun.star.beans.UnknownPropertyException, 113 com.sun.star.lang.WrappedTargetException 114 { 115 XPropertySet xPageProperties = (XPropertySet) 116 UnoRuntime.queryInterface( XPropertySet.class, xDrawPage ); 117 return new Size( 118 ((Integer)xPageProperties.getPropertyValue( "Width" )).intValue(), 119 ((Integer)xPageProperties.getPropertyValue( "Height" )).intValue() ); 120 } 121 122 // __________ master pages __________ 123 124 /** get the page count for master pages 125 */ 126 static public int getMasterPageCount( XComponent xComponent ) 127 { 128 XMasterPagesSupplier xMasterPagesSupplier = 129 (XMasterPagesSupplier)UnoRuntime.queryInterface( 130 XMasterPagesSupplier.class, xComponent ); 131 XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages(); 132 return xDrawPages.getCount(); 133 } 134 135 /** get master page by index 136 */ 137 static public XDrawPage getMasterPageByIndex( XComponent xComponent, int nIndex ) 138 throws com.sun.star.lang.IndexOutOfBoundsException, 139 com.sun.star.lang.WrappedTargetException 140 { 141 XMasterPagesSupplier xMasterPagesSupplier = 142 (XMasterPagesSupplier)UnoRuntime.queryInterface( 143 XMasterPagesSupplier.class, xComponent ); 144 XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages(); 145 return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex )); 146 } 147 148 /** creates and inserts a new master page into the giving position, 149 the method returns the new created page 150 */ 151 static public XDrawPage insertNewMasterPageByIndex( XComponent xComponent, int nIndex ) 152 { 153 XMasterPagesSupplier xMasterPagesSupplier = 154 (XMasterPagesSupplier)UnoRuntime.queryInterface( 155 XMasterPagesSupplier.class, xComponent ); 156 XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages(); 157 return xDrawPages.insertNewByIndex( nIndex ); 158 } 159 160 /** removes the given page 161 */ 162 static public void removeMasterPage( XComponent xComponent, XDrawPage xDrawPage ) 163 { 164 XMasterPagesSupplier xMasterPagesSupplier = 165 (XMasterPagesSupplier)UnoRuntime.queryInterface( 166 XMasterPagesSupplier.class, xComponent ); 167 XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages(); 168 xDrawPages.remove( xDrawPage ); 169 } 170 171 /** return the corresponding masterpage for the giving drawpage 172 */ 173 static public XDrawPage getMasterPage( XDrawPage xDrawPage ) 174 { 175 XMasterPageTarget xMasterPageTarget = 176 (XMasterPageTarget)UnoRuntime.queryInterface( 177 XMasterPageTarget.class, xDrawPage ); 178 return xMasterPageTarget.getMasterPage(); 179 } 180 181 /** sets given masterpage at the drawpage 182 */ 183 static public void setMasterPage( XDrawPage xDrawPage, XDrawPage xMasterPage ) 184 { 185 XMasterPageTarget xMasterPageTarget = 186 (XMasterPageTarget)UnoRuntime.queryInterface( 187 XMasterPageTarget.class, xDrawPage ); 188 xMasterPageTarget.setMasterPage( xMasterPage ); 189 } 190 191 // __________ presentation pages __________ 192 193 /** test if a Presentation Document is supported. 194 This is important, because only presentation documents 195 have notes and handout pages 196 */ 197 static public boolean isImpressDocument( XComponent xComponent ) 198 { 199 XServiceInfo xInfo = (XServiceInfo)UnoRuntime.queryInterface( 200 XServiceInfo.class, xComponent ); 201 return xInfo.supportsService( "com.sun.star.presentation.PresentationDocument" ); 202 } 203 204 /** in impress documents each normal draw page has a corresponding notes page 205 */ 206 static public XDrawPage getNotesPage( XDrawPage xDrawPage ) 207 { 208 XPresentationPage aPresentationPage = 209 (XPresentationPage)UnoRuntime.queryInterface( 210 XPresentationPage.class, xDrawPage ); 211 return aPresentationPage.getNotesPage(); 212 } 213 214 /** in impress each documents has one handout page 215 */ 216 static public XDrawPage getHandoutMasterPage( XComponent xComponent ) 217 { 218 XHandoutMasterSupplier aHandoutMasterSupplier = 219 (XHandoutMasterSupplier)UnoRuntime.queryInterface( 220 XHandoutMasterSupplier.class, xComponent ); 221 return aHandoutMasterSupplier.getHandoutMasterPage(); 222 } 223 } 224