1*34dd1e25SAndrew Rist /**************************************************************
2*34dd1e25SAndrew Rist  *
3*34dd1e25SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*34dd1e25SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*34dd1e25SAndrew Rist  * distributed with this work for additional information
6*34dd1e25SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*34dd1e25SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*34dd1e25SAndrew Rist  * "License"); you may not use this file except in compliance
9*34dd1e25SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*34dd1e25SAndrew Rist  *
11*34dd1e25SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*34dd1e25SAndrew Rist  *
13*34dd1e25SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*34dd1e25SAndrew Rist  * software distributed under the License is distributed on an
15*34dd1e25SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*34dd1e25SAndrew Rist  * KIND, either express or implied.  See the License for the
17*34dd1e25SAndrew Rist  * specific language governing permissions and limitations
18*34dd1e25SAndrew Rist  * under the License.
19*34dd1e25SAndrew Rist  *
20*34dd1e25SAndrew Rist  *************************************************************/
21*34dd1e25SAndrew Rist 
22*34dd1e25SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // __________ Imports __________
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
27cdf0e10cSrcweir import com.sun.star.lang.XComponent;
28cdf0e10cSrcweir import com.sun.star.lang.XServiceInfo;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir import com.sun.star.awt.Point;
31cdf0e10cSrcweir import com.sun.star.awt.Size;
32cdf0e10cSrcweir 
33cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
34cdf0e10cSrcweir import com.sun.star.beans.XPropertySet;
35cdf0e10cSrcweir 
36cdf0e10cSrcweir import com.sun.star.container.XNamed;
37cdf0e10cSrcweir 
38cdf0e10cSrcweir import com.sun.star.drawing.XShape;
39cdf0e10cSrcweir import com.sun.star.drawing.XShapes;
40cdf0e10cSrcweir import com.sun.star.drawing.XDrawPage;
41cdf0e10cSrcweir 
42cdf0e10cSrcweir import com.sun.star.presentation.XPresentation;
43cdf0e10cSrcweir import com.sun.star.presentation.XPresentationSupplier;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir 
46cdf0e10cSrcweir 
47cdf0e10cSrcweir // __________ Implementation __________
48cdf0e10cSrcweir 
49cdf0e10cSrcweir /** presentation demo
50cdf0e10cSrcweir     @author Sven Jacobi
51cdf0e10cSrcweir  */
52cdf0e10cSrcweir 
53cdf0e10cSrcweir // This demo will demonstrate how to create a presentation using the Office API
54cdf0e10cSrcweir 
55cdf0e10cSrcweir // The first parameter describes the connection that is to use. If there is no parameter
56cdf0e10cSrcweir // "uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager" is used.
57cdf0e10cSrcweir 
58cdf0e10cSrcweir 
59cdf0e10cSrcweir public class PresentationDemo
60cdf0e10cSrcweir {
main( String args[] )61cdf0e10cSrcweir     public static void main( String args[] )
62cdf0e10cSrcweir     {
63cdf0e10cSrcweir 		XComponent xDrawDoc = null;
64cdf0e10cSrcweir 		try
65cdf0e10cSrcweir 		{
66cdf0e10cSrcweir             // get the remote office context of a running office (a new office
67cdf0e10cSrcweir             // instance is started if necessary)
68cdf0e10cSrcweir 			com.sun.star.uno.XComponentContext xOfficeContext = Helper.connect();
69cdf0e10cSrcweir 
70cdf0e10cSrcweir 			// suppress Presentation Autopilot when opening the document
71cdf0e10cSrcweir 			// properties are the same as described for
72cdf0e10cSrcweir 			// com.sun.star.document.MediaDescriptor
73cdf0e10cSrcweir 			PropertyValue[] pPropValues = new PropertyValue[ 1 ];
74cdf0e10cSrcweir 			pPropValues[ 0 ] = new PropertyValue();
75cdf0e10cSrcweir 			pPropValues[ 0 ].Name = "Silent";
76cdf0e10cSrcweir 			pPropValues[ 0 ].Value = new Boolean( true );
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 			xDrawDoc = Helper.createDocument( xOfficeContext,
79cdf0e10cSrcweir 				"private:factory/simpress", "_blank", 0, pPropValues );
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 
82cdf0e10cSrcweir 			XDrawPage	 xPage;
83cdf0e10cSrcweir 			XShapes		 xShapes;
84cdf0e10cSrcweir 			XPropertySet xShapePropSet;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 			// create pages, so that three are available
87cdf0e10cSrcweir 		    while ( PageHelper.getDrawPageCount( xDrawDoc ) < 3 )
88cdf0e10cSrcweir 				PageHelper.insertNewDrawPageByIndex( xDrawDoc, 0 );
89cdf0e10cSrcweir 
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 			// set the slide transition for the first page
92cdf0e10cSrcweir 			xPage = PageHelper.getDrawPageByIndex( xDrawDoc, 0 );
93cdf0e10cSrcweir 			xShapes = (XShapes)
94cdf0e10cSrcweir 				UnoRuntime.queryInterface( XShapes.class, xPage );
95cdf0e10cSrcweir 			// set slide transition effect
96cdf0e10cSrcweir 			setSlideTransition( xPage,
97cdf0e10cSrcweir 				com.sun.star.presentation.FadeEffect.FADE_FROM_RIGHT,
98cdf0e10cSrcweir 					com.sun.star.presentation.AnimationSpeed.FAST,
99cdf0e10cSrcweir 						1, 0 ); // automatic object and slide transition
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 			// create a rectangle that is placed on the top left of the page
102cdf0e10cSrcweir 			xShapePropSet = ShapeHelper.createAndInsertShape( xDrawDoc,
103cdf0e10cSrcweir 				xShapes,new Point( 1000, 1000 ), new Size( 5000, 5000 ),
104cdf0e10cSrcweir 					"com.sun.star.drawing.RectangleShape" );
105cdf0e10cSrcweir 			xShapePropSet.setPropertyValue("Effect",
106cdf0e10cSrcweir                 com.sun.star.presentation.AnimationEffect.WAVYLINE_FROM_BOTTOM );
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 			/* the following three properties provokes that the shape is dimmed
109cdf0e10cSrcweir 			   to red
110cdf0e10cSrcweir 			   after the animation has been finished */
111cdf0e10cSrcweir 			xShapePropSet.setPropertyValue( "DimHide", new Boolean( false ) );
112cdf0e10cSrcweir 			xShapePropSet.setPropertyValue( "DimPrevious", new Boolean( true ) );
113cdf0e10cSrcweir 			xShapePropSet.setPropertyValue( "DimColor", new Integer( 0xff0000 ) );
114cdf0e10cSrcweir 
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 			// set the slide transition for the second page
117cdf0e10cSrcweir 			xPage = PageHelper.getDrawPageByIndex( xDrawDoc, 1 );
118cdf0e10cSrcweir 			xShapes = (XShapes)
119cdf0e10cSrcweir 				UnoRuntime.queryInterface( XShapes.class, xPage );
120cdf0e10cSrcweir 			setSlideTransition( xPage,
121cdf0e10cSrcweir 				com.sun.star.presentation.FadeEffect.FADE_FROM_RIGHT,
122cdf0e10cSrcweir 					com.sun.star.presentation.AnimationSpeed.SLOW,
123cdf0e10cSrcweir 						1, 0 ); // automatic object and slide transition
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 			// create an ellipse that is placed on the bottom right of second page
126cdf0e10cSrcweir 			xShapePropSet = ShapeHelper.createAndInsertShape( xDrawDoc,
127cdf0e10cSrcweir 				xShapes, new Point( 21000, 15000 ), new Size( 5000, 5000 ),
128cdf0e10cSrcweir 					"com.sun.star.drawing.EllipseShape" );
129cdf0e10cSrcweir 			xShapePropSet.setPropertyValue(
130cdf0e10cSrcweir 				"Effect", com.sun.star.presentation.AnimationEffect.HIDE );
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 			// create two objects for the third page
134cdf0e10cSrcweir 			// clicking the first object lets the presentation jump
135cdf0e10cSrcweir 			// to page one by using ClickAction.FIRSTPAGE,
136cdf0e10cSrcweir 			// the second object lets the presentation jump to page two
137cdf0e10cSrcweir 			// by using a ClickAction.BOOKMARK;
138cdf0e10cSrcweir 			xPage = PageHelper.getDrawPageByIndex( xDrawDoc, 2 );
139cdf0e10cSrcweir 			xShapes = (XShapes)
140cdf0e10cSrcweir 				UnoRuntime.queryInterface( XShapes.class, xPage );
141cdf0e10cSrcweir 			setSlideTransition( xPage,
142cdf0e10cSrcweir 				com.sun.star.presentation.FadeEffect.ROLL_FROM_LEFT,
143cdf0e10cSrcweir 					com.sun.star.presentation.AnimationSpeed.MEDIUM,
144cdf0e10cSrcweir 						2, 0 );
145cdf0e10cSrcweir 			XShape xShape = ShapeHelper.createShape( xDrawDoc,
146cdf0e10cSrcweir 					new Point( 1000, 8000 ), new Size( 5000, 5000 ),
147cdf0e10cSrcweir 					"com.sun.star.drawing.EllipseShape" );
148cdf0e10cSrcweir 			xShapes.add( xShape );
149cdf0e10cSrcweir 			ShapeHelper.addPortion( xShape, "click to go", false );
150cdf0e10cSrcweir 			ShapeHelper.addPortion( xShape, "to first page", true );
151cdf0e10cSrcweir 			xShapePropSet = (XPropertySet)
152cdf0e10cSrcweir 				UnoRuntime.queryInterface( XPropertySet.class, xShape );
153cdf0e10cSrcweir 			xShapePropSet.setPropertyValue("Effect",
154cdf0e10cSrcweir                 com.sun.star.presentation.AnimationEffect.FADE_FROM_BOTTOM );
155cdf0e10cSrcweir 			xShapePropSet.setPropertyValue(
156cdf0e10cSrcweir 				"OnClick", com.sun.star.presentation.ClickAction.FIRSTPAGE );
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 
159cdf0e10cSrcweir 			xShape = ShapeHelper.createShape( xDrawDoc,
160cdf0e10cSrcweir 				new Point( 22000, 8000 ), new Size( 5000, 5000 ),
161cdf0e10cSrcweir 					"com.sun.star.drawing.RectangleShape" );
162cdf0e10cSrcweir 			xShapes.add( xShape );
163cdf0e10cSrcweir 			ShapeHelper.addPortion( xShape, "click to go", false );
164cdf0e10cSrcweir 			ShapeHelper.addPortion( xShape, "to the second page", true );
165cdf0e10cSrcweir 			xShapePropSet = (XPropertySet)
166cdf0e10cSrcweir 				UnoRuntime.queryInterface( XPropertySet.class, xShape );
167cdf0e10cSrcweir 			xShapePropSet.setPropertyValue("Effect",
168cdf0e10cSrcweir                 com.sun.star.presentation.AnimationEffect.FADE_FROM_BOTTOM );
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 			xShapePropSet.setPropertyValue(
171cdf0e10cSrcweir 				"OnClick", com.sun.star.presentation.ClickAction.BOOKMARK );
172cdf0e10cSrcweir 			// set the name of page two, and use it with the bookmark action
173cdf0e10cSrcweir 			XNamed xPageName = (XNamed)UnoRuntime.queryInterface(
174cdf0e10cSrcweir 				XNamed.class, PageHelper.getDrawPageByIndex( xDrawDoc, 1 ) );
175cdf0e10cSrcweir 			xPageName.setName( "page two" );
176cdf0e10cSrcweir 			xShapePropSet.setPropertyValue(
177cdf0e10cSrcweir 				"Bookmark", xPageName.getName() );
178cdf0e10cSrcweir 
179cdf0e10cSrcweir 
180cdf0e10cSrcweir 			/* start an endless presentation which is displayed in
181cdf0e10cSrcweir 			   full-screen mode and placed on top */
182cdf0e10cSrcweir 
183cdf0e10cSrcweir 			XPresentationSupplier xPresSupplier = (XPresentationSupplier)
184cdf0e10cSrcweir 				UnoRuntime.queryInterface( XPresentationSupplier.class, xDrawDoc );
185cdf0e10cSrcweir 			XPresentation xPresentation = xPresSupplier.getPresentation();
186cdf0e10cSrcweir 			XPropertySet xPresPropSet = (XPropertySet)
187cdf0e10cSrcweir 				UnoRuntime.queryInterface( XPropertySet.class, xPresentation );
188cdf0e10cSrcweir 			xPresPropSet.setPropertyValue( "IsEndless", new Boolean( true ) );
189cdf0e10cSrcweir 			xPresPropSet.setPropertyValue( "IsAlwaysOnTop", new Boolean( true ) );
190cdf0e10cSrcweir 			xPresPropSet.setPropertyValue( "Pause", new Integer( 0 ) );
191cdf0e10cSrcweir 			xPresentation.start();
192cdf0e10cSrcweir 		}
193cdf0e10cSrcweir 		catch( Exception ex )
194cdf0e10cSrcweir 		{
195cdf0e10cSrcweir             System.out.println( ex );
196cdf0e10cSrcweir 		}
197cdf0e10cSrcweir 		System.exit( 0 );
198cdf0e10cSrcweir     }
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 	// this simple method applies the slide transition to a page
setSlideTransition( XDrawPage xPage, com.sun.star.presentation.FadeEffect eEffect, com.sun.star.presentation.AnimationSpeed eSpeed, int nChange, int nDuration )201cdf0e10cSrcweir 	public static void setSlideTransition( XDrawPage xPage,
202cdf0e10cSrcweir 		com.sun.star.presentation.FadeEffect eEffect,
203cdf0e10cSrcweir 			com.sun.star.presentation.AnimationSpeed eSpeed,
204cdf0e10cSrcweir 			int nChange,
205cdf0e10cSrcweir 				int nDuration )
206cdf0e10cSrcweir 	{
207cdf0e10cSrcweir 		// the following test is only sensible if you do not exactly know
208cdf0e10cSrcweir 		// what type of page xPage is, for this purpose it can been tested
209cdf0e10cSrcweir 		// if the com.sun.star.presentation.DrawPage service is supported
210cdf0e10cSrcweir 		XServiceInfo xInfo = (XServiceInfo)UnoRuntime.queryInterface(
211cdf0e10cSrcweir 				XServiceInfo.class, xPage );
212cdf0e10cSrcweir 		if ( xInfo.supportsService( "com.sun.star.presentation.DrawPage" ) == true )
213cdf0e10cSrcweir 		{
214cdf0e10cSrcweir 			try
215cdf0e10cSrcweir 			{
216cdf0e10cSrcweir 				XPropertySet xPropSet = (XPropertySet)
217cdf0e10cSrcweir 					UnoRuntime.queryInterface( XPropertySet.class, xPage );
218cdf0e10cSrcweir 				xPropSet.setPropertyValue( "Effect",   eEffect );
219cdf0e10cSrcweir 				xPropSet.setPropertyValue( "Speed",    eSpeed );
220cdf0e10cSrcweir 				xPropSet.setPropertyValue( "Change",   new Integer( nChange ) );
221cdf0e10cSrcweir 				xPropSet.setPropertyValue( "Duration", new Integer( nDuration ) );
222cdf0e10cSrcweir 			}
223cdf0e10cSrcweir 			catch( Exception ex )
224cdf0e10cSrcweir 			{
225cdf0e10cSrcweir 			}
226cdf0e10cSrcweir 		}
227cdf0e10cSrcweir 	}
228cdf0e10cSrcweir }
229