xref: /AOO41X/main/odk/examples/DevelopersGuide/Drawing/PresentationDemo.java (revision 83137a03adbb58b5b3bdafefefa1e93de35e0011)
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