' *************************************************************
'  
'  Licensed to the Apache Software Foundation (ASF) under one
'  or more contributor license agreements.  See the NOTICE file
'  distributed with this work for additional information
'  regarding copyright ownership.  The ASF licenses this file
'  to you under the Apache License, Version 2.0 (the
'  "License")' you may not use this file except in compliance
'  with the License.  You may obtain a copy of the License at
'  
'    http://www.apache.org/licenses/LICENSE-2.0
'  
'  Unless required by applicable law or agreed to in writing,
'  software distributed under the License is distributed on an
'  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
'  KIND, either express or implied.  See the License for the
'  specific language governing permissions and limitations
'  under the License.
'  
' *************************************************************
Sub Main

Dim oSettings(11) as new com.sun.star.beans.PropertyValue
oSettings(0).Name = "JPEGCompression"
oSettings(0).Value= True
oSettings(1).Name = "JPEGQuality"
oSettings(1).Value= 25
oSettings(2).Name = "RemoveCropArea"
oSettings(2).Value= True
oSettings(3).Name = "ImageResolution"
oSettings(3).Value= 90
oSettings(4).Name = "OLEOptimization"
oSettings(4).Value= False
oSettings(5).Name = "OLEOptimizationType"
oSettings(5).Value= 1
oSettings(6).Name = "DeleteUnusedMasterPages"
oSettings(6).Value= True
oSettings(7).Name = "DeleteHiddenSlides"
oSettings(7).Value= True
oSettings(8).Name = "DeleteNotesPages"
oSettings(8).Value= True
oSettings(9).Name = "SaveAs"
oSettings(9).Value= true
oSettings(10).Name = "EmbedLinkedGraphics"
oSettings(10).Value = false
oSettings(11).Name = "SaveAsURL"
oSettings(11).Value = ""
oSettings(12).Name = "FilterName"
oSettings(12).Value = "impress8"



Dim oArg(0) as new com.sun.star.beans.PropertyValue
oArg(0).Name = "Settings"
oArg(0).Value= oSettings

Dim url As String
Dim oPresentations(17) as String
oPresentations( 0)="d:\data\sunpresentations\01-22-07SunIntelAnnouncementPresentation,01-22-2007.star_impress_8x.odp"
oPresentations( 1)="d:\data\sunpresentations\01_Schwartz_SAS_VF.odp"
oPresentations( 2)="d:\data\sunpresentations\CorporateSocialResponsibilityCustomerPresentation,02-12-2007.star_impress_8x.odp"
oPresentations( 3)="d:\data\sunpresentations\Current-ProjectBlackboxCustomerPresentation,03-07-2007.star_impress_8x.odp"
oPresentations( 4)="d:\data\sunpresentations\JavaSE6CustomerPresentation,12-11-2006(2).star_impress_8x.odp"
oPresentations( 5)="d:\data\sunpresentations\JavaSE6CustomerPresentation,12-11-2006.star_impress_8x.odp"
oPresentations( 6)="d:\data\sunpresentations\NetworkComputingLaunchPresentation,Q22006,Washington,DC,05-08-2006.star_impress_8x.odp"
oPresentations( 7)="d:\data\sunpresentations\ProjectBlackboxTechnicalPresentation-NDAONLY,11-09-2006.star_impress_8x.odp"
oPresentations( 8)="d:\data\sunpresentations\ScottMcNealy,IntlAssocofPrivacyProfessionals)ConferenceOpeningKeynote,'PlayingonSunday-GettingPrivacyRight',March,8,2007,Washington,DC,,03-08-2007.star_impress_8x.odp"
oPresentations( 9)="d:\data\sunpresentations\Sun'sStoragetekAcademy-JonathanSchwartzTheSky'sTheLimit!,February,292007,SanFrancisco,CA,02-28-2007.star_impress_8x.odp"
oPresentations(10)="d:\data\sunpresentations\SunAnalystSummit2007(SAS)-DonGranthamExecutingonStrategy,February,6,2007,SanFrancisco,CA,02-07-2007.star_impress_8x.odp"
oPresentations(11)="d:\data\sunpresentations\SunConsultingServicesPortfolio-Presentation,03-17-2006.star_impress_6x.sxi"
oPresentations(12)="d:\data\sunpresentations\SunFedOpenYourMindandSunFedTechDayatGTSI,ScottMcNealy,January23and24,2007,Washington,DC,01-23-2007.star_impress_8x.odp"
oPresentations(13)="d:\data\sunpresentations\SunFedTechDaysatAccenture,ScottMcNealy,January24,2007,Washington,DC,01-24-2007.star_impress_8x.odp"
oPresentations(14)="d:\data\sunpresentations\SunManagedServicesGoldenPitch,03-22-2007.star_impress_8x.odp"
oPresentations(15)="d:\data\sunpresentations\SunServicesEducationServicesGeneralPresentation,01-11-2006.star_impress_6x.sxi"
oPresentations(16)="d:\data\sunpresentations\SunSystemPacks-CustomerReadyPresentation,01-23-2007.star_impress_8x.odp"
oPresentations(17)="d:\data\sunpresentations\U.S.SalesMeetingCustomerPresentation(08-01-2006),08-01-2006.odp"

FOR I = 0 TO 17
url=oPresentations( I )
oSettings(11)=url+string( I, 2 )
url=converttourl( url )
optimize( url, oArg() )
NEXT I

End Sub

Sub Optimize( url as String, oArg )

Dim oPPPOptimizerDialog as Object
Dim oUrl as new com.sun.star.util.URL
Dim oTrans as Object
oTrans = createUNOService("com.sun.star.util.URLTransformer")
oUrl.Complete = "vnd.com.sun.star.comp.PPPOptimizer:optimize"
oTrans.parsestrict(oUrl)

Dim oDoc As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
oSM = CreateObject("com.sun.star.ServiceManager")
oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
oDoc = oDesk.loadComponentFromURL( url, "_blank", 0, FileProperties() )

Dim oInitialization( 0 ) as Object
oInitialization(0) = oDoc.getCurrentController.getFrame
oPPPOptimizerDialog = createUNOservice("com.sun.star.comp.presentation.PresentationOptimizer")
oPPPOptimizerDialog.initialize( oInitialization )
oPPPOptimizerDialog.dispatch(oURL, oArg)
odoc.dispose
End Sub

