1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // __________ Imports __________
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
27*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent;
28*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo;
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski import com.sun.star.awt.Size;
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage;
35*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages;
36*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier;
37*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XMasterPageTarget;
38*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XMasterPagesSupplier;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentationPage;
41*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XHandoutMasterSupplier;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski public class PageHelper
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski     // __________ static helper methods __________
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski     // __________ draw pages __________
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski     /** get the page count for standard pages
51*b1cdbd2cSJim Jagielski 	*/
getDrawPageCount( XComponent xComponent )52*b1cdbd2cSJim Jagielski 	static public int getDrawPageCount( XComponent xComponent )
53*b1cdbd2cSJim Jagielski 	{
54*b1cdbd2cSJim Jagielski 		XDrawPagesSupplier xDrawPagesSupplier =
55*b1cdbd2cSJim Jagielski 			(XDrawPagesSupplier)UnoRuntime.queryInterface(
56*b1cdbd2cSJim Jagielski 				XDrawPagesSupplier.class, xComponent );
57*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
58*b1cdbd2cSJim Jagielski 		return xDrawPages.getCount();
59*b1cdbd2cSJim Jagielski 	}
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski     /** get draw page by index
62*b1cdbd2cSJim Jagielski 	*/
getDrawPageByIndex( XComponent xComponent, int nIndex )63*b1cdbd2cSJim Jagielski 	static public XDrawPage getDrawPageByIndex( XComponent xComponent, int nIndex )
64*b1cdbd2cSJim Jagielski 		throws com.sun.star.lang.IndexOutOfBoundsException,
65*b1cdbd2cSJim Jagielski 			com.sun.star.lang.WrappedTargetException
66*b1cdbd2cSJim Jagielski 	{
67*b1cdbd2cSJim Jagielski 		XDrawPagesSupplier xDrawPagesSupplier =
68*b1cdbd2cSJim Jagielski 			(XDrawPagesSupplier)UnoRuntime.queryInterface(
69*b1cdbd2cSJim Jagielski 				XDrawPagesSupplier.class, xComponent );
70*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
71*b1cdbd2cSJim Jagielski 		return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex ));
72*b1cdbd2cSJim Jagielski 	}
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski     /** creates and inserts a draw page into the giving position,
75*b1cdbd2cSJim Jagielski 		the method returns the new created page
76*b1cdbd2cSJim Jagielski 	*/
insertNewDrawPageByIndex( XComponent xComponent, int nIndex )77*b1cdbd2cSJim Jagielski 	static public XDrawPage insertNewDrawPageByIndex( XComponent xComponent, int nIndex )
78*b1cdbd2cSJim Jagielski 		throws Exception
79*b1cdbd2cSJim Jagielski 	{
80*b1cdbd2cSJim Jagielski 		XDrawPagesSupplier xDrawPagesSupplier =
81*b1cdbd2cSJim Jagielski 			(XDrawPagesSupplier)UnoRuntime.queryInterface(
82*b1cdbd2cSJim Jagielski 				XDrawPagesSupplier.class, xComponent );
83*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
84*b1cdbd2cSJim Jagielski 		return xDrawPages.insertNewByIndex( nIndex );
85*b1cdbd2cSJim Jagielski 	}
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski     /** removes the given page
88*b1cdbd2cSJim Jagielski 	*/
removeDrawPage( XComponent xComponent, XDrawPage xDrawPage )89*b1cdbd2cSJim Jagielski 	static public void removeDrawPage( XComponent xComponent, XDrawPage xDrawPage )
90*b1cdbd2cSJim Jagielski 	{
91*b1cdbd2cSJim Jagielski 		XDrawPagesSupplier xDrawPagesSupplier =
92*b1cdbd2cSJim Jagielski 			(XDrawPagesSupplier)UnoRuntime.queryInterface(
93*b1cdbd2cSJim Jagielski 				XDrawPagesSupplier.class, xComponent );
94*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
95*b1cdbd2cSJim Jagielski 		xDrawPages.remove( xDrawPage );
96*b1cdbd2cSJim Jagielski 	}
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	/** get size of the given page
99*b1cdbd2cSJim Jagielski 	*/
getPageSize( XDrawPage xDrawPage )100*b1cdbd2cSJim Jagielski 	static public Size getPageSize( XDrawPage xDrawPage )
101*b1cdbd2cSJim Jagielski 		throws com.sun.star.beans.UnknownPropertyException,
102*b1cdbd2cSJim Jagielski 			com.sun.star.lang.WrappedTargetException
103*b1cdbd2cSJim Jagielski 	{
104*b1cdbd2cSJim Jagielski 		XPropertySet xPageProperties = (XPropertySet)
105*b1cdbd2cSJim Jagielski 			UnoRuntime.queryInterface( XPropertySet.class, xDrawPage );
106*b1cdbd2cSJim Jagielski 		return new Size(
107*b1cdbd2cSJim Jagielski 			((Integer)xPageProperties.getPropertyValue( "Width" )).intValue(),
108*b1cdbd2cSJim Jagielski 			((Integer)xPageProperties.getPropertyValue( "Height" )).intValue() );
109*b1cdbd2cSJim Jagielski 	}
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     // __________ master pages __________
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     /** get the page count for master pages
114*b1cdbd2cSJim Jagielski 	*/
getMasterPageCount( XComponent xComponent )115*b1cdbd2cSJim Jagielski 	static public int getMasterPageCount( XComponent xComponent )
116*b1cdbd2cSJim Jagielski 	{
117*b1cdbd2cSJim Jagielski 		XMasterPagesSupplier xMasterPagesSupplier =
118*b1cdbd2cSJim Jagielski 			(XMasterPagesSupplier)UnoRuntime.queryInterface(
119*b1cdbd2cSJim Jagielski 				XMasterPagesSupplier.class, xComponent );
120*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
121*b1cdbd2cSJim Jagielski 		return xDrawPages.getCount();
122*b1cdbd2cSJim Jagielski 	}
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski     /** get master page by index
125*b1cdbd2cSJim Jagielski 	*/
getMasterPageByIndex( XComponent xComponent, int nIndex )126*b1cdbd2cSJim Jagielski 	static public XDrawPage getMasterPageByIndex( XComponent xComponent, int nIndex )
127*b1cdbd2cSJim Jagielski 		throws com.sun.star.lang.IndexOutOfBoundsException,
128*b1cdbd2cSJim Jagielski 			com.sun.star.lang.WrappedTargetException
129*b1cdbd2cSJim Jagielski 	{
130*b1cdbd2cSJim Jagielski 		XMasterPagesSupplier xMasterPagesSupplier =
131*b1cdbd2cSJim Jagielski 			(XMasterPagesSupplier)UnoRuntime.queryInterface(
132*b1cdbd2cSJim Jagielski 				XMasterPagesSupplier.class, xComponent );
133*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
134*b1cdbd2cSJim Jagielski 		return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex ));
135*b1cdbd2cSJim Jagielski 	}
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski     /** creates and inserts a new master page into the giving position,
138*b1cdbd2cSJim Jagielski 		the method returns the new created page
139*b1cdbd2cSJim Jagielski 	*/
insertNewMasterPageByIndex( XComponent xComponent, int nIndex )140*b1cdbd2cSJim Jagielski 	static public XDrawPage insertNewMasterPageByIndex( XComponent xComponent, int nIndex )
141*b1cdbd2cSJim Jagielski 	{
142*b1cdbd2cSJim Jagielski 		XMasterPagesSupplier xMasterPagesSupplier =
143*b1cdbd2cSJim Jagielski 			(XMasterPagesSupplier)UnoRuntime.queryInterface(
144*b1cdbd2cSJim Jagielski 				XMasterPagesSupplier.class, xComponent );
145*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
146*b1cdbd2cSJim Jagielski 		return xDrawPages.insertNewByIndex( nIndex );
147*b1cdbd2cSJim Jagielski 	}
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     /** removes the given page
150*b1cdbd2cSJim Jagielski 	*/
removeMasterPage( XComponent xComponent, XDrawPage xDrawPage )151*b1cdbd2cSJim Jagielski 	static public void removeMasterPage( XComponent xComponent, XDrawPage xDrawPage )
152*b1cdbd2cSJim Jagielski 	{
153*b1cdbd2cSJim Jagielski 		XMasterPagesSupplier xMasterPagesSupplier =
154*b1cdbd2cSJim Jagielski 			(XMasterPagesSupplier)UnoRuntime.queryInterface(
155*b1cdbd2cSJim Jagielski 				XMasterPagesSupplier.class, xComponent );
156*b1cdbd2cSJim Jagielski 		XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
157*b1cdbd2cSJim Jagielski 		xDrawPages.remove( xDrawPage );
158*b1cdbd2cSJim Jagielski 	}
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski     /** return the corresponding masterpage for the giving drawpage
161*b1cdbd2cSJim Jagielski 	*/
getMasterPage( XDrawPage xDrawPage )162*b1cdbd2cSJim Jagielski 	static public XDrawPage getMasterPage( XDrawPage xDrawPage )
163*b1cdbd2cSJim Jagielski 	{
164*b1cdbd2cSJim Jagielski 		XMasterPageTarget xMasterPageTarget =
165*b1cdbd2cSJim Jagielski 			(XMasterPageTarget)UnoRuntime.queryInterface(
166*b1cdbd2cSJim Jagielski 				XMasterPageTarget.class, xDrawPage );
167*b1cdbd2cSJim Jagielski 		return xMasterPageTarget.getMasterPage();
168*b1cdbd2cSJim Jagielski 	}
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski     /** sets given masterpage at the drawpage
171*b1cdbd2cSJim Jagielski 	*/
setMasterPage( XDrawPage xDrawPage, XDrawPage xMasterPage )172*b1cdbd2cSJim Jagielski 	static public void setMasterPage( XDrawPage xDrawPage, XDrawPage xMasterPage )
173*b1cdbd2cSJim Jagielski 	{
174*b1cdbd2cSJim Jagielski 		XMasterPageTarget xMasterPageTarget =
175*b1cdbd2cSJim Jagielski 			(XMasterPageTarget)UnoRuntime.queryInterface(
176*b1cdbd2cSJim Jagielski 				XMasterPageTarget.class, xDrawPage );
177*b1cdbd2cSJim Jagielski 		xMasterPageTarget.setMasterPage( xMasterPage );
178*b1cdbd2cSJim Jagielski 	}
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski     // __________ presentation pages __________
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 	/** test if a Presentation Document is supported.
183*b1cdbd2cSJim Jagielski 		This is important, because only presentation documents
184*b1cdbd2cSJim Jagielski 		have notes and handout pages
185*b1cdbd2cSJim Jagielski 	*/
isImpressDocument( XComponent xComponent )186*b1cdbd2cSJim Jagielski 	static public boolean isImpressDocument( XComponent xComponent )
187*b1cdbd2cSJim Jagielski 	{
188*b1cdbd2cSJim Jagielski 		XServiceInfo xInfo = (XServiceInfo)UnoRuntime.queryInterface(
189*b1cdbd2cSJim Jagielski 				XServiceInfo.class, xComponent );
190*b1cdbd2cSJim Jagielski 		return xInfo.supportsService( "com.sun.star.presentation.PresentationDocument" );
191*b1cdbd2cSJim Jagielski 	}
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     /** in impress documents each normal draw page has a corresponding notes page
194*b1cdbd2cSJim Jagielski 	*/
getNotesPage( XDrawPage xDrawPage )195*b1cdbd2cSJim Jagielski 	static public XDrawPage getNotesPage( XDrawPage xDrawPage )
196*b1cdbd2cSJim Jagielski 	{
197*b1cdbd2cSJim Jagielski 		XPresentationPage aPresentationPage =
198*b1cdbd2cSJim Jagielski 			(XPresentationPage)UnoRuntime.queryInterface(
199*b1cdbd2cSJim Jagielski 				XPresentationPage.class, xDrawPage );
200*b1cdbd2cSJim Jagielski 		return aPresentationPage.getNotesPage();
201*b1cdbd2cSJim Jagielski 	}
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski     /** in impress each documents has one handout page
204*b1cdbd2cSJim Jagielski 	*/
getHandoutMasterPage( XComponent xComponent )205*b1cdbd2cSJim Jagielski 	static public XDrawPage getHandoutMasterPage( XComponent xComponent )
206*b1cdbd2cSJim Jagielski 	{
207*b1cdbd2cSJim Jagielski 		XHandoutMasterSupplier aHandoutMasterSupplier =
208*b1cdbd2cSJim Jagielski 			(XHandoutMasterSupplier)UnoRuntime.queryInterface(
209*b1cdbd2cSJim Jagielski 				XHandoutMasterSupplier.class, xComponent );
210*b1cdbd2cSJim Jagielski 		return aHandoutMasterSupplier.getHandoutMasterPage();
211*b1cdbd2cSJim Jagielski 	}
212*b1cdbd2cSJim Jagielski }
213