1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sdext.hxx" 30 31 #include "pppoptimizerdialog.hxx" 32 #include "optimizerdialog.hxx" 33 34 using namespace ::rtl; 35 using namespace ::com::sun::star::uno; 36 using namespace ::com::sun::star::util; 37 using namespace ::com::sun::star::lang; 38 using namespace ::com::sun::star::frame; 39 using namespace ::com::sun::star::beans; 40 41 #define SERVICE_NAME "com.sun.star.comp.SunPresentationMinimizer" 42 #include <rtl/ustrbuf.hxx> 43 44 // ---------------------- 45 // - PPPOptimizerDialog - 46 // ---------------------- 47 48 PPPOptimizerDialog::PPPOptimizerDialog( const Reference< XComponentContext > &rxMSF ) : 49 mxMSF( rxMSF ), 50 mpOptimizerDialog( NULL ) 51 { 52 } 53 54 // ----------------------------------------------------------------------------- 55 56 PPPOptimizerDialog::~PPPOptimizerDialog() 57 { 58 } 59 60 // ----------------------------------------------------------------------------- 61 // XInitialization 62 // ----------------------------------------------------------------------------- 63 64 void SAL_CALL PPPOptimizerDialog::initialize( const Sequence< Any >& aArguments ) 65 throw ( Exception, RuntimeException ) 66 { 67 if( aArguments.getLength() != 1 ) 68 throw IllegalArgumentException(); 69 70 aArguments[ 0 ] >>= mxFrame; 71 if ( mxFrame.is() ) 72 mxController = mxFrame->getController(); 73 } 74 75 // ----------------------------------------------------------------------------- 76 // XServiceInfo 77 // ----------------------------------------------------------------------------- 78 79 OUString SAL_CALL PPPOptimizerDialog::getImplementationName() 80 throw (RuntimeException) 81 { 82 return PPPOptimizerDialog_getImplementationName(); 83 } 84 85 sal_Bool SAL_CALL PPPOptimizerDialog::supportsService( const OUString& ServiceName ) 86 throw ( RuntimeException ) 87 { 88 return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SERVICE_NAME ) ); 89 } 90 91 Sequence< OUString > SAL_CALL PPPOptimizerDialog::getSupportedServiceNames() 92 throw (RuntimeException) 93 { 94 return PPPOptimizerDialog_getSupportedServiceNames(); 95 } 96 97 // ----------------------------------------------------------------------------- 98 // XDispatchProvider 99 // ----------------------------------------------------------------------------- 100 101 Reference< com::sun::star::frame::XDispatch > SAL_CALL PPPOptimizerDialog::queryDispatch( 102 const URL& aURL, const ::rtl::OUString& /* aTargetFrameName */, sal_Int32 /* nSearchFlags */ ) throw( RuntimeException ) 103 { 104 Reference < XDispatch > xRet; 105 if ( aURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.SunPresentationMinimizer:" ) == 0 ) 106 xRet = this; 107 108 return xRet; 109 } 110 111 //------------------------------------------------------------------------------ 112 113 Sequence< Reference< com::sun::star::frame::XDispatch > > SAL_CALL PPPOptimizerDialog::queryDispatches( 114 const Sequence< com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw( RuntimeException ) 115 { 116 Sequence< Reference< com::sun::star::frame::XDispatch> > aReturn( aDescripts.getLength() ); 117 Reference< com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray(); 118 const com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray(); 119 for (sal_Int16 i = 0; i < aDescripts.getLength(); ++i, ++pReturn, ++pDescripts ) 120 { 121 *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags ); 122 } 123 return aReturn; 124 } 125 126 // ----------------------------------------------------------------------------- 127 // XDispatch 128 // ----------------------------------------------------------------------------- 129 130 void SAL_CALL PPPOptimizerDialog::dispatch( const URL& rURL, 131 const Sequence< PropertyValue >& rArguments ) 132 throw( RuntimeException ) 133 { 134 sal_Int64 nFileSizeSource = 0; 135 sal_Int64 nFileSizeDest = 0; 136 137 if ( mxController.is() && ( rURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.SunPresentationMinimizer:" ) == 0 ) ) 138 { 139 if ( rURL.Path.compareToAscii( "execute" ) == 0 ) 140 { 141 sal_Bool bDialogExecuted = sal_False; 142 143 try 144 { 145 mpOptimizerDialog = new OptimizerDialog( mxMSF, mxFrame, this ); 146 bDialogExecuted = mpOptimizerDialog->execute(); 147 148 const Any* pVal( mpOptimizerDialog->maStats.GetStatusValue( TK_FileSizeSource ) ); 149 if ( pVal ) 150 *pVal >>= nFileSizeSource; 151 pVal = mpOptimizerDialog->maStats.GetStatusValue( TK_FileSizeDestination ); 152 if ( pVal ) 153 *pVal >>= nFileSizeDest; 154 155 if ( nFileSizeSource && nFileSizeDest ) 156 { 157 rtl::OUStringBuffer sBuf( rtl::OUString::createFromAscii( "Your Presentation has been minimized from:" ) ); 158 sBuf.append( rtl::OUString::valueOf( nFileSizeSource >> 10 ) ); 159 sBuf.append( rtl::OUString::createFromAscii( "KB to " ) ); 160 sBuf.append( rtl::OUString::valueOf( nFileSizeDest >> 10 ) ); 161 sBuf.append( rtl::OUString::createFromAscii( "KB." ) ); 162 OUString sResult( sBuf.makeStringAndClear() ); 163 // mpOptimizerDialog->showMessageBox( sResult, sResult, sal_False ); 164 } 165 delete mpOptimizerDialog, mpOptimizerDialog = NULL; 166 } 167 catch( ... ) 168 { 169 170 } 171 } 172 else if ( rURL.Path.compareToAscii( "statusupdate" ) == 0 ) 173 { 174 if ( mpOptimizerDialog ) 175 mpOptimizerDialog->UpdateStatus( rArguments ); 176 } 177 } 178 } 179 180 //=============================================== 181 void SAL_CALL PPPOptimizerDialog::addStatusListener( const Reference< XStatusListener >&, const URL& ) 182 throw( RuntimeException ) 183 { 184 // TODO 185 // OSL_ENSURE( sal_False, "PPPOptimizerDialog::addStatusListener()\nNot implemented yet!" ); 186 } 187 188 //=============================================== 189 void SAL_CALL PPPOptimizerDialog::removeStatusListener( const Reference< XStatusListener >&, const URL& ) 190 throw( RuntimeException ) 191 { 192 // TODO 193 // OSL_ENSURE( sal_False, "PPPOptimizerDialog::removeStatusListener()\nNot implemented yet!" ); 194 } 195 196 // ----------------------------------------------------------------------------- 197 198 OUString PPPOptimizerDialog_getImplementationName() 199 { 200 return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.SunPresentationMinimizerImp" ) ); 201 } 202 203 Sequence< OUString > PPPOptimizerDialog_getSupportedServiceNames() 204 { 205 Sequence < OUString > aRet(1); 206 OUString* pArray = aRet.getArray(); 207 pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) ); 208 return aRet; 209 } 210 211 Reference< XInterface > PPPOptimizerDialog_createInstance( const Reference< XComponentContext > & rSMgr) 212 throw( Exception ) 213 { 214 return (cppu::OWeakObject*) new PPPOptimizerDialog( rSMgr ); 215 } 216 217 // ----------------------------------------------------------------------------- 218