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